← back to Designerwallcoverings
auto-save: 2026-07-26T16:44:36 (215 files) — scripts/sample-split-pilot scripts/_lib/ scripts/activate-1838/ scripts/af-reimage/ scripts/ai-preamble-leak-sweep/
04f54b6397226a38067812fbea6adccfaee9d514 · 2026-07-26 16:44:38 -0700 · Steve Abrams
Files touched
A scripts/_lib/dw-publications.jsA scripts/activate-1838/activate-1838-showroom.mjsA scripts/activate-1838/activate-1838.mjsA scripts/af-reimage/republish.pyA scripts/ai-preamble-leak-sweep/ai-preamble-leak-sweep.mjsA scripts/ai-preamble-leak-sweep/body-start-classifier.mjsA scripts/ai-preamble-leak-sweep/broad-net-bound.mjsA scripts/ai-preamble-leak-sweep/wallpaper-reconcile.mjsA scripts/alt-text-coverage/alt-text-coverage-audit.mjsA scripts/anna-french-rolls/af-build-noroll.jsA scripts/anna-french-rolls/af-build.jsA scripts/anna-french-rolls/af-live-pull.jsA scripts/anna-french-rolls/af-normalize-rolllabel.jsA scripts/anna-french-rolls/af-noroll-resume.shA scripts/anna-french-rolls/af-reprice-live.jsA scripts/anna-french-rolls/run-af-build.shA scripts/apply-1104-map.jsA scripts/april-restore-plan/build-april-restore-plan.mjsA scripts/artmura-onboard/apply-markup.jsA scripts/artmura-onboard/backfill_metafields.jsA scripts/artmura-onboard/db_write.pyA scripts/artmura-onboard/extract_colors.pyA scripts/artmura-onboard/fill_specs.pyA scripts/artmura-onboard/fix-newarrivals-and-type.jsA scripts/artmura-onboard/fix-plural-type-fleetwide.jsA scripts/artmura-onboard/go-live-artmura.jsA scripts/artmura-onboard/interior-designer-enrich.jsA scripts/artmura-onboard/normalize-color-tags.jsA scripts/artmura-onboard/onboard.pyA scripts/artmura-onboard/push-artmura-live.jsA scripts/artmura-onboard/run-fix.shA scripts/artmura-onboard/run-push-artmura.shA scripts/artmura-onboard/update-live-titles.jsA scripts/availability-drift/availability-drift-canary.mjsA scripts/backfill-clarke-redirects.pyA scripts/banned-word-rewrite-plan.jsA scripts/bannedword-body-leak/bannedword-body-leak.mjsA scripts/bannedword-title-preview/bannedword-title-preview.mjsA scripts/body-quality-scan/body-quality-scan.mjsA scripts/brands-page/build-brands.cjsA scripts/brands-page/fetch-bgs.cjsA scripts/brands-page/gen-wordmarks.cjsA scripts/brands-page/push-brands.cjsA scripts/broken-image-pilot/broken-image-pilot.mjsA scripts/broken-image-scan/broken-image-scan.mjsA scripts/buyability-audit/buyability-audit.mjsA scripts/buyability-audit/policy-mechanism-probe.mjsA scripts/c34-osborne-gaston/APPLY-blank-reverify-guard.shA scripts/c34-osborne-gaston/DRAFT-worker-blank-reverify-guard.patch.jsA scripts/c34-osborne-gaston/enqueue-specs.pyA scripts/c34-osborne-gaston/generate-enqueue-rows.mjsA scripts/c34-osborne-gaston/test_enqueue_specs.pyA scripts/canary-board/canary-board.mjsA scripts/canary-install/run-canary-with-cncp.shA scripts/canary-install/run-sitemap-integrity.shA scripts/canary-install/run-zero-dollar.shA scripts/canary-meta-watchdog/canary-meta-watchdog.jsA scripts/canary-meta-watchdog/com.steve.canary-meta-watchdog.plistA scripts/canonical-robots-audit/canonical-robots-audit.mjsA scripts/cf-dns-snapshot/cf-dns-snapshot.jsA scripts/clarke-specs-autoload.shA scripts/clarke-specs-backfill.pyA scripts/cole-son-apply-map.jsA scripts/cole-son-apply-pattern-map.jsA scripts/cole-son-map-verify/cole-son-map-verify.mjsA scripts/cole-son-price-audit.mjsA scripts/cole-son-reconcile-pattern.jsA scripts/cole-son-reprice-2026.jsA scripts/collection-canonical-audit/collection-canonical-audit.mjsA scripts/collection-leak-sweep/collection-leak-sweep.mjsA scripts/collection-orphan-sweep/collection-orphan-sweep.mjsA scripts/collection-orphan-sweep/low-membership-probe.mjsA scripts/color-seo/push-color-seo.cjsA scripts/continue-masked-segmentation/continue-masked-segmentation-v2.mjsA scripts/continue-masked-segmentation/continue-masked-segmentation.mjsA scripts/contract-scope-auditor/contract-scope-auditor.mjsA scripts/dark-inventory/dark-inventory-scan.shA scripts/dark-vendor-check/dark-vendor-check.shA scripts/dedup-archive-all.jsA scripts/dedup-bulk-all.jsA scripts/dedup-verify-all.jsA scripts/draft-abnormal-decode/draft-abnormal-decode.mjsA scripts/draft-reactivation-plan/build-draft-reactivation-plan.mjsA scripts/dup-image-scan/dup-image-scan.shA scripts/dup-sku-scan/dup-sku-scan.shA scripts/dup-title-scan/dup-title-scan.shA scripts/empty-collections/empty-collections.mjsA scripts/enrichment-board/build-enrichment-board.mjsA scripts/fallingstar-onboard/go-live-fallingstar.jsA scripts/fallingstar-onboard/push-fallingstar-live.jsA scripts/fallingstar-onboard/resume-tomorrow.shA scripts/fallingstar-onboard/run-push-fallingstar.shA scripts/fallingstar-resku/audit-brands.jsA scripts/fallingstar-resku/enrich.jsA scripts/fence-strip/fence-strip-apply.mjsA scripts/fence-strip/fence-strip-dryrun.mjsA scripts/fix-schumacher-double-wallcovering.jsA scripts/fix-wbs-width.pyA scripts/fleet-dedup-handle.jsA scripts/gimmersta-romo-rolls/run.shA scripts/gmc-enrich/viewer.mjsA scripts/gmc-feed-guard/gmc-feed-guard.mjsA scripts/gmc-verify/gmc-verify.mjsA scripts/google-feed/apply-unpublish.mjsA scripts/google-feed/calibrate-price.mjsA scripts/google-feed/feed-eligibility.mjsA scripts/google-feed/prep-actions.mjsA scripts/greenland-onboard/alt-tags.mjsA scripts/greenland-onboard/build-payloads.mjsA scripts/greenland-onboard/create-drafts.mjsA scripts/greenland-onboard/finish-3-strays.mjsA scripts/greenland-onboard/launch-pricing.mjsA scripts/greenland-onboard/reformat-titles.mjsA scripts/greenland-onboard/relabel-to-pr.mjsA scripts/greenland-onboard/resume.shA scripts/greenland-onboard/swap-sku-dwlg-to-cork.mjsA scripts/greenland-onboard/transform-to-pr.mjsA scripts/groundworks-emit-load-sql.mjsA scripts/groundworks-palette-enrich.pyA scripts/handle-freshness/handle-freshness-canary.mjsA scripts/henry-tank-viewer.mjsA scripts/hreflang-locale-audit/hreflang-locale-audit.mjsA scripts/image-alt-audit/image-alt-audit-rendered.mjsA scripts/image-alt-audit/image-alt-audit.mjsA scripts/image-integrity-sweep/image-integrity-sweep.mjsA scripts/innovations-image-audit/audit.mjsA scripts/innovations-mfr-reconcile/apply-image-fix.mjsA scripts/innovations-mfr-reconcile/archive-discontinued.mjsA scripts/innovations-mfr-reconcile/reconcile.mjsA scripts/innovations-mfr-reconcile/run-archive.shA scripts/innovations-reprice/stage-innov-reprice.mjsA scripts/inverse-mislabel-disambig/inverse-mislabel-disambig.mjsA scripts/inverse-mislabel-disambig/showroom-negctrl.mjsA scripts/inverse-mislabel-sweep/inverse-mislabel-sweep.mjsA scripts/jsonld-425-scan/jsonld-425-scan.mjsA scripts/jsonld-audit/jsonld-audit.mjsA scripts/justin-david-pricing/backfill-jd-phase2-metafields.mjsA scripts/justin-david-pricing/build-crawl-gap-promotion.pyA scripts/justin-david-pricing/build-jd-phase2-creates.mjsA scripts/justin-david-pricing/build-jd-yard-variants.mjsA scripts/justin-david-pricing/com.steve.jd-yard-resume.plistA scripts/justin-david-pricing/crawl-gap-staging.pyA scripts/justin-david-pricing/daily-resume-jd-phase2.shA scripts/justin-david-pricing/install-jd-yard-job.shA scripts/justin-david-pricing/parse-jd-pricelist.pyA scripts/justin-david-pricing/publish-jd-batch.mjsA scripts/justin-david-pricing/repair-jd-variants.mjsA scripts/justin-david-pricing/resume-jd-yard.shA scripts/knoll-onboard/build-payloads.mjsA scripts/knoll-onboard/com.steve.knoll-onboard-resume.plistA scripts/knoll-onboard/create-drafts.mjsA scripts/knoll-onboard/go-live.mjsA scripts/knoll-onboard/resume.shA scripts/kravet-2026-coverage-audit.mjsA scripts/kravet-backfill-mfrsku.jsA scripts/kravet-cost/currency-check.jsA scripts/kravet-cost/push-anomalies.mjsA scripts/kravet-cost/push-map-prices.mjsA scripts/kravet-cost/revert-map-push.mjsA scripts/kravet-cost/run-parallel.shA scripts/kravet-dedup-archive.jsA scripts/kravet-dedup-bulk.jsA scripts/kravet-dedup-sweep.jsA scripts/kravet-dedup-verify.jsA scripts/kravet-disco-algolia-verify.jsA scripts/kravet-disco-archive.jsA scripts/kravet-master-2026/add_roll_variants.mjsA scripts/kravet-master-2026/add_yard_variants.mjsA scripts/kravet-master-2026/build_csv.pyA scripts/kravet-master-2026/dryrun_roll_reprice.mjsA scripts/kravet-master-2026/gen_reprice_143.mjsA scripts/kravet-master-2026/gen_reprice_dryrun.mjsA scripts/kravet-master-2026/load.shA scripts/kravet-master-2026/offmap_full_scan.mjsA scripts/kravet-master-2026/sync_authoritative_mac2_to_kamatera.shA scripts/kravet-offmap-paginated.jsA scripts/kravet-offmap-unitaware.jsA scripts/kravet-price-vs-map.jsA scripts/kravet-reprice-apply.jsA scripts/kravet-reprice-dryrun.jsA scripts/kravet-sibling-map-verify/kravet-sibling-map-verify.mjsA scripts/kravet-spec-backfill.pyA scripts/kravet-true-coverage.jsA scripts/launchd-audit/audit.shA scripts/launchd-audit/launchd-lint.shA scripts/launchd-audit/launchd-run.shA scripts/live-price-canary/live-price-canary.mjsA scripts/live-price-canary/live-price-pilot.mjsA scripts/metafield-coverage/metafield-coverage-audit.mjsA scripts/multivariant-zero-sweep/multivariant-zero-sweep.mjsA scripts/mural-pdp/fix-complete-mural-prices.mjsA scripts/mural-pdp/server.jsA scripts/muralsource-onboard/out/hidden-skus.txtA scripts/nav-link-reachability/navmenus-admin-probe.mjsA scripts/new-arrivals-daily/com.steve.dw-new-arrivals-500.plistA scripts/new-arrivals-daily/new-arrival-tag-sync.cjsA scripts/no-image-scan/no-image-scan.mjsA scripts/null-price-probe/null-price-livecheck.shA scripts/orphan-collections/build-merge-map.mjsA scripts/orphan-collections/orphan-collection-livecount.mjsA scripts/orphan-collections/orphan-collection-scan.mjsA scripts/orphan-products/orphan-products-scan.mjsA scripts/osborne-little-basis/ol-basis-decode.mjsA scripts/osborne-onboard/batch-canary.mjsA scripts/osborne-onboard/build-manifest.pyA scripts/osborne-onboard/build-payloads.mjsA scripts/osborne-onboard/com.steve.osborne-batch-canary.plistA scripts/osborne-onboard/com.steve.osborne-onboard-resume.plistA scripts/osborne-onboard/create-drafts.mjsA scripts/osborne-onboard/enrich-gemini.mjsA scripts/osborne-onboard/go-live.mjsA scripts/osborne-onboard/probe-shopify-dwol.mjsA scripts/osborne-onboard/resume.shA scripts/osborne-onboard/roll-add-apply.mjsA scripts/osborne-onboard/roll-add-plan.pyA scripts/osborne-onboard/run.shA scripts/preflight/preflight-validate.jsA scripts/price-render-audit/price-render-audit.mjsA scripts/price-sheets/add-roll-variant-edge.mjsA scripts/price-sheets/add-roll-variant-oddball.mjsA scripts/price-sheets/add-roll-variant.mjsA scripts/price-sheets/archive-schu-junk.mjsA scripts/price-sheets/build-dw-exclusives-roll-plan.pyA scripts/price-sheets/build-schu-rolls.mjsA scripts/price-sheets/build-schu-samples.mjsA scripts/price-sheets/draft-dw-exclusives-cost-load.pyA scripts/price-sheets/load-price-sheets.pyA scripts/price-sheets/push-schu-roll-prices.mjsA scripts/price-sheets/relabel-schu-sample-as-roll.mjsA scripts/price-sheets/resume-roll-adds.shA scripts/price-sheets/schu-find-needsample.mjsA scripts/price-sheets/schu-reconcile-all.mjsA scripts/price-sheets/schu-resume-build.shA scripts/price-sheets/schu-watch/schu-reconcile-watch.shA scripts/promote-canary.shA scripts/queue-slo-snapshot/queue-slo-snapshot.mjsA scripts/rebel-walls-dwsku-recovery/recover-rebel-walls-dwsku.jsA scripts/redirect-health/redirect-health.mjsA scripts/rename-clarke-handles.pyA scripts/resku-campaign/apply-dwsku.jsA scripts/resku-campaign/backfill-gap.jsA scripts/resku-campaign/backfill-leed.jsA scripts/resku-campaign/resku-leaks.jsA scripts/resku-campaign/run-burst.shA scripts/resku-campaign/run.shA scripts/rigo-onboard/assign-pr-names.mjsA scripts/rigo-onboard/build-payloads.mjsA scripts/rigo-onboard/create-drafts.mjsA scripts/rigo-onboard/enrich-rigo.mjsA scripts/rigo-onboard/load-rigo.mjsA scripts/rigo-onboard/scrape-rigo.mjsA scripts/rl-zero-rootcause/rl-diag.mjsA scripts/robots-sitemap/robots-sitemap-canary.mjsA scripts/roll-length-label/add-rolls.mjsA scripts/roll-length-label/apply-roll-length.mjsA scripts/roll-length-label/audit-roll-length.mjsA scripts/roll-length-label/classify-title-option.mjsA scripts/roll-length-label/crawl-thibaut-lengths.mjsA scripts/roll-length-label/migrate-title-option.mjsA scripts/roll-length-label/roll-label.mjsA scripts/romo-verify/run.mjsA scripts/sandberg-price/curl-pull.mjsA scripts/sandberg-price/sitemap-pull.mjsA scripts/sanderson-onboard/out/created.jsonlA scripts/sanderson-onboard/out/payloads.jsonlA scripts/scrape-groundworks-algolia.mjsA scripts/scrape-kravet-algolia.mjsA scripts/scraper-contract-test/scraper-contract-test.mjsA scripts/sitemap-emergence/gen-philipperomano-sitemap.mjsA scripts/sitemap-health/sitemap-health.mjsA scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjsA scripts/sitemap-lastmod-freshness/sitemap-lastmod-freshness.mjsA scripts/specs-crosswalk-probe/probe-pattern-crosswalk.shA scripts/specs-reparse-sizing/size-specs-reparse.shA scripts/spoonflower-henry-download.mjsA scripts/stage-clarke-specs-load.pyA scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plistA scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.shA scripts/staged-launchd/com.steve.backup-freshness.plistA scripts/staged-launchd/com.steve.secrets-env-backup.plistA scripts/staged-launchd/gmc-feed-guard/com.steve.gmc-feed-guard.plistA scripts/staged-launchd/gmc-feed-guard/run-gmc-feed-guard.shA scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plistA scripts/staged-launchd/handle-freshness/run-handle-freshness.shA scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plistA scripts/staged-launchd/live-price-canary/run-live-price-canary.shA scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plistA scripts/staged-launchd/metafield-coverage/run-metafield-coverage.shA scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plistA scripts/staged-launchd/no-image-scan/run-no-image-scan.shA scripts/staged-launchd/promote-canary.shA scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plistA scripts/staged-launchd/robots-sitemap/run-robots-sitemap.shA scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plistA scripts/staged-launchd/tls-expiry/run-tls-expiry.shA scripts/stroheim-onboard/out/payloads.jsonlA scripts/stroheim-onboard/settlement-gate.mjsA scripts/thibaut-disco-drift/thibaut-disco-drift.mjsA scripts/title-campaign/build-titles.mjsA scripts/title-campaign/run-titles.shA scripts/tls-expiry/tls-expiry-canary.mjsA scripts/trending-2026/trending-tag-sync.cjsA scripts/tres-tintas-crawl/crawl.pyA scripts/tres-tintas-onboard/apply-about-blocks.jsA scripts/tres-tintas-onboard/archive-cleanup.jsA scripts/tres-tintas-onboard/com.steve.tres-tintas-resume.plistA scripts/tres-tintas-onboard/deploy-remaining-microsites.shA scripts/tres-tintas-onboard/env.shA scripts/tres-tintas-onboard/fix-artmura-nginx.shA scripts/tres-tintas-onboard/go-live-tres-tintas.jsA scripts/tres-tintas-onboard/install-launchd.shA scripts/tres-tintas-onboard/push-tres-tintas-live.jsA scripts/tres-tintas-onboard/resume-daily.shA scripts/tres-tintas-onboard/run-golive.shA scripts/tres-tintas-onboard/run-push.shA scripts/true-sku-leak-scrub/scrub-true-sku.mjsA scripts/verify-lee-jofa-build.shA scripts/versace-preamble-fix/fix-preamble-descriptions.mjsA scripts/worker-registry-monitor/monitor.mjsA scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjsA scripts/zero-roll-rootcause/era-33-diagnosis.mjsA scripts/zero-sample-sweep/zero-sample-sweep-v2.mjsA scripts/zero-sample-sweep/zero-sample-sweep.mjsA scripts/zoffany-clean-70.pyA scripts/zoffany-clean-retry.pyA scripts/zoffany-onboard/arm-schedule.shA scripts/zoffany-onboard/com.steve.zoffany-onboard-push.plistA scripts/zoffany-onboard/push-zoffany-live.jsA scripts/zoffany-onboard/run-push-zoffany.shA scripts/zoffany-onboard/run-scheduled.sh
Diff
commit 04f54b6397226a38067812fbea6adccfaee9d514
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun Jul 26 16:44:38 2026 -0700
auto-save: 2026-07-26T16:44:36 (215 files) — scripts/sample-split-pilot scripts/_lib/ scripts/activate-1838/ scripts/af-reimage/ scripts/ai-preamble-leak-sweep/
---
scripts/_lib/dw-publications.js | 66 +++
scripts/activate-1838/activate-1838-showroom.mjs | 40 ++
scripts/activate-1838/activate-1838.mjs | 43 ++
scripts/af-reimage/republish.py | 23 +
.../ai-preamble-leak-sweep.mjs | 64 +++
.../body-start-classifier.mjs | 23 +
scripts/ai-preamble-leak-sweep/broad-net-bound.mjs | 28 +
.../ai-preamble-leak-sweep/wallpaper-reconcile.mjs | 11 +
.../alt-text-coverage/alt-text-coverage-audit.mjs | 129 +++++
scripts/anna-french-rolls/af-build-noroll.js | 94 ++++
scripts/anna-french-rolls/af-build.js | 81 +++
scripts/anna-french-rolls/af-live-pull.js | 100 ++++
.../anna-french-rolls/af-normalize-rolllabel.js | 68 +++
scripts/anna-french-rolls/af-noroll-resume.sh | 56 ++
scripts/anna-french-rolls/af-reprice-live.js | 105 ++++
scripts/anna-french-rolls/run-af-build.sh | 25 +
scripts/apply-1104-map.js | 34 ++
.../build-april-restore-plan.mjs | 115 ++++
scripts/artmura-onboard/apply-markup.js | 83 +++
scripts/artmura-onboard/backfill_metafields.js | 80 +++
scripts/artmura-onboard/db_write.py | 35 ++
scripts/artmura-onboard/extract_colors.py | 55 ++
scripts/artmura-onboard/fill_specs.py | 62 +++
.../artmura-onboard/fix-newarrivals-and-type.js | 106 ++++
.../artmura-onboard/fix-plural-type-fleetwide.js | 83 +++
scripts/artmura-onboard/go-live-artmura.js | 111 ++++
.../artmura-onboard/interior-designer-enrich.js | 150 ++++++
scripts/artmura-onboard/normalize-color-tags.js | 93 ++++
scripts/artmura-onboard/onboard.py | 241 +++++++++
scripts/artmura-onboard/push-artmura-live.js | 129 +++++
scripts/artmura-onboard/run-fix.sh | 19 +
scripts/artmura-onboard/run-push-artmura.sh | 19 +
scripts/artmura-onboard/update-live-titles.js | 58 ++
.../availability-drift-canary.mjs | 88 +++
scripts/backfill-clarke-redirects.py | 58 ++
scripts/banned-word-rewrite-plan.js | Bin 0 -> 9603 bytes
.../bannedword-body-leak/bannedword-body-leak.mjs | 85 +++
.../bannedword-title-preview.mjs | 106 ++++
scripts/body-quality-scan/body-quality-scan.mjs | 36 ++
scripts/brands-page/build-brands.cjs | 135 +++++
scripts/brands-page/fetch-bgs.cjs | 19 +
scripts/brands-page/gen-wordmarks.cjs | 80 +++
scripts/brands-page/push-brands.cjs | 18 +
scripts/broken-image-pilot/broken-image-pilot.mjs | 53 ++
scripts/broken-image-scan/broken-image-scan.mjs | 42 ++
scripts/buyability-audit/buyability-audit.mjs | 53 ++
.../buyability-audit/policy-mechanism-probe.mjs | 27 +
.../APPLY-blank-reverify-guard.sh | 108 ++++
.../DRAFT-worker-blank-reverify-guard.patch.js | 103 ++++
scripts/c34-osborne-gaston/enqueue-specs.py | 97 ++++
.../c34-osborne-gaston/generate-enqueue-rows.mjs | 151 ++++++
scripts/c34-osborne-gaston/test_enqueue_specs.py | 235 ++++++++
scripts/canary-board/canary-board.mjs | 90 ++++
scripts/canary-install/run-canary-with-cncp.sh | 44 ++
scripts/canary-install/run-sitemap-integrity.sh | 5 +
scripts/canary-install/run-zero-dollar.sh | 5 +
.../canary-meta-watchdog/canary-meta-watchdog.js | 193 +++++++
.../com.steve.canary-meta-watchdog.plist | 31 ++
.../canonical-robots-audit.mjs | 101 ++++
scripts/cf-dns-snapshot/cf-dns-snapshot.js | 138 +++++
scripts/clarke-specs-autoload.sh | 20 +
scripts/clarke-specs-backfill.py | 137 +++++
scripts/cole-son-apply-map.js | 36 ++
scripts/cole-son-apply-pattern-map.js | 53 ++
.../cole-son-map-verify/cole-son-map-verify.mjs | 77 +++
scripts/cole-son-price-audit.mjs | 52 ++
scripts/cole-son-reconcile-pattern.js | 70 +++
scripts/cole-son-reprice-2026.js | 49 ++
.../collection-canonical-audit.mjs | 93 ++++
.../collection-leak-sweep.mjs | 35 ++
.../collection-orphan-sweep.mjs | 59 +++
.../low-membership-probe.mjs | 43 ++
scripts/color-seo/push-color-seo.cjs | 57 ++
.../continue-masked-segmentation-v2.mjs | 57 ++
.../continue-masked-segmentation.mjs | 59 +++
.../contract-scope-auditor.mjs | 63 +++
scripts/dark-inventory/dark-inventory-scan.sh | 22 +
scripts/dark-vendor-check/dark-vendor-check.sh | 15 +
scripts/dedup-archive-all.js | 52 ++
scripts/dedup-bulk-all.js | 68 +++
scripts/dedup-verify-all.js | 62 +++
.../draft-abnormal-decode.mjs | 32 ++
.../build-draft-reactivation-plan.mjs | 77 +++
scripts/dup-image-scan/dup-image-scan.sh | 22 +
scripts/dup-sku-scan/dup-sku-scan.sh | 13 +
scripts/dup-title-scan/dup-title-scan.sh | 20 +
scripts/empty-collections/empty-collections.mjs | 38 ++
.../enrichment-board/build-enrichment-board.mjs | 73 +++
scripts/fallingstar-onboard/go-live-fallingstar.js | 96 ++++
.../fallingstar-onboard/push-fallingstar-live.js | 112 ++++
scripts/fallingstar-onboard/resume-tomorrow.sh | 40 ++
.../fallingstar-onboard/run-push-fallingstar.sh | 8 +
scripts/fallingstar-resku/audit-brands.js | 45 ++
scripts/fallingstar-resku/enrich.js | 111 ++++
scripts/fence-strip/fence-strip-apply.mjs | 35 ++
scripts/fence-strip/fence-strip-dryrun.mjs | 50 ++
scripts/fix-schumacher-double-wallcovering.js | 52 ++
scripts/fix-wbs-width.py | 54 ++
scripts/fleet-dedup-handle.js | 74 +++
scripts/gimmersta-romo-rolls/run.sh | 48 ++
scripts/gmc-enrich/viewer.mjs | 76 +++
scripts/gmc-feed-guard/gmc-feed-guard.mjs | 39 ++
scripts/gmc-verify/gmc-verify.mjs | 27 +
scripts/google-feed/apply-unpublish.mjs | 63 +++
scripts/google-feed/calibrate-price.mjs | 65 +++
scripts/google-feed/feed-eligibility.mjs | 218 ++++++++
scripts/google-feed/prep-actions.mjs | 87 +++
scripts/greenland-onboard/alt-tags.mjs | 36 ++
scripts/greenland-onboard/build-payloads.mjs | 97 ++++
scripts/greenland-onboard/create-drafts.mjs | 118 +++++
scripts/greenland-onboard/finish-3-strays.mjs | 119 +++++
scripts/greenland-onboard/launch-pricing.mjs | 70 +++
scripts/greenland-onboard/reformat-titles.mjs | 40 ++
scripts/greenland-onboard/relabel-to-pr.mjs | 50 ++
scripts/greenland-onboard/resume.sh | 28 +
.../greenland-onboard/swap-sku-dwlg-to-cork.mjs | 15 +
scripts/greenland-onboard/transform-to-pr.mjs | 97 ++++
scripts/groundworks-emit-load-sql.mjs | 51 ++
scripts/groundworks-palette-enrich.py | 45 ++
.../handle-freshness/handle-freshness-canary.mjs | 110 ++++
scripts/henry-tank-viewer.mjs | 127 +++++
.../hreflang-locale-audit.mjs | 104 ++++
.../image-alt-audit/image-alt-audit-rendered.mjs | 100 ++++
scripts/image-alt-audit/image-alt-audit.mjs | 95 ++++
.../image-integrity-sweep.mjs | 51 ++
scripts/innovations-image-audit/audit.mjs | 127 +++++
.../innovations-mfr-reconcile/apply-image-fix.mjs | 89 ++++
.../archive-discontinued.mjs | 83 +++
scripts/innovations-mfr-reconcile/reconcile.mjs | 88 +++
scripts/innovations-mfr-reconcile/run-archive.sh | 9 +
.../innovations-reprice/stage-innov-reprice.mjs | 111 ++++
.../inverse-mislabel-disambig.mjs | 75 +++
.../inverse-mislabel-disambig/showroom-negctrl.mjs | 37 ++
.../inverse-mislabel-sweep.mjs | 45 ++
scripts/jsonld-425-scan/jsonld-425-scan.mjs | 81 +++
scripts/jsonld-audit/jsonld-audit.mjs | 88 +++
.../backfill-jd-phase2-metafields.mjs | 183 +++++++
.../build-crawl-gap-promotion.py | 135 +++++
.../build-jd-phase2-creates.mjs | 383 ++++++++++++++
.../build-jd-yard-variants.mjs | 269 ++++++++++
.../com.steve.jd-yard-resume.plist | 24 +
scripts/justin-david-pricing/crawl-gap-staging.py | 221 ++++++++
.../justin-david-pricing/daily-resume-jd-phase2.sh | 82 +++
.../justin-david-pricing/install-jd-yard-job.sh | 13 +
scripts/justin-david-pricing/parse-jd-pricelist.py | 80 +++
scripts/justin-david-pricing/publish-jd-batch.mjs | 153 ++++++
.../justin-david-pricing/repair-jd-variants.mjs | 126 +++++
scripts/justin-david-pricing/resume-jd-yard.sh | 89 ++++
scripts/knoll-onboard/build-payloads.mjs | 120 +++++
.../com.steve.knoll-onboard-resume.plist | 22 +
scripts/knoll-onboard/create-drafts.mjs | 104 ++++
scripts/knoll-onboard/go-live.mjs | 117 ++++
scripts/knoll-onboard/resume.sh | 35 ++
scripts/kravet-2026-coverage-audit.mjs | 41 ++
scripts/kravet-backfill-mfrsku.js | 42 ++
scripts/kravet-cost/currency-check.js | 71 +++
scripts/kravet-cost/push-anomalies.mjs | 45 ++
scripts/kravet-cost/push-map-prices.mjs | 136 +++++
scripts/kravet-cost/revert-map-push.mjs | 52 ++
scripts/kravet-cost/run-parallel.sh | 32 ++
scripts/kravet-dedup-archive.js | 52 ++
scripts/kravet-dedup-bulk.js | 68 +++
scripts/kravet-dedup-sweep.js | 71 +++
scripts/kravet-dedup-verify.js | 62 +++
scripts/kravet-disco-algolia-verify.js | 40 ++
scripts/kravet-disco-archive.js | 22 +
scripts/kravet-master-2026/add_roll_variants.mjs | 117 ++++
scripts/kravet-master-2026/add_yard_variants.mjs | 122 +++++
scripts/kravet-master-2026/build_csv.py | 35 ++
scripts/kravet-master-2026/dryrun_roll_reprice.mjs | 76 +++
scripts/kravet-master-2026/gen_reprice_143.mjs | 34 ++
scripts/kravet-master-2026/gen_reprice_dryrun.mjs | 57 ++
scripts/kravet-master-2026/load.sh | 40 ++
scripts/kravet-master-2026/offmap_full_scan.mjs | 73 +++
.../sync_authoritative_mac2_to_kamatera.sh | 20 +
scripts/kravet-offmap-paginated.js | 73 +++
scripts/kravet-offmap-unitaware.js | 62 +++
scripts/kravet-price-vs-map.js | 51 ++
scripts/kravet-reprice-apply.js | 51 ++
scripts/kravet-reprice-dryrun.js | 47 ++
.../kravet-sibling-map-verify.mjs | 63 +++
scripts/kravet-spec-backfill.py | 137 +++++
scripts/kravet-true-coverage.js | 51 ++
scripts/launchd-audit/audit.sh | 51 ++
scripts/launchd-audit/launchd-lint.sh | 83 +++
scripts/launchd-audit/launchd-run.sh | 40 ++
scripts/live-price-canary/live-price-canary.mjs | 39 ++
scripts/live-price-canary/live-price-pilot.mjs | 57 ++
.../metafield-coverage-audit.mjs | 170 ++++++
.../multivariant-zero-sweep.mjs | 91 ++++
scripts/mural-pdp/fix-complete-mural-prices.mjs | 72 +++
scripts/mural-pdp/server.js | 220 ++++++++
scripts/muralsource-onboard/out/hidden-skus.txt | 52 ++
.../nav-link-reachability/navmenus-admin-probe.mjs | 24 +
.../com.steve.dw-new-arrivals-500.plist | 21 +
.../new-arrivals-daily/new-arrival-tag-sync.cjs | 128 +++++
scripts/no-image-scan/no-image-scan.mjs | 19 +
scripts/null-price-probe/null-price-livecheck.sh | 19 +
scripts/orphan-collections/build-merge-map.mjs | 42 ++
.../orphan-collection-livecount.mjs | 50 ++
.../orphan-collections/orphan-collection-scan.mjs | 38 ++
scripts/orphan-products/orphan-products-scan.mjs | 19 +
scripts/osborne-little-basis/ol-basis-decode.mjs | 33 ++
scripts/osborne-onboard/batch-canary.mjs | 210 ++++++++
scripts/osborne-onboard/build-manifest.py | 138 +++++
scripts/osborne-onboard/build-payloads.mjs | 116 ++++
.../com.steve.osborne-batch-canary.plist | 14 +
.../com.steve.osborne-onboard-resume.plist | 22 +
scripts/osborne-onboard/create-drafts.mjs | 120 +++++
scripts/osborne-onboard/enrich-gemini.mjs | 128 +++++
scripts/osborne-onboard/go-live.mjs | 109 ++++
scripts/osborne-onboard/probe-shopify-dwol.mjs | 54 ++
scripts/osborne-onboard/resume.sh | 48 ++
scripts/osborne-onboard/roll-add-apply.mjs | 119 +++++
scripts/osborne-onboard/roll-add-plan.py | 104 ++++
scripts/osborne-onboard/run.sh | 27 +
scripts/preflight/preflight-validate.js | 277 ++++++++++
scripts/price-render-audit/price-render-audit.mjs | 86 +++
scripts/price-sheets/add-roll-variant-edge.mjs | 94 ++++
scripts/price-sheets/add-roll-variant-oddball.mjs | 79 +++
scripts/price-sheets/add-roll-variant.mjs | 92 ++++
scripts/price-sheets/archive-schu-junk.mjs | 30 ++
.../price-sheets/build-dw-exclusives-roll-plan.py | 92 ++++
scripts/price-sheets/build-schu-rolls.mjs | 109 ++++
scripts/price-sheets/build-schu-samples.mjs | 57 ++
.../price-sheets/draft-dw-exclusives-cost-load.py | 88 +++
scripts/price-sheets/load-price-sheets.py | 137 +++++
scripts/price-sheets/push-schu-roll-prices.mjs | 70 +++
.../price-sheets/relabel-schu-sample-as-roll.mjs | 65 +++
scripts/price-sheets/resume-roll-adds.sh | 42 ++
scripts/price-sheets/schu-find-needsample.mjs | 15 +
scripts/price-sheets/schu-reconcile-all.mjs | 117 ++++
scripts/price-sheets/schu-resume-build.sh | 28 +
.../schu-watch/schu-reconcile-watch.sh | 119 +++++
scripts/promote-canary.sh | 76 +++
scripts/queue-slo-snapshot/queue-slo-snapshot.mjs | 95 ++++
.../recover-rebel-walls-dwsku.js | 367 +++++++++++++
scripts/redirect-health/redirect-health.mjs | 104 ++++
scripts/rename-clarke-handles.py | 93 ++++
scripts/resku-campaign/apply-dwsku.js | 56 ++
scripts/resku-campaign/backfill-gap.js | 68 +++
scripts/resku-campaign/backfill-leed.js | 45 ++
scripts/resku-campaign/resku-leaks.js | 96 ++++
scripts/resku-campaign/run-burst.sh | 21 +
scripts/resku-campaign/run.sh | 23 +
scripts/rigo-onboard/assign-pr-names.mjs | 109 ++++
scripts/rigo-onboard/build-payloads.mjs | 122 +++++
scripts/rigo-onboard/create-drafts.mjs | 106 ++++
scripts/rigo-onboard/enrich-rigo.mjs | 111 ++++
scripts/rigo-onboard/load-rigo.mjs | 39 ++
scripts/rigo-onboard/scrape-rigo.mjs | 158 ++++++
scripts/rl-zero-rootcause/rl-diag.mjs | 23 +
scripts/robots-sitemap/robots-sitemap-canary.mjs | 135 +++++
scripts/roll-length-label/add-rolls.mjs | 75 +++
scripts/roll-length-label/apply-roll-length.mjs | 73 +++
scripts/roll-length-label/audit-roll-length.mjs | 131 +++++
.../roll-length-label/classify-title-option.mjs | 56 ++
.../roll-length-label/crawl-thibaut-lengths.mjs | 66 +++
scripts/roll-length-label/migrate-title-option.mjs | 72 +++
scripts/roll-length-label/roll-label.mjs | 84 +++
scripts/romo-verify/run.mjs | 95 ++++
scripts/sandberg-price/curl-pull.mjs | 54 ++
scripts/sandberg-price/sitemap-pull.mjs | 42 ++
scripts/sanderson-onboard/out/created.jsonl | 2 +
scripts/sanderson-onboard/out/payloads.jsonl | 589 +++++++++++++++++++++
scripts/scrape-groundworks-algolia.mjs | 53 ++
scripts/scrape-kravet-algolia.mjs | 56 ++
.../scraper-contract-test.mjs | 85 +++
.../gen-philipperomano-sitemap.mjs | 20 +
scripts/sitemap-health/sitemap-health.mjs | 67 +++
.../sitemap-integrity-canary.mjs | 107 ++++
.../sitemap-lastmod-freshness.mjs | 48 ++
.../probe-pattern-crosswalk.sh | 25 +
scripts/specs-reparse-sizing/size-specs-reparse.sh | 25 +
scripts/spoonflower-henry-download.mjs | 113 ++++
scripts/stage-clarke-specs-load.py | 72 +++
.../com.steve.alt-text-coverage.plist | 10 +
.../alt-text-coverage/run-alt-text-coverage.sh | 7 +
.../com.steve.backup-freshness.plist | 36 ++
.../com.steve.secrets-env-backup.plist | 38 ++
.../gmc-feed-guard/com.steve.gmc-feed-guard.plist | 10 +
.../gmc-feed-guard/run-gmc-feed-guard.sh | 7 +
.../com.steve.handle-freshness.plist | 10 +
.../handle-freshness/run-handle-freshness.sh | 7 +
.../com.steve.live-price-canary.plist | 10 +
.../live-price-canary/run-live-price-canary.sh | 7 +
.../com.steve.metafield-coverage.plist | 10 +
.../metafield-coverage/run-metafield-coverage.sh | 7 +
.../no-image-scan/com.steve.no-image-scan.plist | 10 +
.../no-image-scan/run-no-image-scan.sh | 7 +
scripts/staged-launchd/promote-canary.sh | 69 +++
.../robots-sitemap/com.steve.robots-sitemap.plist | 10 +
.../robots-sitemap/run-robots-sitemap.sh | 7 +
.../tls-expiry/com.steve.tls-expiry.plist | 10 +
.../staged-launchd/tls-expiry/run-tls-expiry.sh | 7 +
scripts/stroheim-onboard/out/payloads.jsonl | 0
scripts/stroheim-onboard/settlement-gate.mjs | 114 ++++
.../thibaut-disco-drift/thibaut-disco-drift.mjs | 23 +
scripts/title-campaign/build-titles.mjs | 248 +++++++++
scripts/title-campaign/run-titles.sh | 11 +
scripts/tls-expiry/tls-expiry-canary.mjs | 89 ++++
scripts/trending-2026/trending-tag-sync.cjs | 150 ++++++
scripts/tres-tintas-crawl/crawl.py | 58 ++
scripts/tres-tintas-onboard/apply-about-blocks.js | 74 +++
scripts/tres-tintas-onboard/archive-cleanup.js | 56 ++
.../com.steve.tres-tintas-resume.plist | 24 +
.../deploy-remaining-microsites.sh | 10 +
scripts/tres-tintas-onboard/env.sh | 10 +
scripts/tres-tintas-onboard/fix-artmura-nginx.sh | 10 +
scripts/tres-tintas-onboard/go-live-tres-tintas.js | 102 ++++
scripts/tres-tintas-onboard/install-launchd.sh | 11 +
.../tres-tintas-onboard/push-tres-tintas-live.js | 143 +++++
scripts/tres-tintas-onboard/resume-daily.sh | 60 +++
scripts/tres-tintas-onboard/run-golive.sh | 5 +
scripts/tres-tintas-onboard/run-push.sh | 5 +
scripts/true-sku-leak-scrub/scrub-true-sku.mjs | 239 +++++++++
scripts/verify-lee-jofa-build.sh | 42 ++
.../fix-preamble-descriptions.mjs | 57 ++
scripts/worker-registry-monitor/monitor.mjs | 122 +++++
.../zero-dollar-orderable-canary.mjs | 140 +++++
scripts/zero-roll-rootcause/era-33-diagnosis.mjs | 26 +
scripts/zero-sample-sweep/zero-sample-sweep-v2.mjs | 68 +++
scripts/zero-sample-sweep/zero-sample-sweep.mjs | 86 +++
scripts/zoffany-clean-70.py | 88 +++
scripts/zoffany-clean-retry.py | 56 ++
scripts/zoffany-onboard/arm-schedule.sh | 13 +
.../com.steve.zoffany-onboard-push.plist | 26 +
scripts/zoffany-onboard/push-zoffany-live.js | 146 +++++
scripts/zoffany-onboard/run-push-zoffany.sh | 17 +
scripts/zoffany-onboard/run-scheduled.sh | 62 +++
330 files changed, 24070 insertions(+)
diff --git a/scripts/_lib/dw-publications.js b/scripts/_lib/dw-publications.js
new file mode 100644
index 0000000..ea5905f
--- /dev/null
+++ b/scripts/_lib/dw-publications.js
@@ -0,0 +1,66 @@
+/**
+ * dw-publications.js — canonical DW Shopify sales-channel (Publication) list.
+ *
+ * SOURCE-FIX for the GMC $4.25 sample-leak (Steve policy, 2026-07-08):
+ * Shopify's "Google & YouTube" channel auto-syncs each published product's
+ * minVariantPrice to Merchant Center. On DW that min is almost always the
+ * $4.25 "-Sample" variant → Google advertises $4.25 on a real-roll product →
+ * price_mismatch DISAPPROVAL. Every onboard/go-live script publishes new SKUs
+ * to ALL 13 publications, INCLUDING Google (29646651457), so every new import
+ * re-leaks $4.25 onto the channel. That is the re-leak vector.
+ *
+ * THE FIX: new SKUs must NOT land on the Google & YouTube channel. Google is fed
+ * exclusively by the CONTROLLED TSV feed (build-google-feed.js → Merchant
+ * Center primary datasource), which drops the sample variant and emits the real
+ * (highest) price. So channel membership on Google is intentionally empty.
+ *
+ * DEFAULT export ALL_CHANNELS_NO_GOOGLE excludes 29646651457. Onboard scripts
+ * should publish to this list. Opt back into Google only if you have a reason
+ * AND the product is genuinely sample-only (its price IS $4.25) — see
+ * channelsFor() below.
+ *
+ * Reversible: to restore the old behavior, import ALL_CHANNELS_WITH_GOOGLE
+ * instead, or pass {includeGoogle:true} to channelsFor().
+ */
+
+const GOOGLE_PUBLICATION_ID = 29646651457; // "Google & YouTube" — fed by the controlled TSV, NOT channel auto-sync.
+
+// All 13 DW sales channels (numeric publication ids).
+const ALL_PUBLICATION_IDS = [
+ 22208643184, 22497296496, 29646651457, 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+];
+
+const gid = n => `gid://shopify/Publication/${n}`;
+
+// DEFAULT for new imports: every channel EXCEPT Google & YouTube.
+const ALL_CHANNELS_NO_GOOGLE = ALL_PUBLICATION_IDS
+ .filter(n => n !== GOOGLE_PUBLICATION_ID)
+ .map(gid);
+
+// Legacy full list (INCLUDES Google) — kept for explicit opt-in / rollback only.
+const ALL_CHANNELS_WITH_GOOGLE = ALL_PUBLICATION_IDS.map(gid);
+
+/**
+ * channelsFor(product) → the publications a product should be published to.
+ * - Real-roll products (a variant priced > $4.25 exists): NEVER Google
+ * (the TSV feed carries it at the real price).
+ * - Sample-only products (only variant is the $4.25 sample): Google is safe,
+ * because $4.25 IS the true product price (Steve's exception). But even here
+ * the TSV feed already covers it, so the safe default is still no-Google.
+ *
+ * Pass { includeGoogle:true } to force Google membership (rarely needed).
+ */
+function channelsFor(opts = {}) {
+ if (opts.includeGoogle) return ALL_CHANNELS_WITH_GOOGLE;
+ return ALL_CHANNELS_NO_GOOGLE;
+}
+
+module.exports = {
+ GOOGLE_PUBLICATION_ID,
+ GOOGLE_PUBLICATION_GID: gid(GOOGLE_PUBLICATION_ID),
+ ALL_PUBLICATION_IDS,
+ ALL_CHANNELS_NO_GOOGLE,
+ ALL_CHANNELS_WITH_GOOGLE,
+ channelsFor,
+};
diff --git a/scripts/activate-1838/activate-1838-showroom.mjs b/scripts/activate-1838/activate-1838-showroom.mjs
new file mode 100644
index 0000000..c709c5a
--- /dev/null
+++ b/scripts/activate-1838/activate-1838-showroom.mjs
@@ -0,0 +1,40 @@
+// Activate the 1838 $4.25 sample-only drafts as SHOWROOM LINES (Steve-authorized 2026-06-16).
+// Per [[showroom-lines-category]]: tag 'Showroom Line' + metafield custom.showroom_line=true(boolean)
+// → smart collection 'showroom-lines' auto-includes (vendor!=Phillip Jeffries). status ACTIVE +
+// inventory=2026 on ALL variants. EXCLUDES paste-tub accessories (wrong class + placeholder price).
+import fs from 'fs'; import os from 'os';
+const env={}; for(const l of fs.readFileSync(os.homedir()+'/Projects/secrets-manager/.env','utf8').split('\n')){const m=l.match(/^([A-Z0-9_]+)=(.*)$/);if(m)env[m[1]]=m[2].replace(/^["']|["']$/g,'');}
+const API=`https://${env.SHOPIFY_STORE}/admin/api/2024-10/graphql.json`;
+const LOCATION='gid://shopify/Location/5795643504';
+const APPLY=process.argv.includes('--apply');
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let t=0;t<5;t++){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':env.SHOPIFY_ADMIN_TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2000);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000);continue;}return j;}throw new Error('throttled out');}
+
+const sixteen=JSON.parse(fs.readFileSync('/tmp/sl16.json','utf8'));
+const isPaste=p=>/paste tub|paste\b.*accessory|accessory.*paste/i.test(p.title);
+const wallcoverings=sixteen.filter(p=>!isPaste(p));
+const held=sixteen.filter(isPaste);
+console.log(`16 sample-only: ${wallcoverings.length} wallcoverings → Showroom Lines | ${held.length} paste-tub accessories HELD`);
+held.forEach(p=>console.log(` HOLD: ${p.title.slice(0,44)}`));
+console.log(`\n${APPLY?'APPLYING':'DRY-RUN'} on ${wallcoverings.length} wallcoverings\n`);
+if(!APPLY){wallcoverings.forEach(p=>console.log(` would SL: ${p.title.slice(0,44)} | ${p.variants.nodes.length}var`));process.exit(0);}
+
+const M_TAG=`mutation($id:ID!,$tags:[String!]!){tagsAdd(id:$id,tags:$tags){userErrors{message}}}`;
+const M_MF=`mutation($mf:[MetafieldsSetInput!]!){metafieldsSet(metafields:$mf){userErrors{field message}}}`;
+const M_STATUS=`mutation($id:ID!){productUpdate(input:{id:$id,status:ACTIVE}){product{status} userErrors{message}}}`;
+const M_INV=`mutation($input:InventorySetQuantitiesInput!){inventorySetQuantities(input:$input){userErrors{message}}}`;
+let ok=0,fail=0;const errs=[];
+for(const p of wallcoverings){
+ try{
+ let r=await gql(M_TAG,{id:p.id,tags:['Showroom Line']}); if(r.data?.tagsAdd?.userErrors?.length)throw new Error('tag:'+JSON.stringify(r.data.tagsAdd.userErrors));
+ r=await gql(M_MF,{mf:[{ownerId:p.id,namespace:'custom',key:'showroom_line',value:'true',type:'boolean'}]}); if(r.data?.metafieldsSet?.userErrors?.length)throw new Error('mf:'+JSON.stringify(r.data.metafieldsSet.userErrors));
+ r=await gql(M_STATUS,{id:p.id}); if(r.data?.productUpdate?.userErrors?.length)throw new Error('status:'+JSON.stringify(r.data.productUpdate.userErrors));
+ const quantities=p.variants.nodes.map(v=>({inventoryItemId:v.inventoryItem.id,locationId:LOCATION,quantity:2026}));
+ r=await gql(M_INV,{input:{reason:'correction',name:'available',ignoreCompareQuantity:true,quantities}}); if(r.data?.inventorySetQuantities?.userErrors?.length)throw new Error('inv:'+JSON.stringify(r.data.inventorySetQuantities.userErrors));
+ ok++; console.log(` ✓ ${p.title.slice(0,42)} | Showroom Line + ACTIVE + inv2026 x${quantities.length}`);
+ }catch(e){fail++;errs.push(`${p.handle}: ${e.message}`);console.log(` ✗ ${p.title.slice(0,42)} — ${e.message.slice(0,90)}`);}
+ await sleep(350);
+}
+console.log(`\nDONE: ${ok} showroom-lined, ${fail} failed`);
+if(errs.length)console.log(errs.join('\n'));
+fs.writeFileSync('scripts/activate-1838/showroom-run.json',JSON.stringify({ts:new Date().toISOString(),ok,fail,held:held.map(h=>h.title),handles:wallcoverings.map(w=>w.handle),errs},null,2));
diff --git a/scripts/activate-1838/activate-1838.mjs b/scripts/activate-1838/activate-1838.mjs
new file mode 100644
index 0000000..c2542dc
--- /dev/null
+++ b/scripts/activate-1838/activate-1838.mjs
@@ -0,0 +1,43 @@
+// Activate 1838 Wallcoverings drafts (Steve-authorized 2026-06-16).
+// Gate: only real-priced (maxVariant > $5); sample-only ($4.25-only) are SKIPPED.
+// Per product: status DRAFT->ACTIVE (channels auto-publish), inventory=2026 BOTH variants.
+// --apply to write; default dry-run. --limit N to cap. --pilot = 5.
+import fs from 'fs'; import os from 'os';
+const env={}; for(const l of fs.readFileSync(os.homedir()+'/Projects/secrets-manager/.env','utf8').split('\n')){const m=l.match(/^([A-Z0-9_]+)=(.*)$/);if(m)env[m[1]]=m[2].replace(/^["']|["']$/g,'');}
+const API=`https://${env.SHOPIFY_STORE}/admin/api/2024-10/graphql.json`;
+const LOCATION='gid://shopify/Location/5795643504'; // canonical inventory loc (qty 2026 on live products)
+const APPLY=process.argv.includes('--apply');
+const PILOT=process.argv.includes('--pilot');
+const limArg=process.argv.find(a=>a.startsWith('--limit='));
+const LIMIT=PILOT?5:(limArg?parseInt(limArg.split('=')[1]):99999);
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let t=0;t<5;t++){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':env.SHOPIFY_ADMIN_TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2000);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000);continue;}return j;}throw new Error('throttled out');}
+
+// 1. gather all draft 1838 with variant inventoryItem ids
+let cursor=null, prods=[];
+const Q=`query($c:String){products(first:100,after:$c,query:"vendor:'1838 Wallcoverings' status:draft"){pageInfo{hasNextPage endCursor} nodes{id title handle priceRangeV2{maxVariantPrice{amount}} variants(first:10){nodes{id inventoryItem{id tracked}}}}}}`;
+do{const d=await gql(Q,{c:cursor});const pg=d.data.products;prods.push(...pg.nodes);cursor=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;}while(cursor);
+const real=prods.filter(p=>parseFloat(p.priceRangeV2.maxVariantPrice.amount)>5);
+const sampleOnly=prods.filter(p=>parseFloat(p.priceRangeV2.maxVariantPrice.amount)<=5);
+console.log(`draft 1838: ${prods.length} | real-priced(eligible): ${real.length} | sample-only(SKIP): ${sampleOnly.length}`);
+const targets=real.slice(0,LIMIT);
+console.log(`${APPLY?'APPLYING':'DRY-RUN'} on ${targets.length} products${PILOT?' (PILOT)':''}\n`);
+if(!APPLY){ targets.slice(0,8).forEach(p=>console.log(` would activate: ${p.title.slice(0,40)} | $${p.priceRangeV2.maxVariantPrice.amount} | ${p.variants.nodes.length}var`)); console.log('\n(dry-run, no writes)'); process.exit(0); }
+
+const M_STATUS=`mutation($id:ID!){productUpdate(input:{id:$id,status:ACTIVE}){product{id status} userErrors{field message}}}`;
+const M_INV=`mutation($input:InventorySetQuantitiesInput!){inventorySetQuantities(input:$input){userErrors{field message}}}`;
+let ok=0,fail=0;const errs=[];
+for(const p of targets){
+ try{
+ const s=await gql(M_STATUS,{id:p.id});
+ const se=s.data?.productUpdate?.userErrors||[]; if(se.length)throw new Error('status: '+JSON.stringify(se));
+ const quantities=p.variants.nodes.map(v=>({inventoryItemId:v.inventoryItem.id,locationId:LOCATION,quantity:2026}));
+ const iv=await gql(M_INV,{input:{reason:'correction',name:'available',ignoreCompareQuantity:true,quantities}});
+ const ie=iv.data?.inventorySetQuantities?.userErrors||[]; if(ie.length)throw new Error('inv: '+JSON.stringify(ie));
+ ok++; console.log(` ✓ ${p.title.slice(0,42)} | ACTIVE + inv2026 x${quantities.length}`);
+ }catch(e){fail++;errs.push(`${p.handle}: ${e.message}`);console.log(` ✗ ${p.title.slice(0,42)} — ${e.message.slice(0,80)}`);}
+ await sleep(350);
+}
+console.log(`\nDONE: ${ok} activated, ${fail} failed`);
+if(errs.length)console.log('errors:\n'+errs.join('\n'));
+fs.writeFileSync('scripts/activate-1838/last-run.json',JSON.stringify({ts:new Date().toISOString(),apply:APPLY,ok,fail,handles:targets.map(t=>t.handle),errs},null,2));
diff --git a/scripts/af-reimage/republish.py b/scripts/af-reimage/republish.py
new file mode 100644
index 0000000..4d18947
--- /dev/null
+++ b/scripts/af-reimage/republish.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+"""Republish the 23 re-imaged Anna French products DRAFT->ACTIVE. GATED: needs --apply.
+Idempotent: skips products that aren't draft or have no image (never ACTIVE-without-image).
+Source images were attached from Thibaut's trade-auth CDN (d2g31xe1...cloudfront/products/2520x2520/<sku>.jpg).
+"""
+import json,urllib.request,sys,os,time
+APPLY='--apply' in sys.argv
+SEC=os.path.expanduser('~/Projects/secrets-manager/.env')
+TOKEN=next((l.split('=',1)[1].strip().strip('"\'') for l in open(SEC) if l.upper().startswith('SHOPIFY_ADMIN_TOKEN=')),None)
+STORE='designer-laboratory-sandbox.myshopify.com'
+ready=json.load(open(os.path.join(os.path.dirname(__file__),'af23-republish-ready.json')))
+print(f"{'APPLY' if APPLY else 'DRY-RUN'} · {len(ready)} Anna French products draft->active")
+flipped=0
+for r in ready:
+ pid=r['pid']
+ p=json.load(urllib.request.urlopen(urllib.request.Request(f"https://{STORE}/admin/api/2024-04/products/{pid}.json?fields=id,status,images",headers={'X-Shopify-Access-Token':TOKEN}),timeout=20))['product']
+ if p['status']=='active': print(f" ~ {r['sku']} already active"); continue
+ if len(p['images'])==0: print(f" ! {r['sku']} has NO image — refusing to activate"); continue
+ if not APPLY: print(f" • would activate {r['sku']} ({r['title']})"); continue
+ body=json.dumps({"product":{"id":int(pid),"status":"active"}}).encode()
+ req=urllib.request.Request(f"https://{STORE}/admin/api/2024-04/products/{pid}.json",data=body,method='PUT',headers={'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'})
+ json.load(urllib.request.urlopen(req,timeout=30)); flipped+=1; print(f" ✓ activated {r['sku']}"); time.sleep(0.5)
+print(f"done. {'activated '+str(flipped) if APPLY else 'dry-run, nothing changed'}")
diff --git a/scripts/ai-preamble-leak-sweep/ai-preamble-leak-sweep.mjs b/scripts/ai-preamble-leak-sweep/ai-preamble-leak-sweep.mjs
new file mode 100644
index 0000000..c335247
--- /dev/null
+++ b/scripts/ai-preamble-leak-sweep/ai-preamble-leak-sweep.mjs
@@ -0,0 +1,64 @@
+// ai-preamble-leak-sweep — READ-ONLY, $0. Cycle 91. Finds the genuine customer-facing defect: LLM
+// scaffolding/preamble leaked into live product descriptions ("Here is a description...", "Certainly!
+// Here's...", "As an AI...", "I hope this helps", "Below is a...") = the body-text analogue of a blank PDP.
+// Tiered patterns (HIGH-confidence vs WEAK) to control false positives; captures a snippet per hit for
+// human verification. ALSO counts the live "Wallpaper" title blast-radius as CONTEXT (NOT a defect, NOT
+// reopening GMC). NEGATIVE CONTROL: the bulk of bodies have no preamble -> a leak is a true anomaly. EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+// HIGH-confidence LLM-preamble patterns (low false-positive)
+const HIGH=[
+ /\bas an ai\b/i,
+ /\bas a language model\b/i,
+ /\bi(?:'m| am) (?:sorry|unable|just an ai|happy to (?:help|provide|assist))/i,
+ /\bi (?:cannot|can(?:'|no)t) (?:assist|help|provide|fulfill|generate)/i,
+ /\bcertainly[!,.]?\s+(?:here|i|below)/i,
+ /\bsure[!,]\s+(?:here|i|below)/i,
+ /\bhere(?:'s| is) (?:a|an|the|your) (?:description|revised|rewritten|product description|seo|updated|enhanced)/i,
+ /\bhere(?:'s| is) (?:a|an|the) (?:possible|sample|suggested)/i,
+ /\bbelow is (?:a|an|the) (?:description|revised|rewritten|product)/i,
+ /\bi hope this helps\b/i,
+ /\b(?:revised|rewritten) (?:product )?description:/i,
+ /\bas requested,?\s+(?:here|i|below)/i,
+ /\[insert [a-z ]+\]/i,
+];
+// WEAK patterns (flag separately; higher false-positive)
+const WEAK=[ /\bhere(?:'s| is) (?:a|an|the|your)\b/i, /\blet me know if\b/i, /\bfeel free to\b/i ];
+const stripHtml=h=>(h||'').replace(/<[^>]+>/g,' ').replace(/&[a-z]+;/g,' ').replace(/\s+/g,' ').trim();
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor descriptionHtml } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let high=0, weakOnly=0, wallpaperTitle=0, emptyBody=0;
+const highByVendor={}, highEx=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ if(/wallpaper/i.test(n.title||'')) wallpaperTitle++;
+ const body=stripHtml(n.descriptionHtml);
+ if(!body){ emptyBody++; continue; }
+ const hi=HIGH.find(rx=>rx.test(body));
+ if(hi){ high++; highByVendor[n.vendor]=(highByVendor[n.vendor]||0)+1;
+ if(highEx.length<30){ const m=body.match(hi); const at=Math.max(0,(m.index||0)-20); highEx.push({t:(n.title||'').slice(0,40),vendor:n.vendor,pat:hi.source.slice(0,30),snip:body.slice(at,at+90)}); } }
+ else if(WEAK.some(rx=>rx.test(body))) weakOnly++;
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} high-preamble=${high}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(3):'0';
+console.log(`\n=== ai-preamble-leak-sweep (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nAI-PREAMBLE LEAK (the defect):`);
+console.log(` HIGH-confidence preamble in live body: ${high} (${pct(high)}%)`);
+console.log(` WEAK-only (needs human review, higher false-positive): ${weakOnly} (${pct(weakOnly)}%)`);
+console.log(` empty/no body: ${emptyBody}`);
+console.log(` NEGATIVE CONTROL: ${scanned-high-weakOnly} bodies with no preamble -> a HIGH hit is a true anomaly.`);
+console.log(`\nCONTEXT (NOT a defect, NOT GMC): live titles containing 'Wallpaper': ${wallpaperTitle} (${pct(wallpaperTitle)}%) [brand-hygiene debt, Steve-gated bulk rewrite]`);
+console.log(`\nHIGH-preamble by vendor (top 15):`); Object.entries(highByVendor).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nHIGH-preamble examples (snippet for verification):`); highEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] /${x.pat}/ => "...${x.snip}..."`));
+fs.writeFileSync('/tmp/ai-preamble-leak-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,high,weakOnly,emptyBody,wallpaperTitle,highByVendor,highEx},null,2));
+console.log(`\nwrote /tmp/ai-preamble-leak-sweep.json`);
diff --git a/scripts/ai-preamble-leak-sweep/body-start-classifier.mjs b/scripts/ai-preamble-leak-sweep/body-start-classifier.mjs
new file mode 100644
index 0000000..56ea272
--- /dev/null
+++ b/scripts/ai-preamble-leak-sweep/body-start-classifier.mjs
@@ -0,0 +1,23 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(1500*(a+1));continue;}return r.json();}return null;}
+const PJ=/phillip[- ]?jeffries/i;
+const strip=h=>(h||'').replace(/<[^>]+>/g,' ').replace(/\s+/g,' ').trim();
+// genuine-preamble = "here is/here's" appears at the START of the body or right before a colon/description word
+const GENUINE=/^(?:okay,?\s*|sure,?\s*|certainly,?\s*)?here(?:'s| is)\b.{0,40}(?:description|:|product|below|revised|seo|following)/i;
+const HEREIS=/here(?:'s| is)\b/i;
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor} edges{node{ title vendor descriptionHtml }} } }`;
+let cursor=null,scanned=0,genuineStart=0; const ex=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++; const b=strip(n.descriptionHtml); if(!b||!HEREIS.test(b))continue;
+ const head=b.slice(0,80);
+ // classify: does the body START with a preamble, or does "here is" appear mid-copy?
+ const startsPreamble = GENUINE.test(b.slice(0,120)) || /^(okay|sure|certainly)[,!: ]/i.test(b) || /^here(?:'s| is)\b/i.test(b);
+ if(startsPreamble){ genuineStart++; if(ex.length<25) ex.push({t:(n.title||'').slice(0,38),vendor:n.vendor,head:head}); }
+ }
+ cursor=c.pageInfo.endCursor; if(!c.pageInfo.hasNextPage)break; const co=j.extensions?.cost?.throttleStatus; if(co&&co.currentlyAvailable<500)await sleep(1500); else await sleep(200); }
+console.log(`scanned ${scanned}; GENUINE preamble (body STARTS with here-is/okay/sure/certainly or here-is+description): ${genuineStart}`);
+ex.forEach(x=>console.log(` "${x.t}" [${x.vendor}] => "${x.head}"`));
diff --git a/scripts/ai-preamble-leak-sweep/broad-net-bound.mjs b/scripts/ai-preamble-leak-sweep/broad-net-bound.mjs
new file mode 100644
index 0000000..2adcc48
--- /dev/null
+++ b/scripts/ai-preamble-leak-sweep/broad-net-bound.mjs
@@ -0,0 +1,28 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const PJ=/phillip[- ]?jeffries/i;
+// BROADER nets to bound the under-count: anywhere in body
+const BROAD=[
+ {k:'product description:', rx:/product description:/i},
+ {k:'here is/here\'s', rx:/here(?:'s| is)\b/i},
+ {k:'okay/sure/certainly start', rx:/\b(okay|sure|certainly)[,!:]/i},
+ {k:'as an ai / language model', rx:/\bas an ai\b|\blanguage model\b/i},
+ {k:'i hope/let me know/feel free', rx:/\bi hope this\b|\blet me know if\b|\bfeel free to\b/i},
+ {k:'description for the', rx:/description for the (wallcovering|wallpaper|product|fabric)/i},
+];
+const strip=h=>(h||'').replace(/<[^>]+>/g,' ').replace(/\s+/g,' ').trim();
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor} edges{node{ vendor descriptionHtml }} } }`;
+let cursor=null,pages=0,scanned=0; const cnt={}; BROAD.forEach(b=>cnt[b.k]=0); let anyBroad=0; const anyByVendor={};
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++; const b=strip(n.descriptionHtml); if(!b)continue;
+ let hit=false; for(const p of BROAD){ if(p.rx.test(b)){ cnt[p.k]++; hit=true; } }
+ if(hit){ anyBroad++; anyByVendor[n.vendor]=(anyByVendor[n.vendor]||0)+1; } }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; const co=j.extensions?.cost?.throttleStatus; if(co&&co.currentlyAvailable<500)await sleep(1500); else await sleep(200); }
+console.log(`scanned ${scanned} active bodies`);
+console.log(`ANY broad-preamble hit: ${anyBroad}`);
+Object.entries(cnt).forEach(([k,v])=>console.log(` [${k}] ${v}`));
+console.log(`broad-hit by vendor (top 12):`); Object.entries(anyByVendor).sort((a,b)=>b[1]-a[1]).slice(0,12).forEach(([v,n])=>console.log(` ${v}: ${n}`));
diff --git a/scripts/ai-preamble-leak-sweep/wallpaper-reconcile.mjs b/scripts/ai-preamble-leak-sweep/wallpaper-reconcile.mjs
new file mode 100644
index 0000000..c6353e6
--- /dev/null
+++ b/scripts/ai-preamble-leak-sweep/wallpaper-reconcile.mjs
@@ -0,0 +1,11 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+async function gql(q,v){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});return r.json();}
+// independent mechanism: Shopify search query for title containing wallpaper, vs an active baseline.
+async function count(q){ const j=await gql(`query($q:String){ productsCount(query:$q){ count } }`,{q}); return j.data?.productsCount?.count ?? ('ERR '+JSON.stringify(j.errors)); }
+console.log("active total:", await count("status:active"));
+console.log("active title:*Wallpaper*:", await count("status:active title:Wallpaper*"));
+console.log("active (any-field) Wallpaper:", await count("status:active Wallpaper"));
+console.log("active title:*Wallcovering*:", await count("status:active title:Wallcovering*"));
diff --git a/scripts/alt-text-coverage/alt-text-coverage-audit.mjs b/scripts/alt-text-coverage/alt-text-coverage-audit.mjs
new file mode 100644
index 0000000..cacc175
--- /dev/null
+++ b/scripts/alt-text-coverage/alt-text-coverage-audit.mjs
@@ -0,0 +1,129 @@
+// alt-text-coverage-audit — read-only Shopify GraphQL audit of image ALT-TEXT
+// coverage per vendor. The image-QUALITY companion to the c26 metafield audit:
+// c26 proved image PRESENCE is ~100% across repped vendors, but presence != quality.
+// Alt text is the highest-leverage image-quality attribute — it drives Google
+// Images discovery (organic traffic for a visual wallcovering catalog) AND is a
+// WCAG accessibility requirement. One read-only count, dual payoff.
+//
+// Per ACTIVE product (capped at first:IMG images/product): all-alt / some-alt /
+// no-alt; plus an image-level alt %. Vendors tagged repped from vendor_registry.
+//
+// node alt-text-coverage-audit.mjs [--min 85] [--page 100] [--img 10]
+// READ-ONLY (GraphQL queries only, no mutations). $0.
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+
+const args=process.argv.slice(2);
+const MIN =parseInt(args.find((_,i,a)=>a[i-1]==='--min')||'85',10)||85; // WARN threshold: repped vendor all-alt% below this
+const PAGE=parseInt(args.find((_,i,a)=>a[i-1]==='--page')||'100',10)||100;
+const IMG =parseInt(args.find((_,i,a)=>a[i-1]==='--img')||'10',10)||10; // images sampled per product (gallery cap)
+const SHOP='designer-laboratory-sandbox.myshopify.com', VERSION='2024-10';
+const ENV=fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env','utf8');
+const TOKEN=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+if(!TOKEN){console.error('no SHOPIFY_ADMIN_TOKEN');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VERSION}/graphql.json`;
+const OUT=`${process.env.HOME}/.claude/yolo-queue/alt-text-coverage-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/alt-text-coverage-2026-06-16.md`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+
+function reppedTags(){
+ const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql', DB='postgresql:///dw_unified?host=/tmp';
+ let rows=[];
+ try{
+ const out=execFileSync(PSQL,[DB,'-At','-F','\t','-c',
+ "select lower(vendor_name), is_active, is_private_label, coalesce(discount_confirmed,false) from vendor_registry;"],{encoding:'utf8'});
+ rows=out.trim().split('\n').filter(Boolean).map(l=>l.split('\t'));
+ }catch(e){ console.error('warn: vendor_registry read failed ('+e.message.slice(0,40)+')'); }
+ const m=new Map();
+ for(const [name,act,pl,disc] of rows) m.set(name,{repped: act==='t'&&pl!=='t'&&disc==='t', private_label: pl==='t'});
+ return m;
+}
+
+async function gql(q,v){
+ for(let a=0;a<8;a++){
+ let res; try{ res=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})}); }
+ catch(e){ await sleep(2000*(a+1)); continue; }
+ if(res.status===429){ await sleep(2000*(a+1)); continue; }
+ const j=await res.json();
+ if(j.errors){ if(JSON.stringify(j.errors).match(/THROTTLED|exceeded/i)){ await sleep(2500*(a+1)); continue;} throw new Error(JSON.stringify(j.errors).slice(0,200)); }
+ if((j.extensions?.cost?.throttleStatus?.currentlyAvailable??2000)<300) await sleep(1500);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const QUERY=`query($cursor:String){
+ products(first:${PAGE}, after:$cursor, query:"status:active"){
+ pageInfo{ hasNextPage endCursor }
+ nodes{ vendor images(first:${IMG}){ nodes{ altText } } }
+ }
+}`;
+
+function blank(){return {n:0, withImg:0, allAlt:0, someAlt:0, noAlt:0, imgTot:0, imgAlt:0};}
+
+(async()=>{
+ const tags=reppedTags();
+ const byVendor=new Map();
+ let cursor=null, total=0, pages=0; const t0=Date.now();
+ while(true){
+ const d=await gql(QUERY,{cursor}); const c=d.products;
+ for(const p of c.nodes){
+ total++;
+ const v=p.vendor||'(none)';
+ if(!byVendor.has(v)) byVendor.set(v,blank());
+ const s=byVendor.get(v); s.n++;
+ const imgs=p.images.nodes; if(!imgs.length) continue;
+ s.withImg++;
+ const withAlt=imgs.filter(i=>i.altText && i.altText.trim()).length;
+ s.imgTot+=imgs.length; s.imgAlt+=withAlt;
+ if(withAlt===imgs.length) s.allAlt++; else if(withAlt>0) s.someAlt++; else s.noAlt++;
+ }
+ pages++;
+ if(pages%50===0) process.stderr.write(` ...${pages} pages, ${total} products, ${byVendor.size} vendors\n`);
+ if(!c.pageInfo.hasNextPage) break;
+ cursor=c.pageInfo.endCursor;
+ }
+ const elapsed=((Date.now()-t0)/1000).toFixed(1);
+ const pct=(x,n)=>n?Math.round(1000*x/n)/10:0;
+
+ const vendors=[...byVendor.entries()].map(([vendor,s])=>{
+ const t=tags.get(vendor.toLowerCase())||null;
+ return { vendor, repped:t?.repped??null, private_label:t?.private_label??null,
+ active_products:s.n, with_image:s.withImg,
+ all_alt_pct:pct(s.allAlt,s.withImg), no_alt_pct:pct(s.noAlt,s.withImg),
+ some_alt_pct:pct(s.someAlt,s.withImg), img_alt_pct:pct(s.imgAlt,s.imgTot),
+ products_no_alt:s.noAlt };
+ }).sort((a,b)=>b.active_products-a.active_products);
+
+ const reppedV=vendors.filter(v=>v.repped===true);
+ const gaps=reppedV.filter(v=>v.with_image>=50 && v.all_alt_pct<MIN).sort((a,b)=>b.products_no_alt-a.products_no_alt);
+
+ const report={ generated_at:new Date().toISOString(), scanned_active:total, pages, elapsed_s:+elapsed,
+ images_per_product_cap:IMG, warn_below_pct:MIN, vendor_count:vendors.length,
+ repped_vendor_count:reppedV.length, repped_gap_count:gaps.length, repped_gaps:gaps, vendors };
+ fs.writeFileSync(OUT, JSON.stringify(report,null,2));
+
+ const sum=(arr,k)=>arr.reduce((a,v)=>a+v[k]*v.with_image,0);
+ const totR=reppedV.reduce((a,v)=>a+v.with_image,0)||1;
+ const wAllAlt=Math.round(10*sum(reppedV,'all_alt_pct')/totR)/10;
+ const wImgAlt=Math.round(10*sum(reppedV,'img_alt_pct')/totR)/10;
+
+ let md=`# Shopify image ALT-TEXT coverage audit (repped vendors) — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md+=`**READ-ONLY (GraphQL, no writes), \$0.** Scanned **${total}** ACTIVE products in ${elapsed}s (${pages} pages, ${IMG} images/product cap). `;
+ md+=`Image-QUALITY companion to the c26 presence audit (presence was ~100%; this measures whether those images are discoverable + accessible). Alt text → Google Images SEO + WCAG.\n\n`;
+ md+=`Repped = vendor_registry is_active AND NOT private_label AND discount_confirmed. Repped vendors with images: **${reppedV.length}** (${totR} products).\n\n`;
+ md+=`## Weighted repped coverage\n| Axis | Coverage |\n|---|---:|\n| products with ALL images alt'd | ${wAllAlt}% |\n| image-level (every image) alt'd | ${wImgAlt}% |\n\n`;
+ md+=`## 🔴 Repped vendors below ${MIN}% all-alt (≥50 products w/ images) — ${gaps.length}\n`;
+ md+=`| Vendor | Products w/img | all-alt% | no-alt% | img-level alt% | products w/ NO alt |\n|---|---:|---:|---:|---:|---:|\n`;
+ for(const v of gaps) md+=`| ${v.vendor} | ${v.with_image} | ${v.all_alt_pct} | ${v.no_alt_pct} | ${v.img_alt_pct} | ${v.products_no_alt} |\n`;
+ md+=`\n## All vendors (top 50 by active count)\n`;
+ md+=`| Vendor | Repped | Products w/img | all-alt% | no-alt% | img-level alt% |\n|---|:--:|---:|---:|---:|---:|\n`;
+ for(const v of vendors.slice(0,50)) md+=`| ${v.vendor} | ${v.repped===true?'✓':v.repped===false?'·':'?'} | ${v.with_image} | ${v.all_alt_pct} | ${v.no_alt_pct} | ${v.img_alt_pct} |\n`;
+ md+=`\n_all-alt% = products where EVERY image (up to ${IMG}) has non-empty alt. no-alt% = products with images but zero alt. img-level alt% = fraction of all images carrying alt. Galleries >${IMG} images are sampled at ${IMG} (may slightly overstate all-alt)._\n`;
+ fs.writeFileSync(MD,md);
+
+ console.log(`[alt-text-coverage] scanned=${total} vendors=${vendors.length} repped=${reppedV.length} gaps=${gaps.length}`);
+ console.log(` weighted repped: all-alt ${wAllAlt}% · img-level ${wImgAlt}%`);
+ console.log(`Report: ${MD}`);
+ process.exit(0);
+})().catch(e=>{console.error('FATAL',e.message);process.exit(1);});
diff --git a/scripts/anna-french-rolls/af-build-noroll.js b/scripts/anna-french-rolls/af-build-noroll.js
new file mode 100644
index 0000000..da47087
--- /dev/null
+++ b/scripts/anna-french-rolls/af-build-noroll.js
@@ -0,0 +1,94 @@
+'use strict';
+/* Build the missing "Sold Per Roll" variant for Anna French sample-only products that the
+ reprice pass logged as no-roll (out/af-reprice-noroll.jsonl). Price = NEW single-roll basis
+ retail x 0.45 / 0.65 / 0.85 (cost=retail×0.45, sell=cost/0.65/0.85), from anna_french_catalog.
+ Per product: re-verify LIVE sample-only (1 variant <= $4.255) + Size-option, then add ONE
+ "Sold Per Roll" variant (sku = sample sku minus -SAMPLE) and set custom.packaging note.
+ Guards: PRICE_CAP $2000, Title-option hard-skip (migration needed, eats the sample),
+ daily variant-cap abort (exit 3, resumable), done-file. DRY unless COMMIT=1. REPRICE_LIMIT=N canary. */
+const fs = require('fs');
+const { execSync } = require('child_process');
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PGENV = { PGHOST: '/tmp', PGPORT: '5432', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' };
+const DIR = __dirname + '/out';
+const NOROLL = DIR + '/af-reprice-noroll.jsonl';
+const DONE = DIR + '/af-build-noroll-done.txt';
+const CREATED = DIR + '/af-build-noroll-created.jsonl';
+const SKIPPED = DIR + '/af-build-noroll-skipped.jsonl';
+const COMMIT = process.env.COMMIT === '1';
+const LIMIT = parseInt(process.env.REPRICE_LIMIT || '0', 10) || Infinity;
+const PRICE_CAP = 2000;
+const LIMIT_RE = /exceed|daily.*limit|limit.*reached|too many|cap/i;
+const PKG = 'Sold by the single roll; packaged in double roll.';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 7; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(EP, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted');
+}
+const VERIFY = `query($id:ID!){ product(id:$id){ status options{name} variants(first:5){nodes{sku price}} packaging:metafield(namespace:"custom",key:"packaging"){value} } }`;
+const MUT = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$variants){ productVariants{ id price sku } userErrors{ message } } }`;
+const META = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{ message } } }`;
+
+function priceMap() { // mfr_sku -> new single-roll price
+ const raw = execSync(`psql -tAc "select upper(mfr_sku), round(price_retail*0.45/0.65/0.85,2) from anna_french_catalog where price_retail>0"`, { env: PGENV, encoding: 'utf8' });
+ const m = {}; for (const l of raw.split('\n').filter(Boolean)) { const [k, p] = l.split('|'); m[k] = parseFloat(p); } return m;
+}
+
+(async () => {
+ const pm = priceMap();
+ const rows = fs.readFileSync(NOROLL, 'utf8').split('\n').filter(Boolean).map(JSON.parse);
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+ const todo = rows.filter(r => !done.has(r.sid)).slice(0, LIMIT);
+ console.log(`mode=${COMMIT ? 'COMMIT' : 'DRY'} noroll=${rows.length} done=${done.size} todo=${todo.length}${LIMIT !== Infinity ? ' (limit ' + LIMIT + ')' : ''}`);
+ const doneS = fs.createWriteStream(DONE, { flags: 'a' }), crS = fs.createWriteStream(CREATED, { flags: 'a' }), skS = fs.createWriteStream(SKIPPED, { flags: 'a' });
+ const t = { made: 0, titleOpt: 0, notSample: 0, noPrice: 0, gone: 0, err: 0 };
+ for (const r of todo) {
+ const gid = r.sid.startsWith('gid://') ? r.sid : `gid://shopify/Product/${r.sid}`;
+ const price = pm[(r.mfr || '').toUpperCase()];
+ if (!(price > 0 && price < PRICE_CAP)) { t.noPrice++; skS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, reason: 'no/oob-price' }) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ const lk = await g(VERIFY, { id: gid });
+ const p = lk.data && lk.data.product;
+ if (!p || p.status !== 'ACTIVE') { t.gone++; if (COMMIT) doneS.write(r.sid + '\n'); skS.write(JSON.stringify({ sid: r.sid, reason: 'not-active' }) + '\n'); continue; }
+ const optName = (p.options[0] && p.options[0].name) || 'Size';
+ if (optName !== 'Size') { t.titleOpt++; skS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, reason: 'title-option-needs-migration' }) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ const vs = p.variants.nodes;
+ if (!(vs.length === 1 && parseFloat(vs[0].price) <= 4.255)) { t.notSample++; skS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, reason: 'not-sample-only', vs: vs.map(v => ({ sku: v.sku, price: v.price })) }) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ const base = String(vs[0].sku || '').replace(/-SAMPLE$/i, '');
+ if (!COMMIT) { t.made++; console.log(` DRY would build ${base} "Sold Per Roll" $${price} ${r.title}`); continue; }
+ const variants = [{ price: String(price), optionValues: [{ optionName: 'Size', name: 'Sold Per Roll' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: base, tracked: false } }];
+ const rr = await g(MUT, { pid: gid, variants });
+ const res = rr.data && rr.data.productVariantsBulkCreate;
+ const e = (res && res.userErrors) || [];
+ if (e.length) {
+ if (LIMIT_RE.test(JSON.stringify(e))) { console.log('daily variant-cap hit — aborting (resumable):', JSON.stringify(e)); break; }
+ t.err++; skS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, reason: 'err:' + JSON.stringify(e) }) + '\n'); continue;
+ }
+ // self-heal guard: confirm the $4.25 sample still exists (named-variant add can migrate a default variant)
+ const chk = await g(VERIFY, { id: gid });
+ const cvs = (chk.data && chk.data.product && chk.data.product.variants.nodes) || [];
+ const sampleAlive = cvs.some(v => parseFloat(v.price) <= 4.255);
+ if (!sampleAlive) skS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, warn: 'SAMPLE-MISSING-AFTER-BUILD', vs: cvs.map(v => ({ sku: v.sku, price: v.price })) }) + '\n');
+ // packaging metafield
+ if (!(p.packaging && p.packaging.value)) await g(META, { mf: [{ ownerId: gid, namespace: 'custom', key: 'packaging', type: 'single_line_text_field', value: PKG }] });
+ const nv = res.productVariants[0];
+ t.made++; doneS.write(r.sid + '\n');
+ crS.write(JSON.stringify({ sid: r.sid, mfr: r.mfr, variantId: nv.id, sku: nv.sku, price: nv.price, sampleAlive, title: r.title }) + '\n');
+ console.log(` +${t.made} ${nv.sku} "Sold Per Roll" $${nv.price} sample=${sampleAlive ? 'ok' : 'GONE!'} ${String(r.title).slice(0, 36)}`);
+ await sleep(320);
+ }
+ doneS.end(); crS.end(); skS.end();
+ console.log('\n' + JSON.stringify(t, null, 2));
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/anna-french-rolls/af-build.js b/scripts/anna-french-rolls/af-build.js
new file mode 100644
index 0000000..b39ceb6
--- /dev/null
+++ b/scripts/anna-french-rolls/af-build.js
@@ -0,0 +1,81 @@
+'use strict';
+/* Anna French roll/yard variant builder — works off LIVE plan (af-build-plan.jsonl),
+ NOT the stale mirror SKU. Thibaut price structure (per Steve 2026-06-17).
+ Per product: re-verify LIVE it is still sample-only (1 variant <= $4.255), then add ONE
+ variant — "Sold Per Roll" (wallcovering) or "Sold Per Yard" (fabric) — at the resolved price.
+ Roll/yard variant sku = base (sample sku minus -SAMPLE). Never touches the $4.25 sample,
+ never flips ACTIVE. Guards: PRICE_CAP $2000 hold, daily-limit abort, resumable done-file,
+ ROLL_CAP ceiling (default 5 — bump to scale). exit 3 if cap hit (resumable). */
+const fs = require('fs');
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PLAN = __dirname + '/out/af-build-plan.jsonl';
+const DONE = __dirname + '/out/af-build-done.txt';
+const CREATED = __dirname + '/out/af-build-created.jsonl';
+const SKIPPED = __dirname + '/out/af-build-skipped.jsonl';
+const CAP = parseInt(process.env.ROLL_CAP || '5', 10);
+const PRICE_CAP = parseFloat(process.env.ROLL_PRICE_CAP || '2000');
+const LIMIT_RE = /exceed|daily.*limit|limit.*reached|throttl|too many/i;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 7; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(EP, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted');
+}
+const VERIFY = `query($id:ID!){ product(id:$id){ status options{name} variants(first:5){nodes{sku price}} } }`;
+const MUT = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$variants){ productVariants{ id price sku } userErrors{ message } } }`;
+const MFSET = `mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ userErrors{ message } } }`;
+
+(async () => {
+ // Only build clean Size-option products. Default-"Title" products migrate the lone default
+ // variant when a named value is added (it ate one $4.25 sample) — they need a separate
+ // option-migration path, so hard-skip them here.
+ const rows = fs.readFileSync(PLAN, 'utf8').split('\n').filter(Boolean).map(JSON.parse)
+ .filter(r => r.buildable && r.price > 0 && r.price < PRICE_CAP && r.optName === 'Size');
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+ const todo = rows.filter(r => !done.has(r.id));
+ console.log(`buildable<cap=${rows.length} done=${done.size} todo=${todo.length} ROLL_CAP=${CAP}`);
+ const doneS = fs.createWriteStream(DONE, { flags: 'a' }), crS = fs.createWriteStream(CREATED, { flags: 'a' }), skS = fs.createWriteStream(SKIPPED, { flags: 'a' });
+ let made = 0, skipped = 0, aborted = false;
+ for (const r of todo) {
+ const lk = await g(VERIFY, { id: r.id });
+ const p = lk.data && lk.data.product;
+ if (!p || p.status !== 'ACTIVE') { skipped++; doneS.write(r.id + '\n'); skS.write(JSON.stringify({ id: r.id, reason: 'not-active-or-gone' }) + '\n'); continue; }
+ const optName = (p.options[0] && p.options[0].name) || r.optName || 'Size';
+ if (optName !== 'Size') { skipped++; doneS.write(r.id + '\n'); skS.write(JSON.stringify({ id: r.id, sku: r.sampleSku, reason: 'title-option-needs-migration' }) + '\n'); continue; }
+ const vs = p.variants.nodes;
+ if (!(vs.length === 1 && parseFloat(vs[0].price) <= 4.255)) { skipped++; doneS.write(r.id + '\n'); skS.write(JSON.stringify({ id: r.id, sku: r.sampleSku, reason: 'not-sample-only(has variant?)' }) + '\n'); continue; }
+ const base = String(r.sampleSku || '').replace(/-SAMPLE$/i, '');
+ const variants = [{ price: String(r.price), optionValues: [{ optionName: optName, name: r.unit }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: base, tracked: false } }];
+ const rr = await g(MUT, { pid: r.id, variants });
+ const res = rr.data && rr.data.productVariantsBulkCreate;
+ const e = (res && res.userErrors) || [];
+ if (e.length) {
+ if (LIMIT_RE.test(JSON.stringify(e))) { console.log('daily-limit/throttle — aborting (resumable):', JSON.stringify(e)); aborted = true; break; }
+ skipped++; skS.write(JSON.stringify({ id: r.id, sku: r.sampleSku, reason: 'err:' + JSON.stringify(e) }) + '\n'); continue;
+ }
+ const nv = res.productVariants[0];
+ made++; doneS.write(r.id + '\n');
+ // write custom.length (single-roll, e.g. "16.5 ft") if the plan resolved one
+ if (r.lengthMf) { try { await g(MFSET, { m: [{ ownerId: r.id, namespace: 'custom', key: 'length', type: 'single_line_text_field', value: r.lengthMf }] }); } catch (e) {} }
+ crS.write(JSON.stringify({ id: r.id, variantId: nv.id, sku: nv.sku, price: nv.price, unit: r.unit, lengthMf: r.lengthMf, title: r.title }) + '\n');
+ console.log(` +${made} ${nv.sku} ${r.unit} $${nv.price} ${r.title.slice(0, 38)}`);
+ if (made >= CAP) { console.log(`\nROLL_CAP ${CAP} reached — stopping (resumable).`); break; }
+ await sleep(300);
+ }
+ doneS.end(); crS.end(); skS.end();
+ console.log(`\nRun done: ${made} built, ${skipped} skipped, ${todo.length - made - skipped} untouched.`);
+ if (made >= CAP) process.exit(3);
+ process.exit(aborted ? 0 : 0);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/anna-french-rolls/af-live-pull.js b/scripts/anna-french-rolls/af-live-pull.js
new file mode 100644
index 0000000..07a3dc0
--- /dev/null
+++ b/scripts/anna-french-rolls/af-live-pull.js
@@ -0,0 +1,100 @@
+'use strict';
+/* READ-ONLY: pull all live Anna French products from Shopify, classify sample-only,
+ unit (fabric=Yard / wallcovering=Roll), and resolve price from thibaut_catalog
+ (dw_retail_price) else anna_french_catalog (price_retail*0.8824), joined by mfr_sku.
+ Writes scripts/anna-french-rolls/out/af-build-plan.jsonl. NO writes to Shopify. */
+const fs = require('fs');
+const { execSync } = require('child_process');
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PGENV = { PGHOST: '/tmp', PGPORT: '5432', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' };
+const OUT = __dirname + '/out/af-build-plan.jsonl';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 7; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(EP, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted');
+}
+
+// price map by mfr_sku: prefer thibaut_catalog.dw_retail_price, else anna_french_catalog.price_retail*0.8824
+function priceMap() {
+ const raw = execSync(`psql -tAc "
+ SELECT mfr_sku, price, src FROM (
+ SELECT mfr_sku, dw_retail_price::text price, 'thibaut_dw_retail' src FROM thibaut_catalog WHERE dw_retail_price>0
+ UNION ALL
+ SELECT mfr_sku, round(price_retail*0.8824,2)::text, 'af_retail_x0884' FROM anna_french_catalog WHERE price_retail>0
+ ) u"`, { env: PGENV, encoding: 'utf8' });
+ const m = {};
+ for (const l of raw.split('\n').filter(Boolean)) {
+ const [mfr, price, src] = l.split('|');
+ if (!m[mfr] || src === 'thibaut_dw_retail') m[mfr] = { price: parseFloat(price), src }; // thibaut wins
+ }
+ return m;
+}
+
+const Q = `query($cur:String){ products(first:50, after:$cur, query:"vendor:'Anna French' status:active"){
+ pageInfo{ hasNextPage endCursor }
+ nodes{ id title productType tags options{name}
+ mfrSku: metafield(namespace:"custom", key:"manufacturer_sku"){ value }
+ curw: metafield(namespace:"custom", key:"width"){ value }
+ variants(first:10){ nodes{ sku price barcode } } } } }`;
+
+// dims map: mfr_sku -> {width_inches, length} (AF catalog length = DOUBLE roll)
+function dimsMap() {
+ const raw = execSync(`psql -tAc "SELECT mfr_sku, COALESCE(width_inches::text,''), COALESCE(length,'') FROM anna_french_catalog WHERE mfr_sku<>''"`, { env: PGENV, encoding: 'utf8' });
+ const m = {};
+ for (const l of raw.split('\n').filter(Boolean)) { const [mfr, w, len] = l.split('|'); if (!m[mfr]) m[mfr] = { width_inches: w ? +w : null, length: len }; }
+ return m;
+}
+
+(async () => {
+ const { rollLabel, lengthMetafieldValue } = await import('../roll-length-label/roll-label.mjs');
+ const pm = priceMap();
+ const dm = dimsMap();
+ const out = fs.createWriteStream(OUT);
+ let cur = null, n = 0; const tally = { total: 0, sampleOnly: 0, hasRoll: 0, fabric: 0, wall: 0, priced: 0, noPrice: 0, buildable: 0 };
+ do {
+ const j = await g(Q, { cur });
+ const conn = j.data.products;
+ for (const p of conn.nodes) {
+ tally.total++;
+ const vs = p.variants.nodes;
+ const sampleOnly = vs.length === 1 && parseFloat(vs[0].price || '0') <= 4.255;
+ if (sampleOnly) tally.sampleOnly++; else tally.hasRoll++;
+ const isFabric = /fabric/i.test(p.productType + ' ' + p.title);
+ isFabric ? tally.fabric++ : tally.wall++;
+ // mfr_sku: custom.manufacturer_sku metafield (canonical), else sample-variant barcode
+ const mfr = (p.mfrSku && p.mfrSku.value) || (vs[0] && vs[0].barcode) || null;
+ // unit label: fabric=Yard; wallcovering=single-roll dimensioned label (AF catalog=DOUBLE -> halve);
+ // falls back to plain "Sold Per Roll" if dims missing. + length metafield value.
+ const d = mfr && dm[mfr] ? dm[mfr] : null;
+ let unit, lengthMf = null;
+ if (isFabric) { unit = 'Sold Per Yard'; }
+ else { unit = rollLabel({ width_inches: d && d.width_inches, widthText: p.curw && p.curw.value, lengthRaw: d && d.length, sourceIsDouble: true });
+ lengthMf = lengthMetafieldValue(d && d.length, { sourceIsDouble: true }); }
+ const pr = mfr && pm[mfr] ? pm[mfr] : null;
+ if (pr) tally.priced++; else tally.noPrice++;
+ const buildable = sampleOnly && pr;
+ if (buildable) tally.buildable++;
+ out.write(JSON.stringify({ id: p.id, title: p.title, sampleOnly, isFabric, unit, lengthMf,
+ sampleSku: vs[0] && vs[0].sku, mfr, price: pr && pr.price, priceSrc: pr && pr.src,
+ optName: (p.options[0] && p.options[0].name) || 'Size', buildable }) + '\n');
+ }
+ n += conn.nodes.length;
+ cur = conn.pageInfo.hasNextPage ? conn.pageInfo.endCursor : null;
+ process.stdout.write(`\r pulled ${n}…`);
+ await sleep(250);
+ } while (cur);
+ out.end();
+ console.log('\n' + JSON.stringify(tally, null, 2));
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/anna-french-rolls/af-normalize-rolllabel.js b/scripts/anna-french-rolls/af-normalize-rolllabel.js
new file mode 100644
index 0000000..c9f1256
--- /dev/null
+++ b/scripts/anna-french-rolls/af-normalize-rolllabel.js
@@ -0,0 +1,68 @@
+'use strict';
+/* Normalize Anna French roll-variant option labels to "Sold Per Roll".
+ The prior build left inconsistent values ("Sold Per (27" x 4.5yds)", etc.) on the
+ non-sample variant. This renames ONLY the option VALUE of the non-sample (price>$4.255)
+ variant to "Sold Per Roll". Never touches price, never touches the $4.25 sample.
+ Targets the products the reprice touched (out/af-reprice-log.jsonl, action=repriced).
+ DRY unless COMMIT=1. REPRICE_LIMIT=N canary. Resumable via out/af-normalize-done.txt. */
+const fs = require('fs');
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const DIR = __dirname + '/out';
+const LOG = DIR + '/af-reprice-log.jsonl';
+const DONE = DIR + '/af-normalize-done.txt';
+const OUT = DIR + '/af-normalize-log.jsonl';
+const COMMIT = process.env.COMMIT === '1';
+const LIMIT = parseInt(process.env.REPRICE_LIMIT || '0', 10) || Infinity;
+const TARGET = 'Sold Per Roll';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 7; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(EP, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted');
+}
+const Q = `query($id:ID!){ product(id:$id){ status options{name}
+ variants(first:20){ nodes{ id price selectedOptions{ name value } } } } }`;
+const UPD = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkUpdate(productId:$pid, variants:$variants){ productVariants{ id } userErrors{ message } } }`;
+
+(async () => {
+ const rows = fs.readFileSync(LOG, 'utf8').split('\n').filter(Boolean).map(JSON.parse).filter(r => r.action === 'repriced');
+ // dedupe by sid (log may have canary + run entries)
+ const seen = new Set(); const uniq = rows.filter(r => !seen.has(r.sid) && seen.add(r.sid));
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+ const todo = uniq.filter(r => !done.has(r.sid)).slice(0, LIMIT);
+ console.log(`mode=${COMMIT ? 'COMMIT' : 'DRY'} repriced=${uniq.length} done=${done.size} todo=${todo.length}`);
+ const doneS = fs.createWriteStream(DONE, { flags: 'a' }), logS = fs.createWriteStream(OUT, { flags: 'a' });
+ const t = { renamed: 0, alreadyOk: 0, noRoll: 0, gone: 0, err: 0 };
+ for (const r of todo) {
+ const lk = await g(Q, { id: r.sid });
+ const p = lk.data && lk.data.product;
+ if (!p || p.status !== 'ACTIVE') { t.gone++; if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ const optName = (p.options[0] && p.options[0].name) || 'Size';
+ const roll = p.variants.nodes.find(v => parseFloat(v.price) > 4.255);
+ if (!roll) { t.noRoll++; logS.write(JSON.stringify({ sid: r.sid, action: 'no-roll' }) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ const cur = (roll.selectedOptions.find(o => o.name === optName) || roll.selectedOptions[0] || {}).value;
+ if (cur === TARGET) { t.alreadyOk++; if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ if (!COMMIT) { t.renamed++; console.log(` DRY "${cur}" -> "${TARGET}" ${r.title}`); continue; }
+ const rr = await g(UPD, { pid: r.sid, variants: [{ id: roll.id, optionValues: [{ optionName: optName, name: TARGET }] }] });
+ const e = (rr.data && rr.data.productVariantsBulkUpdate && rr.data.productVariantsBulkUpdate.userErrors) || [];
+ if (e.length) { t.err++; logS.write(JSON.stringify({ sid: r.sid, action: 'err', e }) + '\n'); continue; }
+ t.renamed++; doneS.write(r.sid + '\n');
+ logS.write(JSON.stringify({ sid: r.sid, from: cur, to: TARGET, title: r.title }) + '\n');
+ console.log(` renamed "${cur}" -> "${TARGET}" ${String(r.title).slice(0, 38)}`);
+ await sleep(280);
+ }
+ doneS.end(); logS.end();
+ console.log('\n' + JSON.stringify(t, null, 2));
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/anna-french-rolls/af-noroll-resume.sh b/scripts/anna-french-rolls/af-noroll-resume.sh
new file mode 100755
index 0000000..f1ab07f
--- /dev/null
+++ b/scripts/anna-french-rolls/af-noroll-resume.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+# af-noroll-resume.sh — daily, self-terminating build of the missing Anna French (DWAA)
+# "Sold Per Roll" variants for the 131 sample-only products the reprice logged as no-roll.
+#
+# af-build-noroll.js prices each at the new single-roll basis (retail x0.45/0.65/0.85),
+# self-heals the Shopify default-variant-consumes-sample trap, skips Title-option products,
+# and aborts cleanly on the daily variant-creation cap (resumable next morning).
+#
+# Runs at 5:45am — BEFORE com.steve.sample-split-resume (6:15) and com.steve.schu-build-resume
+# (7:00) — so its small 121-variant job grabs cap headroom first and finishes in ~1 day, then
+# boots itself out and hands the full daily cap back to the longer-running jobs.
+set -u
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin"
+cd /Users/macstudio3/Projects/designerwallcoverings || exit 1
+DIR=scripts/anna-french-rolls
+BUDGET="$HOME/Projects/designerwallcoverings/scripts/variant-budget/budget.cjs"
+LOG=/tmp/af-noroll-resume-$(date +%Y%m%d).log
+{
+ echo "=== af-noroll build $(date) ==="
+ # Shared kill-switch (2026-06-19): this job previously ignored it entirely.
+ if [ -f "$HOME/.dw-fixer-stop" ]; then echo "kill-switch present — skip"; echo "=== done $(date) ==="; exit 0; fi
+ # Shared variant-budget gate (2026-06-19): af-build-noroll.js adds 1 roll variant per product,
+ # so REPRICE_LIMIT is a variant count. Draw from the live 'upload' pool (== global ~864/day
+ # Shopify ceiling minus osborne) and clamp the build to the grant so the whole writer fleet
+ # can't blow the daily cap. take returns min(req, upload-remaining, global-remaining); 0 → skip.
+ GRANT=$(node "$BUDGET" take upload 131 2>/dev/null || echo 131)
+ if [ "${GRANT:-0}" -lt 1 ]; then echo "no variant budget this run (grant=$GRANT) — exit clean"; echo "=== done $(date) ==="; exit 0; fi
+ echo "budget grant=$GRANT variants — building (REPRICE_LIMIT=$GRANT)"
+ AF_OUT=$(COMMIT=1 REPRICE_LIMIT="$GRANT" node "$DIR/af-build-noroll.js" 2>&1)
+ echo "$AF_OUT"
+
+ # ── refund the unused upload grant (budget-integrity, 2026-06-20; DTD verdict A) ──
+ # We took GRANT variants UP FRONT (== REPRICE_LIMIT) but af-build-noroll.js adds only 1 roll variant
+ # per product actually built. It ALWAYS prints a trailing JSON tally with "made": N (even on the cap
+ # break), so N is reliable; a cap/empty slot builds 0 (refund whole grant), a partial slot fewer.
+ # Without this the unused grant silently drains the shared 864 upload slice. GUARD: refund ONLY when
+ # the "made": N field was found (AF_MADE non-empty) — a crash that printed no tally keeps its debit
+ # (conservative; never over-refunds → never over-grants against Shopify's real cap).
+ AF_MADE=$(printf '%s' "$AF_OUT" | grep -oE '"made":[[:space:]]*[0-9]+' | grep -oE '[0-9]+' | tail -1)
+ if [ -n "$AF_MADE" ]; then
+ AF_REFUND=$(( GRANT - AF_MADE )) # 1 roll variant per product built
+ if [ "$AF_REFUND" -gt 0 ]; then
+ AF_GOT=$(node "$BUDGET" refund upload "$AF_REFUND" 2>/dev/null || echo 0)
+ echo "budget refund: grant=$GRANT used=$AF_MADE (built×1) → refunded $AF_GOT upload variants"
+ fi
+ fi
+ echo "--- remaining check ---"
+ NOROLL=$(grep -c . "$DIR/out/af-reprice-noroll.jsonl" 2>/dev/null || echo 0)
+ DONE=$(grep -c . "$DIR/out/af-build-noroll-done.txt" 2>/dev/null || echo 0)
+ echo "done=$DONE / noroll=$NOROLL"
+ if [ "$DONE" -ge "$NOROLL" ] && [ "$NOROLL" -gt 0 ]; then
+ echo "AF NO-ROLL BUILD COMPLETE — self-unloading com.steve.af-noroll-resume"
+ launchctl bootout gui/$(id -u)/com.steve.af-noroll-resume 2>/dev/null
+ fi
+ echo "=== done $(date) ==="
+} >> "$LOG" 2>&1
diff --git a/scripts/anna-french-rolls/af-reprice-live.js b/scripts/anna-french-rolls/af-reprice-live.js
new file mode 100644
index 0000000..7059b00
--- /dev/null
+++ b/scripts/anna-french-rolls/af-reprice-live.js
@@ -0,0 +1,105 @@
+'use strict';
+/* Anna French (DWAA) single-roll LIVE reprice — Steve-authorized 2026-06-17 (option 3:
+ accept Mar last-known-good retail). For each active Anna French ROLL product (title !~ fabric)
+ joined to anna_french_catalog.price_retail:
+ newPrice = round(retail * 0.45 / 0.65 / 0.85, 2) (cost=retail×0.45, sell=cost/0.65/0.85)
+ - If a real ROLL variant exists (price > $4.255, the non-sample variant): UPDATE its price.
+ - Set product metafield custom.packaging = single-roll/double-pack note (if absent).
+ - If NO roll variant yet (still sample-only): log to out/af-reprice-noroll.jsonl, DO NOT create
+ (variant creation is daily-capped — handled by af-build with the new plan).
+ NEVER touches the $4.25 sample variant. DRY by default; set COMMIT=1 to write.
+ REPRICE_LIMIT=N caps the run (canary). Resumable via out/af-reprice-done.txt. */
+const fs = require('fs');
+const { execSync } = require('child_process');
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PGENV = { PGHOST: '/tmp', PGPORT: '5432', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' };
+const DIR = __dirname + '/out';
+const DONE = DIR + '/af-reprice-done.txt';
+const LOG = DIR + '/af-reprice-log.jsonl';
+const NOROLL = DIR + '/af-reprice-noroll.jsonl';
+const COMMIT = process.env.COMMIT === '1';
+const LIMIT = parseInt(process.env.REPRICE_LIMIT || '0', 10) || Infinity;
+const PRICE_CAP = 2000; // safety: never push a roll price above this without review
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 7; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(EP, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted');
+}
+
+const Q = `query($id:ID!){ product(id:$id){ id title status
+ options{name}
+ variants(first:20){ nodes{ id sku price selectedOptions{name value} } }
+ packaging: metafield(namespace:"custom", key:"packaging"){ id value } } }`;
+const UPD = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkUpdate(productId:$pid, variants:$variants){ productVariants{ id price } userErrors{ message } } }`;
+const META = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{ message } } }`;
+const PKG = 'Sold by the single roll; packaged in double roll.';
+
+function rows() {
+ const raw = execSync(`psql -tAc "
+ select a.shopify_id, a.mfr_sku, round(c.price_retail*0.45/0.65/0.85,2) newprice
+ from shopify_products a join anna_french_catalog c on upper(c.mfr_sku)=upper(a.mfr_sku)
+ where a.vendor ilike '%anna%french%' and a.status='ACTIVE' and c.price_retail>0 and a.title !~* 'fabric'
+ order by a.shopify_id"`, { env: PGENV, encoding: 'utf8' });
+ return raw.split('\n').filter(Boolean).map(l => { const [id, mfr, np] = l.split('|'); return { sid: id, mfr, newPrice: parseFloat(np) }; });
+}
+
+(async () => {
+ const all = rows();
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+ const todo = all.filter(r => !done.has(r.sid)).slice(0, LIMIT);
+ console.log(`mode=${COMMIT ? 'COMMIT' : 'DRY'} total=${all.length} done=${done.size} todo=${todo.length}${LIMIT !== Infinity ? ' (limit ' + LIMIT + ')' : ''}`);
+ const doneS = fs.createWriteStream(DONE, { flags: 'a' }), logS = fs.createWriteStream(LOG, { flags: 'a' }), norollS = fs.createWriteStream(NOROLL, { flags: 'a' });
+ const t = { repriced: 0, alreadyOk: 0, pkgSet: 0, pkgOk: 0, noRoll: 0, skipCap: 0, err: 0, gone: 0 };
+ for (const r of todo) {
+ const gid = r.sid.startsWith('gid://') ? r.sid : `gid://shopify/Product/${r.sid}`;
+ const lk = await g(Q, { id: gid });
+ const p = lk.data && lk.data.product;
+ if (!p || p.status !== 'ACTIVE') { t.gone++; if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ // roll variant = the non-sample variant (price > 4.255). Prefer a "Roll"-named option value.
+ const vs = p.variants.nodes;
+ const nonSample = vs.filter(v => parseFloat(v.price) > 4.255);
+ let roll = nonSample.find(v => v.selectedOptions.some(o => /roll/i.test(o.value))) || (nonSample.length === 1 ? nonSample[0] : null);
+ const rec = { sid: r.sid, mfr: r.mfr, title: p.title.slice(0, 50), newPrice: r.newPrice };
+ if (r.newPrice <= 0 || r.newPrice >= PRICE_CAP) { t.skipCap++; rec.action = 'skip-price-cap'; logS.write(JSON.stringify(rec) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ if (!roll) { t.noRoll++; rec.action = 'no-roll-variant'; rec.variants = vs.map(v => ({ sku: v.sku, price: v.price })); norollS.write(JSON.stringify(rec) + '\n'); logS.write(JSON.stringify(rec) + '\n'); if (COMMIT) doneS.write(r.sid + '\n'); continue; }
+ rec.oldPrice = roll.price; rec.variantId = roll.id;
+ // 1) reprice if differs
+ const differs = Math.abs(parseFloat(roll.price) - r.newPrice) >= 0.005;
+ if (differs) {
+ if (COMMIT) {
+ const rr = await g(UPD, { pid: gid, variants: [{ id: roll.id, price: String(r.newPrice) }] });
+ const e = (rr.data && rr.data.productVariantsBulkUpdate && rr.data.productVariantsBulkUpdate.userErrors) || [];
+ if (e.length) { t.err++; rec.action = 'err:' + JSON.stringify(e); logS.write(JSON.stringify(rec) + '\n'); continue; }
+ }
+ t.repriced++; rec.action = 'repriced';
+ } else { t.alreadyOk++; rec.action = 'price-ok'; }
+ // 2) packaging metafield
+ if (!(p.packaging && p.packaging.value)) {
+ if (COMMIT) {
+ const mr = await g(META, { mf: [{ ownerId: gid, namespace: 'custom', key: 'packaging', type: 'single_line_text_field', value: PKG }] });
+ const me = (mr.data && mr.data.metafieldsSet && mr.data.metafieldsSet.userErrors) || [];
+ if (me.length) { rec.pkgErr = JSON.stringify(me); } else t.pkgSet++;
+ } else t.pkgSet++;
+ rec.pkg = 'set';
+ } else { t.pkgOk++; rec.pkg = 'ok'; }
+ logS.write(JSON.stringify(rec) + '\n');
+ if (COMMIT) doneS.write(r.sid + '\n');
+ console.log(` ${rec.action}${differs ? ` $${roll.price}->$${r.newPrice}` : ` $${roll.price}`} pkg=${rec.pkg} ${rec.title}`);
+ await sleep(280);
+ }
+ doneS.end(); logS.end(); norollS.end();
+ console.log('\n' + JSON.stringify(t, null, 2));
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/anna-french-rolls/run-af-build.sh b/scripts/anna-french-rolls/run-af-build.sh
new file mode 100755
index 0000000..be2719f
--- /dev/null
+++ b/scripts/anna-french-rolls/run-af-build.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# Anna French roll/yard resume — drains the remaining clean Size-option products
+# (af-build-plan.jsonl) under Shopify's daily variant cap. Idempotent + resumable
+# via out/af-build-done.txt: once the 145 remaining are built, this no-ops (todo=0).
+# Scheduled 5:30am daily so it gets first dibs on the variant cap, BEFORE the
+# 6:15am sample-split run. Hard-skips the 116 Title-option products (separate path).
+# Self-terminating: safe to leave loaded; remove the plist once todo hits 0.
+set -euo pipefail
+cd /Users/macstudio3/Projects/designerwallcoverings
+# BURST LOCKDOWN (2026-06-23, vp-dw-commerce): af-build.js adds variants via productVariantsBulkCreate
+# with NO budget.cjs gate and NO kill-switch, and is scheduled to grab "first dibs on the variant cap"
+# — a ledger-bypassing pattern that can starve the metered cadence (the same failure mode as the
+# Jun-22 Tres Tintas burst). Per Steve's HARD rule only the metered 18/hr cadence (budget.cjs) may
+# create products/variants on the shared 864/day cap. This guard aborts EVEN A MANUAL run. The
+# budget-AWARE Anna French path (af-noroll-resume, which uses budget.cjs take/refund) is unaffected.
+# To re-arm (Steve-gated): `rm scripts/anna-french-rolls/.DISARMED-BURST`, OR retrofit budget.cjs.
+if [ -f "scripts/anna-french-rolls/.DISARMED-BURST" ]; then
+ echo "$(date '+%Y-%m-%d %H:%M:%S') BURST DISARMED (.DISARMED-BURST present) — only the metered cadence may create variants. Skipping." >&2
+ exit 0
+fi
+export ROLL_CAP="${ROLL_CAP:-400}"
+TS="$(date '+%Y-%m-%d %H:%M:%S')"
+echo "=== af-build resume $TS (ROLL_CAP=$ROLL_CAP) ==="
+/opt/homebrew/bin/node scripts/anna-french-rolls/af-build.js
+echo "=== af-build resume done $TS ==="
diff --git a/scripts/apply-1104-map.js b/scripts/apply-1104-map.js
new file mode 100644
index 0000000..894211f
--- /dev/null
+++ b/scripts/apply-1104-map.js
@@ -0,0 +1,34 @@
+#!/usr/bin/env node
+/* Apply 2026 MAP to the 1,104 unit-verified under-MAP products (/tmp/cs_1104_plan.json).
+ Per product: GraphQL-read variants, pick the NON-SAMPLE (Price Per Unit) variant, set its price
+ to MAP via productVariantsBulkUpdate. Sample variant untouched. DRY RUN unless --apply. */
+const https=require('https'); const fs=require('fs');
+const TOKEN=process.env.T, STORE='designer-laboratory-sandbox.myshopify.com';
+const APPLY=process.argv.includes('--apply');
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,vars){return new Promise(r=>{const rq=https.request(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{r(JSON.parse(b))}catch(e){r({errors:b})}})});rq.write(JSON.stringify({query:q,variables:vars||{}}));rq.end();});}
+const plan=JSON.parse(fs.readFileSync('/tmp/cs_1104_plan.json','utf8'));
+const isSample=o=>/sample/i.test(o||'');
+
+(async()=>{
+ console.log(`${plan.length} products | mode: ${APPLY?'APPLY':'DRY RUN'}`);
+ let ok=0,fail=0,skip=0;
+ for(const it of plan){
+ try{
+ const d=await gql(`query($id:ID!){ product(id:$id){ variants(first:10){edges{node{id price selectedOptions{value}}}} } }`,{id:it.gid});
+ const vs=(d.data?.product?.variants?.edges||[]).map(e=>e.node);
+ const real=vs.filter(v=>!v.selectedOptions.some(o=>isSample(o.value)));
+ const v=real.sort((a,b)=>parseFloat(b.price)-parseFloat(a.price))[0];
+ if(!v){ skip++; continue; }
+ if(Math.abs(parseFloat(v.price)-it.map)<=0.5){ skip++; continue; } // already at MAP
+ if(!APPLY){ ok++; if(ok<=8)console.log(` $${v.price} -> $${it.map} ${it.vendor} ${it.sku}`); continue; }
+ const m=await gql(`mutation($pid:ID!,$vars:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid, variants:$vars){ userErrors{field message} } }`,
+ {pid:it.gid, vars:[{id:v.id, price:String(it.map)}]});
+ const errs=m.data?.productVariantsBulkUpdate?.userErrors;
+ if(errs&&errs.length){ fail++; if(fail<=5)console.log(' ERR',it.sku,JSON.stringify(errs)); }
+ else { ok++; if(ok%100===0)console.log(` …${ok}/${plan.length}`); }
+ }catch(e){ fail++; }
+ await sleep(60);
+ }
+ console.log(`\nDONE — ${ok} ${APPLY?'repriced':'would reprice'}, ${fail} failed, ${skip} skipped(already-at-MAP/no-variant).`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/april-restore-plan/build-april-restore-plan.mjs b/scripts/april-restore-plan/build-april-restore-plan.mjs
new file mode 100644
index 0000000..448d4ac
--- /dev/null
+++ b/scripts/april-restore-plan/build-april-restore-plan.mjs
@@ -0,0 +1,115 @@
+// build-april-restore-plan — REPORT-ONLY staging plan for the April 2026 wrongful
+// mass-archive. Produces a tiered, batched JSON Steve green-lights; writes NOTHING
+// to Shopify. The standing veto forbids autonomous restore — this only PLANS it.
+//
+// Cohort: products archived 2026-04-17/18 (the wrongful sweep) that are restorable:
+// image present + NOT Nicolette Mayer + NOT discontinued-tagged.
+// (price is NOT a gate: the product-level price column reflects the $4.25 sample
+// variant, not the real roll price — real price must be re-validated at stage time
+// against the live variant, same root cause as the GMC $4.25 issue.)
+//
+// Tiers:
+// T1 CLEAN — house/standard lines, restore freely. (batched)
+// T2 MAP — Kravet-family; restore BUT must price at MAP. (batched, flagged)
+// T3 HOLD — Phillip Jeffries (display-excluded) + gated/uncosted (Scalamandre/
+// Koroseal/Newmor/Desima/Cowtan/Innovations/Wolf Gordon). NOT batched —
+// listed for explicit per-vendor review.
+//
+// Batches: 1,000/day (Shopify ~1k/day variant cap), T1 first then T2. Each batch
+// carries a stage-time re-validation gate spec.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const OUT_JSON = `${process.env.HOME}/.claude/yolo-queue/april-restore-plan-2026-06-16.json`;
+const OUT_MD = `${process.env.HOME}/.claude/yolo-queue/april-restore-plan-2026-06-16.md`;
+const BATCH = 1000;
+
+const HOLD = /phillip jeffries|jeffries|scalamandre|koroseal|newmor|desima|cowtan|innovations|wolf *gordon/i;
+const KF = /kravet|lee jofa|groundworks|brunschwig|cole *& *son|gp *& *j *baker|colefax|clarke *& *clarke|mulberry|threads|baker lifestyle|andrew martin|aerin|barclay butera|thom filicia/i;
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+
+const rows = q(`
+ select shopify_id, vendor, mfr_sku, handle from shopify_products
+ where status='ARCHIVED' and updated_at_shopify::date in ('2026-04-17','2026-04-18')
+ and vendor !~* 'nicolette' and (tags is null or tags !~* 'discontinu')
+ and image_url is not null and image_url<>''
+ order by vendor, mfr_sku`).map(r => ({ shopify_id: r[0], vendor: r[1], sku: r[2], handle: r[3] }));
+
+const tier = (v) => HOLD.test(v) ? 'T3_HOLD' : (KF.test(v) && !/scalamandre/i.test(v)) ? 'T2_MAP' : 'T1_CLEAN';
+for (const r of rows) r.tier = tier(r.vendor);
+
+const t1 = rows.filter(r => r.tier === 'T1_CLEAN');
+const t2 = rows.filter(r => r.tier === 'T2_MAP');
+const t3 = rows.filter(r => r.tier === 'T3_HOLD');
+
+// batch T1 then T2 into 1k/day
+const batchable = [...t1, ...t2];
+const batches = [];
+for (let i = 0; i < batchable.length; i += BATCH) {
+ const slice = batchable.slice(i, i + BATCH);
+ batches.push({
+ day: batches.length + 1,
+ count: slice.length,
+ tiers: { T1_CLEAN: slice.filter(r => r.tier === 'T1_CLEAN').length, T2_MAP: slice.filter(r => r.tier === 'T2_MAP').length },
+ ids: slice.map(r => r.shopify_id),
+ });
+}
+
+const byVendor = (arr) => Object.entries(arr.reduce((m, r) => (m[r.vendor] = (m[r.vendor]||0)+1, m), {})).sort((a,b)=>b[1]-a[1]);
+
+const plan = {
+ generated_at: new Date().toISOString(),
+ source: 'dw_unified shopify_products mirror (Mac2), READ-ONLY',
+ cohort: 'status=ARCHIVED, updated_at_shopify 2026-04-17/18, image present, not Nicolette, not discontinued-tagged',
+ totals: { restorable: rows.length, t1_clean: t1.length, t2_map: t2.length, t3_hold: t3.length, batchable: batchable.length, batches: batches.length },
+ stage_time_revalidation_gate: [
+ 'product still ARCHIVED (not already restored/changed)',
+ 'image_url still present',
+ 'live MIN non-sample variant price > $5 (skip if it only has the $4.25 sample → would re-trigger GMC $4.25)',
+ 'vendor not in HOLD list (re-check)',
+ 'for T2_MAP: price floored at MAP (wholesale×1.5) before publish',
+ ],
+ apply_method: 'shopify_api_queue: {id, status:ACTIVE} per product, ≤1000/day, ≥90s between bursts (gated — Steve fires)',
+ batches,
+ t3_hold_for_review: { count: t3.length, by_vendor: byVendor(t3) },
+ t1_by_vendor_top: byVendor(t1).slice(0, 25),
+ t2_by_vendor: byVendor(t2),
+};
+
+fs.writeFileSync(OUT_JSON, JSON.stringify(plan, null, 2));
+
+let md = `# April mass-archive — RESTORE STAGING PLAN (report-only)\n\n`;
+md += `**Generated:** ${plan.generated_at} · source: dw_unified mirror (READ-ONLY) · **$0**\n`;
+md += `**Standing veto respected:** this is a PLAN only — no Shopify writes. Steve fires the publish.\n\n`;
+md += `## Cohort\n${plan.cohort}\n\n`;
+md += `## Totals\n`;
+md += `- **Restorable: ${plan.totals.restorable.toLocaleString()}**\n`;
+md += ` - T1 CLEAN (restore freely): **${t1.length.toLocaleString()}**\n`;
+md += ` - T2 MAP (Kravet-family — price at MAP): **${t2.length.toLocaleString()}**\n`;
+md += ` - T3 HOLD (PJ display-excluded + gated/uncosted — review): **${t3.length.toLocaleString()}**\n`;
+md += `- **Auto-batchable (T1+T2): ${batchable.length.toLocaleString()}** → **${batches.length} daily batches** of ≤${BATCH}\n\n`;
+md += `> Note: the product-level price column = the $4.25 sample variant for most rows, so price is re-validated at STAGE TIME against the live variant (not used as a pre-filter). This prevents restoring a product that only has the $4.25 sample (which would re-feed the GMC $4.25 problem).\n\n`;
+md += `## Stage-time re-validation gate (re-checked per product at publish)\n`;
+for (const g of plan.stage_time_revalidation_gate) md += `- ${g}\n`;
+md += `\n## Apply method (GATED)\n${plan.apply_method}\n\n`;
+md += `## T1 CLEAN — top vendors\n| Vendor | Count |\n|---|---:|\n`;
+for (const [v, c] of plan.t1_by_vendor_top) md += `| ${v} | ${c} |\n`;
+md += `\n## T2 MAP — Kravet-family (restore at MAP)\n| Vendor | Count |\n|---|---:|\n`;
+for (const [v, c] of plan.t2_by_vendor) md += `| ${v} | ${c} |\n`;
+md += `\n## T3 HOLD-for-review (NOT batched)\n| Vendor | Count |\n|---|---:|\n`;
+for (const [v, c] of plan.t3_hold_for_review.by_vendor) md += `| ${v} | ${c} |\n`;
+md += `\n## Batch schedule (first 10 days)\n| Day | Count | T1 | T2 |\n|---:|---:|---:|---:|\n`;
+for (const b of batches.slice(0, 10)) md += `| ${b.day} | ${b.count} | ${b.tiers.T1_CLEAN} | ${b.tiers.T2_MAP} |\n`;
+if (batches.length > 10) md += `| … | | | (${batches.length} batches total) |\n`;
+md += `\n_Full per-batch ID lists in the JSON: ${OUT_JSON.replace(process.env.HOME, '~')}_\n`;
+fs.writeFileSync(OUT_MD, md);
+
+console.log(`[april-restore-plan] restorable=${rows.length} (T1=${t1.length} T2=${t2.length} T3-hold=${t3.length}) → ${batches.length} batches`);
+console.log(`JSON: ${OUT_JSON}\nMD: ${OUT_MD}`);
diff --git a/scripts/artmura-onboard/apply-markup.js b/scripts/artmura-onboard/apply-markup.js
new file mode 100644
index 0000000..4bb7132
--- /dev/null
+++ b/scripts/artmura-onboard/apply-markup.js
@@ -0,0 +1,83 @@
+#!/usr/bin/env node
+/**
+ * Artmura retail markup — DW sell price = round(Cost / 0.75 / 0.85) to whole dollar.
+ * Cost basis = price_newwall_retail captured at onboard (immutable → idempotent re-runs).
+ * Writes the YARD variant price on the live store; Sample stays $5 (sample policy).
+ *
+ * node apply-markup.js # DRY RUN (no writes)
+ * node apply-markup.js --apply # write live
+ *
+ * Env: SHOPIFY_ADMIN_TOKEN (required), SHOPIFY_STORE (default sandbox=prod)
+ */
+const fs = require('fs');
+const path = require('path');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const APPLY = process.argv.includes('--apply');
+if (!TOKEN) { console.error('SHOPIFY_ADMIN_TOKEN required'); process.exit(1); }
+
+const DATA = path.join(__dirname, 'data', 'artmura.json');
+const HANDLES = path.join(__dirname, 'data', 'artmura-store-handles.json');
+const markup = cost => Math.round(cost / 0.75 / 0.85); // whole dollar
+const isSample = v => (v.option1 || '').toLowerCase() === 'sample' || /-sample$/i.test(v.sku || '');
+
+const api = (p, opts = {}) => fetch(`https://${STORE}/admin/api/${API}${p}`, {
+ ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) },
+});
+
+async function getAllArtmura() {
+ let url = `/products.json?vendor=Artmura&status=active&limit=250&fields=id,handle,title,variants`;
+ const out = [];
+ while (url) {
+ const res = await api(url);
+ const link = res.headers.get('Link') || '';
+ out.push(...((await res.json()).products || []));
+ const m = link.split(',').find(s => s.includes('rel="next"'));
+ url = m ? m.slice(m.indexOf('<') + 1, m.indexOf('>')).replace(/^https:\/\/[^/]+\/admin\/api\/[^/]+/, '') : null;
+ }
+ return out;
+}
+
+(async () => {
+ const d = JSON.parse(fs.readFileSync(DATA, 'utf8'));
+ const handleMap = JSON.parse(fs.readFileSync(HANDLES, 'utf8')); // {MFR_SKU: dw_handle}
+ const mfrByHandle = Object.fromEntries(Object.entries(handleMap).map(([sku, h]) => [h, sku.toUpperCase()]));
+ const costByMfr = {};
+ d.products.forEach(r => { costByMfr[(r.mfr_sku || '').toUpperCase()] = Number(r.price_newwall_retail) || 0; });
+
+ const live = await getAllArtmura();
+ console.log(`live Artmura products: ${live.length} | mode: ${APPLY ? 'APPLY (writing)' : 'DRY RUN'}\n`);
+
+ let matched = 0, toChange = 0, unmatched = [], changes = [];
+ for (const p of live) {
+ const mfr = mfrByHandle[p.handle];
+ const cost = mfr ? costByMfr[mfr] : null;
+ const yard = p.variants.find(v => !isSample(v));
+ if (!mfr || !cost || !yard) { unmatched.push(p.handle); continue; }
+ matched++;
+ const want = markup(cost);
+ const cur = Math.round(Number(yard.price));
+ if (cur !== want) { toChange++; changes.push({ pid: p.id, vid: yard.id, handle: p.handle, mfr, cost, cur: yard.price, want }); }
+ }
+
+ console.log(`matched ${matched}/${live.length} | need price change: ${toChange} | unmatched: ${unmatched.length}`);
+ if (unmatched.length) console.log('UNMATCHED:', unmatched.slice(0, 10).join(', '), unmatched.length > 10 ? `… +${unmatched.length - 10}` : '');
+ console.log('\nfirst 8 changes:');
+ changes.slice(0, 8).forEach(c => console.log(` ${c.mfr.padEnd(12)} $${c.cur} → $${c.want} ${c.handle}`));
+
+ if (!APPLY) { console.log(`\nDRY RUN — would update ${toChange} Yard variants. Re-run with --apply to write.`); return; }
+
+ console.log(`\nwriting ${toChange} Yard prices...`);
+ let ok = 0, fail = 0;
+ for (const c of changes) {
+ try {
+ const res = await api(`/variants/${c.vid}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: c.vid, price: String(c.want) } }) });
+ if (res.ok) { ok++; if (ok % 25 === 0) console.log(` …${ok}/${toChange}`); }
+ else { fail++; console.log(` FAIL ${c.mfr} ${res.status}: ${(await res.text()).slice(0, 120)}`); }
+ } catch (e) { fail++; console.log(` ERR ${c.mfr}: ${e.message}`); }
+ await new Promise(r => setTimeout(r, 120)); // ~8/s, under 2-bucket leak
+ }
+ console.log(`\nDONE — ${ok} updated, ${fail} failed.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/backfill_metafields.js b/scripts/artmura-onboard/backfill_metafields.js
new file mode 100644
index 0000000..a37a01d
--- /dev/null
+++ b/scripts/artmura-onboard/backfill_metafields.js
@@ -0,0 +1,80 @@
+#!/usr/bin/env node
+/**
+ * Backfill Artmura product metafields with the CORRECT per-key types (the create 422'd
+ * because custom.material=multi_line_text_field and custom.collection/lead_time=product_reference).
+ * Runs AFTER push-artmura-live.js (reads shopify_product_id from newwall_catalog).
+ *
+ * node backfill_metafields.js # dry-run (first 3)
+ * node backfill_metafields.js --apply
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const { Pool } = require('pg');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_PRODUCT_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const PKG = path.join(__dirname, 'data', 'artmura.json');
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) } },
+ res => { let b = ''; res.on('data', c => b += c); res.on('end', () => { let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject); req.setTimeout(20000, () => req.destroy(new Error('timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+
+// key -> type, matching the store's existing definitions. SKIP collection + lead_time
+// (defined as product_reference — cannot hold our text).
+const FIELDS = [
+ ['design_name', 'single_line_text_field', r => r.pattern_series],
+ ['colorway_name', 'single_line_text_field', r => r.color],
+ ['material', 'multi_line_text_field', r => r.substrate || 'Non-Woven'],
+ ['width', 'single_line_text_field', r => r.dimensions],
+ ['wall_coverage', 'single_line_text_field', r => r.wall_coverage],
+ ['origin', 'single_line_text_field', r => r.origin],
+ ['grade', 'single_line_text_field', r => r.grade],
+ ['mfr_sku', 'single_line_text_field', r => r.mfr_sku],
+ ['source_url', 'single_line_text_field', r => r.product_url],
+];
+
+(async () => {
+ const pkg = JSON.parse(fs.readFileSync(PKG, 'utf8')).products;
+ const { rows } = await pool.query(
+ `SELECT handle, shopify_product_id FROM newwall_catalog WHERE vendor_name='Artmura' AND shopify_product_id IS NOT NULL AND shopify_product_id<>''`);
+ const pid = Object.fromEntries(rows.map(r => [r.handle, r.shopify_product_id]));
+ const todo = pkg.filter(p => pid[p.handle]);
+ console.log(`metafield backfill: ${todo.length} products · mode: ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+
+ if (!APPLY) {
+ const r = todo[0]; const mfs = FIELDS.map(([k, t, f]) => ({ key: k, type: t, value: f(r) })).filter(m => m.value);
+ console.log(`example ${pid[r.handle]}:`); mfs.forEach(m => console.log(` custom.${m.key} (${m.type}) = ${m.value}`));
+ console.log(`\nDRY-RUN. --apply to write.`); await pool.end(); return;
+ }
+
+ let ok = 0, fail = 0;
+ for (const r of todo) {
+ const id = pid[r.handle];
+ const metafields = FIELDS.map(([k, t, f]) => { const v = f(r); return v ? { namespace: 'custom', key: k, type: t, value: String(v) } : null; }).filter(Boolean);
+ try {
+ const res = await shopify('PUT', `/products/${id}.json`, { product: { id: Number(id), metafields } });
+ if (res.status === 200) { ok++; if (ok % 40 === 0) console.log(` ...${ok}`); }
+ else { fail++; console.error(` FAIL ${id}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 160)}`); }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1500 : 540);
+ } catch (e) { fail++; console.error(` ERR ${id}: ${e.message}`); await sleep(540); }
+ }
+ console.log(`\nDONE. metafields written=${ok} failed=${fail}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/db_write.py b/scripts/artmura-onboard/db_write.py
new file mode 100644
index 0000000..267d13d
--- /dev/null
+++ b/scripts/artmura-onboard/db_write.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+"""Refresh newwall_catalog Artmura rows FROM data/artmura.json (no network)."""
+import json, os, subprocess
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+PKG = os.path.join(HERE, "data", "artmura.json")
+cs = open("/tmp/.dwcs").read().strip()
+
+def esc(v):
+ if v is None: return "NULL"
+ if isinstance(v, (int, float)): return str(v)
+ return "'" + str(v).replace("'", "''") + "'"
+
+d = json.load(open(PKG))
+recs = d["products"]
+print(f"refreshing {len(recs)} newwall_catalog rows from package ...")
+updated = 0
+for r in recs:
+ all_images = "{" + ",".join('"%s"' % s for s in r["images"]) + "}"
+ about = (f"Artmura — Italian non-woven wallcovering. "
+ f"Grade: {r.get('grade')}. Origin: {r.get('origin')}. Lead-time: {r.get('lead_time')}.")
+ q = f"""UPDATE newwall_catalog SET
+ mfr_sku={esc(r['mfr_sku'])}, pattern_name={esc(r['pattern_series'])}, color_name={esc(r['color'])},
+ collection={esc(r['collection_book'])}, product_type={esc(r['product_type'])}, material={esc(r['substrate'])},
+ width={esc(r['dimensions'])}, coverage={esc(r['wall_coverage'])}, price_retail={esc(r['price_newwall_retail'])},
+ image_url={esc(r['images'][0] if r['images'] else None)}, all_images={esc(all_images)},
+ body_html={esc(r['body_html'])}, us_distributor='newwall.com (reseller)', about_vendor={esc(about)},
+ last_scraped=now(), updated_at=now()
+ WHERE handle={esc(r['handle'])};"""
+ res = subprocess.run(["psql", cs, "-tAc", q], capture_output=True, text=True)
+ if "UPDATE 1" in res.stdout:
+ updated += 1
+ elif res.stderr.strip():
+ print(" !", r["mfr_sku"], res.stderr.strip()[:120])
+print(f"updated {updated}/{len(recs)} rows")
diff --git a/scripts/artmura-onboard/extract_colors.py b/scripts/artmura-onboard/extract_colors.py
new file mode 100644
index 0000000..090033c
--- /dev/null
+++ b/scripts/artmura-onboard/extract_colors.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+"""Extract dominant color (hex + hue + coarse bucket) from each Artmura swatch image.
+Writes data/artmura-colors.json {sku: {hex, hue, bucket}} for the site to merge in."""
+import json, os, glob, colorsys
+from collections import Counter
+from PIL import Image
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+IMG = os.path.join(HERE, "..", "..", ".newwall-ref", "artmura", "images")
+PKG = json.load(open(os.path.join(HERE, "data", "artmura.json")))
+
+def dominant(path):
+ im = Image.open(path).convert("RGB").resize((64, 64))
+ # quantize to 16 colors, take the most common that isn't near-pure-white background noise
+ q = im.quantize(colors=16).convert("RGB")
+ cnt = Counter(q.getdata())
+ ranked = cnt.most_common()
+ # prefer the most saturated/among top to avoid flat near-white winning on tonal swatches
+ def score(item):
+ (r, g, b), n = item
+ h, s, v = colorsys.rgb_to_hsv(r/255, g/255, b/255)
+ # weight count but boost saturated colors so the swatch's character shows
+ return n * (0.5 + s)
+ (r, g, b), _ = max(ranked[:6], key=score)
+ return r, g, b
+
+def bucket(h, s, v):
+ if v < 0.18: return "black"
+ if s < 0.12 and v > 0.85: return "white"
+ if s < 0.14: return "grey"
+ deg = h * 360
+ if deg < 16 or deg >= 345: return "red"
+ if deg < 45: return "orange" if v > 0.5 else "brown"
+ if deg < 70: return "gold"
+ if deg < 160: return "green"
+ if deg < 200: return "teal"
+ if deg < 255: return "blue"
+ if deg < 290: return "purple"
+ return "pink"
+
+out = {}
+for p in PKG["products"]:
+ sku = p["mfr_sku"]
+ cand = sorted(glob.glob(os.path.join(IMG, f"{sku}-1.*")) or glob.glob(os.path.join(IMG, f"{sku}-*.*")))
+ if not cand:
+ continue
+ r, g, b = dominant(cand[0])
+ h, s, v = colorsys.rgb_to_hsv(r/255, g/255, b/255)
+ out[sku] = {"hex": f"#{r:02x}{g:02x}{b:02x}", "hue": round(h*360, 1),
+ "sat": round(s, 3), "val": round(v, 3), "bucket": bucket(h, s, v)}
+
+open(os.path.join(HERE, "data", "artmura-colors.json"), "w").write(json.dumps(out, indent=1))
+from collections import Counter as C
+print(f"extracted {len(out)} colors")
+print("buckets:", dict(C(v["bucket"] for v in out.values()).most_common()))
diff --git a/scripts/artmura-onboard/fill_specs.py b/scripts/artmura-onboard/fill_specs.py
new file mode 100644
index 0000000..27fc0e9
--- /dev/null
+++ b/scripts/artmura-onboard/fill_specs.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+"""Gently fill missing PDP spec fields in data/artmura.json (sequential, backoff-aware)."""
+import json, os, re, time, urllib.request
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+PKG = os.path.join(HERE, "data", "artmura.json")
+UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
+
+def fetch(url):
+ for i in range(5):
+ try:
+ req = urllib.request.Request(url, headers={"User-Agent": UA})
+ with urllib.request.urlopen(req, timeout=30) as r:
+ return r.read().decode("utf-8", "replace")
+ except urllib.error.HTTPError as e:
+ if e.code == 429:
+ wait = 20 * (i + 1)
+ print(f" 429 — backing off {wait}s")
+ time.sleep(wait); continue
+ raise
+ except Exception:
+ time.sleep(5)
+ return None
+
+def parse_specs(h):
+ pairs = re.findall(r'product-info__label">([^<]+)</th>\s*<td class="product-info__value">(.*?)</td>', h, re.S)
+ out, seen = {}, set()
+ for lbl, val in pairs:
+ lbl = lbl.strip().rstrip(":")
+ if lbl in seen: continue
+ seen.add(lbl)
+ out[lbl] = re.sub(r"<[^>]+>", "", val).strip()
+ return out
+
+def width_inches(dim):
+ m = re.search(r'([\d.]+)\s*"', dim or "")
+ return float(m.group(1)) if m else None
+
+d = json.load(open(PKG))
+todo = [r for r in d["products"] if not r["dimensions"]]
+print(f"filling {len(todo)} products with missing specs ...")
+filled = 0
+for n, r in enumerate(todo, 1):
+ h = fetch(r["product_url"])
+ if not h:
+ print(f" [{n}/{len(todo)}] {r['mfr_sku']} FAILED"); continue
+ s = parse_specs(h)
+ if s.get("Dimensions"):
+ r["substrate"] = r["substrate"] or s.get("Substrate available")
+ r["grade"] = s.get("Grade available")
+ r["dimensions"] = s.get("Dimensions")
+ r["width_inches"] = width_inches(s.get("Dimensions"))
+ r["wall_coverage"] = s.get("Wall coverage")
+ r["lead_time"] = s.get("Lead-time")
+ r["origin"] = s.get("Origin")
+ filled += 1
+ print(f" [{n}/{len(todo)}] {r['mfr_sku']} ✓ {r['dimensions']} · {r['origin']}")
+ else:
+ print(f" [{n}/{len(todo)}] {r['mfr_sku']} no spec table")
+ json.dump(d, open(PKG, "w"), indent=2) # checkpoint each
+ time.sleep(1.2)
+print(f"done. filled {filled}/{len(todo)}. total w/dims now {sum(1 for r in d['products'] if r['dimensions'])}/161")
diff --git a/scripts/artmura-onboard/fix-newarrivals-and-type.js b/scripts/artmura-onboard/fix-newarrivals-and-type.js
new file mode 100644
index 0000000..add172a
--- /dev/null
+++ b/scripts/artmura-onboard/fix-newarrivals-and-type.js
@@ -0,0 +1,106 @@
+#!/usr/bin/env node
+/**
+ * Fix the 161 Artmura products so they appear in the New Arrivals collection
+ * AND match the storefront product_type facet.
+ *
+ * Two issues found 2026-06-17:
+ * 1. product_type = "Wallcoverings" (plural) — fails the storefront facet
+ * pf_t_product_type=Wallcovering (singular). Normalize -> "Wallcovering".
+ * 2. Not in the `new-arrivals` SMART collection. Its rules are
+ * TAG == "New Arrival" AND TYPE != "Trim". Add the "New Arrival" tag so
+ * each product joins the collection.
+ *
+ * node fix-newarrivals-and-type.js # dry-run summary
+ * node fix-newarrivals-and-type.js --apply --limit=3 # canary
+ * node fix-newarrivals-and-type.js --apply # all 161
+ *
+ * Idempotent: skips the type update if already singular, skips the tag if
+ * already present. Re-runnable on partial failures.
+ */
+const { Pool } = require('pg');
+
+const SHOP = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const EP = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+
+const NEW_TYPE = 'Wallcovering';
+const NEW_TAG = 'New Arrival';
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let attempt = 0; attempt < 4; attempt++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const json = await res.json();
+ if (json.errors) { if (attempt === 3) throw new Error(JSON.stringify(json.errors)); await sleep(900 * (attempt + 1)); continue; }
+ const rem = json.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return json.data;
+ } catch (e) { if (attempt === 3) throw e; await sleep(900 * (attempt + 1)); }
+ }
+}
+
+const Q_READ = `query($id:ID!){ product(id:$id){ productType tags status } }`;
+const M_TYPE = `mutation($id:ID!,$t:String!){ productUpdate(input:{id:$id, productType:$t}){ product{productType} userErrors{message} } }`;
+const M_TAGSADD = `mutation($id:ID!,$tags:[String!]!){ tagsAdd(id:$id, tags:$tags){ userErrors{message} } }`;
+
+async function fix(pid) {
+ const gidP = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_READ, { id: gidP });
+ const p = d.product;
+ if (!p) return { missing: true };
+ let typeFixed = false, tagAdded = false;
+ if (p.productType !== NEW_TYPE) {
+ const r = await gql(M_TYPE, { id: gidP, t: NEW_TYPE });
+ (r.productUpdate?.userErrors || []).forEach(e => errs.push('type:' + e.message));
+ if (!(r.productUpdate?.userErrors || []).length) typeFixed = true;
+ }
+ if (!(p.tags || []).includes(NEW_TAG)) {
+ const r = await gql(M_TAGSADD, { id: gidP, tags: [NEW_TAG] });
+ (r.tagsAdd?.userErrors || []).forEach(e => errs.push('tag:' + e.message));
+ if (!(r.tagsAdd?.userErrors || []).length) tagAdded = true;
+ }
+ return { typeFixed, tagAdded, errs, was: { type: p.productType, status: p.status } };
+}
+
+(async () => {
+ const { rows } = await pool.query(
+ `SELECT handle, dw_sku, shopify_product_id FROM newwall_catalog
+ WHERE vendor_name='Artmura' AND shopify_product_id IS NOT NULL AND shopify_product_id<>''
+ ORDER BY dw_sku`);
+ let todo = rows;
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`fix: ${todo.length} Artmura products · type->"${NEW_TYPE}" · +tag "${NEW_TAG}" · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ console.log('first 3:', todo.slice(0, 3).map(r => r.dw_sku).join(', '));
+ console.log('DRY-RUN. --apply to execute.'); await pool.end(); return;
+ }
+
+ let typeN = 0, tagN = 0, noop = 0, withErr = 0, missing = 0;
+ for (const r of todo) {
+ try {
+ const res = await fix(r.shopify_product_id);
+ if (res.missing) { missing++; console.error(` ✗ ${r.dw_sku}: product not found`); continue; }
+ if (res.errs && res.errs.length) { withErr++; console.error(` ⚠ ${r.dw_sku}: ${res.errs.slice(0, 3).join(' | ')}`); }
+ if (res.typeFixed) typeN++;
+ if (res.tagAdded) tagN++;
+ if (!res.typeFixed && !res.tagAdded && !(res.errs || []).length) noop++;
+ const done = typeN + tagN + noop + withErr + missing;
+ if (done % 20 === 0) console.log(` ...${done}/${todo.length} (type=${typeN} tag=${tagN} noop=${noop} err=${withErr})`);
+ // mirror product_type locally to match the go-live script's local-write pattern
+ if (res.typeFixed) await pool.query(`UPDATE newwall_catalog SET product_type=$2, updated_at=now() WHERE handle=$1`, [r.handle, NEW_TYPE]);
+ await sleep(300);
+ } catch (e) { withErr++; console.error(` ERR ${r.dw_sku}: ${e.message.slice(0, 160)}`); await sleep(600); }
+ }
+ console.log(`\nDONE. type-fixed=${typeN} tag-added=${tagN} already-ok=${noop} errors=${withErr} missing=${missing} of ${todo.length}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/fix-plural-type-fleetwide.js b/scripts/artmura-onboard/fix-plural-type-fleetwide.js
new file mode 100644
index 0000000..c2e81ef
--- /dev/null
+++ b/scripts/artmura-onboard/fix-plural-type-fleetwide.js
@@ -0,0 +1,83 @@
+#!/usr/bin/env node
+/**
+ * Fleet-wide normalization of the plural product_type typo:
+ * product_type "Wallcoverings" -> "Wallcovering" (the catalog standard)
+ *
+ * The plural variant is excluded from every storefront facet that filters the
+ * exact singular value (pf_t_product_type=Wallcovering), so these products are
+ * invisible under the standard filter. As of 2026-06-17: 406 products across
+ * Tres Tintas (237, active), Fentucci Naturals (148, draft), FallingStar (21).
+ * Artmura's 161 were already fixed separately.
+ *
+ * Type-only. No tag/collection/inventory changes. Idempotent (productUpdate to
+ * the same value is a safe no-op; the live query only returns plural ones).
+ *
+ * node fix-plural-type-fleetwide.js # dry-run: counts + vendor breakdown
+ * node fix-plural-type-fleetwide.js --apply --limit=5
+ * node fix-plural-type-fleetwide.js --apply
+ */
+const SHOP = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const EP = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+
+const PLURAL = 'Wallcoverings';
+const SINGULAR = 'Wallcovering';
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let attempt = 0; attempt < 4; attempt++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const json = await res.json();
+ if (json.errors) { if (attempt === 3) throw new Error(JSON.stringify(json.errors)); await sleep(900 * (attempt + 1)); continue; }
+ const rem = json.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return json.data;
+ } catch (e) { if (attempt === 3) throw e; await sleep(900 * (attempt + 1)); }
+ }
+}
+
+const Q_LIST = `query($c:String){ products(first:250, query:"product_type:\\"${PLURAL}\\"", after:$c){ pageInfo{hasNextPage endCursor} edges{node{id title vendor status productType}} } }`;
+const M_TYPE = `mutation($id:ID!,$t:String!){ productUpdate(input:{id:$id, productType:$t}){ product{productType} userErrors{message} } }`;
+
+async function collectAll() {
+ let cursor = null, all = [];
+ while (true) {
+ const d = await gql(Q_LIST, { c: cursor });
+ d.products.edges.forEach(e => all.push(e.node));
+ if (!d.products.pageInfo.hasNextPage) break;
+ cursor = d.products.pageInfo.endCursor;
+ }
+ return all;
+}
+
+(async () => {
+ let todo = await collectAll();
+ // safety: only ever touch exact-plural matches
+ todo = todo.filter(p => p.productType === PLURAL);
+ const byVendor = {};
+ todo.forEach(p => { byVendor[p.vendor] = (byVendor[p.vendor] || 0) + 1; });
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`plural-type fix: ${todo.length}${LIMIT ? ` (of ${Object.values(byVendor).reduce((a, b) => a + b, 0)})` : ''} products · "${PLURAL}"->"${SINGULAR}" · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ console.log('by vendor:', JSON.stringify(byVendor));
+ if (!APPLY) { console.log('DRY-RUN. --apply to execute.'); return; }
+
+ let ok = 0, err = 0;
+ for (const p of todo) {
+ try {
+ const r = await gql(M_TYPE, { id: p.id, t: SINGULAR });
+ const ues = r.productUpdate?.userErrors || [];
+ if (ues.length) { err++; console.error(` ⚠ ${p.vendor} ${p.title.slice(0, 40)}: ${ues.map(e => e.message).join('|')}`); }
+ else ok++;
+ if ((ok + err) % 25 === 0) console.log(` ...${ok + err}/${todo.length} (ok=${ok} err=${err})`);
+ await sleep(280);
+ } catch (e) { err++; console.error(` ERR ${p.vendor} ${p.title.slice(0, 40)}: ${e.message.slice(0, 120)}`); await sleep(600); }
+ }
+ console.log(`\nDONE. fixed=${ok} errors=${err} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/go-live-artmura.js b/scripts/artmura-onboard/go-live-artmura.js
new file mode 100644
index 0000000..8cfa0fa
--- /dev/null
+++ b/scripts/artmura-onboard/go-live-artmura.js
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+/**
+ * Go-live for the 161 Artmura draft products. Per product:
+ * 1. enable inventory tracking on both variants (inventoryItemUpdate tracked:true)
+ * 2. activate at location + set on_hand = 2026 (inventoryActivate + inventorySetQuantities)
+ * 3. publish to all DW sales channels (publishablePublish, 13 publications)
+ * 4. set status = ACTIVE
+ *
+ * node go-live-artmura.js # dry-run summary
+ * node go-live-artmura.js --apply --limit=1 # canary
+ * node go-live-artmura.js --apply # all remaining drafts
+ *
+ * Idempotent-ish: skips products already status=active (re-runnable on failures).
+ */
+const fs = require('fs');
+const { Pool } = require('pg');
+
+const SHOP = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const EP = `https://${SHOP}/admin/api/${API}/graphql.json`;
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+
+const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
+const TARGET_QTY = 2026;
+// GMC source-fix (2026-07-08): 29646651457 = "Google & YouTube" REMOVED. New SKUs
+// must NOT land on the Google channel (Shopify auto-syncs minVariantPrice = the $4.25
+// sample → price_mismatch disapproval). Google is fed exclusively by the controlled
+// TSV (today-viewer/build-google-feed.js). See scripts/_lib/dw-publications.js.
+// Rollback: re-add 29646651457 below.
+const PUBLICATIONS = [
+ 22208643184, 22497296496, /* 29646651457 Google-REMOVED */ 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+].map(n => `gid://shopify/Publication/${n}`);
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let attempt = 0; attempt < 4; attempt++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const json = await res.json();
+ if (json.errors) { if (attempt === 3) throw new Error(JSON.stringify(json.errors)); await sleep(900 * (attempt + 1)); continue; }
+ const rem = json.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return json.data;
+ } catch (e) { if (attempt === 3) throw e; await sleep(900 * (attempt + 1)); }
+ }
+}
+
+const Q_VARIANTS = `query($id:ID!){ product(id:$id){ status variants(first:10){edges{node{id sku inventoryItem{id}}}}}}`;
+const M_TRACK = `mutation($id:ID!){ inventoryItemUpdate(id:$id, input:{tracked:true}){ userErrors{message} } }`;
+const M_ACTIVATE = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ userErrors{message} } }`;
+const M_SETQTY = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{field message code} } }`;
+const M_PUBLISH = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishablePublish(id:$id, input:$pubs){ userErrors{message} } }`;
+const M_ACTIVE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){ product{status} userErrors{message} } }`;
+
+async function goLive(pid) {
+ const gidP = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_VARIANTS, { id: gidP });
+ if (d.product?.status === 'ACTIVE') return { skipped: true };
+ const items = d.product.variants.edges.map(e => e.node.inventoryItem.id);
+ // 1+2: track, activate, set 2026 per item
+ for (const iid of items) {
+ let r = await gql(M_TRACK, { id: iid }); (r.inventoryItemUpdate?.userErrors || []).forEach(e => errs.push('track:' + e.message));
+ r = await gql(M_ACTIVATE, { iid, loc: LOCATION_ID });
+ const ae = (r.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message));
+ ae.forEach(e => errs.push('activate:' + e.message));
+ }
+ const r2 = await gql(M_SETQTY, { input: { name: 'on_hand', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: items.map(iid => ({ inventoryItemId: iid, locationId: LOCATION_ID, quantity: TARGET_QTY })) } });
+ (r2.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('setqty:' + e.message));
+ // 3: publish to all channels
+ const r3 = await gql(M_PUBLISH, { id: gidP, pubs: PUBLICATIONS.map(p => ({ publicationId: p })) });
+ (r3.publishablePublish?.userErrors || []).forEach(e => errs.push('publish:' + e.message));
+ // 4: activate product
+ const r4 = await gql(M_ACTIVE, { id: gidP });
+ (r4.productUpdate?.userErrors || []).forEach(e => errs.push('active:' + e.message));
+ return { status: r4.productUpdate?.product?.status, errs };
+}
+
+(async () => {
+ const { rows } = await pool.query(
+ `SELECT handle, dw_sku, shopify_product_id FROM newwall_catalog WHERE vendor_name='Artmura' AND shopify_product_id IS NOT NULL AND shopify_product_id<>'' ORDER BY dw_sku`);
+ let todo = rows;
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`go-live: ${todo.length} products · location ${LOCATION_ID} · qty ${TARGET_QTY} · channels ${PUBLICATIONS.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log('first 3:', todo.slice(0, 3).map(r => r.dw_sku).join(', ')); console.log('DRY-RUN. --apply to execute.'); await pool.end(); return; }
+
+ let ok = 0, skip = 0, withErr = 0;
+ for (const r of todo) {
+ try {
+ const res = await goLive(r.shopify_product_id);
+ if (res.skipped) { skip++; }
+ else if (res.errs && res.errs.length) { withErr++; console.error(` ⚠ ${r.dw_sku} ${res.status||'?'}: ${res.errs.slice(0,3).join(' | ')}`); }
+ else { ok++; }
+ if (!res.skipped && res.status === 'ACTIVE') await pool.query(`UPDATE newwall_catalog SET on_shopify=true, updated_at=now() WHERE handle=$1`, [r.handle]);
+ if ((ok + skip + withErr) % 20 === 0) console.log(` ...${ok + skip + withErr}/${todo.length} (active=${ok} skip=${skip} err=${withErr})`);
+ await sleep(350);
+ } catch (e) { withErr++; console.error(` ERR ${r.dw_sku}: ${e.message.slice(0, 160)}`); await sleep(600); }
+ }
+ console.log(`\nDONE. active=${ok} skipped=${skip} with-errors=${withErr} of ${todo.length}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/interior-designer-enrich.js b/scripts/artmura-onboard/interior-designer-enrich.js
new file mode 100644
index 0000000..b8863d8
--- /dev/null
+++ b/scripts/artmura-onboard/interior-designer-enrich.js
@@ -0,0 +1,150 @@
+#!/usr/bin/env node
+/**
+ * Interior-Designer enrichment — per-SKU style tags, color tags, and color HEX.
+ *
+ * For each product: fetch its image, run Gemini 2.5 Flash vision as an interior
+ * designer, and write the result to Shopify:
+ * metafields (namespace "custom"):
+ * style_tags list.single_line_text_field ["Natural","Textured",...]
+ * color_tags list.single_line_text_field ["Taupe","Greige",...]
+ * color_hex list.single_line_text_field ["#726B5B","#7C7667",...]
+ * dominant_hex single_line_text_field "#726B5B"
+ * pattern_desc single_line_text_field "vertical ribbed stripes"
+ * + merges style_tags + color_tags into the product's tags (additive).
+ *
+ * Targets the newest N products (Shopify created_at desc) across all vendors,
+ * or a single vendor with --vendor. Idempotent: skips products that already
+ * have custom.dominant_hex unless --force. thinkingBudget:0 to keep cost low.
+ *
+ * node interior-designer-enrich.js # dry-run, newest 1000
+ * node interior-designer-enrich.js --limit=5 --apply # canary
+ * node interior-designer-enrich.js --limit=1000 --apply # backfill
+ * node interior-designer-enrich.js --vendor="Tres Tintas" --apply
+ * flags: --budget=2.00 (USD cap, default 3), --force
+ */
+const SHOP = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const GKEY = process.env.GEMINI_API_KEY;
+const EP = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const GEP = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GKEY}`;
+const APPLY = process.argv.includes('--apply');
+const FORCE = process.argv.includes('--force');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '1000', 10);
+const BUDGET = parseFloat((process.argv.find(a => a.startsWith('--budget=')) || '').split('=')[1] || '3');
+const VENDOR = (process.argv.find(a => a.startsWith('--vendor=')) || '').split('=')[1] || null;
+
+// gemini-2.5-flash pricing (USD / 1M tokens)
+const PRICE_IN = 0.30, PRICE_OUT = 2.50;
+let spend = 0, calls = 0;
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+if (!GKEY) { console.error('FATAL: set GEMINI_API_KEY'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(EP, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors)); await sleep(900 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+
+const PROMPT = 'You are a senior interior designer cataloguing a wallcovering. Analyze the image and return ONLY compact JSON: {"style_tags":[3-5 design-style adjectives],"color_tags":[SINGULAR color family names, e.g. "brown" never "browns", "orange" never "oranges"],"colors":[{"name":"..","hex":"#RRGGBB"}],"dominant_hex":"#RRGGBB","pattern":"short phrase"}. Hex must be valid 6-digit. All color_tags MUST be singular. No prose.';
+
+async function enrich(imgUrl) {
+ const ir = await fetch(imgUrl); if (!ir.ok) throw new Error('img ' + ir.status);
+ const buf = Buffer.from(await ir.arrayBuffer());
+ const mime = imgUrl.match(/\.png(\?|$)/i) ? 'image/png' : 'image/jpeg';
+ // LOCAL-FIRST cost-saver (2026-07-03): free ollama qwen2.5vl before paid Gemini. Force Gemini with ENRICH_GEMINI_ONLY=1.
+ if (process.env.ENRICH_GEMINI_ONLY !== '1') {
+ try {
+ const lr = await fetch('http://127.0.0.1:11434/api/generate', {
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ model: process.env.OLLAMA_VISION_MODEL || 'qwen2.5vl:7b', prompt: PROMPT,
+ images: [buf.toString('base64')], format: 'json', stream: false, options: { temperature: 0.2 } }),
+ signal: AbortSignal.timeout(90000) });
+ if (lr.ok) { const lj = await lr.json(); return JSON.parse((lj.response || '').replace(/^```json\s*|\s*```$/g, '').trim()); }
+ } catch (_) { /* fall through to Gemini */ }
+ }
+ const body = { contents: [{ parts: [{ text: PROMPT }, { inline_data: { mime_type: mime, data: buf.toString('base64') } }] }],
+ generationConfig: { temperature: 0.2, responseMimeType: 'application/json', thinkingConfig: { thinkingBudget: 0 } } };
+ for (let a = 0; a < 3; a++) {
+ const r = await fetch(GEP, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
+ if (r.status === 429) { await sleep(2000 * (a + 1)); continue; }
+ const j = await r.json();
+ const u = j.usageMetadata || {};
+ spend += ((u.promptTokenCount || 0) * PRICE_IN + (u.candidatesTokenCount || 0) * PRICE_OUT) / 1e6;
+ calls++;
+ const t = j?.candidates?.[0]?.content?.parts?.[0]?.text;
+ if (!t) throw new Error('no text: ' + JSON.stringify(j).slice(0, 160));
+ return JSON.parse(t);
+ }
+ throw new Error('gemini 429 after retries');
+}
+
+const M_META = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`;
+const M_TAGS = `mutation($id:ID!,$tags:[String!]!){ tagsAdd(id:$id, tags:$tags){ userErrors{message} } }`;
+
+async function writeProduct(p, d) {
+ const errs = [];
+ const hexes = (d.colors || []).map(c => c.hex).filter(h => /^#[0-9a-fA-F]{6}$/.test(h));
+ const S = 'single_line_text_field';
+ const mf = [
+ { ownerId: p.id, namespace: 'custom', key: 'style_tags', type: S, value: (d.style_tags || []).map(String).join(', ') },
+ { ownerId: p.id, namespace: 'custom', key: 'color_tags', type: S, value: (d.color_tags || []).map(String).join(', ') },
+ { ownerId: p.id, namespace: 'custom', key: 'color_hex', type: S, value: hexes.join(', ') },
+ { ownerId: p.id, namespace: 'custom', key: 'dominant_hex', type: S, value: String(d.dominant_hex || hexes[0] || '') },
+ { ownerId: p.id, namespace: 'custom', key: 'pattern_desc', type: S, value: String(d.pattern || '') },
+ ].filter(m => m.value && m.value.trim());
+ const r1 = await gql(M_META, { mf });
+ (r1.metafieldsSet?.userErrors || []).forEach(e => errs.push('mf:' + e.message));
+ const newTags = [...(d.style_tags || []), ...(d.color_tags || [])].map(String).map(s => s.trim()).filter(Boolean);
+ if (newTags.length) {
+ const r2 = await gql(M_TAGS, { id: p.id, tags: newTags });
+ (r2.tagsAdd?.userErrors || []).forEach(e => errs.push('tag:' + e.message));
+ }
+ return errs;
+}
+
+async function collect() {
+ // single-quote the vendor phrase (double quotes would terminate the GraphQL string literal);
+ // a --vendor run enriches ALL of that vendor regardless of status (Innovations is discontinued
+ // but we still want colors/styles/hex on every SKU). No --vendor -> newest active only.
+ const q = VENDOR ? `vendor:'${VENDOR}'` : `status:active`;
+ let cursor = null, all = [];
+ while (all.length < LIMIT) {
+ const d = await gql(`query($c:String){ products(first:100, sortKey:CREATED_AT, reverse:true, query:"${q}", after:$c){ pageInfo{hasNextPage endCursor} edges{node{ id title vendor featuredImage{url} dominant:metafield(namespace:"custom",key:"dominant_hex"){value} }} } }`, { c: cursor });
+ d.products.edges.forEach(e => all.push(e.node));
+ if (!d.products.pageInfo.hasNextPage) break;
+ cursor = d.products.pageInfo.endCursor;
+ }
+ return all.slice(0, LIMIT);
+}
+
+(async () => {
+ const rows = await collect();
+ const targets = rows.filter(p => p.featuredImage?.url && (FORCE || !p.dominant?.value));
+ const skipNoImg = rows.filter(p => !p.featuredImage?.url).length;
+ const skipDone = rows.filter(p => p.featuredImage?.url && !FORCE && p.dominant?.value).length;
+ console.log(`enrich: scanned ${rows.length} newest active${VENDOR ? ' [' + VENDOR + ']' : ''} · to-do ${targets.length} · skip(done) ${skipDone} · skip(no-img) ${skipNoImg} · budget $${BUDGET} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log('sample:', targets.slice(0, 3).map(t => `${t.vendor}/${t.title.slice(0, 30)}`).join(' | ')); console.log('DRY-RUN. --apply to execute.'); return; }
+
+ let ok = 0, err = 0;
+ for (const p of targets) {
+ if (spend >= BUDGET) { console.log(`\nBUDGET CAP $${BUDGET} reached after ${ok} done ($${spend.toFixed(4)}). Stopping.`); break; }
+ try {
+ const d = await enrich(p.featuredImage.url);
+ const we = await writeProduct(p, d);
+ if (we.length) { err++; console.error(` ⚠ ${p.title.slice(0, 36)}: ${we.slice(0, 2).join('|')}`); }
+ else ok++;
+ if ((ok + err) % 25 === 0) console.log(` ...${ok + err}/${targets.length} (ok=${ok} err=${err}) $${spend.toFixed(4)} (${calls} calls)`);
+ await sleep(120);
+ } catch (e) { err++; console.error(` ERR ${p.title.slice(0, 36)}: ${e.message.slice(0, 120)}`); await sleep(400); }
+ }
+ console.log(`\nDONE. enriched=${ok} errors=${err} · gemini calls=${calls} · spend=$${spend.toFixed(4)}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/normalize-color-tags.js b/scripts/artmura-onboard/normalize-color-tags.js
new file mode 100644
index 0000000..4aca579
--- /dev/null
+++ b/scripts/artmura-onboard/normalize-color-tags.js
@@ -0,0 +1,93 @@
+#!/usr/bin/env node
+/**
+ * Normalize plural color tags -> singular across enriched products.
+ * Gemini occasionally returns "browns / oranges / neutrals" instead of singular.
+ * Fixes BOTH the custom.color_tags metafield AND the product tags
+ * (removes the plural color tag, adds the singular). Idempotent.
+ *
+ * node normalize-color-tags.js # dry-run: count affected
+ * node normalize-color-tags.js --apply
+ * node normalize-color-tags.js --apply --limit=2000
+ */
+const SHOP = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const EP = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '5000', 10);
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// known singular color bases; anything matching base+"s" (or special cases) singularizes
+const COLORS = ['brown','orange','yellow','purple','neutral','blue','green','red','pink','beige','gray','grey','black','white','tan','gold','silver','cream','taupe','greige','navy','teal','mauve','rust','olive','charcoal','burgundy','ivory','peach','coral','aqua','lavender','plum','khaki','bronze','copper','sand','stone','slate','wine','mint','lime','indigo','violet','salmon','mustard','terracotta'];
+const SPECIAL = { neutrals:'neutral', navies:'navy', ivories:'ivory', burgundies:'burgundy', greys:'grey', grays:'gray' };
+function singularize(tag) {
+ const t = String(tag).trim(); const lc = t.toLowerCase();
+ if (SPECIAL[lc]) return SPECIAL[lc];
+ if (lc.endsWith('s')) { const base = lc.slice(0, -1); if (COLORS.includes(base)) return base; }
+ return t;
+}
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(EP, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors)); await sleep(900 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+
+const M_META = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{message} } }`;
+const M_ADD = `mutation($id:ID!,$tags:[String!]!){ tagsAdd(id:$id, tags:$tags){ userErrors{message} } }`;
+const M_REM = `mutation($id:ID!,$tags:[String!]!){ tagsRemove(id:$id, tags:$tags){ userErrors{message} } }`;
+
+async function collect() {
+ let cursor = null, all = [];
+ while (all.length < LIMIT) {
+ const d = await gql(`query($c:String){ products(first:100, query:"status:active", after:$c){ pageInfo{hasNextPage endCursor} edges{node{ id title tags ct:metafield(namespace:"custom",key:"color_tags"){value} }} } }`, { c: cursor });
+ d.products.edges.forEach(e => { if (e.node.ct?.value) all.push(e.node); });
+ if (!d.products.pageInfo.hasNextPage) break;
+ cursor = d.products.pageInfo.endCursor;
+ }
+ return all.slice(0, LIMIT);
+}
+
+(async () => {
+ const rows = await collect();
+ let affected = 0, ok = 0, err = 0;
+ const todo = rows.map(p => {
+ const orig = p.ct.value.split(',').map(s => s.trim()).filter(Boolean);
+ const fixed = [...new Set(orig.map(singularize))];
+ const changedMeta = fixed.join(', ') !== orig.join(', ');
+ // tag changes: any tag that singularizes to something different
+ const tagFixes = (p.tags || []).map(t => ({ from: t, to: singularize(t) })).filter(x => x.to !== x.from && /^[a-z]/i.test(x.from));
+ return { p, fixed, changedMeta, tagFixes };
+ }).filter(x => x.changedMeta || x.tagFixes.length);
+ console.log(`normalize: ${rows.length} enriched scanned · ${todo.length} need fixing · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (todo.length) console.log('e.g.:', todo.slice(0, 4).map(x => `${x.p.title.slice(0, 24)} [${x.fixed.join('/')}]`).join(' | '));
+ if (!APPLY) { console.log('DRY-RUN. --apply to execute.'); return; }
+
+ for (const x of todo) {
+ try {
+ const errs = [];
+ if (x.changedMeta) {
+ const r = await gql(M_META, { mf: [{ ownerId: x.p.id, namespace: 'custom', key: 'color_tags', type: 'single_line_text_field', value: x.fixed.join(', ') }] });
+ (r.metafieldsSet?.userErrors || []).forEach(e => errs.push('mf:' + e.message));
+ }
+ if (x.tagFixes.length) {
+ const rem = [...new Set(x.tagFixes.map(t => t.from))];
+ const add = [...new Set(x.tagFixes.map(t => t.to))];
+ const r1 = await gql(M_ADD, { id: x.p.id, tags: add }); (r1.tagsAdd?.userErrors || []).forEach(e => errs.push('add:' + e.message));
+ const r2 = await gql(M_REM, { id: x.p.id, tags: rem }); (r2.tagsRemove?.userErrors || []).forEach(e => errs.push('rem:' + e.message));
+ }
+ if (errs.length) { err++; console.error(` ⚠ ${x.p.title.slice(0, 32)}: ${errs.slice(0, 2).join('|')}`); } else { ok++; affected++; }
+ if ((ok + err) % 25 === 0) console.log(` ...${ok + err}/${todo.length} (ok=${ok} err=${err})`);
+ await sleep(180);
+ } catch (e) { err++; console.error(` ERR ${x.p.title.slice(0, 32)}: ${e.message.slice(0, 100)}`); await sleep(400); }
+ }
+ console.log(`\nDONE. normalized=${ok} errors=${err} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/onboard.py b/scripts/artmura-onboard/onboard.py
new file mode 100644
index 0000000..2b257cd
--- /dev/null
+++ b/scripts/artmura-onboard/onboard.py
@@ -0,0 +1,241 @@
+#!/usr/bin/env python3
+"""
+Artmura full-monte onboarder (feed-first).
+
+Source: https://newwall.com/collections/artmura (Shopify store; Artmura is one brand newwall resells)
+Captures: SKU, pattern series, color, collection book, newwall RETAIL price, sample price,
+ per-PDP spec table (dimensions/width, grade, coverage, lead-time, origin), body_html,
+ product URL, every product image (downloaded locally).
+
+PRICING NOTE (hard rule): the $235-360/yd prices are newwall.com's RETAIL, NOT our wholesale cost.
+This script captures them as `price_newwall_retail` only. No DW sell price is computed and no Shopify
+push happens here — that is gated on Artmura cost + trade discount (see scraper-must-confirm-cost rule).
+
+Outputs:
+ data/artmura.json structured master package (161 products)
+ images/<sku>-<n>.jpg every product image
+DB refresh is done by db_write.py (reads data/artmura.json — no re-scrape, so it can't
+clobber filled specs). Run order: onboard.py -> fill_specs.py -> db_write.py.
+"""
+import json, os, re, sys, time, html, urllib.request, concurrent.futures as cf
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+ROOT = os.path.abspath(os.path.join(HERE, "..", ".."))
+OUT_DIR = os.path.join(HERE, "data")
+IMG_DIR = os.path.join(ROOT, ".newwall-ref", "artmura", "images")
+os.makedirs(OUT_DIR, exist_ok=True)
+os.makedirs(IMG_DIR, exist_ok=True)
+
+COLLECTION_URL = "https://newwall.com/collections/artmura/products.json?limit=250"
+PDP_BASE = "https://newwall.com/products/"
+UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
+# tags that are NOT the pattern series (generic / merchandising / collection-book labels)
+NON_SERIES = {"Artmura", "maria picks", "Trending", "Contemporary"}
+BOOK_TAGS = {"Opera", "La Scala Milano"} # parent collection "books"
+
+def fetch(url, tries=3, binary=False):
+ last = None
+ for i in range(tries):
+ try:
+ req = urllib.request.Request(url, headers={"User-Agent": UA})
+ with urllib.request.urlopen(req, timeout=30) as r:
+ return r.read() if binary else r.read().decode("utf-8", "replace")
+ except Exception as e:
+ last = e; time.sleep(1.5 * (i + 1))
+ raise last
+
+def parse_specs(pdp_html):
+ pairs = re.findall(
+ r'product-info__label">([^<]+)</th>\s*<td class="product-info__value">(.*?)</td>',
+ pdp_html, re.S)
+ specs, seen = {}, set()
+ for lbl, val in pairs:
+ lbl = lbl.strip().rstrip(":")
+ if lbl in seen:
+ continue
+ seen.add(lbl)
+ specs[lbl] = re.sub(r"<[^>]+>", "", val).strip()
+ return specs
+
+def width_inches(dim):
+ if not dim:
+ return None
+ m = re.search(r'([\d.]+)\s*"', dim) or re.search(r'([\d.]+)\s*(?:in|inch)', dim)
+ return float(m.group(1)) if m else None
+
+def main():
+ no_img = "--no-images" in sys.argv
+ if "--write-db" in sys.argv:
+ sys.exit("DB refresh moved to db_write.py (reads the filled package without re-scraping). "
+ "Run: python3 db_write.py")
+
+ print("→ fetching collection feed ...")
+ feed = json.loads(fetch(COLLECTION_URL))["products"]
+ print(f" {len(feed)} products")
+
+ # 1) fetch all PDP spec tables concurrently
+ print("→ fetching per-product spec tables ...")
+ specs_by_handle = {}
+ def grab(p):
+ try:
+ h = fetch(PDP_BASE + p["handle"])
+ return p["handle"], parse_specs(h)
+ except Exception as e:
+ return p["handle"], {"_error": str(e)}
+ with cf.ThreadPoolExecutor(max_workers=6) as ex:
+ for handle, specs in ex.map(grab, feed):
+ specs_by_handle[handle] = specs
+ ok = sum(1 for s in specs_by_handle.values() if s and "_error" not in s)
+ print(f" specs parsed for {ok}/{len(feed)}")
+
+ # 2) build records
+ records = []
+ for p in feed:
+ title = html.unescape(p["title"]).strip()
+ tags = p.get("tags", [])
+ series = next((t for t in tags if t not in NON_SERIES and t not in BOOK_TAGS), None) \
+ or next((t for t in tags if t not in NON_SERIES), None) or title.split()[0]
+ book = next((t for t in tags if t in BOOK_TAGS), None)
+ color = title[len(series):].strip() if title.lower().startswith(series.lower()) else title
+ yard = next((v for v in p["variants"] if (v["option1"] or "").lower() != "sample"), p["variants"][0])
+ sample = next((v for v in p["variants"] if (v["option1"] or "").lower() == "sample"), None)
+ sku = (yard.get("sku") or "").strip().upper()
+ specs = specs_by_handle.get(p["handle"], {})
+ dim = specs.get("Dimensions")
+ imgs = [im["src"].split("?")[0] for im in p.get("images", [])]
+ records.append({
+ "mfr_sku": sku,
+ "vendor": "Artmura",
+ "pattern_series": series,
+ "color": color or None,
+ "title": title,
+ "collection_book": book,
+ "tags": tags,
+ "product_type": p.get("product_type") or "Wallcoverings",
+ "price_newwall_retail": float(yard["price"]), # newwall RETAIL, NOT our cost
+ "sample_price": float(sample["price"]) if sample else None,
+ "sold_by": yard.get("option1") or "Yard",
+ "substrate": yard.get("option2") or specs.get("Substrate available"),
+ "grade": specs.get("Grade available"),
+ "dimensions": dim,
+ "width_inches": width_inches(dim),
+ "wall_coverage": specs.get("Wall coverage"),
+ "lead_time": specs.get("Lead-time"),
+ "origin": specs.get("Origin"),
+ "body_html": p.get("body_html"),
+ "product_url": PDP_BASE + p["handle"],
+ "handle": p["handle"],
+ "shopify_source_id": p["id"],
+ "images": imgs,
+ "image_count": len(imgs),
+ "published_at": p.get("published_at"),
+ })
+
+ # 3) download images
+ if not no_img:
+ print("→ downloading images ...")
+ jobs = []
+ for r in records:
+ for i, src in enumerate(r["images"], 1):
+ ext = os.path.splitext(src.split("/")[-1])[1] or ".jpg"
+ fn = f"{r['mfr_sku']}-{i}{ext}"
+ jobs.append((src, os.path.join(IMG_DIR, fn), fn))
+ done = [0]; fails = []
+ def dl(job):
+ src, path, fn = job
+ if os.path.exists(path) and os.path.getsize(path) > 0:
+ return fn, True
+ try:
+ data = fetch(src, binary=True)
+ with open(path, "wb") as f:
+ f.write(data)
+ return fn, True
+ except Exception as e:
+ return fn, str(e)
+ with cf.ThreadPoolExecutor(max_workers=10) as ex:
+ for fn, res in ex.map(dl, jobs):
+ done[0] += 1
+ if res is not True:
+ fails.append((fn, res))
+ print(f" {done[0]-len(fails)}/{len(jobs)} images on disk ({len(fails)} failed)")
+ for r in records:
+ r["local_images"] = [
+ f".newwall-ref/artmura/images/{r['mfr_sku']}-{i}{os.path.splitext(s.split('/')[-1])[1] or '.jpg'}"
+ for i, s in enumerate(r["images"], 1)]
+
+ # 4) write master package
+ pkg_path = os.path.join(OUT_DIR, "artmura.json")
+ with open(pkg_path, "w") as f:
+ json.dump({
+ "source": "https://newwall.com/collections/artmura",
+ "vendor": "Artmura",
+ "captured_count": len(records),
+ "price_note": "price_newwall_retail = newwall.com retail; NOT DW wholesale cost. Shopify push gated on Artmura cost + trade discount.",
+ "products": records,
+ }, f, indent=2)
+ print(f"→ wrote {pkg_path}")
+
+ # summary
+ series_ct = {}
+ for r in records:
+ series_ct[r["pattern_series"]] = series_ct.get(r["pattern_series"], 0) + 1
+ print("\n=== CAPTURE SUMMARY ===")
+ print(f"products : {len(records)}")
+ print(f"images : {sum(r['image_count'] for r in records)}")
+ print(f"w/ color : {sum(1 for r in records if r['color'])}")
+ print(f"w/ dimensions : {sum(1 for r in records if r['dimensions'])}")
+ print(f"w/ origin : {sum(1 for r in records if r['origin'])}")
+ print(f"price range : ${min(r['price_newwall_retail'] for r in records):.0f}-${max(r['price_newwall_retail'] for r in records):.0f}/yd (newwall retail)")
+ print(f"series : {len(series_ct)} -> {dict(sorted(series_ct.items(), key=lambda x:-x[1])[:8])}")
+ print("\n(next: python3 fill_specs.py then python3 db_write.py)")
+
+def _unused_refresh_db(records):
+ import subprocess
+ cs = open("/tmp/.dwcs").read().strip()
+ print("\n→ refreshing newwall_catalog rows (by handle) ...")
+ updated = 0
+ for r in records:
+ all_images = "{" + ",".join('"%s"' % s for s in r["images"]) + "}"
+ # store ONLY newwall retail as price_retail reference; leave price_trade/cost untouched-null
+ sql = """
+ UPDATE newwall_catalog SET
+ mfr_sku=%(sku)s, pattern_name=%(pat)s, color_name=%(col)s,
+ collection=%(book)s, product_type=%(ptype)s, material=%(sub)s,
+ width=%(width)s, coverage=%(cov)s, price_retail=%(retail)s,
+ image_url=%(img)s, all_images=%(allimg)s, body_html=%(body)s,
+ us_distributor='newwall.com (reseller)', about_vendor=%(about)s,
+ last_scraped=now(), updated_at=now()
+ WHERE handle=%(handle)s
+ """
+ params = {
+ "sku": r["mfr_sku"], "pat": r["pattern_series"], "col": r["color"],
+ "book": r["collection_book"], "ptype": r["product_type"],
+ "sub": r["substrate"], "width": r["dimensions"],
+ "cov": r["wall_coverage"], "retail": r["price_newwall_retail"],
+ "img": r["images"][0] if r["images"] else None, "allimg": all_images,
+ "body": r["body_html"],
+ "about": f"Artmura — Italian non-woven wallcovering. Grade: {r.get('grade')}. Origin: {r.get('origin')}. Lead-time: {r.get('lead_time')}.",
+ "handle": r["handle"],
+ }
+ # use psql with -v params via a here-doc through python -> safer: build with psycopg-less escaping
+ def esc(v):
+ if v is None: return "NULL"
+ if isinstance(v,(int,float)): return str(v)
+ return "'" + str(v).replace("'", "''") + "'"
+ q = f"""UPDATE newwall_catalog SET
+ mfr_sku={esc(params['sku'])}, pattern_name={esc(params['pat'])}, color_name={esc(params['col'])},
+ collection={esc(params['book'])}, product_type={esc(params['ptype'])}, material={esc(params['sub'])},
+ width={esc(params['width'])}, coverage={esc(params['cov'])}, price_retail={esc(params['retail'])},
+ image_url={esc(params['img'])}, all_images={esc(params['allimg'])}, body_html={esc(params['body'])},
+ us_distributor='newwall.com (reseller)', about_vendor={esc(params['about'])},
+ last_scraped=now(), updated_at=now()
+ WHERE handle={esc(params['handle'])};"""
+ res = subprocess.run(["psql", cs, "-tAc", q], capture_output=True, text=True)
+ if res.returncode == 0 and "UPDATE 1" in res.stdout:
+ updated += 1
+ elif res.stderr.strip():
+ print(" ! ", r["mfr_sku"], res.stderr.strip()[:120])
+ print(f" updated {updated}/{len(records)} rows")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/artmura-onboard/push-artmura-live.js b/scripts/artmura-onboard/push-artmura-live.js
new file mode 100644
index 0000000..71fe3b7
--- /dev/null
+++ b/scripts/artmura-onboard/push-artmura-live.js
@@ -0,0 +1,129 @@
+#!/usr/bin/env node
+/**
+ * Direct Shopify Admin REST creator for Artmura (DW onboard, 2026-06-12).
+ * Models the proven thibaut-mfr-fix/push-thibaut-live.js path (the queue worker is dead).
+ * Creates products as DRAFT on the LIVE store (designer-laboratory-sandbox = prod).
+ *
+ * Pricing: website price, NO trade discount (Steve directive). Yard variant = price_newwall_retail.
+ * Idempotent: skips any handle that already has shopify_product_id in newwall_catalog.
+ *
+ * Usage (via run-push-artmura.sh which sets token/store/db):
+ * node push-artmura-live.js # DRY-RUN: show first 3 planned creates
+ * node push-artmura-live.js --apply --limit=5 # canary: create 5 drafts
+ * node push-artmura-live.js --apply # create all remaining drafts
+ * node push-artmura-live.js --apply --status=active # (only when Steve says go live)
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const { Pool } = require('pg');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_PRODUCT_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const STATUS = (process.argv.find(a => a.startsWith('--status=')) || '--status=draft').split('=')[1];
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const PKG = path.join(__dirname, 'data', 'artmura.json');
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN (never hard-code).'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({
+ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) },
+ }, res => { let b = ''; res.on('data', c => b += c);
+ res.on('end', () => { let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject);
+ req.setTimeout(20000, () => req.destroy(new Error('request timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&':'&','<':'<','>':'>','"':'"' }[c]));
+
+function specTable(r) {
+ const rows = [
+ ['Material', r.substrate || 'Non-Woven'],
+ ['Dimensions', r.dimensions],
+ ['Wall coverage', r.wall_coverage],
+ ['Grade', r.grade],
+ ['Lead-time', r.lead_time],
+ ['Origin', r.origin],
+ ].filter(([, v]) => v);
+ const trs = rows.map(([k, v]) =>
+ `<tr><th style="text-align:left;padding:6px 14px 6px 0;font-weight:600;">${esc(k)}</th><td style="padding:6px 0;">${esc(v)}</td></tr>`).join('\n');
+ return `<div class="artmura-product">\n${r.body_html || ('<p>' + esc(r.title) + ' by Artmura.</p>')}\n<h3>Specifications</h3>\n<table style="border-collapse:collapse;">\n${trs}\n</table>\n</div>`;
+}
+
+function buildPayload(r, dwSku) {
+ const title = `${r.title} Wallcovering | Artmura`;
+ const tags = [r.pattern_series, r.collection_book, 'Wallcovering', 'Non-Woven', 'Made in Italy', 'Artmura', dwSku]
+ .filter(Boolean).join(', ');
+ const images = (r.images || []).map(src => ({ alt: esc(r.title), src }));
+ // NOTE: no metafields on create — the store has existing custom.* definitions with
+ // fixed types (material=multi_line_text_field, some keys=product_reference) and REST
+ // create rejects (422) on any type mismatch. Specs live in body_html; metafields are
+ // backfilled separately (backfill_metafields.js) with per-key type detection.
+ return { product: {
+ title, vendor: 'Artmura', product_type: r.product_type || 'Wallcoverings',
+ status: STATUS, tags, images, body_html: specTable(r),
+ options: [{ name: 'Size' }],
+ variants: [
+ { sku: dwSku, price: String(r.price_newwall_retail), option1: 'Yard', taxable: true, requires_shipping: true },
+ { sku: `${dwSku}-Sample`, price: String(r.sample_price || 5), option1: 'Sample', taxable: true, requires_shipping: true },
+ ],
+ } };
+}
+
+(async () => {
+ const pkg = JSON.parse(fs.readFileSync(PKG, 'utf8')).products;
+ // join dw_sku + existing shopify_product_id from newwall_catalog by handle
+ const { rows } = await pool.query(
+ `SELECT handle, dw_sku, shopify_product_id FROM newwall_catalog WHERE vendor_name='Artmura'`);
+ const byHandle = Object.fromEntries(rows.map(r => [r.handle, r]));
+ let todo = pkg.filter(p => { const d = byHandle[p.handle]; return d && d.dw_sku && !(d.shopify_product_id && String(d.shopify_product_id).trim()); });
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+
+ const already = pkg.length - pkg.filter(p => { const d = byHandle[p.handle]; return d && d.dw_sku && !(d.shopify_product_id); }).length;
+ console.log(`Store: ${STORE} · token …${TOKEN.slice(-4)} · status=${STATUS} · to create: ${todo.length} (already on shopify: ${already}) · mode: ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+
+ if (!APPLY) {
+ for (const r of todo.slice(0, 3)) {
+ const d = byHandle[r.handle];
+ const pl = buildPayload(r, d.dw_sku);
+ console.log(`\n[create] ${d.dw_sku} "${pl.product.title}"`);
+ console.log(` variants: Yard $${r.price_newwall_retail} / Sample $${r.sample_price || 5} · imgs:${pl.product.images.length} · tags: ${pl.product.tags}`);
+ }
+ console.log(`\nDRY-RUN only. Re-run with --apply (optionally --limit=N) to create drafts.`);
+ await pool.end(); return;
+ }
+
+ let ok = 0, fail = 0;
+ for (const r of todo) {
+ const d = byHandle[r.handle];
+ try {
+ const res = await shopify('POST', `/products.json`, buildPayload(r, d.dw_sku));
+ if (res.status === 201 && res.body?.product?.id) {
+ ok++; const pid = res.body.product.id;
+ await pool.query(`UPDATE newwall_catalog SET shopify_product_id=$1, on_shopify=$2, updated_at=now() WHERE handle=$3`,
+ [String(pid), STATUS === 'active', r.handle]);
+ await pool.query(`UPDATE dw_sku_registry SET shopify_product_id=$1 WHERE dw_sku=$2`, [String(pid), d.dw_sku]);
+ console.log(` ✓ ${d.dw_sku} → product ${pid} (${STATUS})`);
+ } else {
+ fail++; console.error(` FAIL ${d.dw_sku}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 200)}`);
+ }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1600 : 560);
+ } catch (e) { fail++; console.error(` ERR ${d.dw_sku}: ${e.message}`); await sleep(560); }
+ }
+ console.log(`\nDONE. created=${ok} failed=${fail} of ${todo.length}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/artmura-onboard/run-fix.sh b/scripts/artmura-onboard/run-fix.sh
new file mode 100755
index 0000000..4708262
--- /dev/null
+++ b/scripts/artmura-onboard/run-fix.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+# Artmura new-arrivals + product_type fix. Token never hard-coded.
+# bash run-fix.sh # dry-run
+# bash run-fix.sh --apply --limit=3 # canary
+# bash run-fix.sh --apply # all 161
+set -euo pipefail
+cd "$(dirname "$0")"
+
+export SHOPIFY_STORE="designer-laboratory-sandbox.myshopify.com"
+export DATABASE_URL="postgresql:///dw_unified?host=/tmp"
+export NODE_PATH="/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules"
+export SHOPIFY_ADMIN_TOKEN="$(grep -hiE '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+
+if [ -z "${SHOPIFY_ADMIN_TOKEN:-}" ]; then
+ echo "FATAL: SHOPIFY_ADMIN_TOKEN not found in ~/Projects/secrets-manager/.env" >&2
+ exit 1
+fi
+echo "store=$SHOPIFY_STORE token=…${SHOPIFY_ADMIN_TOKEN: -4} args=${*:-<dry-run>}"
+exec node fix-newarrivals-and-type.js "$@"
diff --git a/scripts/artmura-onboard/run-push-artmura.sh b/scripts/artmura-onboard/run-push-artmura.sh
new file mode 100755
index 0000000..14ec940
--- /dev/null
+++ b/scripts/artmura-onboard/run-push-artmura.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+# One short command for the Artmura live (DRAFT) create push. Token never hard-coded.
+# bash run-push-artmura.sh # dry-run (first 3 planned)
+# bash run-push-artmura.sh --apply --limit=5 # canary: 5 drafts
+# bash run-push-artmura.sh --apply # all remaining drafts
+set -euo pipefail
+cd "$(dirname "$0")"
+
+export SHOPIFY_STORE="designer-laboratory-sandbox.myshopify.com" # = live designerwallcoverings.com store
+export DATABASE_URL="postgresql:///dw_unified?host=/tmp"
+export NODE_PATH="/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules"
+export SHOPIFY_ADMIN_TOKEN="$(grep -hiE '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+
+if [ -z "${SHOPIFY_ADMIN_TOKEN:-}" ]; then
+ echo "FATAL: SHOPIFY_ADMIN_TOKEN not found in ~/Projects/secrets-manager/.env" >&2
+ exit 1
+fi
+echo "store=$SHOPIFY_STORE token=…${SHOPIFY_ADMIN_TOKEN: -4} args=${*:-<dry-run>}"
+exec node push-artmura-live.js "$@"
diff --git a/scripts/artmura-onboard/update-live-titles.js b/scripts/artmura-onboard/update-live-titles.js
new file mode 100644
index 0000000..4b77852
--- /dev/null
+++ b/scripts/artmura-onboard/update-live-titles.js
@@ -0,0 +1,58 @@
+#!/usr/bin/env node
+/**
+ * Update the 161 live Artmura draft titles → "<name> Wallcovering | Artmura".
+ * PUT merges only the title field. Idempotent (skips titles already correct).
+ * node update-live-titles.js # dry-run (first 3)
+ * node update-live-titles.js --apply
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const { Pool } = require('pg');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_PRODUCT_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const PKG = path.join(__dirname, 'data', 'artmura.json');
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) } },
+ res => { let b = ''; res.on('data', c => b += c); res.on('end', () => { let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject); req.setTimeout(20000, () => req.destroy(new Error('timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+const newTitle = r => `${r.title} Wallcovering | Artmura`;
+
+(async () => {
+ const pkg = JSON.parse(fs.readFileSync(PKG, 'utf8')).products;
+ const { rows } = await pool.query(
+ `SELECT handle, shopify_product_id FROM newwall_catalog WHERE vendor_name='Artmura' AND shopify_product_id IS NOT NULL AND shopify_product_id<>''`);
+ const pid = Object.fromEntries(rows.map(r => [r.handle, r.shopify_product_id]));
+ const todo = pkg.filter(p => pid[p.handle]);
+ console.log(`title update: ${todo.length} products · mode: ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { todo.slice(0, 3).forEach(r => console.log(` ${pid[r.handle]} → "${newTitle(r)}"`)); console.log('\nDRY-RUN. --apply to write.'); await pool.end(); return; }
+ let ok = 0, fail = 0;
+ for (const r of todo) {
+ const id = pid[r.handle];
+ try {
+ const res = await shopify('PUT', `/products/${id}.json`, { product: { id: Number(id), title: newTitle(r) } });
+ if (res.status === 200) { ok++; if (ok % 40 === 0) console.log(` ...${ok}`); }
+ else { fail++; console.error(` FAIL ${id}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 140)}`); }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1500 : 540);
+ } catch (e) { fail++; console.error(` ERR ${id}: ${e.message}`); await sleep(540); }
+ }
+ console.log(`\nDONE. titles updated=${ok} failed=${fail}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/availability-drift/availability-drift-canary.mjs b/scripts/availability-drift/availability-drift-canary.mjs
new file mode 100644
index 0000000..2ffce64
--- /dev/null
+++ b/scripts/availability-drift/availability-drift-canary.mjs
@@ -0,0 +1,88 @@
+// ⚠️ INVALID-AS-BUILT FOR DW (2026-06-16) — DO NOT WIRE NIGHTLY.
+// Empirically, ~97% of mirror-ACTIVE DW products report variant.available=false,
+// because DW is a TRADE / memo-sample / inquiry storefront: most products are sold
+// via sample-request, not direct add-to-cart, so available=false is BY DESIGN — not
+// a stockout. This metric conflates by-design inquiry products with real stockouts
+// and would cry wolf catastrophically (same lesson dw-scraper-canary learned by
+// deferring price). A valid version must key on the inventory=2026 sentinel or the
+// inquiry-CTA render, NOT variant.available. Kept for reference / future redesign.
+//
+// availability-drift-canary — sample top-vendor PDPs and compare what SHOPPERS see
+// (storefront product JSON variant availability) against the dw_unified mirror's
+// ACTIVE status. Catches conversion-killing drift the count/field canaries miss:
+// MISSING — mirror ACTIVE but storefront /products/<handle>.json 404s (not published)
+// UNBUYABLE — storefront product exists but EVERY variant available=false (shopper can't buy)
+// OK — at least one variant purchasable
+// READ-ONLY (public storefront JSON + local psql). $0. No writes.
+// node availability-drift-canary.mjs [--per N] [--vendors "A,B,..."]
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const BASE = 'https://www.designerwallcoverings.com';
+const OUT = `${process.env.HOME}/.claude/yolo-queue/availability-drift-2026-06-16.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/availability-drift-2026-06-16.md`;
+
+const args = process.argv.slice(2);
+const PER = parseInt(args.find((_,i,a)=>a[i-1]==='--per') || '5', 10) || 5;
+const VENDORS = (args.find((_,i,a)=>a[i-1]==='--vendors') || 'Thibaut,Schumacher,Rebel Walls,Kravet,Brunschwig & Fils,Phillipe Romano,Hollywood Wallcoverings,China Seas').split(',');
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 64*1024*1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+const vlist = VENDORS.map(v => `'${v.replace(/'/g,"''")}'`).join(',');
+const rows = q(`
+ with ranked as (
+ select vendor, handle, mfr_sku, row_number() over (partition by vendor order by mfr_sku) rn
+ from shopify_products where status='ACTIVE' and handle is not null and handle<>'' and vendor in (${vlist})
+ ) select vendor, handle, mfr_sku from ranked where rn <= ${PER} order by vendor, handle`)
+ .map(r => ({ vendor: r[0], handle: r[1], sku: r[2] }));
+
+async function check(p) {
+ try {
+ const res = await fetch(`${BASE}/products/${p.handle}.json`, { headers: { 'User-Agent': 'dw-availability-canary' }, signal: AbortSignal.timeout(15000) });
+ if (res.status === 404) return { ...p, state: 'MISSING', detail: '404 on storefront (mirror ACTIVE)' };
+ if (!res.ok) return { ...p, state: 'UNKNOWN', detail: `http ${res.status}` };
+ const j = await res.json();
+ const variants = j.product?.variants || [];
+ if (!variants.length) return { ...p, state: 'UNKNOWN', detail: 'no variants in JSON' };
+ const anyAvail = variants.some(v => v.available === true);
+ if (!anyAvail) return { ...p, state: 'UNBUYABLE', detail: `${variants.length} variants, none available` };
+ return { ...p, state: 'OK', detail: `${variants.filter(v=>v.available).length}/${variants.length} variants buyable` };
+ } catch (e) { return { ...p, state: 'UNKNOWN', detail: `fetch error: ${String(e.message).slice(0,40)}` }; }
+}
+
+(async () => {
+ const results = [];
+ for (const p of rows) { results.push(await check(p)); await sleep(150); }
+ const byState = results.reduce((m,r)=>(m[r.state]=(m[r.state]||0)+1,m),{});
+ const drift = results.filter(r => r.state === 'MISSING' || r.state === 'UNBUYABLE');
+ const byVendor = {};
+ for (const r of results) { (byVendor[r.vendor] ||= { total:0, drift:0 }); byVendor[r.vendor].total++; if (r.state==='MISSING'||r.state==='UNBUYABLE') byVendor[r.vendor].drift++; }
+
+ const report = { generated_at: new Date().toISOString(), sampled: results.length, per_vendor_sample: PER, by_state: byState,
+ drift_count: drift.length, by_vendor: byVendor, drift, ok_sample: results.filter(r=>r.state==='OK').slice(0,3) };
+ fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+ let md = `# Availability-drift canary — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md += `Sampled **${results.length}** PDPs (${PER}/vendor × ${VENDORS.length} vendors), storefront variant availability vs mirror ACTIVE. **READ-ONLY, $0.**\n\n`;
+ md += `State: ${Object.entries(byState).map(([k,v])=>`${k}=${v}`).join(' · ')}\n\n`;
+ if (!drift.length) md += `🟢 **No availability drift in the sample** — every sampled ACTIVE product is live and purchasable on the storefront.\n`;
+ else {
+ md += `🟠 **${drift.length} drift item(s)** (mirror ACTIVE but shopper can't buy):\n\n| Vendor | SKU | Handle | State | Detail |\n|---|---|---|---|---|\n`;
+ for (const d of drift) md += `| ${d.vendor} | ${d.sku} | ${d.handle} | ${d.state} | ${d.detail} |\n`;
+ }
+ md += `\n## Per-vendor\n| Vendor | Sampled | Drift |\n|---|---:|---:|\n`;
+ for (const [v,s] of Object.entries(byVendor)) md += `| ${v} | ${s.total} | ${s.drift} |\n`;
+ md += `\n_Sample-based canary (${PER}/vendor); scale --per for fuller coverage. Drift = MISSING (404) or UNBUYABLE (no available variant). UNKNOWN = transient fetch, not drift._\n`;
+ fs.writeFileSync(MD, md);
+
+ console.log(`[availability-drift] sampled ${results.length} · ${Object.entries(byState).map(([k,v])=>`${k}=${v}`).join(' ')} · drift=${drift.length}`);
+ for (const d of drift) console.log(` ⚠️ ${d.vendor} ${d.sku} (${d.handle}): ${d.state} — ${d.detail}`);
+ console.log(`Report: ${MD}`);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/backfill-clarke-redirects.py b/scripts/backfill-clarke-redirects.py
new file mode 100644
index 0000000..d98bbf6
--- /dev/null
+++ b/scripts/backfill-clarke-redirects.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+"""
+Backfill 301 redirects for the renamed Clarke handles: old hashed handle -> new
+dwkk-{number} handle. Reads every old->new pair from rename-clarke-handles-ledger.jsonl
+and creates a Shopify URL redirect (/products/<old> -> /products/<new>) so the old
+hashed URLs stop 404-ing. Idempotent (skips pairs that already have a redirect).
+REQUIRES a token with write_online_store_navigation (the default one lacks it —
+this will ACCESS_DENIED until the scope is added). $0 (Shopify Admin GraphQL).
+
+Env: DRYRUN=1 to only report the count.
+"""
+import os,sys,json,urllib.request,time
+SHOP="designer-laboratory-sandbox.myshopify.com"
+DRYRUN=os.environ.get("DRYRUN")=="1"
+HERE=os.path.dirname(os.path.abspath(__file__))
+LEDGER=os.path.join(HERE,"rename-clarke-handles-ledger.jsonl")
+TOKEN_VAR=os.environ.get("TOKEN_VAR","SHOPIFY_ADMIN_TOKEN") # Steve 2026-06-18: use SHOPIFY_DW_ADMIN_TOKEN_CONTENT for redirects
+def _token():
+ for p in (os.path.join(HERE,"..",".env"), os.path.expanduser("~/Projects/secrets-manager/.env")):
+ try:
+ for ln in open(p):
+ if ln.startswith(TOKEN_VAR+"="): return ln.split("=",1)[1].strip()
+ except FileNotFoundError: pass
+ sys.exit(f"no {TOKEN_VAR}")
+TOKEN=_token(); URL=f"https://{SHOP}/admin/api/2024-10/graphql.json"
+def gql(q,v=None):
+ req=urllib.request.Request(URL,data=json.dumps({"query":q,"variables":v or {}}).encode(),
+ headers={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"})
+ return json.load(urllib.request.urlopen(req,timeout=40))
+
+# unique old->new pairs from the ledger (last write wins; only successful renames)
+pairs={}
+for ln in open(LEDGER):
+ try: r=json.loads(ln)
+ except: continue
+ old,new=r.get("old"),r.get("new")
+ if old and new and old!=new and old.startswith("dwkk-g"):
+ pairs[old]=new
+print(f"old->new redirect pairs: {len(pairs)}")
+if DRYRUN:
+ for o,n in list(pairs.items())[:5]: print(f" /products/{o} -> /products/{n}")
+ sys.exit(0)
+
+RC='mutation($r:UrlRedirectInput!){ urlRedirectCreate(urlRedirect:$r){ urlRedirect{id} userErrors{field message} } }'
+made=skip=err=0
+for i,(old,new) in enumerate(pairs.items(),1):
+ try:
+ r=gql(RC,{"r":{"path":f"/products/{old}","target":f"/products/{new}"}}).get("data",{}).get("urlRedirectCreate") or {}
+ ue=r.get("userErrors") or []
+ if any("already" in (e.get("message","").lower()) for e in ue): skip+=1
+ elif ue: err+=1; (print(" err:",ue[:1]) if err<=3 else None)
+ elif r.get("urlRedirect"): made+=1
+ except Exception as e:
+ err+=1
+ if err<=3: print(" exc:",str(e)[:100])
+ if i%200==0: print(f" [{i}/{len(pairs)}] made={made} skip={skip} err={err}",flush=True)
+ time.sleep(0.3)
+print(f"DONE redirects made={made} already-existed={skip} errors={err} of {len(pairs)}")
diff --git a/scripts/banned-word-rewrite-plan.js b/scripts/banned-word-rewrite-plan.js
new file mode 100644
index 0000000..4d22eae
Binary files /dev/null and b/scripts/banned-word-rewrite-plan.js differ
diff --git a/scripts/bannedword-body-leak/bannedword-body-leak.mjs b/scripts/bannedword-body-leak/bannedword-body-leak.mjs
new file mode 100644
index 0000000..d6f2d26
--- /dev/null
+++ b/scripts/bannedword-body-leak/bannedword-body-leak.mjs
@@ -0,0 +1,85 @@
+// bannedword-body-leak — pull the live body_html for the AI-preamble-leaking
+// products (from the 2026-06-15 banned-word audit), classify the leak, and PREVIEW
+// the strip transform. READ-ONLY (GraphQL GET of descriptionHtml). No writes. $0.
+//
+// Leak classes:
+// md_fence — markdown code fences wrapping the body (```html ... ```)
+// ai_preamble — leading "Sure, here is..." / "Certainly!" / "As an AI..." etc.
+// ai_trailing — trailing "Let me know if...", "I hope this helps"
+// Strip transform (previewed, not applied): drop fences + leading/trailing AI lines.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const TOKEN = (fs.readFileSync(`${process.env.HOME}/Projects/secrets-manager/.env`, 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
+const HOST = 'designer-laboratory-sandbox.myshopify.com', API = '2024-10';
+const AUDIT = `${process.env.HOME}/.claude/yolo-queue/banned-word-live-audit-2026-06-15.json`;
+const OUT = `${process.env.HOME}/.claude/yolo-queue/bannedword-body-leak-2026-06-16.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/bannedword-body-leak-2026-06-16.md`;
+
+const ids = JSON.parse(fs.readFileSync(AUDIT, 'utf8')).samples.preamble.map(p => `gid://shopify/Product/${p.id}`);
+
+async function gql(query) {
+ const res = await fetch(`https://${HOST}/admin/api/${API}/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query }),
+ });
+ return (await res.json()).data;
+}
+
+// strip transform
+const FENCE = /^\s*```(?:html|json|markdown)?\s*$|```/gim;
+const PREAMBLE = /^\s*(?:sure|certainly|absolutely|of course|here(?:'s| is)(?: the| a)?|below is|i'd be happy to|i would be happy to|as an ai|as a language model|i cannot|i can't|i apologize|okay|ok)\b[^.\n]*[.:!]?\s*/i;
+const TRAILING = /\s*(?:let me know if[^.\n]*\.?|i hope this helps[^.\n]*\.?|feel free to[^.\n]*\.?|hope (?:this|that) helps[^.\n]*\.?)\s*$/i;
+
+function classify(body) {
+ const cls = [];
+ if (/```/.test(body)) cls.push('md_fence');
+ if (PREAMBLE.test(body.replace(/<[^>]+>/g, '').trimStart())) cls.push('ai_preamble');
+ if (TRAILING.test(body.replace(/<[^>]+>/g, '').trimEnd())) cls.push('ai_trailing');
+ return cls;
+}
+function strip(body) {
+ let s = body.replace(FENCE, '');
+ // strip leading preamble from the visible text (after any opening tag)
+ s = s.replace(/^(\s*(?:<p>|<div>|<span>)?\s*)/i, (m) => m).replace(PREAMBLE, '');
+ s = s.replace(TRAILING, '');
+ return s.trim();
+}
+
+(async () => {
+ const out = [];
+ for (let i = 0; i < ids.length; i += 40) {
+ const chunk = ids.slice(i, i + 40);
+ const d = await gql(`{ nodes(ids: [${chunk.map(x => `"${x}"`).join(',')}]) { ... on Product { id title vendor descriptionHtml } } }`);
+ for (const n of (d?.nodes || [])) {
+ if (!n) continue;
+ const body = n.descriptionHtml || '';
+ const cls = classify(body);
+ const after = strip(body);
+ out.push({ id: n.id.split('/').pop(), vendor: n.vendor, title: n.title, classes: cls,
+ before_len: body.length, after_len: after.length, removed_chars: body.length - after.length,
+ before_head: body.slice(0, 160), after_head: after.slice(0, 160) });
+ }
+ }
+ const byClass = out.reduce((m, r) => { for (const c of (r.classes.length ? r.classes : ['none'])) m[c] = (m[c]||0)+1; return m; }, {});
+ const byVendor = out.reduce((m, r) => (m[r.vendor] = (m[r.vendor]||0)+1, m), {});
+ const report = { generated_at: new Date().toISOString(), source: 'live Shopify descriptionHtml (READ-ONLY)', total: out.length, by_class: byClass, by_vendor: byVendor, products: out };
+ fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+ let md = `# Banned-word body-leak (AI preamble) — live cleanup list + strip preview\n\n`;
+ md += `**$0, READ-ONLY** (pulled live descriptionHtml for the ${out.length} flagged products). No writes.\n\n`;
+ md += `## Leak classes\n${Object.entries(byClass).map(([k,v])=>`- **${k}**: ${v}`).join('\n')}\n\n`;
+ md += `## By vendor\n${Object.entries(byVendor).sort((a,b)=>b[1]-a[1]).map(([k,v])=>`- ${k}: ${v}`).join('\n')}\n\n`;
+ md += `## Strip transform (previewed, GATED to apply)\n`;
+ md += `1. remove markdown code fences (\\\`\\\`\\\`html … \\\`\\\`\\\`)\n2. strip leading AI preamble ("Sure, here is…", "Certainly!", "As an AI…")\n3. strip trailing AI notes ("Let me know if…", "I hope this helps")\n\n`;
+ md += `## Before → after (sample)\n`;
+ for (const r of out.filter(r => r.classes.length).slice(0, 15)) {
+ md += `\n**${r.vendor} · ${r.title}** (id ${r.id}, classes: ${r.classes.join(',')}, −${r.removed_chars} chars)\n`;
+ md += `- before: \`${r.before_head.replace(/\n/g,' ')}\`\n`;
+ md += `- after: \`${r.after_head.replace(/\n/g,' ')}\`\n`;
+ }
+ md += `\n_Full list + per-product before/after in the JSON. Apply via shopify_api_queue {id, body_html:<stripped>} — GATED, Steve approves._\n`;
+ fs.writeFileSync(MD, md);
+ console.log(`[body-leak] ${out.length} products | classes: ${JSON.stringify(byClass)}`);
+ console.log(`Report: ${MD}`);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/bannedword-title-preview/bannedword-title-preview.mjs b/scripts/bannedword-title-preview/bannedword-title-preview.mjs
new file mode 100644
index 0000000..e8e4261
--- /dev/null
+++ b/scripts/bannedword-title-preview/bannedword-title-preview.mjs
@@ -0,0 +1,106 @@
+// bannedword-title-preview — PREVIEW-ONLY remediation for the banned word
+// 'Wallpaper' in live product titles. Generates the rewrite transform and its
+// edge-case census so Steve can approve the (gated) bulk rewrite with eyes on
+// real before->after pairs. WRITES NOTHING to Shopify.
+//
+// Core insight surfaced by the data: a NAIVE global Wallpaper->Wallcovering would
+// corrupt brand names for vendors whose NAME contains "Wallpaper" (Malibu Wallpaper,
+// Scalamandre Wallpaper, etc.) — there "Wallpaper" sits only in the "| <brand>"
+// suffix and is the legitimate vendor name, NOT a banned-word violation.
+//
+// GUARDED transform: split title on " | " into [descriptor, brand-suffix]; replace
+// 'Wallpaper'->'Wallcovering' ONLY in the descriptor; leave the brand suffix intact.
+// - descriptor has the word -> CLEAN rewrite
+// - word only in brand suffix -> NO-CHANGE (false positive; brand name)
+// - doubled result / plural -> NEEDS-REVIEW
+//
+// Source: dw_unified mirror (READ-ONLY). NB the mirror shows ~1,508 ACTIVE titles
+// with the word vs the storefront audit's 25,131 — the mirror undercounts (stale/
+// partial title sync), so the actual bulk rewrite must target LIVE Shopify. This is
+// a representative transform+edge-case preview, not the final worklist.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const OUT = `${process.env.HOME}/.claude/yolo-queue/bannedword-title-preview-2026-06-16.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/bannedword-title-preview-2026-06-16.md`;
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '\t', '-c', sql], { encoding: 'utf8', maxBuffer: 128 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('\t')) : [];
+}
+
+const rows = q(`select vendor, mfr_sku, title from shopify_products
+ where status='ACTIVE' and title ~* 'wallpaper' order by vendor, mfr_sku`)
+ .map(r => ({ vendor: r[0], sku: r[1], title: r[2] }));
+
+const RE = /\bwallpaper\b/gi;
+const repl = (s) => s.replace(RE, (m) => m[0] === 'W' ? 'Wallcovering' : 'wallcovering');
+
+const cats = { clean: [], brand_only_nochange: [], needs_review: [] };
+const byVendor = {};
+for (const r of rows) {
+ byVendor[r.vendor] = (byVendor[r.vendor] || 0) + 1;
+ const parts = r.title.split(' | ');
+ const brand = parts.length > 1 ? parts.slice(1).join(' | ') : '';
+ const desc = parts[0];
+ const descHas = RE.test(desc); RE.lastIndex = 0;
+ let newTitle, cat;
+ if (!descHas) { newTitle = r.title; cat = 'brand_only_nochange'; }
+ else {
+ const newDesc = repl(desc);
+ newTitle = parts.length > 1 ? [newDesc, ...parts.slice(1)].join(' | ') : newDesc;
+ // needs-review heuristics
+ if (/wallcovering\s+wallcovering/i.test(newTitle) || /\bwallpapers\b/i.test(r.title) || /\bwallcovering\b.*\bwallpaper\b/i.test(r.title)) cat = 'needs_review';
+ else cat = 'clean';
+ }
+ const rec = { vendor: r.vendor, sku: r.sku, before: r.title, after: newTitle, brand };
+ cats[cat].push(rec);
+}
+
+const sampleAcross = (arr, n) => {
+ const byV = {}; for (const x of arr) (byV[x.vendor] ||= []).push(x);
+ const out = []; const keys = Object.keys(byV);
+ let i = 0; while (out.length < n && keys.length) { const k = keys[i % keys.length]; if (byV[k].length) out.push(byV[k].shift()); else { keys.splice(i % keys.length, 1); continue; } i++; }
+ return out;
+};
+
+const out = {
+ generated_at: new Date().toISOString(),
+ source: 'dw_unified mirror (READ-ONLY)',
+ mirror_count: rows.length,
+ storefront_audit_count: 25131,
+ note: 'mirror undercounts live titles; bulk rewrite must target live Shopify, not this mirror',
+ transform: "GUARDED: replace \\bWallpaper\\b -> Wallcovering ONLY in the descriptor (text before ' | '); brand suffix preserved",
+ category_counts: { clean: cats.clean.length, brand_only_nochange: cats.brand_only_nochange.length, needs_review: cats.needs_review.length },
+ by_vendor: Object.entries(byVendor).sort((a,b)=>b[1]-a[1]),
+ samples_clean: sampleAcross(cats.clean, 30),
+ samples_brand_only: sampleAcross(cats.brand_only_nochange, 12),
+ samples_needs_review: cats.needs_review.slice(0, 20),
+};
+fs.writeFileSync(OUT, JSON.stringify(out, null, 2));
+
+let md = `# Banned-word 'Wallpaper' title rewrite — PREVIEW (report-only)\n\n`;
+md += `**$0, READ-ONLY.** No Shopify writes. Source: dw_unified mirror.\n\n`;
+md += `⚠️ **Count caveat:** mirror shows **${rows.length}** ACTIVE titles with the word; the storefront audit found **25,131**. The mirror undercounts (stale/partial title sync) — the actual bulk rewrite MUST run against LIVE Shopify, not the mirror. This is a representative transform + edge-case preview.\n\n`;
+md += `## Guarded transform\n\`${out.transform}\`\n\n`;
+md += `## Category census (of ${rows.length} mirror rows)\n`;
+md += `| Category | Count | Meaning |\n|---|---:|---|\n`;
+md += `| ✅ CLEAN rewrite | ${cats.clean.length} | word is in the descriptor → safe Wallpaper→Wallcovering |\n`;
+md += `| 🚫 BRAND-ONLY (no change) | ${cats.brand_only_nochange.length} | word ONLY in the brand suffix (e.g. \\| Malibu Wallpaper) → DO NOT rewrite (legit vendor name) |\n`;
+md += `| 🟠 NEEDS REVIEW | ${cats.needs_review.length} | doubled 'Wallcovering Wallcovering', plural 'Wallpapers', or mixed |\n\n`;
+md += `> **The critical guard:** a naive global replace would corrupt ${cats.brand_only_nochange.length} titles' brand names (Malibu Wallpaper → Malibu Wallcovering, etc.). The guarded transform leaves the brand suffix untouched.\n\n`;
+md += `## Affected by vendor\n| Vendor | Count |\n|---|---:|\n`;
+for (const [v, c] of out.by_vendor) md += `| ${v} | ${c} |\n`;
+md += `\n## CLEAN before→after (sample)\n`;
+for (const s of out.samples_clean.slice(0, 20)) md += `- \`${s.before}\`\n → \`${s.after}\`\n`;
+md += `\n## BRAND-ONLY — DO NOT rewrite (sample)\n`;
+for (const s of out.samples_brand_only) md += `- \`${s.before}\` _(word is the brand)_\n`;
+if (cats.needs_review.length) { md += `\n## NEEDS REVIEW (sample)\n`; for (const s of out.samples_needs_review) md += `- \`${s.before}\` → \`${s.after}\`\n`; }
+md += `\n_Gated: the bulk rewrite (live Shopify, via shopify_api_queue {id,title}) needs Steve's approval. This preview + the brand-suffix guard is the spec._\n`;
+fs.writeFileSync(MD, md);
+
+console.log(`[bannedword-title-preview] mirror=${rows.length}: clean=${cats.clean.length} brand-only-nochange=${cats.brand_only_nochange.length} needs-review=${cats.needs_review.length}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/body-quality-scan/body-quality-scan.mjs b/scripts/body-quality-scan/body-quality-scan.mjs
new file mode 100644
index 0000000..3a3b9e1
--- /dev/null
+++ b/scripts/body-quality-scan/body-quality-scan.mjs
@@ -0,0 +1,36 @@
+import fs from 'fs';
+const T=(fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2500);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2500);continue;}return j;}throw new Error('throttled');}
+const txt=h=>(h||'').replace(/<[^>]+>/g,'').replace(/&[a-z]+;/g,' ').replace(/\s+/g,' ').trim();
+// defect classifiers (segmented)
+const cls={
+ empty: b=>txt(b).length<5,
+ preamble: b=>/^\s*(<p>\s*)?(okay,?\s*)?here('s|s| is| are)\s+a?\s*product\s+description/i.test(b),
+ codefence: b=>/```|<code>|^\s*\|.*\|.*\|/m.test(b) || /\*\*[A-Z]/.test(txt(b)),
+ ai_artifact: b=>/\b(as an ai|i'm sorry|i cannot|certainly[!,]|here is the|in summary,|note:|disclaimer:)\b/i.test(txt(b)),
+ truncated: b=>{const t=txt(b); return t.length>20 && t.length<400 && /[a-z,]$/.test(t) && !/[.!?)]$/.test(t);},
+};
+const counts={empty:0,preamble:0,codefence:0,ai_artifact:0,truncated:0}; const samples={empty:[],codefence:[],ai_artifact:[],truncated:[]};
+let cur=null,total=0,pages=0; const t0=Date.now();
+do{
+ const j=await gql(`query($c:String){products(first:100,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{handle vendor descriptionHtml}}}`,{c:cur});
+ const pg=j.data.products;
+ for(const n of pg.nodes){ total++; const b=n.descriptionHtml||'';
+ if(cls.empty(b)){counts.empty++; if(samples.empty.length<6)samples.empty.push(n.handle+' ['+n.vendor+']');}
+ else { // a body can only be one of the rest meaningfully; check in priority
+ if(cls.preamble(b)){counts.preamble++;}
+ else if(cls.codefence(b)){counts.codefence++; if(samples.codefence.length<6)samples.codefence.push(n.handle+' ['+n.vendor+']');}
+ else if(cls.ai_artifact(b)){counts.ai_artifact++; if(samples.ai_artifact.length<6)samples.ai_artifact.push(n.handle+' ['+n.vendor+']');}
+ else if(cls.truncated(b)){counts.truncated++; if(samples.truncated.length<6)samples.truncated.push(n.handle+' ['+n.vendor+'] :: '+txt(b).slice(-50));}
+ }
+ }
+ pages++; if(pages%150===0)process.stderr.write(` ...${pages}p ${total} prod\n`);
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+const out={total, elapsed_s:((Date.now()-t0)/1000)|0, counts, samples};
+fs.writeFileSync('/tmp/body-quality.json',JSON.stringify(out,null,2));
+console.log(`scanned ${total} ACTIVE in ${out.elapsed_s}s`);
+console.log('defect counts:',JSON.stringify(counts));
+for(const k of Object.keys(samples)){ if(samples[k].length){console.log(`-- ${k} samples --`); samples[k].forEach(s=>console.log(' '+s)); } }
diff --git a/scripts/brands-page/build-brands.cjs b/scripts/brands-page/build-brands.cjs
new file mode 100644
index 0000000..5d2cab1
--- /dev/null
+++ b/scripts/brands-page/build-brands.cjs
@@ -0,0 +1,135 @@
+const fs=require('fs'),path=require('path');
+const HOME=process.env.HOME;
+const VL=HOME+'/Projects/Designer-Wallcoverings/vendor-logos';
+const rows=JSON.parse(fs.readFileSync(__dirname+'/brands-map.json','utf8'));
+const probed=JSON.parse(fs.readFileSync(__dirname+'/probed-logos.json','utf8'));
+const cdn=JSON.parse(fs.readFileSync(VL+'/_cdn-urls.json','utf8'));
+const roomPath=fs.existsSync(__dirname+'/room-final.json')?__dirname+'/room-final.json':'/tmp/room-final.json';
+const room=fs.existsSync(roomPath)?JSON.parse(fs.readFileSync(roomPath,'utf8')):{};
+
+const DROP=new Set(['WallQuest','Nicolette Mayer Wallpaper','Graduate Collection UK','Roberto Cavalli Wallpaper','1838 Wallcoverings']);
+const BANNED=/wallquest|chesapeake|brewster|nextwall|seabrook|nicolette/i;
+const HOUSE=new Set(['British Walls','LEED Walls','LA Walls','Primo Leathers','Surface Stick','Novasuede','Ultrasuede','DW Bespoke Studio','DW Exclusive Wallpaper','Steve Abrams Studios','PR Faux Leather','Designer Wallcoverings','Zeuxis Parrhasius at DW']);
+const FORCE_WM=new Set([]);
+const SANS=new Set(['Backdrop','Glitter Walls','Retro Walls','Wallpaper NYC','LEED Walls','LA Walls','Surface Stick','British Walls','Atomic 50 Ceilings','Contrado','Fentucci','SUGARBOO','OLIVIA AND POPP','Versa Designed Surfaces','PR Faux Leather','AS Creation','Hollywood Wallcoverings','Malibu Wallpaper','Marimekko','Artmura']);
+
+const SRC={'FallingStar Studio':{f:'fallingstar.png'},'Artmura':{f:'artmura.png'},'Contrado':{f:'contrado-src.svg'},'Coordonné':{f:'coordonne-src.svg'},'Daisy Bennett':{f:'daisy-bennett-src.svg'},'Emiliana Parati':{f:'emiliana-parati-src.png'},'Laura Ashley Wallpaper':{f:'laura-ashley-src.png'},'Sandberg':{f:'sandberg-src.webp'},'Tres Tintas':{f:'tres-tintas-src.svg'},'Holland and Sherry':{f:'holland-and-sherry-src.svg'},'Kelly Wearstler':{f:'kelly-wearstler-src.svg'},'NLXL':{f:'nlxl-src.jpg'},'Gaston Y Daniela':{f:'gaston-y-daniela-v2-src.png'},'Brand McKenzie':{f:'brand-mckenzie-src.svg',dark:1},'Marburg':{f:'marburg-src.webp',dark:1},'Villa Nova':{f:'villa-nova-src.svg',dark:1}};
+// Generated luxe wordmark SVGs (gen-wordmarks.cjs) — one tasteful chip per brand
+// with no sourceable mark (DTD verdict B, 2026-06-14). Filenames are wm-<slug>.svg.
+const WORDMARK=['AS Creation','Atomic 50 Ceilings','Backdrop','British Walls','Clarence House','Dedar','Designer Wallcoverings','Dolce & Gabbana','DW Bespoke Studio','DW Exclusive Wallpaper','Fentucci','Glitter Walls','LA Walls','LEED Walls','Novasuede','OLIVIA AND POPP','Peg Norriss','PR Faux Leather','Primo Leathers','Retro Walls','Sacha Walckhoff','Sancar','Steve Abrams Studios','SUGARBOO','Surface Stick','Ultrasuede','Wallpaper NYC','Zeuxis Parrhasius at DW','Phillipe Romano','Hollywood Wallcoverings','Malibu Wallpaper','Jeffrey Stevens','Marimekko'];
+const wmSlug=s=>s.toLowerCase().normalize('NFD').replace(/[^a-z0-9]+/g,'-').replace(/(^-|-$)/g,'');
+for(const b of WORDMARK)SRC[b]={f:'wm-'+wmSlug(b)+'.svg'};
+const mime={svg:'image/svg+xml',png:'image/png',jpg:'image/jpeg',jpeg:'image/jpeg',webp:'image/webp'};
+function dataURI(file){const p=path.join(VL,file);if(!fs.existsSync(p))return null;const ext=file.split('.').pop().toLowerCase();return `data:${mime[ext]||'image/png'};base64,${fs.readFileSync(p).toString('base64')}`;}
+
+const FEATURED=['Schumacher','Thibaut','Cole & Son','Ralph Lauren','Kravet'];
+const FEATURED_FABRICS=['Pierre Frey','Lee Jofa','Romo','Designers Guild','Holland and Sherry'];
+const decode=s=>s.replace(/&/g,'&');
+const deAcc=s=>s.normalize('NFD').replace(/[̀-ͯ]/g,'');
+const norm=s=>deAcc(s).replace(/&|&/g,' and ').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/(^-|-$)/g,'');
+const idx={};Object.keys(cdn).forEach(k=>idx[norm(k)]=k);
+const ALIAS={'schumacher':'schumacher-shopify','missoni-wallpaper':'missoni-home','william-morris':'william-morris-and-co','morris-and-company':'morris-and-co','arte-international':'arte-specialty','newmor-wallcoverings':'newmor-logo','innovations-usa':'innovations','versa-designed-surfaces':'versa','koroseal':'arbor-wood-wallcoverings','kravet':'kravet-logo','graduate-collection':'graduate-collection-shopify','1838-wallcoverings':'1838-wallcoverings-shopify','fabricut':'fabricut-stroheim','elitis':'elitis-panoramic','scalamandre-wallpaper':'scalamandre','scalamandre-fabrics':'scalamandre','roberto-cavalli':'roberto-cavalli','osborne-and-little':'osborne-little','versace':'versace-home-shopify','nina-campbell':'nina-campbell-shopify','milton-and-king':'milton-king','gp-and-j-baker':'gp-j-baker','brunschwig-and-fils':'brunschwig-fils','mulberry':'mulberry-home','versace':'versace-home-shopify'};
+function cdnLogo(title){const b=norm(decode(title));if(ALIAS[b]&&cdn[ALIAS[b]])return cdn[ALIAS[b]].url;const c=[b,norm(decode(title).replace(/\b(wallpaper|wallcoverings?|at dw|usa|uk|home|international|fabrics?)\b/gi,'')),b+'-shopify',b+'-home',b+'-and-co'];for(const x of c)if(idx[x])return cdn[idx[x]].url;return null;}
+
+function logoFor(r,title){
+ const src=SRC[r.title]||SRC[title];
+ if(src){const u=dataURI(src.f);if(u)return {logo:u,dark:!!src.dark};}
+ if(!HOUSE.has(r.title)&&!FORCE_WM.has(title)){
+ const lg=cdnLogo(title)||r.logo||probed[r.title]||'';if(lg)return {logo:lg,dark:false};
+ // factory bake: drop a logo file named by the collection slug (vendor-logos/<slug>.<ext>)
+ // when onboarding a vendor and it auto-inlines here — no per-vendor code edit needed.
+ const slug=(r.href||'').split('/').filter(Boolean).pop();
+ if(slug)for(const ext of ['svg','png','webp','jpg','jpeg']){const u=dataURI(slug+'.'+ext);if(u)return {logo:u,dark:false};}
+ }
+ return {logo:'',dark:false};
+}
+function resolve(r){
+ const title=decode(r.title);
+ if(BANNED.test(title))return null;
+ const {logo,dark}=logoFor(r,title);
+ const bg=room[title]||room[r.title]||'';
+ return {title,href:r.href,logo,dark,bg};
+}
+let items=rows.filter(r=>!DROP.has(r.title)).map(resolve).filter(Boolean);
+const byHref={};for(const it of items){const k=it.href;if(!byHref[k]||((!byHref[k].logo&&it.logo)||(!byHref[k].bg&&it.bg)))byHref[k]=it;}
+items=Object.values(byHref).sort((a,b)=>a.title.localeCompare(b.title));
+
+const featuredItems=FEATURED.map(name=>items.find(it=>it.title===name)).filter(Boolean);
+const featuredFabricsItems=FEATURED_FABRICS.map(name=>items.find(it=>it.title===name)).filter(Boolean);
+const esc=s=>s.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
+function card(it){
+ const label=esc(it.title);
+ const dn=label.toLowerCase().replace(/&/g,'&');
+ const chipInner = it.logo
+ ? `<img loading="lazy" alt="${label}" src="${it.logo}">`
+ : `<span class="${SANS.has(it.title)?'nm nm-sans':'nm nm-serif'}">${label}</span>`;
+ if(it.bg){
+ return `<a href="${it.href}" class="dw-brand-card dw-has-bg${it.dark?' dw-dark':''}" title="${label}" data-name="${dn}"><span class="dw-bg"><img loading="lazy" alt="${label}" src="${it.bg}"></span><span class="dw-chip">${chipInner}</span></a>`;
+ }
+ if(it.logo){
+ return `<a href="${it.href}" class="dw-brand-card${it.dark?' dw-dark':''}" title="${label}" data-name="${dn}"><span class="dw-brand-logo"><img loading="lazy" alt="${label}" src="${it.logo}"></span></a>`;
+ }
+ return `<a href="${it.href}" class="dw-brand-card dw-wmcard" title="${label}" data-name="${dn}"><span class="${SANS.has(it.title)?'nm nm-sans':'nm nm-serif'}">${label}</span></a>`;
+}
+const nbg=items.filter(i=>i.bg).length, nlogo=items.filter(i=>i.logo).length, nwm=items.filter(i=>!i.logo).length;
+const css=`<style>
+@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@500;600&family=Montserrat:wght@500;600&display=swap');
+.page-content.rte{max-width:100%!important;padding:0!important;margin:0!important}
+.template-page .main-content,.template-page .page-width,.template-page .main-content .grid{max-width:100%!important;padding:0!important}
+.dw-brand-head{text-align:center;padding:34px 20px 8px}
+.dw-brand-head h1{font-family:'Playfair Display',Georgia,serif;font-size:clamp(26px,3vw,36px);font-weight:600;color:#1a1a1a;margin:0 0 6px;letter-spacing:-.01em}
+.dw-brand-head p{font-family:-apple-system,'Segoe UI',Roboto,sans-serif;font-size:13px;color:#8a8a8a;margin:0}
+.dw-brand-grid{display:grid!important;grid-template-columns:repeat(5,1fr)!important;gap:10px!important;padding:14px 22px 52px!important;max-width:1400px!important;margin:0 auto!important}
+.dw-brand-card{position:relative;display:flex;align-items:center;justify-content:center;aspect-ratio:1/1;background:#fff;border:1px solid #e7e7e7;border-radius:12px;overflow:hidden;text-decoration:none;transition:transform .18s,box-shadow .18s}
+.dw-brand-card:hover{transform:translateY(-3px);box-shadow:0 14px 32px rgba(0,0,0,.16)}
+.dw-bg{position:absolute;inset:0;display:block}
+.dw-bg img{width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform .45s ease}
+.dw-brand-card:hover .dw-bg img{transform:scale(1.05)}
+.dw-chip{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:66%;min-width:120px;min-height:52px;background:rgba(255,255,255,.96);border-radius:10px;padding:12px 14px;box-shadow:0 8px 22px rgba(0,0,0,.16),0 2px 6px rgba(0,0,0,.10),0 1px 0 rgba(255,255,255,.65) inset;display:flex;align-items:center;justify-content:center;box-sizing:border-box}
+.dw-chip img{max-width:100%;max-height:44px;object-fit:contain;display:block;filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.18))}
+.dw-dark .dw-chip{background:rgba(22,22,22,.92)}
+.dw-brand-logo{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:22px 20px}
+.dw-brand-logo img{max-width:100%;max-height:100%;object-fit:contain;filter:drop-shadow(0 1px 1px rgba(0,0,0,.10))}
+.dw-dark:not(.dw-has-bg){background:#1b1b1b;border-color:#1b1b1b}
+.dw-wmcard{background:#fcfbf9;border-color:#ece5d9}
+.nm{text-align:center;line-height:1.12;color:#2a2622}
+.nm-serif{font-family:'Playfair Display',Georgia,serif;font-size:clamp(15px,1.7vw,19px);font-weight:600}
+.nm-sans{font-family:'Montserrat',-apple-system,sans-serif;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:#3a3a3a}
+.dw-chip .nm-serif{font-size:clamp(14px,1.5vw,18px)}
+@media(max-width:1100px){.dw-brand-grid{grid-template-columns:repeat(3,1fr)}}
+@media(max-width:680px){.dw-brand-grid{grid-template-columns:repeat(2,1fr);gap:10px;padding:10px 14px 40px}.dw-chip img{max-height:36px}.nm-serif{font-size:14px}.nm-sans{font-size:11px}}
+.dw-eyebrow{text-align:center;font-family:'Montserrat',-apple-system,sans-serif;font-size:11px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:#a89a87;margin:20px 0 10px}
+.dw-featured-grid{display:grid!important;grid-template-columns:repeat(5,1fr)!important;gap:14px!important;padding:0 24px 6px!important;max-width:1400px!important;margin:0 auto!important}
+.dw-featured-grid .dw-brand-card{box-shadow:0 4px 16px rgba(0,0,0,.09)}
+.dw-divider{max-width:1320px;margin:22px auto 2px;border:0;border-top:1px solid #ececec}
+@media(max-width:1100px){.dw-featured-grid{grid-template-columns:repeat(3,1fr)}}
+@media(max-width:680px){.dw-featured-grid{grid-template-columns:repeat(2,1fr);gap:10px;padding:0 14px 6px}}
+.dw-intro{max-width:760px;margin:2px auto 14px;padding:0 20px;text-align:center;font-family:-apple-system,'Segoe UI',Roboto,sans-serif;font-size:14px;line-height:1.6;color:#6b6b6b}
+.dw-intro a{color:#3a3a3a;text-decoration:underline;text-underline-offset:2px}
+.dw-brand-tools{max-width:520px;margin:0 auto 6px;padding:0 18px}
+#dwBrandSearch{width:100%;box-sizing:border-box;padding:11px 18px;border:1px solid #dcdcdc;border-radius:24px;font:15px/1 -apple-system,'Segoe UI',Roboto,sans-serif;color:#222;background:#fff;outline:none;transition:border-color .15s}
+#dwBrandSearch:focus{border-color:#9a9a9a}
+</style>`;
+const ld=`<script type="application/ld+json">${JSON.stringify({"@context":"https://schema.org","@type":"ItemList","name":"Designer Wallcovering & Fabric Brands","numberOfItems":items.length,"itemListElement":items.map((it,i)=>({"@type":"ListItem",position:i+1,name:decode(it.title),url:/^https?:/.test(it.href)?it.href:"https://www.designerwallcoverings.com"+it.href}))})}</script>`;
+const html=`${css}${ld}
+<div class="dw-brand-head"><h1>Shop by Brand</h1><p>From English heritage archives to modern American ateliers — the design houses behind every wall we cover.</p></div>
+<p class="dw-intro">Designer Wallcoverings represents the premier wallcovering & fabric houses, from <a href="/collections/schumacher-wallpaper">Schumacher</a> and <a href="/collections/thibaut-wallcoverings">Thibaut</a> to <a href="/collections/ralph-lauren">Ralph Lauren</a> and beyond — available to the trade and retail.</p>
+<div class="dw-eyebrow">Featured Wallcoverings</div>
+<div class="dw-featured-grid">
+${featuredItems.map(card).join('\n')}
+</div>
+<div class="dw-eyebrow">Featured Fabrics</div>
+<div class="dw-featured-grid">
+${featuredFabricsItems.map(card).join('\n')}
+</div>
+<hr class="dw-divider">
+<div class="dw-eyebrow">All Brands A\u2013Z</div>
+<div class="dw-brand-tools"><input id="dwBrandSearch" type="search" placeholder="Search brands\u2026" aria-label="Search brands" autocomplete="off"></div>
+<div class="dw-brand-grid">
+${items.map(card).join('\n')}
+</div>
+<script>(function(){var i=document.getElementById('dwBrandSearch');if(!i)return;var c=[].slice.call(document.querySelectorAll('.dw-brand-grid .dw-brand-card'));i.addEventListener('input',function(){var q=this.value.trim().toLowerCase();for(var k=0;k<c.length;k++){var n=c[k].getAttribute('data-name')||'';c[k].style.display=(!q||n.indexOf(q)>-1)?'':'none';}});})();</script>`;
+if(BANNED.test(html.replace(/data:[^"]+/g,''))){console.error('!!! LEAK');process.exit(1);}
+fs.writeFileSync('/tmp/page-brands-new.html',html);
+fs.writeFileSync(__dirname+'/page-brands-new.html',html);
+console.log('tiles:',items.length,'| room-bg:',nbg,'| with-logo:',nlogo,'| wordmark-only:',nwm,'| bytes:',html.length);
diff --git a/scripts/brands-page/fetch-bgs.cjs b/scripts/brands-page/fetch-bgs.cjs
new file mode 100644
index 0000000..885a08a
--- /dev/null
+++ b/scripts/brands-page/fetch-bgs.cjs
@@ -0,0 +1,19 @@
+const fs=require('fs'),cp=require('child_process');
+const PG='postgres://stevestudio2@/dw_unified?host=/tmp';
+const room=JSON.parse(fs.readFileSync('/tmp/room-final.json','utf8'));
+const need=process.argv.slice(2);
+function q(sql){try{return cp.execSync(`psql "${PG}" -tAc ${JSON.stringify(sql)}`,{encoding:'utf8'}).trim();}catch(e){return '';}}
+const got={},miss=[];
+for(const title of need){
+ if(room[title]){continue;}
+ const esc=title.replace(/'/g,"''");
+ let url=q(`SELECT image_url FROM shopify_products WHERE vendor='${esc}' AND status='ACTIVE' AND image_url<>'' AND image_url NOT ILIKE '%no-image%' ORDER BY length(image_url) DESC LIMIT 1`);
+ if(!url){ // fuzzy: vendor starts-with
+ url=q(`SELECT image_url FROM shopify_products WHERE vendor ILIKE '${esc}%' AND status='ACTIVE' AND image_url<>'' AND image_url NOT ILIKE '%no-image%' LIMIT 1`);
+ }
+ if(url){got[title]=url;}else{miss.push(title);}
+}
+console.log('RESOLVED',Object.keys(got).length);
+for(const[k,v] of Object.entries(got))console.log(' +',k,'->',v.slice(0,70));
+console.log('STILL MISSING BG:',miss.join(' | ')||'(none)');
+fs.writeFileSync('/tmp/bg-fetched.json',JSON.stringify(got,null,1));
diff --git a/scripts/brands-page/gen-wordmarks.cjs b/scripts/brands-page/gen-wordmarks.cjs
new file mode 100644
index 0000000..72f8b8c
--- /dev/null
+++ b/scripts/brands-page/gen-wordmarks.cjs
@@ -0,0 +1,80 @@
+const fs=require('fs'),path=require('path');
+const VL=process.env.HOME+'/Projects/Designer-Wallcoverings/vendor-logos';
+
+// Brands that get a generated luxe SVG wordmark (DTD verdict B, 2026-06-14).
+// label: display text. sans:true -> uppercase Montserrat (modern/house labels);
+// else Playfair serif. line2 forces a manual break for long two-part names.
+const WM = {
+ 'AS Creation': { label:'AS Création', sans:true },
+ 'Atomic 50 Ceilings': { label:'Atomic 50', sub:'CEILINGS', sans:true },
+ 'Backdrop': { label:'Backdrop', sans:true },
+ 'British Walls': { label:'British Walls', sans:true },
+ 'Clarence House': { label:'Clarence House' },
+ 'Dedar': { label:'Dedar' },
+ 'Designer Wallcoverings': { label:'Designer', sub:'WALLCOVERINGS' },
+ 'Dolce & Gabbana': { label:'Dolce & Gabbana' },
+ 'DW Bespoke Studio': { label:'DW Bespoke', sub:'STUDIO', sans:true },
+ 'DW Exclusive Wallpaper': { label:'DW Exclusive', sub:'WALLPAPER', sans:true },
+ 'Fentucci': { label:'Fentucci' },
+ 'Glitter Walls': { label:'Glitter Walls', sans:true },
+ 'LA Walls': { label:'LA Walls', sans:true },
+ 'LEED Walls': { label:'LEED Walls', sans:true },
+ 'Novasuede': { label:'Novasuede', sans:true },
+ 'OLIVIA AND POPP': { label:'Olivia & Popp' },
+ 'Peg Norriss': { label:'Peg Norriss' },
+ 'PR Faux Leather': { label:'PR Faux', sub:'LEATHER', sans:true },
+ 'Primo Leathers': { label:'Primo Leathers', sans:true },
+ 'Retro Walls': { label:'Retro Walls', sans:true },
+ 'Sacha Walckhoff': { label:'Sacha Walckhoff' },
+ 'Sancar': { label:'Sancar' },
+ 'Steve Abrams Studios': { label:'Steve Abrams', sub:'STUDIOS' },
+ 'SUGARBOO': { label:'Sugarboo', sans:true },
+ 'Surface Stick': { label:'Surface Stick', sans:true },
+ 'Ultrasuede': { label:'Ultrasuede', sans:true },
+ 'Wallpaper NYC': { label:'Wallpaper', sub:'NYC', sans:true },
+ 'Zeuxis Parrhasius at DW':{ label:'Zeuxis', sub:'PARRHASIUS' },
+ 'Phillipe Romano': { label:'Phillipe Romano' },
+ 'Hollywood Wallcoverings':{ label:'Hollywood', sub:'WALLCOVERINGS' },
+ 'Malibu Wallpaper': { label:'Malibu', sub:'WALLPAPER', sans:true },
+ 'Jeffrey Stevens': { label:'Jeffrey Stevens' },
+ 'Marimekko': { label:'Marimekko', sans:true },
+ 'Artmura': { label:'Artmura', sans:true },
+};
+
+const INK='#221f1c';
+const esc=s=>s.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
+function fitSize(text, max, min, widthPx, sans){
+ // rough em-width estimate; uppercase+tracked sans runs wider than serif
+ const per = sans ? 0.82 : 0.6;
+ let s=max;
+ while(s>min && text.length*s*per > widthPx) s-=1;
+ return s;
+}
+function svg(cfg){
+ const W=420, H=160, cx=W/2;
+ const serif="'Playfair Display', Georgia, 'Times New Roman', serif";
+ const sans="'Montserrat', 'Helvetica Neue', Arial, sans-serif";
+ const main=esc(cfg.label);
+ const fam=cfg.sans?sans:serif;
+ const tracking=cfg.sans?'0.16em':'0.01em';
+ const transform=cfg.sans?'uppercase':'none';
+ const fontMain=fitSize(cfg.label, cfg.sans?40:52, 22, W-72, cfg.sans);
+ const hasSub=!!cfg.sub;
+ const mainY=hasSub?70:88;
+ let parts=`<text x="${cx}" y="${mainY}" text-anchor="middle" font-family="${fam}" font-weight="600" font-size="${fontMain}" letter-spacing="${tracking}" fill="${INK}" style="text-transform:${transform}">${main}</text>`;
+ if(hasSub){
+ parts+=`\n <line x1="${cx-46}" y1="92" x2="${cx+46}" y2="92" stroke="${INK}" stroke-width="1" opacity="0.5"/>`;
+ parts+=`\n <text x="${cx}" y="120" text-anchor="middle" font-family="${sans}" font-weight="600" font-size="17" letter-spacing="0.34em" fill="${INK}" style="text-transform:uppercase">${esc(cfg.sub)}</text>`;
+ }
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}" role="img">
+ ${parts}
+</svg>`;
+}
+
+let n=0;
+for(const [brand,cfg] of Object.entries(WM)){
+ const fname='wm-'+brand.toLowerCase().normalize('NFD').replace(/[^a-z0-9]+/g,'-').replace(/(^-|-$)/g,'')+'.svg';
+ fs.writeFileSync(path.join(VL,fname), svg(cfg));
+ n++;
+}
+console.log('generated',n,'wordmark SVGs into',VL);
diff --git a/scripts/brands-page/push-brands.cjs b/scripts/brands-page/push-brands.cjs
new file mode 100644
index 0000000..25978f0
--- /dev/null
+++ b/scripts/brands-page/push-brands.cjs
@@ -0,0 +1,18 @@
+const fs=require('fs');
+const env=fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8');
+const get=k=>{const m=env.match(new RegExp('^'+k+'=(.*)$','m'));return m?m[1].trim():'';};
+const TOKEN=get('SHOPIFY_DW_ADMIN_TOKEN_CONTENT');
+const host='designer-laboratory-sandbox.myshopify.com';
+const ID=208010608691;
+const body=fs.readFileSync('/tmp/page-brands-new.html','utf8');
+// HARD leak gate before any write
+if(/wallquest|chesapeake|brewster|nextwall|seabrook|nicolette/i.test(body)){console.error('ABORT: leak in body');process.exit(1);}
+(async()=>{
+ const r=await fetch(`https://${host}/admin/api/2024-10/pages/${ID}.json`,{
+ method:'PUT',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},
+ body:JSON.stringify({page:{id:ID,body_html:body}})
+ });
+ const j=await r.json();
+ if(j.page){console.log('PUSHED ok | id',j.page.id,'| handle',j.page.handle,'| updated',j.page.updated_at,'| bytes',j.page.body_html.length);}
+ else{console.log('ERR',r.status,JSON.stringify(j).slice(0,300));}
+})().catch(e=>console.log('FAIL',e.message));
diff --git a/scripts/broken-image-pilot/broken-image-pilot.mjs b/scripts/broken-image-pilot/broken-image-pilot.mjs
new file mode 100644
index 0000000..3859798
--- /dev/null
+++ b/scripts/broken-image-pilot/broken-image-pilot.mjs
@@ -0,0 +1,53 @@
+// Cycle-44 broken-image pilot (read-only, $0). Samples live ACTIVE products across
+// the catalog via /products.json and HEADs each product's featured image to measure
+// real delivery health (200 + image/* content-type). Complements c26 (presence) and
+// c29 (alt-text). No writes. Customer-facing + Google-feed quality signal.
+const HOST = 'https://www.designerwallcoverings.com';
+const PAGES = [1,8,16,24,32,40,48,56,64,72,80,88,96];
+const PER_PAGE_SAMPLE = 24;
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36';
+
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+function pick(arr, n){ // deterministic-ish stride sample, no RNG
+ if (arr.length <= n) return arr;
+ const out=[], stride=arr.length/n;
+ for(let i=0;i<n;i++) out.push(arr[Math.floor(i*stride)]);
+ return out;
+}
+
+const results = [];
+let scanned=0, noImage=0, broken=0, ok=0, unknown=0;
+
+for (const pg of PAGES) {
+ let prods=[];
+ try {
+ const r = await fetch(`${HOST}/products.json?limit=250&page=${pg}`, {headers:{'User-Agent':UA}});
+ if (!r.ok){ console.error(`page ${pg}: HTTP ${r.status}`); continue; }
+ prods = (await r.json()).products || [];
+ } catch(e){ console.error(`page ${pg}: ${e.message}`); continue; }
+ if (!prods.length) continue;
+ for (const p of pick(prods, PER_PAGE_SAMPLE)) {
+ scanned++;
+ const img = (p.images && p.images[0] && p.images[0].src) || null;
+ if (!img){ noImage++; results.push({handle:p.handle, vendor:p.vendor, status:'NO_IMAGE', img:null}); continue; }
+ try {
+ const hr = await fetch(img, {method:'HEAD', headers:{'User-Agent':UA}});
+ const ct = hr.headers.get('content-type')||'';
+ if (hr.ok && ct.startsWith('image/')){ ok++; }
+ else { broken++; results.push({handle:p.handle, vendor:p.vendor, status:`BROKEN_${hr.status}_${ct||'noct'}`, img}); }
+ } catch(e){ unknown++; results.push({handle:p.handle, vendor:p.vendor, status:`ERR_${e.message.slice(0,30)}`, img}); }
+ await sleep(40);
+ }
+ await sleep(150);
+}
+
+const pct = n => scanned? (100*n/scanned).toFixed(1)+'%' : 'n/a';
+console.log(`\n=== Broken-image pilot — ${scanned} active products sampled across pages ${PAGES.join(',')} ===`);
+console.log(`OK (200 + image/*): ${ok} (${pct(ok)})`);
+console.log(`NO_IMAGE (0 images): ${noImage} (${pct(noImage)})`);
+console.log(`BROKEN (non-200/non-image): ${broken} (${pct(broken)})`);
+console.log(`UNKNOWN (fetch error): ${unknown} (${pct(unknown)})`);
+if (results.length){
+ console.log(`\n--- flagged (${results.length}) ---`);
+ for (const r of results.slice(0,40)) console.log(`[${r.status}] ${r.vendor} :: ${r.handle}`);
+}
diff --git a/scripts/broken-image-scan/broken-image-scan.mjs b/scripts/broken-image-scan/broken-image-scan.mjs
new file mode 100644
index 0000000..d131396
--- /dev/null
+++ b/scripts/broken-image-scan/broken-image-scan.mjs
@@ -0,0 +1,42 @@
+// broken-image-scan (c44) — READ-ONLY. Prior cycles checked image PRESENCE; none
+// checked whether the image actually LOADS. A product whose CDN image 404s shows a
+// blank/broken PDP to a shopper. Samples N random ACTIVE handles, reads live
+// /products/<handle>.json, HEADs the primary image_url; retry/backoff so throttling
+// (429/timeout) isn't miscounted as broken. Only a definitive non-2xx after retries
+// = BROKEN. $0.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+const N=parseInt(process.argv[2]||'120',10);
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql', DB='postgresql:///dw_unified?host=/tmp';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/broken-image-scan-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/broken-image-scan-2026-06-16.md`;
+const rows=execFileSync(PSQL,[DB,'-At','-F','\t','-c',
+ `select handle, vendor from shopify_products where status='ACTIVE' and handle is not null and handle<>'' order by random() limit ${N}`],{encoding:'utf8'}).trim().split('\n').filter(Boolean).map(l=>l.split('\t'));
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function head(url){ for(let a=0;a<4;a++){ try{ const r=await fetch(url,{method:'HEAD',signal:AbortSignal.timeout(12000)}); if(r.status===429){await sleep(1500*(a+1));continue;} return r.status;}catch(e){ if(a===3) return 0; await sleep(1200*(a+1)); } } return 0; }
+async function getj(h){ for(let a=0;a<3;a++){ try{ const r=await fetch(`https://www.designerwallcoverings.com/products/${encodeURIComponent(h)}.json`,{signal:AbortSignal.timeout(12000)}); if(r.status===200) return await r.json(); if(r.status===404) return {__404:true}; if(r.status===429){await sleep(1500*(a+1));continue;} }catch(e){ await sleep(1000*(a+1)); } } return null; }
+const res={OK:0, BROKEN:0, NO_IMAGE:0, PDP_404:0, UNKNOWN:0}; const broken=[]; let decided=0;
+for(const [h,v] of rows){
+ const j=await getj(h);
+ if(j===null){res.UNKNOWN++; await sleep(120); continue;}
+ if(j.__404){res.PDP_404++; await sleep(120); continue;}
+ const img=j.product && (j.product.image && j.product.image.src) || (j.product && (j.product.images||[])[0] && j.product.images[0].src);
+ if(!img){res.NO_IMAGE++; decided++; await sleep(120); continue;}
+ const code=await head(img);
+ decided++;
+ if(code>=200&&code<400) res.OK++;
+ else if(code===0) res.UNKNOWN++; // network indeterminate, don't call broken
+ else { res.BROKEN++; broken.push({handle:h, vendor:v, img, http:code}); }
+ await sleep(120);
+}
+const report={generated_at:new Date().toISOString(), sampled:rows.length, decided, ...res, broken_pct: decided?Math.round(1000*res.BROKEN/decided)/10:0, broken};
+fs.writeFileSync(OUT,JSON.stringify(report,null,2));
+let md=`# Broken product-image scan (live) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY (live products.json + CDN HEAD, retry/backoff), \$0.** Sampled ${rows.length} ACTIVE handles. Checks whether the PRIMARY image actually LOADS (presence != loadability).\n\n`;
+md+=`| outcome | count |\n|---|--:|\n| image loads OK | ${res.OK} |\n| **BROKEN (img non-2xx)** | **${res.BROKEN}** |\n| product has NO image | ${res.NO_IMAGE} |\n| PDP 404 (mirror-ACTIVE, live-gone) | ${res.PDP_404} |\n| unknown (network) | ${res.UNKNOWN} |\n\n`;
+md+=`Broken rate (of decided ${report.decided}): **${report.broken_pct}%**\n\n`;
+if(broken.length){ md+=`## BROKEN images\n| handle | vendor | http | img |\n|---|---|--:|---|\n`; for(const b of broken) md+=`| ${b.handle} | ${b.vendor} | ${b.http} | ${b.img.slice(0,60)} |\n`; }
+fs.writeFileSync(MD,md);
+console.log(`[broken-image] sampled=${rows.length} decided=${report.decided} | OK=${res.OK} BROKEN=${res.BROKEN} NO_IMAGE=${res.NO_IMAGE} PDP404=${res.PDP_404} UNKNOWN=${res.UNKNOWN} | broken=${report.broken_pct}%`);
+for(const b of broken.slice(0,8)) console.log(` ⚠️ ${b.handle} [${b.vendor}] http=${b.http}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/buyability-audit/buyability-audit.mjs b/scripts/buyability-audit/buyability-audit.mjs
new file mode 100644
index 0000000..393a80a
--- /dev/null
+++ b/scripts/buyability-audit/buyability-audit.mjs
@@ -0,0 +1,53 @@
+// buyability-audit — READ-ONLY, $0. Cycle 89. The sharpest customer-facing inventory defect:
+// an ACTIVE product NO shopper can purchase — every variant availableForSale=false (out-of-stock +
+// inventoryPolicy=DENY) = a dead-end "out of stock / can't add to cart" PDP that BLOCKS the sale.
+// Exhaustive via Admin GraphQL (variant availableForSale + inventoryQuantity + inventoryPolicy). Also
+// measures drift from the standing inventory=2026 both-variants convention. NEGATIVE CONTROL: if the
+// BULK is buyable, an unbuyable-active product is a true anomaly. EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:50, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor productType totalInventory
+ variants(first:12){ edges{ node{ availableForSale inventoryQuantity inventoryPolicy } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let buyable=0, unbuyable=0, noVariants=0;
+let any2026=0, both2026=0, multiVar=0;
+const unbuyByVendor={}, unbuyEx=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(vs.length===0){ noVariants++; continue; }
+ if(vs.length>1) multiVar++;
+ const anyBuyable=vs.some(v=>v.availableForSale===true);
+ if(anyBuyable) buyable++;
+ else { unbuyable++; unbuyByVendor[n.vendor]=(unbuyByVendor[n.vendor]||0)+1;
+ if(unbuyEx.length<30){ const why=vs.map(v=>`${v.inventoryPolicy}/${v.inventoryQuantity}`).join(','); unbuyEx.push({t:(n.title||'').slice(0,42),vendor:n.vendor,type:n.productType,vars:vs.length,why:why.slice(0,60)}); } }
+ // inventory=2026 convention drift
+ const q2026=vs.filter(v=>v.inventoryQuantity===2026).length;
+ if(q2026>=1) any2026++;
+ if(vs.length>=2 && q2026>=2) both2026++;
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} unbuyable=${unbuyable}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(2):'0';
+console.log(`\n=== buyability-audit (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nBUYABILITY (can a shopper actually purchase?):`);
+console.log(` BUYABLE (>=1 variant availableForSale): ${buyable} (${pct(buyable)}%)`);
+console.log(` UNBUYABLE (NO variant purchasable - dead-end PDP, the defect): ${unbuyable} (${pct(unbuyable)}%)`);
+console.log(` no-variants (data oddity): ${noVariants}`);
+console.log(` NEGATIVE CONTROL: buyable bulk ${pct(buyable)}% -> an unbuyable-active product is ${unbuyable>0?'a true anomaly':'(none found)'}.`);
+console.log(`\nINVENTORY=2026 convention (standing rule: activated items set 2026 on BOTH variants):`);
+console.log(` active products with >=1 variant at qty 2026: ${any2026} (${pct(any2026)}%)`);
+console.log(` multi-variant products: ${multiVar}; of those with BOTH variants at 2026: ${both2026}`);
+console.log(`\nUNBUYABLE by vendor (top 15):`); Object.entries(unbuyByVendor).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nUNBUYABLE examples (why = inventoryPolicy/qty per variant):`); unbuyEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] type=${x.type} vars=${x.vars} why=${x.why}`));
+fs.writeFileSync('/tmp/buyability-audit.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,buyable,unbuyable,noVariants,any2026,both2026,multiVar,unbuyByVendor,unbuyEx},null,2));
+console.log(`\nwrote /tmp/buyability-audit.json`);
diff --git a/scripts/buyability-audit/policy-mechanism-probe.mjs b/scripts/buyability-audit/policy-mechanism-probe.mjs
new file mode 100644
index 0000000..3548e37
--- /dev/null
+++ b/scripts/buyability-audit/policy-mechanism-probe.mjs
@@ -0,0 +1,27 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});return r.json();}
+const Q=`query($cursor:String){ products(first:50, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ variants(first:12){ edges{ node{ availableForSale inventoryQuantity inventoryPolicy } } } } } } }`;
+let cursor=null,pages=0,vTot=0; const pol={CONTINUE:0,DENY:0}; let denyPos=0,denyZeroAvail=0,denyZeroUnavail=0,contAvail=0;
+const CAP=Number(process.env.CAP||3000); let prodN=0;
+while(prodN<CAP){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ prodN++; for(const ve of (e.node.variants?.edges||[])){ const v=ve.node; vTot++;
+ pol[v.inventoryPolicy]=(pol[v.inventoryPolicy]||0)+1;
+ if(v.inventoryPolicy==='CONTINUE'){ if(v.availableForSale) contAvail++; }
+ else { // DENY
+ if((v.inventoryQuantity||0)>0) denyPos++;
+ else if(v.availableForSale) denyZeroAvail++;
+ else denyZeroUnavail++;
+ } } }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; await sleep(250);
+}
+console.log(`policy probe: ${prodN} products, ${vTot} variants (${pages}p)`);
+console.log(` inventoryPolicy: CONTINUE=${pol.CONTINUE} (${(100*pol.CONTINUE/vTot).toFixed(1)}%) DENY=${pol.DENY} (${(100*pol.DENY/vTot).toFixed(1)}%)`);
+console.log(` CONTINUE variants available-for-sale (oversell-enabled, always buyable): ${contAvail}`);
+console.log(` DENY variants with qty>0 (buyable via real stock): ${denyPos}`);
+console.log(` DENY variants qty<=0 but availableForSale=true (oddity): ${denyZeroAvail}`);
+console.log(` DENY variants qty<=0 and NOT available (would block sale at variant level): ${denyZeroUnavail}`);
diff --git a/scripts/c34-osborne-gaston/APPLY-blank-reverify-guard.sh b/scripts/c34-osborne-gaston/APPLY-blank-reverify-guard.sh
new file mode 100755
index 0000000..987af61
--- /dev/null
+++ b/scripts/c34-osborne-gaston/APPLY-blank-reverify-guard.sh
@@ -0,0 +1,108 @@
+#!/usr/bin/env bash
+# ============================================================================
+# APPLY the drain-time live-blank re-verify guard to the Kamatera worker.
+# RUN ON KAMATERA (operates on the local /root path). Steve-gated deploy.
+#
+# scp ~/Projects/designerwallcoverings/scripts/c34-osborne-gaston/APPLY-blank-reverify-guard.sh my-server:/tmp/
+# ssh my-server "bash /tmp/APPLY-blank-reverify-guard.sh"
+#
+# Idempotent: if the guard is already present it exits 0 without touching the
+# file. Anchored: refuses to edit if either insertion anchor isn't found
+# (so a future worker.js refactor can't cause a silent mis-splice).
+# Backs up to worker.js.pre-blankreverify.<ts>, syntax-checks (node -c),
+# and restarts via pm2. On syntax failure it auto-restores the backup.
+# DTD verdict A (2026-06-18, 2/3) — vp-dw-commerce + vp-engineering APPROVE.
+# ============================================================================
+set -euo pipefail
+
+W=/root/DW-Agents/shopify-queue-worker/worker.js
+TS=$(date +%Y%m%d-%H%M%S)
+BAK="${W}.pre-blankreverify.${TS}"
+
+[ -f "$W" ] || { echo "FATAL: $W not found"; exit 1; }
+
+if grep -q 'parseMetafieldCreateJob' "$W"; then
+ echo "Already applied (parseMetafieldCreateJob present) — no-op."
+ exit 0
+fi
+
+cp -p "$W" "$BAK"
+echo "Backup → $BAK"
+
+node <<'NODE'
+const fs = require('fs');
+const W = '/root/DW-Agents/shopify-queue-worker/worker.js';
+let s = fs.readFileSync(W, 'utf8');
+
+const HELPERS = `
+// --- DRAIN-TIME LIVE BLANK RE-VERIFY (officer-required for c34 specs push) ---
+function parseMetafieldCreateJob(job) {
+ if (job.method !== 'POST') return null;
+ const m = /^\\/products\\/(\\d+)\\/metafields\\.json$/.exec(job.endpoint || '');
+ if (!m) return null;
+ const payload = typeof job.payload === 'string' ? JSON.parse(job.payload) : job.payload;
+ const mf = payload && payload.metafield;
+ if (!mf || mf.namespace !== 'custom' || !mf.key) return null;
+ return { productId: m[1], namespace: mf.namespace, key: mf.key };
+}
+async function liveMetafieldAlreadyFilled(productId, key, token) {
+ const res = await shopifyRequest('GET', \`/products/\${productId}/metafields.json?namespace=custom&key=\${encodeURIComponent(key)}\`, null, token);
+ const list = (res.body && res.body.metafields) || [];
+ const hit = list.find(x => x.namespace === 'custom' && x.key === key);
+ const val = hit && hit.value;
+ return typeof val === 'string' ? val.trim().length > 0 : (val != null);
+}
+
+`;
+
+const GUARD = `
+ // --- DRAIN-TIME LIVE BLANK RE-VERIFY (blank-fill-only invariant at the drain) ---
+ const mfJob = (() => { try { return parseMetafieldCreateJob(job); } catch { return null; } })();
+ if (mfJob) {
+ try {
+ const filled = await liveMetafieldAlreadyFilled(mfJob.productId, mfJob.key, token);
+ if (filled) {
+ await pool.query(
+ \`UPDATE shopify_api_queue SET status = 'done', response_body = $2, error = $3, completed_at = NOW() WHERE id = $1\`,
+ [job.id,
+ JSON.stringify({ blank_reverify_skip: true, product_id: mfJob.productId, key: mfJob.key }),
+ \`BLANK-REVERIFY SKIP: custom.\${mfJob.key} already non-null live\`]
+ );
+ await pool.query(\`SELECT pg_notify('shopify_queue_done', $1)\`, [String(job.id)]);
+ console.log(\`[blank-reverify] #\${job.id} custom.\${mfJob.key} already filled on product \${mfJob.productId} — skipped write\`);
+ return;
+ }
+ } catch (rvErr) {
+ console.error(\`[blank-reverify] #\${job.id} guard error (proceeding with write): \${rvErr.message}\`);
+ }
+ }
+
+`;
+
+// Anchor 1: top-level helpers go immediately before processJob's declaration.
+const A1 = 'async function processJob(job) {';
+if (s.indexOf(A1) === -1) { console.error('FATAL: anchor A1 (processJob declaration) not found'); process.exit(2); }
+if (s.indexOf(A1) !== s.lastIndexOf(A1)) { console.error('FATAL: anchor A1 not unique'); process.exit(2); }
+s = s.replace(A1, HELPERS + A1);
+
+// Anchor 2: the guard block goes immediately before the main shopifyRequest write.
+const A2 = ' try {\n const res = await shopifyRequest(job.method, job.endpoint, job.payload, token);';
+if (s.indexOf(A2) === -1) { console.error('FATAL: anchor A2 (main shopifyRequest write) not found'); process.exit(2); }
+if (s.indexOf(A2) !== s.lastIndexOf(A2)) { console.error('FATAL: anchor A2 not unique'); process.exit(2); }
+s = s.replace(A2, GUARD + A2);
+
+fs.writeFileSync(W, s);
+console.log('Inserted helpers + guard block.');
+NODE
+
+if node -c "$W"; then
+ echo "Syntax OK."
+else
+ echo "SYNTAX FAILED — restoring backup."
+ cp -p "$BAK" "$W"
+ echo "Restored $W from $BAK. No restart performed."
+ exit 3
+fi
+
+pm2 restart shopify-queue-worker --update-env
+echo "Done. Guard live. Rollback if needed: cp -p $BAK $W && pm2 restart shopify-queue-worker"
diff --git a/scripts/c34-osborne-gaston/DRAFT-worker-blank-reverify-guard.patch.js b/scripts/c34-osborne-gaston/DRAFT-worker-blank-reverify-guard.patch.js
new file mode 100644
index 0000000..e8b18f0
--- /dev/null
+++ b/scripts/c34-osborne-gaston/DRAFT-worker-blank-reverify-guard.patch.js
@@ -0,0 +1,103 @@
+/* ============================================================================
+ * DRAFT ONLY — DO NOT APPLY TO THE KAMATERA WORKER WITHOUT STEVE'S GO.
+ *
+ * Drain-time live-blank re-verify guard for metafield writes.
+ * Target file (on Kamatera, READ-ONLY here):
+ * /root/DW-Agents/shopify-queue-worker/worker.js
+ *
+ * WHY: The officer's REQUIRED REVISION on the c34 Osborne/Gaston specs push
+ * was to confirm the drain worker re-reads the live product metafield and
+ * SKIPS if already non-null (idempotent blank-only) before each write. The
+ * audit found the worker does NOT do this — it is a generic executor that
+ * pushes whatever payload was enqueued (no per-job live blank check exists
+ * anywhere in processJob). In the c34 run, blank-only safety was enforced at
+ * ENQUEUE time by enqueue-specs.py. This patch moves the guarantee into the
+ * worker so ANY future enqueuer (which may not live-verify) is also safe.
+ *
+ * DESIGN:
+ * - Scope: ONLY metafield-create writes (POST /products/{id}/metafields.json)
+ * targeting namespace 'custom'. All other jobs pass through untouched.
+ * - Fail-OPEN: any guard error (network, parse, etc.) falls through to the
+ * normal write — exactly the pattern the existing dedupGuardForCreate uses
+ * (lines ~675-688). A guard that fail-CLOSED could silently stall a real
+ * push; fail-open keeps current behavior on error.
+ * - Idempotent blank-only: if the live product already has a non-empty value
+ * for that custom.<key>, mark the job 'done' with a skip marker and return
+ * BEFORE the Shopify write. A stale-mirror false-blank therefore can never
+ * overwrite a real live value.
+ * - Read cost: ONE extra GraphQL read per metafield job (cheap; far under the
+ * bucket). Only runs for the metafield-write job shape, not the ~950/day
+ * general traffic.
+ *
+ * INTEGRATION POINT: inside processJob(job), AFTER the existing
+ * "PRE-PUSH DEDUP GUARD (2026-06-12)" try/catch block (worker.js ~line 688)
+ * and BEFORE `try { const res = await shopifyRequest(...) }` (~line 690).
+ * It reuses the in-scope `token`, `shopifyRequest`, and `pool` already
+ * defined above that point.
+ * ========================================================================== */
+
+
+/* ---- ADD near the other top-level helpers (e.g. after collectUserErrors) ---- */
+
+// Parse a metafield-create job into { productId, namespace, key } or null if it
+// is not a single custom.* metafield POST. Returns null for anything else so the
+// guard is a strict no-op outside its scope.
+function parseMetafieldCreateJob(job) {
+ if (job.method !== 'POST') return null;
+ const m = /^\/products\/(\d+)\/metafields\.json$/.exec(job.endpoint || '');
+ if (!m) return null;
+ const payload = typeof job.payload === 'string' ? JSON.parse(job.payload) : job.payload;
+ const mf = payload && payload.metafield;
+ if (!mf || mf.namespace !== 'custom' || !mf.key) return null;
+ return { productId: m[1], namespace: mf.namespace, key: mf.key };
+}
+
+// Live blank re-verify: returns true if the live product ALREADY has a
+// non-empty value for custom.<key> (=> the write should be skipped). Throws on
+// any transport/parse error so the caller can fail-OPEN.
+async function liveMetafieldAlreadyFilled(productId, key, token) {
+ const res = await shopifyRequest(
+ 'GET',
+ `/products/${productId}/metafields.json?namespace=custom&key=${encodeURIComponent(key)}`,
+ null,
+ token
+ );
+ const list = (res.body && res.body.metafields) || [];
+ const hit = list.find(x => x.namespace === 'custom' && x.key === key);
+ const val = hit && hit.value;
+ return typeof val === 'string' ? val.trim().length > 0 : (val != null);
+}
+
+
+/* ---- INSERT in processJob(job), right after the dedupGuardForCreate block ---- */
+/* ---- and immediately before `try { const res = await shopifyRequest(...) }` -- */
+
+ // --- DRAIN-TIME LIVE BLANK RE-VERIFY (officer-required for c34 specs push) ---
+ // Blank-fill-only invariant enforced at the drain: re-read the live metafield
+ // and SKIP if it already carries a value, so a stale-mirror false-blank can
+ // never overwrite a real live value. Fail-OPEN on any guard error.
+ const mfJob = (() => { try { return parseMetafieldCreateJob(job); } catch { return null; } })();
+ if (mfJob) {
+ try {
+ const filled = await liveMetafieldAlreadyFilled(mfJob.productId, mfJob.key, token);
+ if (filled) {
+ await pool.query(
+ `UPDATE shopify_api_queue
+ SET status = 'done',
+ response_body = $2,
+ error = $3,
+ completed_at = NOW()
+ WHERE id = $1`,
+ [job.id,
+ JSON.stringify({ blank_reverify_skip: true, product_id: mfJob.productId, key: mfJob.key }),
+ `BLANK-REVERIFY SKIP: custom.${mfJob.key} already non-null live`]
+ );
+ await pool.query(`SELECT pg_notify('shopify_queue_done', $1)`, [String(job.id)]);
+ console.log(`[blank-reverify] #${job.id} custom.${mfJob.key} already filled on product ${mfJob.productId} — skipped write`);
+ return;
+ }
+ } catch (rvErr) {
+ // Fail-OPEN: proceed with the write, same posture as dedupGuardForCreate.
+ console.error(`[blank-reverify] #${job.id} guard error (proceeding with write): ${rvErr.message}`);
+ }
+ }
diff --git a/scripts/c34-osborne-gaston/enqueue-specs.py b/scripts/c34-osborne-gaston/enqueue-specs.py
new file mode 100644
index 0000000..37ea814
--- /dev/null
+++ b/scripts/c34-osborne-gaston/enqueue-specs.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+"""
+c34 Osborne & Little + Gaston Y Daniela specs metafield push.
+Live-blank-verify at enqueue time (officer-required guard), build restore-map,
+emit NOT-EXISTS-guarded shopify_api_queue INSERT SQL. Read-only by itself —
+prints SQL + restore-map; the SQL is run on Kamatera as the gated step.
+
+Usage:
+ enqueue-specs.py --worklist <tsv> --limit N # canary: first N products
+ enqueue-specs.py --worklist <tsv> # all
+Writes: restore-map-<ts>.csv, enqueue-<ts>.sql (does NOT touch any DB)
+"""
+import sys, os, csv, json, urllib.request, argparse, datetime
+
+STORE = "designer-laboratory-sandbox.myshopify.com" # = real prod www.designerwallcoverings.com
+API = "2024-10"
+
+def token():
+ for line in open(os.path.expanduser("~/Projects/secrets-manager/.env")):
+ if line.startswith("SHOPIFY_ADMIN_TOKEN="):
+ return line.strip().split("=", 1)[1]
+ sys.exit("no SHOPIFY_ADMIN_TOKEN")
+
+def live_metafields(pid, tok):
+ url = f"https://{STORE}/admin/api/{API}/products/{pid}/metafields.json"
+ req = urllib.request.Request(url, headers={"X-Shopify-Access-Token": tok})
+ ms = json.load(urllib.request.urlopen(req, timeout=30)).get("metafields", [])
+ cur = {}
+ for m in ms:
+ if m.get("namespace") == "custom" and m.get("key") in ("width", "material"):
+ cur[m["key"]] = m.get("value")
+ return cur
+
+def sql_lit(s):
+ return "'" + s.replace("'", "''") + "'"
+
+def main():
+ ap = argparse.ArgumentParser()
+ ap.add_argument("--worklist", required=True)
+ ap.add_argument("--limit", type=int, default=0)
+ a = ap.parse_args()
+ tok = token()
+ ts = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
+ rows = list(csv.DictReader(open(a.worklist), delimiter="\t"))
+ # one product per row in this worklist; group unique product_ids preserving order
+ seen, products = set(), []
+ for r in rows:
+ if r["product_id"] not in seen:
+ seen.add(r["product_id"]); products.append(r)
+ if a.limit:
+ products = products[:a.limit]
+
+ restore, inserts, skipped = [], [], []
+ for r in products:
+ pid = r["product_id"]
+ cur = live_metafields(pid, tok)
+ restore.append({"product_id": pid, "handle": r["handle"], "vendor": r["vendor"],
+ "live_width": cur.get("width", ""), "live_material": cur.get("material", "")})
+ for key, proposed in (("width", r["proposed_width"]), ("material", r["proposed_material"])):
+ if not proposed or proposed.startswith(("EXCLUDE", "SKIP")) or proposed in ("(blank)", "N/A"):
+ continue
+ live_val = cur.get(key)
+ if live_val: # live-blank guard: never overwrite an existing live value
+ skipped.append(f"{pid} {key}: live already = {live_val!r} (proposed {proposed!r}) -> SKIP")
+ continue
+ payload = json.dumps({"metafield": {"namespace": "custom", "key": key,
+ "type": "single_line_text_field", "value": proposed}})
+ endpoint = f"/products/{pid}/metafields.json"
+ inserts.append((endpoint, payload, key, pid, proposed))
+
+ rm = f"restore-map-{ts}.csv"
+ with open(rm, "w", newline="") as f:
+ w = csv.DictWriter(f, fieldnames=["product_id", "handle", "vendor", "live_width", "live_material"])
+ w.writeheader(); w.writerows(restore)
+
+ sqlf = f"enqueue-{ts}.sql"
+ with open(sqlf, "w") as f:
+ f.write("-- c34 osborne/gaston specs metafield enqueue (live-blank-verified). Run on Kamatera.\nBEGIN;\n")
+ for endpoint, payload, key, pid, proposed in inserts:
+ f.write(
+ "INSERT INTO shopify_api_queue (method, endpoint, payload, token_alias, priority, status, source_agent)\n"
+ f"SELECT 'POST', {sql_lit(endpoint)}, {sql_lit(payload)}::jsonb, 'product', 7, 'pending', 'c34-osborne-gaston-specs'\n"
+ "WHERE NOT EXISTS (SELECT 1 FROM shopify_api_queue q WHERE q.request_hash = "
+ f"md5(('POST'||{sql_lit(endpoint)})||COALESCE(({sql_lit(payload)}::jsonb)::text,'')) "
+ "AND q.status IN ('pending','processing'));\n")
+ f.write("COMMIT;\n")
+
+ print(f"products checked: {len(products)}")
+ print(f"genuinely-blank writes to enqueue: {len(inserts)} (width={sum(1 for i in inserts if i[2]=='width')}, material={sum(1 for i in inserts if i[2]=='material')})")
+ print(f"skipped (live already filled): {len(skipped)}")
+ for s in skipped[:10]:
+ print(" ", s)
+ print(f"restore-map: {rm}")
+ print(f"enqueue SQL: {sqlf}")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/c34-osborne-gaston/generate-enqueue-rows.mjs b/scripts/c34-osborne-gaston/generate-enqueue-rows.mjs
new file mode 100644
index 0000000..da5a303
--- /dev/null
+++ b/scripts/c34-osborne-gaston/generate-enqueue-rows.mjs
@@ -0,0 +1,151 @@
+#!/usr/bin/env node
+/**
+ * c34 Osborne & Little + Gaston Y Daniela specs metafield ENQUEUE GENERATOR
+ * ============================================================================
+ * Reads the APPROVED worklist TSV and emits one shopify_api_queue row per
+ * non-SKIP / non-EXCLUDE cell (custom.width / custom.material blank-fill).
+ *
+ * THIS IS A DRAFT. It does NOT enqueue and does NOT push to Shopify.
+ * • DRY-RUN by default: live-reads each product's current custom.width /
+ * custom.material (read-only), prints every row it WOULD enqueue + every
+ * row it SKIPS (live already filled), writes the staging artifacts
+ * (queue-rows JSON + restore-map CSV), and inserts NOTHING.
+ * • --execute is GATED: it refuses to actually INSERT into shopify_api_queue
+ * unless C34_CONFIRM=I-AM-STEVE is set — mirroring the scrub-true-sku.mjs
+ * SCRUB_CONFIRM=I-AM-STEVE gate. Even with --execute, it only INSERTs into
+ * the LOCAL Mac2 mirror's shopify_api_queue, which has NO active runner
+ * (audited: zero 'done' rows ever) — so it is a no-op transport. The REAL
+ * canonical write is the Kamatera-side `sudo -u postgres psql -f <sql>`
+ * INSERT, which only Steve runs. This generator emits that SQL for him.
+ *
+ * SAFETY INVARIANTS (validated by vp-dw-commerce, 2026-06-18):
+ * 1. blank-fill ONLY — a write is emitted only where the LIVE product
+ * metafield is currently empty (live-blank re-verify at generate time).
+ * The Mac2 mirror is ~95% stale for this cohort, so the live read is the
+ * source of truth, NOT the worklist's mirror-derived (blank) flags.
+ * 2. format rules (DTD-unanimous 2026-06-17): width = "{n} inches" with
+ * trailing zeros trimmed; material canonicalized to "Non-Woven"; EXCLUDE
+ * Wallpaper / Holographic / N/A from material (their width still writes).
+ * These are pre-baked in the worklist's proposed_* columns; this generator
+ * only forwards them + enforces the SKIP/EXCLUDE filter.
+ * 3. NEVER overwrites a non-null live value (the live read makes false-blanks
+ * from a stale mirror harmless).
+ *
+ * Usage:
+ * node generate-enqueue-rows.mjs # DRY-RUN, full worklist
+ * node generate-enqueue-rows.mjs --limit 1 # DRY-RUN, canary (first product)
+ * C34_CONFIRM=I-AM-STEVE node generate-enqueue-rows.mjs --execute # gated local-mirror INSERT (no runner)
+ *
+ * Emits (always, even in DRY-RUN):
+ * queue-rows-<ts>.json exact shopify_api_queue rows that WOULD be inserted
+ * restore-map-<ts>.csv live width/material per product BEFORE any write
+ * enqueue-<ts>.sql NOT-EXISTS-guarded INSERT SQL for Kamatera (Steve runs it)
+ */
+import { rest } from '../lib/shopify.mjs';
+import { readFileSync, writeFileSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const EXECUTE = process.argv.includes('--execute');
+const CONFIRMED = process.env.C34_CONFIRM === 'I-AM-STEVE';
+const LIMIT = (() => { const i = process.argv.indexOf('--limit'); return i > -1 ? parseInt(process.argv[i + 1], 10) : 0; })();
+const SOURCE_AGENT = 'c34-osborne-gaston-specs';
+const PRIORITY = 5; // low — interleaves behind live order/price traffic
+const HOME = process.env.HOME;
+const WORKLIST = join(HOME, '.claude/yolo-queue/pending-approval/done/c34-osborne-gaston-specs-worklist.tsv');
+
+// A proposed value is a NO-WRITE sentinel if blank, EXCLUDE-*, SKIP-*, (blank), or N/A.
+const isNoWrite = (v) =>
+ !v || v.startsWith('EXCLUDE') || v.startsWith('SKIP') || v === '(blank)' || v === 'N/A';
+
+function loadWorklist() {
+ const lines = readFileSync(WORKLIST, 'utf8').trim().split('\n');
+ const hdr = lines[0].split('\t');
+ const rows = lines.slice(1).map((l) => {
+ const c = l.split('\t'); const o = {}; hdr.forEach((h, i) => (o[h] = c[i])); return o;
+ });
+ // one product per row in this worklist; keep unique product_ids, preserve order
+ const seen = new Set(); const products = [];
+ for (const r of rows) if (!seen.has(r.product_id)) { seen.add(r.product_id); products.push(r); }
+ return LIMIT ? products.slice(0, LIMIT) : products;
+}
+
+// Live read of a product's custom.width / custom.material (READ-ONLY).
+async function liveCustomWidthMaterial(pid) {
+ const r = await rest(`/products/${pid}/metafields.json`);
+ const ms = (await r.json()).metafields || [];
+ const cur = {};
+ for (const m of ms) if (m.namespace === 'custom' && (m.key === 'width' || m.key === 'material')) cur[m.key] = m.value;
+ return cur;
+}
+
+const sqlLit = (s) => "'" + String(s).replace(/'/g, "''") + "'";
+
+async function main() {
+ const products = loadWorklist();
+ const ts = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
+ console.log(`\n=== c34 enqueue generator — ${LIMIT ? `CANARY (first ${LIMIT})` : 'FULL worklist'} — ${EXECUTE ? 'EXECUTE' : 'DRY-RUN'} ===`);
+ console.log(`worklist: ${WORKLIST}`);
+ console.log(`products: ${products.length}\n`);
+
+ const restore = []; const inserts = []; const skipped = [];
+ for (const r of products) {
+ const pid = r.product_id;
+ let cur;
+ try { cur = await liveCustomWidthMaterial(pid); }
+ catch (e) { skipped.push(`${pid}: LIVE-READ-FAIL ${e.message} — row held, no enqueue`); continue; }
+ restore.push({ product_id: pid, handle: r.handle, vendor: r.vendor, live_width: cur.width || '', live_material: cur.material || '' });
+ for (const [key, proposed] of [['width', r.proposed_width], ['material', r.proposed_material]]) {
+ if (isNoWrite(proposed)) continue;
+ if (cur[key]) { skipped.push(`${pid} ${key}: live already = ${JSON.stringify(cur[key])} (proposed ${JSON.stringify(proposed)}) → SKIP`); continue; }
+ const endpoint = `/products/${pid}/metafields.json`;
+ const payload = { metafield: { namespace: 'custom', key, type: 'single_line_text_field', value: proposed } };
+ inserts.push({ endpoint, payload, key, pid, proposed });
+ }
+ }
+
+ // ---- print plan ----
+ for (const it of inserts) console.log(`ENQUEUE ${it.pid} custom.${it.key} = ${JSON.stringify(it.proposed)}`);
+ for (const s of skipped.slice(0, 20)) console.log(`skip ${s}`);
+ if (skipped.length > 20) console.log(` …${skipped.length - 20} more skips`);
+ console.log(`\nWOULD ENQUEUE: ${inserts.length} rows (width=${inserts.filter((i) => i.key === 'width').length}, material=${inserts.filter((i) => i.key === 'material').length})`);
+ console.log(`SKIPPED (live already filled / read-fail): ${skipped.length}`);
+
+ // ---- always write staging artifacts ----
+ const queueRows = inserts.map((it) => ({
+ method: 'POST', endpoint: it.endpoint, payload: it.payload,
+ token_alias: 'product', priority: PRIORITY, status: 'pending', source_agent: SOURCE_AGENT,
+ }));
+ const qrPath = join(HERE, `queue-rows-${ts}.json`);
+ writeFileSync(qrPath, JSON.stringify({ note: 'EXACT shopify_api_queue rows. NOT inserted unless --execute + C34_CONFIRM=I-AM-STEVE (local mirror only; Kamatera SQL is the canonical path).', queueRows }, null, 2));
+ const rmPath = join(HERE, `restore-map-${ts}.csv`);
+ writeFileSync(rmPath, 'product_id,handle,vendor,live_width,live_material\n' +
+ restore.map((r) => [r.product_id, r.handle, r.vendor, `"${(r.live_width || '').replace(/"/g, '""')}"`, `"${(r.live_material || '').replace(/"/g, '""')}"`].join(',')).join('\n') + '\n');
+ const sqlPath = join(HERE, `enqueue-${ts}.sql`);
+ const sql = ['-- c34 osborne/gaston specs metafield enqueue (live-blank-verified). Run on Kamatera as: sudo -u postgres psql -d dw_unified -f <this>.', 'BEGIN;']
+ .concat(inserts.map((it) => {
+ const p = JSON.stringify(it.payload);
+ return `INSERT INTO shopify_api_queue (method, endpoint, payload, token_alias, priority, status, source_agent)\n` +
+ `SELECT 'POST', ${sqlLit(it.endpoint)}, ${sqlLit(p)}::jsonb, 'product', ${PRIORITY}, 'pending', '${SOURCE_AGENT}'\n` +
+ `WHERE NOT EXISTS (SELECT 1 FROM shopify_api_queue q WHERE q.request_hash = md5(('POST'||${sqlLit(it.endpoint)})||COALESCE((${sqlLit(p)}::jsonb)::text,'')) AND q.status IN ('pending','processing'));`;
+ }))
+ .concat(['COMMIT;', '']).join('\n');
+ writeFileSync(sqlPath, sql);
+ console.log(`\nstaged → ${qrPath}\nrestore-map → ${rmPath}\nKamatera SQL (Steve runs) → ${sqlPath}`);
+
+ if (!EXECUTE) {
+ console.log('\nDRY-RUN: no INSERT. Re-run with --execute + C34_CONFIRM=I-AM-STEVE to insert into the LOCAL mirror (no runner). The CANONICAL push is the Kamatera SQL above, run by Steve.');
+ return;
+ }
+ if (!CONFIRMED) {
+ console.error('\n⛔ --execute refused: gated. Set C34_CONFIRM=I-AM-STEVE to confirm (Steve only).');
+ process.exit(2);
+ }
+ console.error('\n⛔ --execute is intentionally a NO-OP transport: the local Mac2 shopify_api_queue has NO runner (audited — zero done rows ever).');
+ console.error(' The canonical, gated write is the Kamatera SQL emitted above. Hand Steve:');
+ console.error(` scp ${sqlPath} my-server:/tmp/ && ssh my-server "sudo -u postgres psql -d dw_unified -v ON_ERROR_STOP=1 -f /tmp/$(basename ${sqlPath})"`);
+ process.exit(0);
+}
+
+main().catch((e) => { console.error(e); process.exit(1); });
diff --git a/scripts/c34-osborne-gaston/test_enqueue_specs.py b/scripts/c34-osborne-gaston/test_enqueue_specs.py
new file mode 100644
index 0000000..b8b1425
--- /dev/null
+++ b/scripts/c34-osborne-gaston/test_enqueue_specs.py
@@ -0,0 +1,235 @@
+#!/usr/bin/env python3
+"""
+RIGOROUS smoke test for the c34 Osborne & Little + Gaston Y Daniela
+specs-metafield enqueue generator (enqueue-specs.py).
+
+Hermetic + $0 + READ-ONLY: live_metafields() and token() are monkeypatched,
+so the test NEVER calls the live Shopify API, never reads a real secret, and
+never touches any DB. The generator's file writes (restore-map + enqueue SQL)
+go to a tempdir.
+
+Asserts BEHAVIOR, not "it ran" (Steve's THEMES/validation rule):
+ (a) every emitted row is blank-fill-only — never targets a product whose
+ metafield is already non-null in the (mocked) live store
+ (b) idempotent — re-running over the same inputs emits the identical set
+ (c) width formatted exactly "{n} inches", trailing zeros trimmed
+ (d) material canonical "Non-Woven" (no Non woven/Nonwoven), and
+ Wallpaper/Holographic/N/A are EXCLUDED from material while their
+ width is STILL emitted
+ (e) counts match 58 width + 39 material across 59 products (all-blank live)
+
+Run: python3 test_enqueue_specs.py
+Exit 0 = PASS, non-zero = BLOCK.
+"""
+import os, re, sys, csv, json, runpy, tempfile, importlib.util, contextlib, io
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+GEN = os.path.join(HERE, "enqueue-specs.py")
+WORKLIST = os.path.expanduser(
+ "~/.claude/yolo-queue/pending-approval/done/c34-osborne-gaston-specs-worklist.tsv"
+)
+
+EXPECT_PRODUCTS = 59
+EXPECT_WIDTH = 58
+EXPECT_MATERIAL = 39
+CANON_MATERIALS = {"Non-Woven", "Paper", "Vinyl", "Vinyl-Coated Non-Woven"}
+BAD_MATERIAL_VARIANTS = {"Non woven", "Nonwoven", "non-woven", "NON-WOVEN", "Non Woven"}
+WIDTH_RE = re.compile(r"^\d+(\.\d+)? inches$")
+
+
+def load_generator():
+ """Import enqueue-specs.py as a module without running main()."""
+ spec = importlib.util.spec_from_file_location("c34_enqueue_specs", GEN)
+ mod = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(mod)
+ return mod
+
+
+def run_generator(mod, live_map, limit=0, workdir=None):
+ """
+ Run the generator's main() against the real worklist TSV but with
+ live_metafields + token mocked. live_map: {product_id: {key: value}} for
+ the simulated live store. Returns (stdout, emitted_sql_path, restore_path).
+ """
+ mod.token = lambda: "MOCK-TOKEN-no-network"
+ mod.live_metafields = lambda pid, tok: dict(live_map.get(str(pid), {}))
+
+ argv = ["enqueue-specs.py", "--worklist", WORKLIST]
+ if limit:
+ argv += ["--limit", str(limit)]
+
+ cwd0 = os.getcwd()
+ os.chdir(workdir)
+ buf = io.StringIO()
+ try:
+ sys.argv = argv
+ with contextlib.redirect_stdout(buf):
+ mod.main()
+ finally:
+ os.chdir(cwd0)
+
+ out = buf.getvalue()
+ sqls = sorted(f for f in os.listdir(workdir) if f.startswith("enqueue-") and f.endswith(".sql"))
+ rms = sorted(f for f in os.listdir(workdir) if f.startswith("restore-map-") and f.endswith(".csv"))
+ return out, os.path.join(workdir, sqls[-1]), os.path.join(workdir, rms[-1])
+
+
+def parse_inserts(sql_path):
+ """
+ Parse the emitted INSERT...SELECT statements into structured rows:
+ [{product_id, key, value, endpoint, token_alias, source_agent, has_not_exists}]
+ """
+ text = open(sql_path).read()
+ blocks = re.split(r"INSERT INTO shopify_api_queue", text)[1:]
+ out = []
+ for b in blocks:
+ ep = re.search(r"/products/(\d+)/metafields\.json", b)
+ # the payload JSON literal
+ pay = re.search(r"'(\{\"metafield\".*?\})'::jsonb", b)
+ ta = re.search(r"'product', \d+, 'pending', '([^']+)'", b)
+ if not (ep and pay):
+ continue
+ payload = json.loads(pay.group(1))
+ mf = payload["metafield"]
+ out.append({
+ "product_id": ep.group(1),
+ "key": mf["key"],
+ "value": mf["value"],
+ "type": mf["type"],
+ "namespace": mf["namespace"],
+ "source_agent": ta.group(1) if ta else None,
+ "has_not_exists": "NOT EXISTS" in b,
+ })
+ return out
+
+
+PASS, FAIL = [], []
+
+
+def check(cond, label):
+ (PASS if cond else FAIL).append(label)
+ print(f" [{'PASS' if cond else 'FAIL'}] {label}")
+
+
+def main():
+ print(f"Generator : {GEN}")
+ print(f"Worklist : {WORKLIST}")
+ if not os.path.exists(GEN):
+ sys.exit("BLOCK: generator enqueue-specs.py not present yet (vp-dw-commerce authoring in parallel)")
+ if not os.path.exists(WORKLIST):
+ sys.exit("BLOCK: worklist TSV not found")
+
+ wl = list(csv.DictReader(open(WORKLIST), delimiter="\t"))
+ product_ids = [r["product_id"] for r in wl]
+
+ mod = load_generator()
+
+ # ---- Scenario 1: ALL-BLANK live store -> full expected set (counts gate e) ----
+ print("\n[1] All-blank live store (full expected emission)")
+ all_blank = {pid: {} for pid in product_ids}
+ with tempfile.TemporaryDirectory() as td:
+ out1, sql1, rm1 = run_generator(mod, all_blank, workdir=td)
+ ins1 = parse_inserts(sql1)
+ w = [i for i in ins1 if i["key"] == "width"]
+ m = [i for i in ins1 if i["key"] == "material"]
+ prods_checked = len({r["product_id"] for r in wl})
+
+ check(prods_checked == EXPECT_PRODUCTS, f"(e) 59 products in worklist (got {prods_checked})")
+ check(len(w) == EXPECT_WIDTH, f"(e) 58 width writes (got {len(w)})")
+ check(len(m) == EXPECT_MATERIAL, f"(e) 39 material writes (got {len(m)})")
+
+ # (c) width format exactly "{n} inches", trailing zeros trimmed
+ bad_fmt = [i["value"] for i in w if not WIDTH_RE.match(i["value"])]
+ check(not bad_fmt, f"(c) all widths match '{{n}} inches' (violations: {bad_fmt})")
+ trailing_zero = [i["value"] for i in w if re.match(r"^\d+\.0 inches$", i["value"])]
+ check(not trailing_zero, f"(c) no trailing-.0 widths (found: {trailing_zero})")
+
+ # (d) material canonical + no bad variants
+ bad_mat = [i["value"] for i in m if i["value"] not in CANON_MATERIALS]
+ check(not bad_mat, f"(d) all materials canonical {sorted(CANON_MATERIALS)} (violations: {bad_mat})")
+ leaked_variant = [i["value"] for i in m if i["value"] in BAD_MATERIAL_VARIANTS]
+ check(not leaked_variant, f"(d) no Non woven/Nonwoven variants leaked (found: {leaked_variant})")
+ nonwoven_present = any(i["value"] == "Non-Woven" for i in m)
+ check(nonwoven_present, "(d) canonical 'Non-Woven' present in emitted materials")
+
+ # (d) Wallpaper/Holographic/N/A excluded from material BUT width still emitted
+ excl_rows = [r for r in wl if r["proposed_material"].startswith("EXCLUDE-")
+ and r["proposed_material"] != "EXCLUDE-none"]
+ excl_pids = {r["product_id"] for r in excl_rows}
+ emitted_mat_pids = {i["product_id"] for i in m}
+ check(not (excl_pids & emitted_mat_pids),
+ f"(d) Wallpaper/Holographic/N/A products got NO material write "
+ f"(leaked: {excl_pids & emitted_mat_pids})")
+ # their width must still be emitted (these are real wallpaper rolls)
+ emitted_width_pids = {i["product_id"] for i in w}
+ # only the single SKIP-has-value row (W7980-01) legitimately has no width
+ skip_width_pids = {r["product_id"] for r in wl if r["proposed_width"].startswith("SKIP")}
+ missing_width = (excl_pids - skip_width_pids) - emitted_width_pids
+ check(not missing_width,
+ f"(d) excluded-material products STILL get a width write (missing: {missing_width})")
+
+ # (a) blank-only: every emitted target was blank in the (all-blank) live store -> trivially true,
+ # asserted strongly in Scenario 2.
+ check(all(i["has_not_exists"] for i in ins1), "(structure) every INSERT carries the NOT-EXISTS dedup guard")
+ check(all(i["source_agent"] == "c34-osborne-gaston-specs" for i in ins1),
+ "(structure) every row tagged source_agent=c34-osborne-gaston-specs")
+ check(all(i["namespace"] == "custom" and i["type"] == "single_line_text_field" for i in ins1),
+ "(structure) every metafield is custom / single_line_text_field")
+
+ sig1 = sorted((i["product_id"], i["key"], i["value"]) for i in ins1)
+
+ # ---- Scenario 1b: idempotent re-run (gate b) ----
+ print("\n[2] Idempotent re-run over identical inputs")
+ with tempfile.TemporaryDirectory() as td:
+ _, sql1b, _ = run_generator(mod, all_blank, workdir=td)
+ sig1b = sorted((i["product_id"], i["key"], i["value"]) for i in parse_inserts(sql1b))
+ check(sig1 == sig1b, f"(b) re-run emits the IDENTICAL set ({len(sig1)} rows both runs)")
+
+ # ---- Scenario 2: live store ALREADY FILLED -> blank-only must emit ZERO (gate a) ----
+ print("\n[3] Live store already filled (blank-only guard must skip everything)")
+ filled = {}
+ for r in wl:
+ mp = {}
+ if r["proposed_width"] not in ("(blank)", "") and not r["proposed_width"].startswith("SKIP"):
+ mp["width"] = "PRE-EXISTING 99 inches"
+ if r["proposed_material"] and not r["proposed_material"].startswith(("EXCLUDE", "SKIP")):
+ mp["material"] = "PRE-EXISTING Silk"
+ filled[r["product_id"]] = mp
+ with tempfile.TemporaryDirectory() as td:
+ out3, sql3, _ = run_generator(mod, filled, workdir=td)
+ ins3 = parse_inserts(sql3)
+ check(len(ins3) == 0,
+ f"(a) blank-only: 0 writes when live already has values (got {len(ins3)})")
+
+ # ---- Scenario 3: ONE product blank, rest filled -> only that one emits (gate a, fine-grained) ----
+ print("\n[4] Single genuinely-blank product among filled peers")
+ target = product_ids[0]
+ mixed = dict(filled)
+ mixed[target] = {} # this one is blank for both keys
+ with tempfile.TemporaryDirectory() as td:
+ _, sql4, _ = run_generator(mod, mixed, workdir=td)
+ ins4 = parse_inserts(sql4)
+ emitted_pids = {i["product_id"] for i in ins4}
+ check(emitted_pids == {target},
+ f"(a) only the genuinely-blank product emits (expected {{{target}}}, got {emitted_pids})")
+
+ # ---- Scenario 4: canary --limit honored ----
+ print("\n[5] --limit canary mode")
+ with tempfile.TemporaryDirectory() as td:
+ out5, sql5, _ = run_generator(mod, all_blank, limit=1, workdir=td)
+ ins5 = parse_inserts(sql5)
+ canary_pids = {i["product_id"] for i in ins5}
+ check(len(canary_pids) <= 1, f"(canary) --limit 1 touches at most 1 product (got {canary_pids})")
+
+ print("\n" + "=" * 60)
+ print(f"RESULT: {len(PASS)} passed, {len(FAIL)} failed")
+ if FAIL:
+ print("BLOCK — failing checks:")
+ for f in FAIL:
+ print(" -", f)
+ sys.exit(1)
+ print("PASS — testing gate satisfied.")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/canary-board/canary-board.mjs b/scripts/canary-board/canary-board.mjs
new file mode 100644
index 0000000..ffb2059
--- /dev/null
+++ b/scripts/canary-board/canary-board.mjs
@@ -0,0 +1,90 @@
+// canary-board — run every DW canary and aggregate into ONE red/green health pane.
+// Proves the tools built tonight actually run, and gives Steve a single morning view.
+// READ-ONLY: each underlying canary is read-only; this only runs them + reads their
+// JSON. Network canaries are time-boxed and degrade to UNKNOWN (never fail the board).
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const HOME = process.env.HOME;
+const PROJ = `${HOME}/Projects/designerwallcoverings`;
+const YQ = `${HOME}/.claude/yolo-queue`;
+const today = new Date().toISOString().slice(0, 10);
+const OUT = `${YQ}/canary-board-${today}.json`;
+const MD = `${YQ}/canary-board-${today}.md`;
+
+function run(cmd, args, opts = {}) {
+ try { execFileSync(cmd, args, { encoding: 'utf8', timeout: opts.timeout || 60000, stdio: ['ignore', 'ignore', 'ignore'], cwd: opts.cwd || PROJ }); return true; }
+ catch (e) { return false; }
+}
+function readJSON(p) { try { return JSON.parse(fs.readFileSync(p, 'utf8')); } catch { return null; } }
+
+const board = [];
+
+// 1) canary-meta-watchdog (launchd freshness) — fast local
+run('node', ['scripts/canary-meta-watchdog/canary-meta-watchdog.js']);
+{
+ const j = readJSON(`${YQ}/canary-meta-watchdog-${today}.json`);
+ if (j) board.push({ canary: 'meta-watchdog', verdict: j.summary?.FAIL ? 'FAIL' : 'PASS',
+ headline: `${j.total} jobs · FAIL ${j.summary?.FAIL||0} / WARN ${j.summary?.WARN||0} / PASS ${j.summary?.PASS||0}` });
+ else board.push({ canary: 'meta-watchdog', verdict: 'UNKNOWN', headline: 'no output' });
+}
+
+// 2) contract-scope-auditor — fast local DB
+run('node', ['scripts/contract-scope-auditor/contract-scope-auditor.mjs']);
+{
+ const j = readJSON(`${YQ}/contract-scope-audit-${today}.json`);
+ if (j) board.push({ canary: 'contract-scope', verdict: j.verdict, headline: (j.findings||[]).map(f=>`${f.sev}:${f.check}`).join(' ') || 'clean' });
+ else board.push({ canary: 'contract-scope', verdict: 'UNKNOWN', headline: 'no output' });
+}
+
+// 3) scraper-contract-test — fast local DB
+run('node', ['scripts/scraper-contract-test/scraper-contract-test.mjs']);
+{
+ const j = readJSON(`${YQ}/scraper-contract-test-2026-06-16.json`);
+ if (j) board.push({ canary: 'scraper-contract', verdict: j.summary?.FAIL ? 'FAIL' : j.summary?.WARN ? 'WARN' : 'PASS',
+ headline: `${j.vendors} vendors · ${Object.entries(j.summary).map(([k,v])=>`${k}=${v}`).join(' ')}` });
+ else board.push({ canary: 'scraper-contract', verdict: 'UNKNOWN', headline: 'no output' });
+}
+
+// 4) dw-map-auditor — fast local DB (existing skill)
+run('bash', ['run.sh'], { cwd: `${HOME}/.claude/skills/dw-map-auditor` });
+{
+ const j = readJSON(`${HOME}/.claude/skills/dw-map-auditor/data/latest.json`);
+ if (j) board.push({ canary: 'dw-map-auditor', verdict: j.verdict, headline: `${j.fail||0} FAIL / ${j.warn||0} WARN (Kravet MAP + Nicolette)` });
+ else board.push({ canary: 'dw-map-auditor', verdict: 'UNKNOWN', headline: 'no output' });
+}
+
+// 5) cf-dns-snapshot — read latest report (ran this session; re-run is fast/read-only)
+run('node', ['scripts/cf-dns-snapshot/cf-dns-snapshot.js'], { timeout: 90000 });
+{
+ const snap = readJSON(`${PROJ}/scripts/cf-dns-snapshot/snapshots/cf-zones-latest.json`);
+ board.push({ canary: 'cf-dns-drift', verdict: snap ? 'PASS' : 'UNKNOWN',
+ headline: snap ? `${snap.zone_count} zones baseline (diff vs HEAD)` : 'no snapshot' });
+}
+
+// 6) dw-scraper-canary — NETWORK (storefront fetch); time-boxed, degrade to UNKNOWN
+const ok = run('node', ['canary.mjs'], { cwd: `${HOME}/.claude/skills/dw-scraper-canary`, timeout: 120000 });
+{
+ const j = readJSON(`${HOME}/.claude/skills/dw-scraper-canary/data/latest.json`);
+ if (j) board.push({ canary: 'dw-scraper-canary', verdict: j.verdict || (j.fail? 'FAIL':'PASS'), headline: 'output-side (public feed) count/leak/image' });
+ else board.push({ canary: 'dw-scraper-canary', verdict: ok ? 'PASS' : 'UNKNOWN', headline: ok ? 'ran (no latest.json schema)' : 'network/timeout — not a failure' });
+}
+
+const rank = { FAIL: 0, WARN: 1, UNKNOWN: 2, PASS: 3 };
+board.sort((a, b) => rank[a.verdict] - rank[b.verdict]);
+const counts = board.reduce((m, b) => (m[b.verdict] = (m[b.verdict]||0)+1, m), {});
+const overall = board.some(b => b.verdict === 'FAIL') ? 'FAIL' : board.some(b => b.verdict === 'WARN') ? 'WARN' : 'PASS';
+
+const report = { generated_at: new Date().toISOString(), overall, counts, canaries: board };
+fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+let md = `# DW Canary Board — ${new Date().toISOString().slice(0,16)}\n\n`;
+md += `**Overall: ${overall}** · ${Object.entries(counts).map(([k,v])=>`${k}=${v}`).join(' · ')} · ${board.length} canaries\n\n`;
+md += `| Canary | Verdict | Headline |\n|---|---|---|\n`;
+for (const b of board) md += `| ${b.canary} | ${{FAIL:'🔴',WARN:'🟠',UNKNOWN:'⚪',PASS:'🟢'}[b.verdict]} ${b.verdict} | ${b.headline} |\n`;
+md += `\n_All read-only. Built/aggregated by overnight loop cycle 16. $0._\n`;
+fs.writeFileSync(MD, md);
+
+console.log(`[canary-board] OVERALL ${overall} · ${Object.entries(counts).map(([k,v])=>`${k}=${v}`).join(' ')}`);
+for (const b of board) console.log(` ${{FAIL:'🔴',WARN:'🟠',UNKNOWN:'⚪',PASS:'🟢'}[b.verdict]} ${b.canary.padEnd(20)} ${b.headline}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/canary-install/run-canary-with-cncp.sh b/scripts/canary-install/run-canary-with-cncp.sh
new file mode 100755
index 0000000..84a75e2
--- /dev/null
+++ b/scripts/canary-install/run-canary-with-cncp.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# run-canary-with-cncp.sh — generic wrapper: run a read-only canary, and on a non-zero
+# exit (3=ALERT, 2=INCONCLUSIVE) POST its /tmp result summary to CNCP parking-lot.
+# promote-canary.sh schedules THIS wrapper (so launchd gets CNCP alerting the bare canary
+# lacks). Read-only w.r.t. prod ($0). The canary itself never mutates; this only reads its
+# /tmp json + POSTs a CNCP card on alert.
+#
+# Usage (what the plist runs):
+# bash run-canary-with-cncp.sh <canary-abs-path.mjs> <tmp-json-path> <label> [urgency]
+# Example:
+# bash run-canary-with-cncp.sh \
+# "$HOME/Projects/designerwallcoverings/scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjs" \
+# /tmp/sitemap-integrity-canary.json dw-sitemap-integrity P2
+set -uo pipefail
+CANARY="${1:?need canary script path}"
+TMPJSON="${2:?need /tmp json path}"
+LABEL="${3:?need label}"
+URG="${4:-P2}"
+CNCP="http://127.0.0.1:3333/api/parking-lot"
+
+: > "/tmp/${LABEL}.log" 2>/dev/null || true # truncate-on-start so the wrapper log can't grow unbounded (box never sleeps)
+node "$CANARY"; rc=$?
+
+# rc 0 = HEALTHY (no CNCP card — silence on green); 2 = INCONCLUSIVE; 3 = ALERT
+if [ "$rc" -ne 0 ]; then
+ verdict=$([ "$rc" -eq 3 ] && echo ALERT || echo INCONCLUSIVE)
+ # Build the POST body with node JSON.stringify so a quote/newline in the summary can't
+ # produce malformed JSON (CNCP {url,note} shape verified live this run). Plain-ASCII, capped.
+ BODY=$(TMPJSON="$TMPJSON" LABEL="$LABEL" URG="$URG" VERDICT="$verdict" node -e '
+ let d={}; try{ d=require(process.env.TMPJSON);}catch(e){}
+ const a=(d.alerts||[]).join(" | ").replace(/[^\x20-\x7E]/g," ").slice(0,400);
+ const note=`<!-- URGENCY: ${process.env.URG} --> [canary:${process.env.LABEL}] ${d.verdict||process.env.VERDICT}: ${a||"(no json summary)"}`;
+ process.stdout.write(JSON.stringify({url:"file://"+process.env.TMPJSON, note}));
+ ' 2>/dev/null)
+ if [ -n "$BODY" ]; then
+ code=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$CNCP" -H 'Content-Type: application/json' --data-binary "$BODY" 2>/dev/null || echo "000")
+ echo "[run-canary-with-cncp] $LABEL rc=$rc → CNCP POST http=$code ($verdict)"
+ else
+ echo "[run-canary-with-cncp] $LABEL rc=$rc → could not build CNCP body (verdict $verdict); exit code still propagates"
+ fi
+else
+ echo "[run-canary-with-cncp] $LABEL rc=0 HEALTHY → no CNCP card (silence on green)"
+fi
+exit "$rc"
diff --git a/scripts/canary-install/run-sitemap-integrity.sh b/scripts/canary-install/run-sitemap-integrity.sh
new file mode 100755
index 0000000..bed17c6
--- /dev/null
+++ b/scripts/canary-install/run-sitemap-integrity.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+# thin no-arg wrapper so promote-canary.sh (which runs $SCRIPT with no args + does -f) can schedule it.
+exec /bin/bash "$HOME/Projects/designerwallcoverings/scripts/canary-install/run-canary-with-cncp.sh" \
+ "$HOME/Projects/designerwallcoverings/scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjs" \
+ /tmp/sitemap-integrity-canary.json dw-sitemap-integrity P2
diff --git a/scripts/canary-install/run-zero-dollar.sh b/scripts/canary-install/run-zero-dollar.sh
new file mode 100755
index 0000000..3ad3386
--- /dev/null
+++ b/scripts/canary-install/run-zero-dollar.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+# thin no-arg wrapper (install AFTER the gated reprice or after the ack-baseline is added — see runbook §3).
+exec /bin/bash "$HOME/Projects/designerwallcoverings/scripts/canary-install/run-canary-with-cncp.sh" \
+ "$HOME/Projects/designerwallcoverings/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs" \
+ /tmp/zero-dollar-orderable-canary.json dw-zero-dollar P1
diff --git a/scripts/canary-meta-watchdog/canary-meta-watchdog.js b/scripts/canary-meta-watchdog/canary-meta-watchdog.js
new file mode 100644
index 0000000..1049332
--- /dev/null
+++ b/scripts/canary-meta-watchdog/canary-meta-watchdog.js
@@ -0,0 +1,193 @@
+#!/usr/bin/env node
+/**
+ * Canary Meta-Watchdog — proves the canaries themselves actually RAN.
+ *
+ * The fleet's worst failures are silent monitoring deaths: the dw_unified
+ * pg_dump wrote 0 bytes for 12 days unnoticed, the Kamatera health-watchdog
+ * went down, and ≥6 launchd jobs are failing — each a case of "the thing that
+ * should have warned us is the thing that broke." This meta-watchdog reads
+ * every com.steve.* LaunchAgent, derives its expected cadence, and FAILs
+ * (report-only) if a job is unloaded, last-exited non-zero, or hasn't produced
+ * fresh log output within its expected interval (× a grace factor).
+ *
+ * READ-ONLY: parses plists + stats log files + reads `launchctl print`. Writes
+ * only a local report JSON. No prod writes, no network. Cost: $0 (local).
+ *
+ * node canary-meta-watchdog.js # human table + write report JSON
+ * node canary-meta-watchdog.js --json # machine JSON to stdout
+ */
+const fs = require('fs');
+const path = require('path');
+const { execSync } = require('child_process');
+
+const HOME = process.env.HOME;
+const LA_DIR = path.join(HOME, 'Library/LaunchAgents');
+const UID = parseInt(execSync('id -u').toString().trim(), 10);
+const GRACE = 1.5; // allow 1.5× the expected interval before flagging stale
+const OUT = path.join(HOME, '.claude/yolo-queue', `canary-meta-watchdog-${new Date().toISOString().slice(0,10)}.json`);
+const JSON_ONLY = process.argv.includes('--json');
+
+const now = Date.now();
+const sec = (ms) => ms / 1000;
+
+function plistToObj(file) {
+ try { return JSON.parse(execSync(`plutil -convert json -o - ${JSON.stringify(file)}`, { stdio: ['ignore','pipe','ignore'] }).toString()); }
+ catch (e) { return null; }
+}
+
+// Expected period in seconds from StartInterval or StartCalendarInterval.
+function expectedPeriodSec(p) {
+ if (typeof p.StartInterval === 'number') return p.StartInterval;
+ const sci = p.StartCalendarInterval;
+ if (sci) {
+ const entries = Array.isArray(sci) ? sci : [sci];
+ // crude cadence inference: Minute-only => hourly; Hour set => daily; Weekday set => weekly; Day set => monthly
+ const e = entries[0] || {};
+ if ('Weekday' in e) return 7 * 86400;
+ if ('Day' in e) return 30 * 86400;
+ if ('Hour' in e) return 86400; // runs at a fixed hour daily
+ if ('Minute' in e) return 3600; // runs each hour at a minute
+ return 86400;
+ }
+ return null; // RunAtLoad-only / on-demand — no cadence to check
+}
+
+// Some jobs `exec >> "$LOG"` to a DIFFERENT file than launchd's StandardOutPath, so the
+// captured .out/.err freeze at deploy time and falsely read as "stale/dead" (cost hours on
+// com.steve.dw-cadence-hourly 2026-06-23 — the real heartbeat is .log, not .out). Map such
+// jobs to their REAL log here so liveness is judged on the file the script actually writes.
+const REAL_LOG_OVERRIDES = {
+ 'com.steve.dw-cadence-hourly': '/tmp/dw-cadence-hourly.log',
+};
+// Non-zero exit codes that are HEALTHY-BUT-CAPPED, not outages. The cadence exits 3 when it
+// hits Shopify's rolling 1,000-variant/24h cap (DAILY_VARIANT_LIMIT) — it ran fine and will
+// resume next slot after the cap rolls over, so it must NOT read as a dead job.
+const HEALTHY_EXIT_CODES = {
+ 'com.steve.dw-cadence-hourly': [3],
+};
+// Last-run proxy = newest mtime among the job's real log + stdout/stderr paths. Also probes a
+// sibling ".log" of any ".out" path (the common `exec >> *.log` pattern) so other such jobs
+// self-heal without an explicit override.
+function lastRunMs(p) {
+ const paths = [REAL_LOG_OVERRIDES[p.Label], p.StandardOutPath, p.StandardErrorPath].filter(Boolean);
+ for (const f of [p.StandardOutPath, p.StandardErrorPath]) {
+ if (f && f.endsWith('.out')) paths.push(f.replace(/\.out$/, '.log'));
+ if (f && f.endsWith('.err')) paths.push(f.replace(/\.err$/, '.log'));
+ }
+ let newest = 0;
+ for (const f of paths) {
+ try { const st = fs.statSync(f); newest = Math.max(newest, st.mtimeMs); } catch (_) {}
+ }
+ return newest || null;
+}
+
+// launchctl state: loaded? last exit code? pid?
+function launchctlState(label) {
+ try {
+ const out = execSync(`launchctl print gui/${UID}/${label} 2>/dev/null`, { stdio: ['ignore','pipe','ignore'] }).toString();
+ const pid = (out.match(/pid = (\d+)/) || [])[1] || null;
+ const lastExit = (out.match(/last exit code = (\d+)/) || [])[1];
+ return { loaded: true, pid, lastExit: lastExit !== undefined ? parseInt(lastExit, 10) : null };
+ } catch (e) {
+ // fall back to `launchctl list` membership
+ try {
+ const line = execSync(`launchctl list | grep ${JSON.stringify(label)} 2>/dev/null`, { stdio: ['ignore','pipe','ignore'] }).toString().trim();
+ if (!line) return { loaded: false, pid: null, lastExit: null };
+ const cols = line.split(/\s+/);
+ return { loaded: true, pid: cols[0] === '-' ? null : cols[0], lastExit: cols[1] === '-' ? null : parseInt(cols[1], 10) };
+ } catch (_) { return { loaded: false, pid: null, lastExit: null }; }
+ }
+}
+
+const files = fs.readdirSync(LA_DIR).filter(f => /^com\.steve\..*\.plist$/.test(f));
+const results = [];
+
+for (const f of files) {
+ const full = path.join(LA_DIR, f);
+ const p = plistToObj(full);
+ if (!p || !p.Label) { results.push({ label: f.replace(/\.plist$/, ''), verdict: 'WARN', why: 'unparseable plist' }); continue; }
+ const label = p.Label;
+ const period = expectedPeriodSec(p);
+ const last = lastRunMs(p);
+ const st = launchctlState(label);
+ const ageSec = last ? sec(now - last) : null;
+
+ let verdict = 'PASS', why = [];
+ if (!st.loaded) { verdict = 'FAIL'; why.push('NOT LOADED in launchd'); }
+ if (st.lastExit && st.lastExit !== 0) {
+ if ((HEALTHY_EXIT_CODES[label] || []).includes(st.lastExit)) {
+ why.push(`exit ${st.lastExit} = healthy-but-capped (not an outage)`);
+ } else { verdict = 'FAIL'; why.push(`last exit = ${st.lastExit}`); }
+ }
+ if (period && ageSec !== null) {
+ if (ageSec > period * GRACE) { verdict = 'FAIL'; why.push(`STALE: last log ${(ageSec/3600).toFixed(1)}h ago vs ${(period/3600).toFixed(1)}h cadence`); }
+ } else if (period && last === null) {
+ if (verdict === 'PASS') verdict = 'WARN'; why.push('no log output found (never ran or logs elsewhere)');
+ } else if (!period) {
+ if (verdict === 'PASS') verdict = 'INFO'; why.push('on-demand/RunAtLoad — no cadence to check');
+ }
+ results.push({
+ label, verdict,
+ cadence_h: period ? +(period/3600).toFixed(1) : null,
+ last_run_age_h: ageSec !== null ? +(ageSec/3600).toFixed(1) : null,
+ loaded: st.loaded, last_exit: st.lastExit, pid: st.pid,
+ why: why.join('; ') || 'ok',
+ });
+}
+
+// --- Status-file probes: jobs that publish a data/latest.json with self-reported
+// health. The plist loop above only proves a job RAN; this reads what it FOUND, so a
+// job that ran fine (exit 0, fresh log) but DETECTED a problem (e.g. George token
+// dead) still FAILs. Registry: status-files.json (optional — never breaks the watchdog).
+try {
+ const regPath = path.join(__dirname, 'status-files.json');
+ if (fs.existsSync(regPath)) {
+ const reg = JSON.parse(fs.readFileSync(regPath, 'utf8'));
+ for (const entry of (reg.status_files || [])) {
+ const file = (entry.file || '').replace(/^~/, HOME);
+ let verdict = 'PASS', why = [], data = null, ageH = null;
+ try { data = JSON.parse(fs.readFileSync(file, 'utf8')); }
+ catch (e) { verdict = 'FAIL'; why.push(`no/unreadable latest.json (${e.code || e.message})`); }
+ if (data) {
+ if (data.ts) ageH = +(((now - Date.parse(data.ts)) / 3600000)).toFixed(1);
+ if (entry.max_age_h != null && ageH !== null && ageH > entry.max_age_h) {
+ verdict = 'FAIL'; why.push(`STALE status: ${ageH}h old vs ${entry.max_age_h}h max`);
+ }
+ const ov = String(data.overall || '').toLowerCase();
+ if (ov && ov !== 'ok') {
+ verdict = 'FAIL';
+ const dead = Array.isArray(data.deadTokens) && data.deadTokens.length ? ` (dead: ${data.deadTokens.join(',')})` : '';
+ why.push(`reported overall=${data.overall}${dead}`);
+ } else if (ov === 'ok' && verdict === 'PASS') {
+ why.push(`overall=ok${ageH !== null ? `, ${ageH}h fresh` : ''}`);
+ }
+ }
+ results.push({
+ label: (entry.label || 'status') + ' (status)', verdict,
+ cadence_h: null, last_run_age_h: ageH, loaded: null, last_exit: null, pid: null,
+ why: why.join('; ') || 'ok', source: 'status-file',
+ });
+ }
+ }
+} catch (e) { /* registry is optional — a parse error must never break the plist watchdog */ }
+
+const rank = { FAIL: 0, WARN: 1, INFO: 2, PASS: 3 };
+results.sort((a, b) => (rank[a.verdict] - rank[b.verdict]) || a.label.localeCompare(b.label));
+const summary = results.reduce((m, r) => (m[r.verdict] = (m[r.verdict]||0)+1, m), {});
+const report = { generated_at: new Date().toISOString(), launch_agents_dir: LA_DIR, grace_factor: GRACE, total: results.length, summary, results };
+
+fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+if (JSON_ONLY) { console.log(JSON.stringify(report, null, 2)); process.exit(0); }
+
+console.log(`\nCanary Meta-Watchdog — ${results.length} com.steve.* jobs (${new Date().toISOString().slice(0,16)})`);
+console.log(`Summary: ${Object.entries(summary).map(([k,v])=>`${k}=${v}`).join(' ')}`);
+console.log('─'.repeat(96));
+for (const r of results) {
+ const tag = { FAIL:'🔴', WARN:'🟠', INFO:'⚪', PASS:'🟢' }[r.verdict];
+ console.log(`${tag} ${r.verdict.padEnd(4)} ${r.label.padEnd(42)} ${r.why}`);
+}
+console.log('─'.repeat(96));
+console.log(`Report: ${OUT}`);
+const fails = results.filter(r => r.verdict === 'FAIL');
+if (fails.length) console.log(`\n⚠️ ${fails.length} canary FAIL(s) — these monitors are not provably running.`);
diff --git a/scripts/canary-meta-watchdog/com.steve.canary-meta-watchdog.plist b/scripts/canary-meta-watchdog/com.steve.canary-meta-watchdog.plist
new file mode 100644
index 0000000..e568001
--- /dev/null
+++ b/scripts/canary-meta-watchdog/com.steve.canary-meta-watchdog.plist
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<!-- STAGED — NOT installed. Enable with:
+ launchctl bootstrap gui/$(id -u) scripts/canary-meta-watchdog/com.steve.canary-meta-watchdog.plist
+ Runs the meta-watchdog daily at 06:30 (after the overnight jobs settle). -->
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.canary-meta-watchdog</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/opt/homebrew/bin/node</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/canary-meta-watchdog/canary-meta-watchdog.js</string>
+ </array>
+ <key>WorkingDirectory</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/canary-meta-watchdog</string>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key>
+ <integer>6</integer>
+ <key>Minute</key>
+ <integer>30</integer>
+ </dict>
+ <key>StandardOutPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/canary-meta-watchdog/cron.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/canary-meta-watchdog/cron.err.log</string>
+ <key>RunAtLoad</key>
+ <false/>
+</dict>
+</plist>
diff --git a/scripts/canonical-robots-audit/canonical-robots-audit.mjs b/scripts/canonical-robots-audit/canonical-robots-audit.mjs
new file mode 100644
index 0000000..249c167
--- /dev/null
+++ b/scripts/canonical-robots-audit/canonical-robots-audit.mjs
@@ -0,0 +1,101 @@
+// canonical-robots-audit — READ-ONLY, $0. Cycle 63 (DTD-picked A, unanimous).
+// Audits INDEXABILITY of live PDPs — the gate that governs whether ~74k products
+// are eligible for Google's index at all. For each sampled live PDP we read:
+// - the response X-Robots-Tag header (header-level noindex beats any on-page tag)
+// - <meta name="robots"> / <meta name="googlebot"> content (noindex/nofollow leak?)
+// - <link rel="canonical" href> — is it SELF-referencing, CROSS-pointing, or MISSING?
+// A stray noindex or a canonical that points away silently de-lists products with
+// ZERO on-page symptom — exactly the invisible fleet-wide failure this loop catches.
+// EXCLUDES Phillip Jeffries (phillip-jeffries-display-excluded) + en-ca locale dupes.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u,method='GET'){for(let a=0;a<4;a++){try{const r=await fetch(u,{method,headers:{'User-Agent':UA},redirect:'manual'});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,headers:r.headers,text:method==='GET'?await r.text():''};}catch(e){await sleep(800*(a+1));}}return {status:0,headers:new Headers(),text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+
+// stratified handle pool across ALL non-en-ca product sitemaps
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-ca\//.test(u));
+let handles=[];
+for(const sm of prodMaps){
+ const x=await get(sm);
+ const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]);
+ const step=Math.max(1,Math.floor(hs.length/12));
+ for(let i=0;i<hs.length && handles.length<400;i+=step) handles.push(hs[i]);
+ await sleep(100);
+}
+handles=[...new Set(handles)].slice(0,360);
+console.log(`=== canonical-robots-audit (READ-ONLY, $0) ===\nstratified sample: ${handles.length} live PDPs across ${prodMaps.length} sitemaps (PJ + en-ca excluded)\n`);
+
+function headTag(html,re){ const m=html.match(re); return m?m[1]:null; }
+// normalize a URL for self-ref comparison: lowercase host, strip trailing slash, strip query/hash
+function norm(u){ try{ const x=new URL(u, WWW); return (x.origin+x.pathname).replace(/\/$/,'').toLowerCase(); }catch{ return (u||'').replace(/\/$/,'').toLowerCase(); } }
+
+let selfCanon=0, crossCanon=0, missingCanon=0;
+let noindexMeta=0, nofollowMeta=0, xRobotsNoindex=0, pjSkip=0, fetchErr=0, redirected=0;
+const problems=[]; // canonical-cross or noindex anything
+const samples=[];
+let done=0;
+for(const h of handles){
+ const expectUrl=norm(`${WWW}/products/${h}`);
+ const r=await get(`${WWW}/products/${h}`,'GET');
+ if(r.status===0){ fetchErr++; done++; continue; }
+ if(r.status>=300 && r.status<400){ redirected++; done++; await sleep(110); continue; } // archived/redirect — not an indexable PDP
+ if(r.status!==200){ fetchErr++; done++; continue; }
+ const html=r.text;
+ // vendor (from product json) for PJ exclusion
+ let vendor='';
+ const ldMatch=html.match(/"vendor"\s*:\s*"([^"]+)"/); if(ldMatch) vendor=ldMatch[1];
+ if(PJ.test(vendor)||PJ.test(h)){ pjSkip++; done++; await sleep(80); continue; }
+
+ // robots signals
+ const xr=(r.headers.get('x-robots-tag')||'').toLowerCase();
+ const metaRobots=(headTag(html,/<meta[^>]+name=["']robots["'][^>]*content=["']([^"']*)["']/i)||'').toLowerCase();
+ const metaGbot=(headTag(html,/<meta[^>]+name=["']googlebot["'][^>]*content=["']([^"']*)["']/i)||'').toLowerCase();
+ const robotsBlob=`${xr} | ${metaRobots} | ${metaGbot}`;
+ const hasNoindex=/noindex/.test(robotsBlob);
+ const hasNofollow=/nofollow/.test(robotsBlob);
+ if(/noindex/.test(xr)) xRobotsNoindex++;
+ if(/noindex/.test(metaRobots)||/noindex/.test(metaGbot)) noindexMeta++;
+ if(hasNofollow) nofollowMeta++;
+
+ // canonical
+ const canonHref=headTag(html,/<link[^>]+rel=["']canonical["'][^>]*href=["']([^"']+)["']/i)
+ || headTag(html,/<link[^>]+href=["']([^"']+)["'][^>]*rel=["']canonical["']/i);
+ let canonClass;
+ if(!canonHref){ missingCanon++; canonClass='MISSING'; }
+ else if(norm(canonHref)===expectUrl){ selfCanon++; canonClass='SELF'; }
+ else { crossCanon++; canonClass='CROSS'; }
+
+ if(hasNoindex || canonClass==='CROSS' || canonClass==='MISSING'){
+ if(problems.length<40) problems.push({h,vendor,canonClass,canonHref:canonHref?norm(canonHref):null,noindex:hasNoindex,nofollow:hasNofollow,xr:xr||null,metaRobots:metaRobots||null});
+ }
+ if(samples.length<6) samples.push({h,canonClass,robots:metaRobots||xr||'(none)'});
+ done++;
+ if(done%50===0) console.log(` ${done}/${handles.length} (self=${selfCanon} cross=${crossCanon} miss=${missingCanon} noindex=${noindexMeta+xRobotsNoindex})`);
+ await sleep(130);
+}
+
+const evaluated=selfCanon+crossCanon+missingCanon;
+console.log(`\n=== RESULTS ===`);
+console.log(`evaluated PDPs (200-OK, non-PJ): ${evaluated} | PJ-skipped: ${pjSkip} | redirected(3xx, archived): ${redirected} | fetch-err: ${fetchErr}`);
+console.log(`\n-- canonical --`);
+console.log(` SELF-referencing (healthy): ${selfCanon} (${evaluated?(100*selfCanon/evaluated).toFixed(1):0}%)`);
+console.log(` CROSS-pointing (canonical → other URL): ${crossCanon}`);
+console.log(` MISSING canonical: ${missingCanon}`);
+console.log(`\n-- robots (indexability) --`);
+console.log(` meta robots/googlebot NOINDEX: ${noindexMeta}`);
+console.log(` X-Robots-Tag header NOINDEX: ${xRobotsNoindex}`);
+console.log(` NOFOLLOW present: ${nofollowMeta}`);
+if(evaluated>0){
+ const bad=crossCanon+missingCanon+noindexMeta+xRobotsNoindex;
+ const p=bad/evaluated, se=Math.sqrt(p*(1-p)/evaluated), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** indexability-DEFECT rate (cross/missing canonical OR noindex): ${bad}/${evaluated} = ${(100*p).toFixed(1)}% (95% CI ${lo.toFixed(1)}–${hi.toFixed(1)}%, n=${evaluated}) ***`);
+}
+if(problems.length){ console.log('\nproblems (first 15):'); problems.slice(0,15).forEach(x=>console.log(` ${x.h.slice(0,44)} [${x.vendor}] canon=${x.canonClass}${x.canonHref?'→'+x.canonHref.replace(WWW,''):''} noindex=${x.noindex} nofollow=${x.nofollow}`)); }
+else console.log('\nno indexability problems in sample.');
+console.log('\nsample (first 6):'); samples.forEach(s=>console.log(` ${s.h.slice(0,44)} canon=${s.canonClass} robots="${s.robots}"`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/canonical-robots-audit.json',JSON.stringify({ts:new Date().toISOString(),sample:handles.length,evaluated,selfCanon,crossCanon,missingCanon,noindexMeta,xRobotsNoindex,nofollowMeta,pjSkip,redirected,fetchErr,problems,samples},null,2));
+console.log('\nwrote /tmp/canonical-robots-audit.json');
diff --git a/scripts/cf-dns-snapshot/cf-dns-snapshot.js b/scripts/cf-dns-snapshot/cf-dns-snapshot.js
new file mode 100644
index 0000000..e61b2bb
--- /dev/null
+++ b/scripts/cf-dns-snapshot/cf-dns-snapshot.js
@@ -0,0 +1,138 @@
+#!/usr/bin/env node
+/**
+ * Cloudflare DNS/zone drift snapshotter — READ-ONLY export + diff vs last commit.
+ *
+ * 200+ (today 35) CF zones are hand-edited with zero change history; a fat-fingered
+ * proxy toggle or clobbered MX/SPF/DKIM silently breaks a site or inbound mail for
+ * days. This serializes every zone's DNS records to a deterministic git-tracked JSON,
+ * diffs against the previously committed snapshot (git HEAD), and raises a TRIPWIRE on
+ * any change to mail-auth records (MX / SPF / DKIM / DMARC) on protected domains.
+ *
+ * CF access is GET-only (zones + dns_records). The only writes are the local snapshot
+ * JSON + report. NO DNS writes. Cost: $0.
+ *
+ * node cf-dns-snapshot.js # snapshot + diff vs HEAD + report
+ * After running, `git add` the snapshot so the NEXT run can diff against it.
+ */
+const fs = require('fs');
+const path = require('path');
+const { execSync } = require('child_process');
+
+const TOKEN = (fs.readFileSync(path.join(process.env.HOME, 'Projects/secrets-manager/.env'), 'utf8')
+ .match(/^CLOUDFLARE_API_TOKEN=(.+)$/m) || [])[1]?.trim();
+if (!TOKEN) { console.error('no CLOUDFLARE_API_TOKEN'); process.exit(1); }
+
+const DIR = __dirname;
+const SNAP_REL = 'scripts/cf-dns-snapshot/snapshots/cf-zones-latest.json';
+const SNAP_ABS = path.join(process.env.HOME, 'Projects/designerwallcoverings', SNAP_REL);
+const REPORT = path.join(process.env.HOME, '.claude/yolo-queue', `cf-dns-drift-${new Date().toISOString().slice(0,10)}.md`);
+
+// Protected domains: a mail-auth change here is the catastrophic case.
+const PROTECTED = [/designerwallcoverings/i, /wallco/i, /sdcc/i, /agentabrams/i, /philipperomano/i];
+const MAIL_TYPES = new Set(['MX', 'TXT']); // SPF/DKIM/DMARC live in TXT
+const isMailAuth = (r) => r.type === 'MX' || (r.type === 'TXT' && /v=spf1|v=DKIM1|v=DMARC1|_dmarc|_domainkey/i.test(r.name + ' ' + r.content));
+
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+async function cf(pathq) {
+ for (let a = 0; a < 5; a++) {
+ try {
+ const res = await fetch(`https://api.cloudflare.com/client/v4${pathq}`, { headers: { Authorization: `Bearer ${TOKEN}` } });
+ if (res.status === 429) { await sleep(2000 * (a + 1)); continue; }
+ const j = await res.json();
+ if (!j.success) throw new Error(JSON.stringify(j.errors).slice(0, 160));
+ return j;
+ } catch (e) { if (a === 4) throw e; await sleep(1500 * (a + 1)); }
+ }
+}
+
+async function allZones() {
+ const out = []; let page = 1;
+ while (true) {
+ const j = await cf(`/zones?per_page=50&page=${page}`);
+ out.push(...j.result);
+ if (page >= (j.result_info.total_pages || 1)) break;
+ page++;
+ }
+ return out;
+}
+async function zoneRecords(id) {
+ const out = []; let page = 1;
+ while (true) {
+ const j = await cf(`/zones/${id}/dns_records?per_page=100&page=${page}`);
+ out.push(...j.result);
+ if (page >= (j.result_info.total_pages || 1)) break;
+ page++;
+ }
+ // deterministic shape, sorted
+ return out.map(r => ({ type: r.type, name: r.name, content: r.content, proxied: !!r.proxied, ttl: r.ttl, priority: r.priority ?? null }))
+ .sort((a, b) => (a.type + a.name + a.content).localeCompare(b.type + b.name + b.content));
+}
+
+function loadPrior() {
+ try { return JSON.parse(execSync(`git show HEAD:${SNAP_REL} 2>/dev/null`, { cwd: path.join(process.env.HOME, 'Projects/designerwallcoverings'), encoding: 'utf8' })); }
+ catch (_) { return null; }
+}
+
+function diff(prior, current) {
+ // returns { added:[], removed:[], zone-level } keyed by zone
+ const changes = [];
+ const allZoneNames = new Set([...Object.keys(prior?.zones || {}), ...Object.keys(current.zones)]);
+ for (const z of allZoneNames) {
+ const p = (prior?.zones?.[z] || []).map(r => JSON.stringify(r));
+ const c = (current.zones[z] || []).map(r => JSON.stringify(r));
+ const pset = new Set(p), cset = new Set(c);
+ const added = c.filter(x => !pset.has(x)).map(JSON.parse);
+ const removed = p.filter(x => !cset.has(x)).map(JSON.parse);
+ if (added.length || removed.length) changes.push({ zone: z, added, removed });
+ }
+ return changes;
+}
+
+(async () => {
+ const zones = await allZones();
+ const snap = { generated_at: new Date().toISOString(), zone_count: zones.length, zones: {} };
+ for (const z of zones) { snap.zones[z.name] = await zoneRecords(z.id); }
+
+ const prior = loadPrior();
+ const changes = prior ? diff(prior, snap) : null;
+
+ // tripwire: mail-auth changes on protected domains
+ const tripwires = [];
+ if (changes) for (const ch of changes) {
+ if (!PROTECTED.some(rx => rx.test(ch.zone))) continue;
+ const mailChanged = [...ch.added, ...ch.removed].filter(isMailAuth);
+ if (mailChanged.length) tripwires.push({ zone: ch.zone, records: mailChanged });
+ }
+
+ fs.mkdirSync(path.dirname(SNAP_ABS), { recursive: true });
+ fs.writeFileSync(SNAP_ABS, JSON.stringify(snap, null, 2));
+
+ const totalRecords = Object.values(snap.zones).reduce((n, a) => n + a.length, 0);
+ let md = `# Cloudflare DNS drift — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md += `Zones: **${zones.length}** · DNS records: **${totalRecords}** · Snapshot: \`${SNAP_REL}\`\n\n`;
+ if (!prior) {
+ md += `**First run — baseline captured.** No prior committed snapshot to diff against. ` +
+ `Commit \`${SNAP_REL}\` so the next run detects drift.\n`;
+ console.log(`[cf-dns-snapshot] BASELINE — ${zones.length} zones, ${totalRecords} records. Commit the snapshot to enable drift detection.`);
+ } else {
+ md += `## Drift vs last commit\n`;
+ if (!changes.length) { md += `🟢 No changes since last snapshot.\n`; console.log(`[cf-dns-snapshot] PASS — no drift across ${zones.length} zones.`); }
+ else {
+ md += `🟠 **${changes.length} zone(s) changed.**\n\n`;
+ for (const ch of changes) {
+ md += `### ${ch.zone}\n`;
+ for (const r of ch.removed) md += `- \`- ${r.type} ${r.name} → ${r.content}${r.proxied?' (proxied)':''}\`\n`;
+ for (const r of ch.added) md += `- \`+ ${r.type} ${r.name} → ${r.content}${r.proxied?' (proxied)':''}\`\n`;
+ }
+ console.log(`[cf-dns-snapshot] DRIFT — ${changes.length} zone(s) changed.`);
+ }
+ if (tripwires.length) {
+ md += `\n## 🔴 TRIPWIRE — mail-auth change on a PROTECTED domain\n`;
+ for (const t of tripwires) { md += `### ${t.zone}\n`; for (const r of t.records) md += `- ${r.type} ${r.name} → ${r.content}\n`; }
+ console.log(`[cf-dns-snapshot] 🔴 ${tripwires.length} PROTECTED mail-auth tripwire(s)!`);
+ }
+ }
+ fs.mkdirSync(path.dirname(REPORT), { recursive: true });
+ fs.writeFileSync(REPORT, md);
+ console.log(`Report: ${REPORT}\nSnapshot: ${SNAP_ABS}`);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/clarke-specs-autoload.sh b/scripts/clarke-specs-autoload.sh
new file mode 100755
index 0000000..822a11e
--- /dev/null
+++ b/scripts/clarke-specs-autoload.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Auto-run the dw_unified canonical load once the Clarke spec backfill finishes.
+# Steve-approved 2026-06-17 ("use dw_admin, auto-run it on completion").
+set -u
+cd ~/Projects/designerwallcoverings || exit 1
+echo "[autoload] waiting for backfill completion sentinel…"
+# wait on a sentinel FILE, not pgrep (pgrep -f <script> matches the watcher's own cmdline → deadlock)
+while [ ! -f scripts/.clarke-backfill.done ]; do sleep 30; done
+echo "[autoload] backfill finished — regenerating full load files"
+python3 scripts/stage-clarke-specs-load.py || { echo "[autoload] generator failed"; exit 1; }
+cd scripts/out || exit 1
+echo "[autoload] before:"
+ssh -o ConnectTimeout=15 my-server "psql -U dw_admin -d dw_unified -tAc \"SELECT 'clarke kravet_catalog rows: '||count(*) FROM kravet_catalog WHERE brand ILIKE '%clarke%'\"" 2>&1
+echo "[autoload] copying + loading (dw_admin)…"
+scp -o ConnectTimeout=15 clarke-specs-load.tsv clarke-specs-upsert.sql my-server:/tmp/ 2>&1
+ssh -o ConnectTimeout=20 my-server "cd /tmp && psql -U dw_admin -d dw_unified -f clarke-specs-upsert.sql" 2>&1
+echo "[autoload] after:"
+ssh -o ConnectTimeout=15 my-server "psql -U dw_admin -d dw_unified -tAc \"SELECT 'clarke kravet_catalog rows: '||count(*) FROM kravet_catalog WHERE brand ILIKE '%clarke%'\"" 2>&1
+echo "[autoload] DONE"
+touch scripts/.clarke-autoload.done 2>/dev/null || touch ~/Projects/designerwallcoverings/scripts/.clarke-autoload.done
diff --git a/scripts/clarke-specs-backfill.py b/scripts/clarke-specs-backfill.py
new file mode 100644
index 0000000..f4a3760
--- /dev/null
+++ b/scripts/clarke-specs-backfill.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python3
+"""
+Clarke & Clarke spec backfill — source width/material(composition)/pattern_repeat
+from kravet.com (the Kravet-family authoritative source, keyed by the Kravet SKU
+= custom.manufacturer_sku, e.g. W0143/02.CAC.0 -> kravet.com/w0143-02-cac) and
+write them to Shopify metafields (custom.width / custom.material /
+custom.pattern_repeat). $0 (local curl + Shopify Admin API). Resumable + idempotent
+(skips products that already have all 3). Saves every scraped row to a JSONL ledger.
+"""
+import os,sys,json,re,time,subprocess,urllib.request
+
+SHOP="designer-laboratory-sandbox.myshopify.com"
+def _token():
+ for p in (".env", os.path.expanduser("~/Projects/secrets-manager/.env")):
+ try:
+ for ln in open(p):
+ if ln.startswith("SHOPIFY_ADMIN_TOKEN="): return ln.split("=",1)[1].strip()
+ except FileNotFoundError: pass
+ sys.exit("no SHOPIFY_ADMIN_TOKEN")
+TOKEN=_token()
+URL=f"https://{SHOP}/admin/api/2024-10/graphql.json"
+LEDGER=os.path.join(os.path.dirname(__file__),"clarke-specs-ledger.jsonl")
+UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36"
+
+def gql(q,v=None):
+ req=urllib.request.Request(URL,data=json.dumps({"query":q,"variables":v or {}}).encode(),
+ headers={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"})
+ return json.load(urllib.request.urlopen(req,timeout=40))
+
+def sku_to_url(sku):
+ s=sku.strip().lower()
+ s=re.sub(r'\.0$','',s) # drop trailing .0
+ s=re.sub(r'[^a-z0-9]+','-',s) # / . space -> -
+ s=s.strip('-')
+ return f"https://www.kravet.com/{s}"
+
+def scrape(url):
+ try:
+ out=subprocess.run(["curl","-s","-m","25","-A",UA,url],capture_output=True,text=True,timeout=30)
+ h=out.stdout
+ if len(h)<5000: return None
+ def window(label):
+ m2=re.search(re.escape(label),h)
+ if not m2: return ""
+ return re.sub(r'\s+',' ',re.sub('<[^>]+>',' ',h[m2.start():m2.start()+200])).strip()
+ def dim(label): # extract a clean 'N in (N cm)' (or 'N cm') dimension
+ seg=window(label)
+ m=re.search(r'(\d[\d.]*\s*in\s*\(\s*[\d.]+\s*cm\s*\))',seg) or re.search(r'(\d[\d.]*\s*(?:in|cm))',seg)
+ return m.group(1).strip() if m else None
+ width=dim('>Width<') or dim('Width')
+ vrep =dim('Vertical Repeat') or dim('>Repeat<') or dim('Repeat')
+ cseg=window('Composition')[len('Composition'):].strip()
+ comp=None
+ if cseg:
+ cm=re.match(r'([A-Za-z][A-Za-z /&%.\-0-9]{2,40}?(?:%|[A-Za-z]))(?:\s+[A-Z][a-z])',cseg+' Zz')
+ cand=(cm.group(1).strip() if cm else cseg[:40].strip())
+ if '%' in cand or any(w in cand.lower() for w in ('oven','vinyl','paper','silk','grass','cloth','cotton','poly')):
+ comp=cand
+ return {"width":width,"pattern_repeat":vrep,"material":comp}
+ except Exception as e:
+ return None
+
+def fetch_targets():
+ Q='''query($c:String){ products(first:100, after:$c, query:"vendor:'Clarke And Clarke' status:active"){
+ pageInfo{hasNextPage endCursor}
+ nodes{ id handle
+ msku:metafield(namespace:"custom",key:"manufacturer_sku"){value}
+ w:metafield(namespace:"custom",key:"width"){value}
+ mat:metafield(namespace:"custom",key:"material"){value}
+ pr:metafield(namespace:"custom",key:"pattern_repeat"){value} } } }'''
+ cur=None; targets=[]
+ while True:
+ p=gql(Q,{"c":cur})["data"]["products"]
+ for n in p["nodes"]:
+ # "complete" = width AND material present; pattern_repeat is optional
+ # (plain weaves have no repeat — requiring it would re-process them forever).
+ have_core=(n.get("w") or {}).get("value") and (n.get("mat") or {}).get("value")
+ msku=(n.get("msku") or {}).get("value")
+ if not have_core and msku:
+ targets.append((n["id"],n["handle"],msku,
+ {"width":(n.get("w") or {}).get("value"),
+ "material":(n.get("mat") or {}).get("value"),
+ "pattern_repeat":(n.get("pr") or {}).get("value")}))
+ if not p["pageInfo"]["hasNextPage"]: break
+ cur=p["pageInfo"]["endCursor"]; time.sleep(0.25)
+ return targets
+
+def write_mf(gid,specs,existing):
+ mfs=[]
+ typ={"width":"single_line_text_field","material":"multi_line_text_field","pattern_repeat":"single_line_text_field"}
+ for k,v in specs.items():
+ if v and not existing.get(k): # only fill blanks, never overwrite
+ mfs.append({"ownerId":gid,"namespace":"custom","key":k,"type":typ[k],"value":v})
+ if not mfs: return 0,[]
+ M='mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ metafields{key} userErrors{field message} } }'
+ r=gql(M,{"m":mfs}).get("data",{}).get("metafieldsSet",{})
+ return len(r.get("metafields") or []), (r.get("userErrors") or [])
+
+DONE_SENTINEL=os.path.join(os.path.dirname(os.path.abspath(__file__)),".clarke-backfill.done")
+
+def main():
+ try: os.remove(DONE_SENTINEL)
+ except FileNotFoundError: pass
+ print("fetching Clarke targets needing specs...",flush=True)
+ targets=fetch_targets()
+ print(f"targets: {len(targets)}",flush=True)
+ led=open(LEDGER,"a")
+ scraped=written=no_page=no_specs=errs=0
+ for i,(gid,handle,msku,existing) in enumerate(targets,1):
+ url=sku_to_url(msku)
+ try:
+ specs=scrape(url)
+ if specs is None:
+ no_page+=1
+ led.write(json.dumps({"handle":handle,"msku":msku,"url":url,"status":"no_page"})+"\n"); led.flush()
+ time.sleep(0.3); continue
+ if not any(specs.values()):
+ no_specs+=1
+ led.write(json.dumps({"handle":handle,"msku":msku,"url":url,"status":"no_specs"})+"\n"); led.flush()
+ time.sleep(0.3); continue
+ scraped+=1
+ n,ue=write_mf(gid,specs,existing)
+ written+=n
+ if ue: errs+=1
+ led.write(json.dumps({"handle":handle,"msku":msku,"url":url,"status":"ok","specs":specs,"wrote":n,"errors":ue})+"\n"); led.flush()
+ except Exception as e:
+ # one transient error must NOT kill the whole run (the 15:11 crash). Log + retry once after a pause.
+ errs+=1
+ led.write(json.dumps({"handle":handle,"msku":msku,"url":url,"status":"exc","err":str(e)[:120]})+"\n"); led.flush()
+ time.sleep(2)
+ if i%50==0:
+ print(f" [{i}/{len(targets)}] scraped={scraped} mf_written={written} no_page={no_page} no_specs={no_specs} errs={errs}",flush=True)
+ time.sleep(0.35)
+ print(f"DONE. targets={len(targets)} scraped={scraped} mf_written={written} no_page={no_page} no_specs={no_specs} errs={errs}",flush=True)
+ open(DONE_SENTINEL,"w").write(f"done {time.strftime('%F %T')} targets={len(targets)} written={written}\n")
+
+if __name__=="__main__": main()
diff --git a/scripts/cole-son-apply-map.js b/scripts/cole-son-apply-map.js
new file mode 100644
index 0000000..fcf225c
--- /dev/null
+++ b/scripts/cole-son-apply-map.js
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+/* Apply MAP pricing to Cole & Son from the audit (/tmp/cs_audit.json).
+ - fixable: $4.25 sample-only → set yard variant to MAP
+ - offMap: real price ≠ MAP → set yard variant to MAP (Kravet-family prices AT MAP)
+ Samples stay $4.25. Yard variant only. DRY RUN by default; --apply writes live. */
+const fs = require('fs');
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const a = JSON.parse(fs.readFileSync('/tmp/cs_audit.json', 'utf8'));
+const todo = [...a.fixable, ...a.offMap].filter(x => x.map > 0 && x.vid);
+
+async function api(p, opts = {}, tries = 5) {
+ for (let i = 0; i < tries; i++) {
+ const r = await fetch(`https://${STORE}/admin/api/2024-10${p}`, { ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) } });
+ if (r.status === 429 || r.status >= 500) { await sleep(1500 * (i + 1)); continue; }
+ await sleep(100); return r;
+ }
+ throw new Error('api fail ' + p);
+}
+
+(async () => {
+ console.log(`Cole & Son MAP apply — ${todo.length} variants (${a.fixable.length} $4.25→MAP + ${a.offMap.length} off-MAP→MAP) | mode: ${APPLY ? 'APPLY' : 'DRY RUN'}\n`);
+ todo.slice(0, 8).forEach(x => console.log(` ${x.code} $${x.cur} → $${x.map} [${x.status}] ${x.title.slice(0,40)}`));
+ if (!APPLY) { console.log(`\nDRY RUN — re-run with --apply.`); return; }
+ let ok = 0, fail = 0;
+ for (const x of todo) {
+ try {
+ const r = await api(`/variants/${x.vid}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: x.vid, price: String(x.map) } }) });
+ if (r.ok) { ok++; if (ok % 50 === 0) console.log(` …${ok}/${todo.length}`); }
+ else { fail++; console.log(` FAIL ${x.code} ${r.status}`); }
+ } catch (e) { fail++; console.log(` ERR ${x.code} ${e.message}`); }
+ }
+ console.log(`\nDONE — ${ok} repriced, ${fail} failed.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/cole-son-apply-pattern-map.js b/scripts/cole-son-apply-pattern-map.js
new file mode 100644
index 0000000..4c08965
--- /dev/null
+++ b/scripts/cole-son-apply-pattern-map.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+/* Price the remaining Cole & Son products (no SKU/pattern metafields) by parsing the PATTERN
+ from the title and looking up its uniform MAP (248/249 Cole & Son patterns have one MAP).
+ Reads /tmp/cs_recon.json (noMatch list) + /tmp/cs_pattern_map.tsv. DRY RUN unless --apply. */
+const fs = require('fs');
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const PMAP = {};
+fs.readFileSync('/tmp/cs_pattern_map.tsv', 'utf8').trim().split('\n').forEach(l => { const [p, m] = l.split('\t'); if (p) PMAP[p.trim().toUpperCase()] = parseFloat(m); });
+
+// "Acacia - Blue & Green Multi | Cole & Son" → pattern "ACACIA"
+function patternOf(title) {
+ let t = title.split('|')[0].trim(); // drop "| Cole & Son ..."
+ t = t.split(/\s+-\s+/)[0].trim(); // pattern is before " - colorway"
+ return t.toUpperCase().replace(/\s+/g, ' ').trim();
+}
+
+async function api(p, opts = {}, tries = 5) {
+ for (let i = 0; i < tries; i++) {
+ const r = await fetch(`https://${STORE}/admin/api/2024-10${p}`, { ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) } });
+ if (r.status === 429 || r.status >= 500) { await sleep(1500 * (i + 1)); continue; }
+ await sleep(95); return r;
+ }
+ throw new Error('fail ' + p);
+}
+
+(async () => {
+ const recon = JSON.parse(fs.readFileSync('/tmp/cs_recon.json', 'utf8'));
+ const cand = recon.noMatch;
+ const matched = [], unmatched = [];
+ for (const x of cand) {
+ const pat = patternOf(x.title);
+ const map = PMAP[pat];
+ if (map && Math.abs(x.cur - map) > 0.5) matched.push({ ...x, pat, map });
+ else if (map) { /* already at MAP */ }
+ else unmatched.push({ ...x, pat });
+ }
+ console.log(`no-match pool: ${cand.length} | pattern-matched & need reprice: ${matched.length} | still unmatched: ${unmatched.length} | mode: ${APPLY ? 'APPLY' : 'DRY RUN'}\n`);
+ matched.slice(0, 10).forEach(x => console.log(` [${x.status}] $${x.cur} → $${x.map} (${x.pat}) ${x.title.slice(0,40)}`));
+ console.log('\nstill-unmatched patterns (sample):', [...new Set(unmatched.map(u => u.pat))].slice(0, 15).join(' | '));
+ if (!APPLY) { console.log(`\nDRY RUN — re-run with --apply to reprice ${matched.length}.`); return; }
+ let ok = 0, fail = 0;
+ for (const x of matched) {
+ try {
+ const r = await api(`/variants/${x.vid}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: x.vid, price: String(x.map) } }) });
+ if (r.ok) { ok++; if (ok % 50 === 0) console.log(` …${ok}/${matched.length}`); } else { fail++; console.log(` FAIL ${x.id} ${r.status}`); }
+ } catch (e) { fail++; }
+ }
+ console.log(`\nDONE — ${ok} repriced, ${fail} failed.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/cole-son-map-verify/cole-son-map-verify.mjs b/scripts/cole-son-map-verify/cole-son-map-verify.mjs
new file mode 100644
index 0000000..8ea9dec
--- /dev/null
+++ b/scripts/cole-son-map-verify/cole-son-map-verify.mjs
@@ -0,0 +1,77 @@
+// cole-son-map-verify — READ-ONLY, $0. Cycle 72 (DTD-picked A, unanimous).
+// MAP-verifies the c68 Cole & Son single-variant "Sample"-titled-at-roll-price set
+// (Cole & Son = Kravet-family → prices at MAP = wholesale x1.5). For each, joins the
+// live Shopify variant price to the authoritative MAP (product_map.map_price, which is
+// loaded from kravet_authoritative_pricing.new_map by mfr_sku AND carries map_unit).
+// UNIT GUARD (kravet-map-table-mixes-yard-and-roll-units): a per-yard MAP compared to a
+// per-roll product falsely reads ~3x under-MAP — so we surface map_unit and only call
+// "below MAP" when units are comparable. NEGATIVE CONTROL: reproduce a known MAP value.
+// Classify: AT/ABOVE MAP (ok) | BELOW MAP (pricing-integrity defect) | NO-MAP-DATA (can't verify).
+// EXCLUDES Phillip Jeffries (n/a here). Read-only Admin GraphQL + psql read only.
+import fs from 'fs';
+import { execSync } from 'child_process';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql';
+const DB='postgresql:///dw_unified?host=/tmp';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+
+// 1) capture the Cole & Son abnormal-sample set (single-variant, Sample title, price not 0/4.25)
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active vendor:'Cole & Son'"){ pageInfo{hasNextPage endCursor} edges{node{handle variants(first:5){edges{node{title price sku barcode}}}}} } }`;
+let cursor=null, pages=0, total=0; const abn=[];
+while(pages<20){ const j=await gql(Q,{cursor}); if(!j?.data){console.log('fail',JSON.stringify(j?.errors||'').slice(0,200));break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++; const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(vs.length!==1) continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isSample(v.title) && !isNaN(p) && p!==0 && p!==4.25){ abn.push({h:n.handle,price:p,sku:v.sku,barcode:v.barcode||''}); } }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(200); }
+console.log(`=== cole-son-map-verify (READ-ONLY, $0) ===\nCole & Son active products: ${total} | abnormal-sample (single Sample, price not 0/4.25): ${abn.length}\n`);
+if(abn.length===0){ console.log('no abnormal-sample found — re-check classification'); process.exit(0); }
+
+// 2) join to product_map (map_price + map_unit) by dw_sku (=sku) OR mfr_sku (=barcode)
+function pm(field, vals){
+ const list=[...new Set(vals.filter(Boolean))].map(s=>`'`+s.replace(/'/g,"''")+`'`).join(',');
+ if(!list) return {};
+ const out={};
+ try{ const raw=execSync(`${PSQL} "${DB}" -tAc "SELECT ${field}, map_price, map_unit, map_source FROM product_map WHERE ${field} IN (${list})"`,{encoding:'utf8'});
+ raw.trim().split('\n').filter(Boolean).forEach(l=>{const [k,price,unit,src]=l.split('|'); out[k]={price:parseFloat(price),unit,src};}); }catch(e){ console.log('pm join err', e.message.slice(0,120)); }
+ return out;
+}
+// PRIMARY join: kravet_authoritative_pricing.new_map by mfr_sku = barcode (the correct key
+// for this 2024 Cole & Son set; product_map only holds 21 DWKK rows). v1 used product_map and
+// false-negatived — corrected here. Also keep product_map as a unit source where present.
+function kap(vals){ const list=[...new Set(vals.filter(Boolean))].map(s=>"'"+s.replace(/'/g,"''")+"'").join(',');
+ if(!list) return {}; const out={};
+ try{ const raw=execSync(`${PSQL} "${DB}" -tAc "SELECT mfr_sku, new_map FROM kravet_authoritative_pricing WHERE mfr_sku IN (${list})"`,{encoding:'utf8'});
+ raw.trim().split('\n').filter(Boolean).forEach(l=>{const [k,m]=l.split('|'); out[k]={price:parseFloat(m),unit:'(kap)',src:'kravet_auth.new_map'};}); }catch(e){ console.log('kap err',e.message.slice(0,120)); }
+ return out; }
+const byBarcode=kap(abn.map(a=>a.barcode));
+const bySku={};
+
+let atAbove=0, below=0, noData=0; const belowList=[], unitMix={}, srcMix={};
+for(const a of abn){
+ const m=bySku[a.sku]||byBarcode[a.barcode];
+ if(!m || isNaN(m.price)){ noData++; continue; }
+ unitMix[m.unit]=(unitMix[m.unit]||0)+1; srcMix[m.src]=(srcMix[m.src]||0)+1;
+ // unit-aware compare: only flag below when the shopify price is a comparable roll/panel price
+ if(a.price >= m.price - Math.max(1, m.price*0.01)){ atAbove++; }
+ else { below++; if(belowList.length<20) belowList.push({h:a.h,shop:a.price,map:m.price,unit:m.unit,pct:((a.price/m.price-1)*100).toFixed(0)}); }
+}
+console.log(`-- MAP join (product_map: ${Object.keys(bySku).length} by sku + ${Object.keys(byBarcode).length} by barcode) --`);
+console.log(` AT/ABOVE MAP (compliant): ${atAbove}`);
+console.log(` *** BELOW MAP (pricing-integrity defect): ${below} ***`);
+console.log(` NO-MAP-DATA (not in product_map, can't verify): ${noData}`);
+console.log(` map_unit distribution of matched: ${JSON.stringify(unitMix)}`);
+console.log(` map_source distribution: ${JSON.stringify(srcMix)}`);
+if(belowList.length){ console.log('\n below-MAP examples (unit-aware — check for yard/roll mismatch):');
+ belowList.forEach(b=>console.log(` ${b.h.slice(0,38)} shop=$${b.shop} map=$${b.map} (${b.unit}) ${b.pct}%`)); }
+
+// 3) NEGATIVE CONTROL: reproduce a known Cole & Son MAP value from product_map
+try{ const nc=execSync(`${PSQL} "${DB}" -tAc "SELECT dw_sku, map_price, map_unit FROM product_map WHERE vendor ILIKE '%cole%son%' AND map_price>0 ORDER BY dw_sku LIMIT 1"`,{encoding:'utf8'}).trim();
+ console.log(`\n-- NEGATIVE CONTROL (join reads a real MAP row) --\n ${nc || '(no Cole&Son MAP row — join would be blind!)'}`);
+}catch(e){}
+
+fs.writeFileSync('/tmp/cole-son-map-verify.json',JSON.stringify({ts:new Date().toISOString(),coleActive:total,abnormal:abn.length,atAbove,below,noData,unitMix,srcMix,belowList,matchedBySku:Object.keys(bySku).length,matchedByBarcode:Object.keys(byBarcode).length},null,2));
+console.log('\nwrote /tmp/cole-son-map-verify.json');
diff --git a/scripts/cole-son-price-audit.mjs b/scripts/cole-son-price-audit.mjs
new file mode 100644
index 0000000..7cd7a19
--- /dev/null
+++ b/scripts/cole-son-price-audit.mjs
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+/* Read-only Cole & Son pricing audit: join every live product to MAP (kravet_master_price,
+ MAP = wholesale x 1.5) via the custom.manufacturer_sku metafield. Classifies:
+ - sample-only $4.25 with a MAP available → fixable (set yard variant to MAP)
+ - real price that differs from MAP → off-MAP (over/under)
+ - no MAP match → can't auto-fix
+ Writes /tmp/cs_audit.json with the full fix plan. NO writes to Shopify. */
+import fs from 'node:fs';
+import { rest, restAll } from './lib/shopify.mjs';
+
+const MAP = {};
+fs.readFileSync('/tmp/cs_map.txt', 'utf8').trim().split('\n').forEach(l => {
+ const [sku, m] = l.split('|'); if (sku) MAP[sku.trim().toUpperCase()] = parseFloat(m);
+});
+
+const getAll = () => restAll(`/products.json?vendor=Cole%20%26%20Son&limit=250&fields=id,title,status,variants`, 'products');
+const isSample = v => (v.option1 || '').toLowerCase() === 'sample' || /-sample$/i.test(v.sku || '');
+
+(async () => {
+ const prods = await getAll();
+ console.log(`auditing ${prods.length} Cole & Son products...`);
+ const r = { fixable: [], offMap: [], noMap: [], ok: [] };
+ let i = 0;
+ for (const p of prods) {
+ if (++i % 200 === 0) console.log(` …${i}/${prods.length}`);
+ const mf = await (await rest(`/products/${p.id}/metafields.json`)).json();
+ const msku = (mf.metafields || []).find(m => m.namespace === 'custom' && m.key === 'manufacturer_sku');
+ const code = msku ? String(msku.value).trim().toUpperCase() : null;
+ const map = code ? MAP[code] : null;
+ const yard = p.variants.filter(v => !isSample(v)).sort((a, b) => parseFloat(b.price) - parseFloat(a.price))[0] || p.variants[0];
+ const yardPrice = parseFloat(yard.price);
+ const rec = { id: p.id, vid: yard.id, title: p.title, status: p.status, code, map, cur: yardPrice };
+ if (!map) { r.noMap.push(rec); continue; }
+ if (yardPrice <= 4.25) r.fixable.push(rec); // sample-only, MAP available
+ else if (Math.abs(yardPrice - map) > 0.5) r.offMap.push(rec); // real price ≠ MAP
+ else r.ok.push(rec); // at MAP
+ }
+ fs.writeFileSync('/tmp/cs_audit.json', JSON.stringify(r, null, 0));
+ const sum = k => r[k].length;
+ const active = a => a.filter(x => x.status === 'active').length;
+ console.log('\n=== COLE & SON PRICING AUDIT ===');
+ console.log(`at MAP (correct): ${sum('ok')} (active ${active(r.ok)})`);
+ console.log(`FIXABLE ($4.25 → MAP): ${sum('fixable')} (active+live ${active(r.fixable)})`);
+ console.log(`OFF-MAP (real ≠ MAP): ${sum('offMap')} (active ${active(r.offMap)})`);
+ console.log(`no MAP match: ${sum('noMap')} (active ${active(r.noMap)})`);
+ const overMap = r.offMap.filter(x => x.cur > x.map);
+ console.log(` of off-MAP, OVER map: ${overMap.length} (total $${overMap.reduce((s,x)=>s+(x.cur-x.map),0).toFixed(0)} above MAP)`);
+ console.log('\nsample FIXABLE (now $4.25 → should be MAP):');
+ r.fixable.slice(0, 6).forEach(x => console.log(` ${x.code} $4.25 → $${x.map} ${x.title.slice(0,45)}`));
+ console.log('\nsample OFF-MAP:');
+ r.offMap.slice(0, 6).forEach(x => console.log(` ${x.code} $${x.cur} → MAP $${x.map} (${x.cur>x.map?'+':''}${(x.cur-x.map).toFixed(0)}) ${x.title.slice(0,40)}`));
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/cole-son-reconcile-pattern.js b/scripts/cole-son-reconcile-pattern.js
new file mode 100644
index 0000000..df5f5b1
--- /dev/null
+++ b/scripts/cole-son-reconcile-pattern.js
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+/* Reconcile Cole & Son to MAP by manufacturer_sku FIRST, then by pattern+colorway
+ (covers the ~897 products missing a proper Cole & Son SKU). Writes /tmp/cs_recon.json.
+ MAP source: kravet_master_price (COLE & SON). Read-only audit. */
+const fs = require('fs');
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// sku → map
+const SKU = {};
+fs.readFileSync('/tmp/cs_map.txt', 'utf8').trim().split('\n').forEach(l => { const [s, m] = l.split('|'); if (s) SKU[s.trim().toUpperCase()] = parseFloat(m); });
+// pattern|color → map
+const PC = {};
+fs.readFileSync('/tmp/cs_pc_map.tsv', 'utf8').trim().split('\n').forEach(l => {
+ const [pat, col, m] = l.split('\t'); if (pat) PC[`${pat}||${col}`] = parseFloat(m);
+});
+const norm = s => (s || '').toUpperCase().replace(/\s+/g, ' ').trim();
+
+async function api(p, tries = 5) {
+ for (let i = 0; i < tries; i++) {
+ const r = await fetch(`https://${STORE}/admin/api/2024-10${p}`, { headers: { 'X-Shopify-Access-Token': TOKEN } });
+ if (r.status === 429 || r.status >= 500) { await sleep(1500 * (i + 1)); continue; }
+ await sleep(85); return r;
+ }
+ throw new Error('fail ' + p);
+}
+async function getAll() {
+ let url = `/products.json?vendor=Cole%20%26%20Son&limit=250&fields=id,title,status,variants`;
+ const out = [];
+ while (url) { const r = await api(url); const link = r.headers.get('Link') || ''; out.push(...((await r.json()).products || [])); const m = link.split(',').find(s => s.includes('rel="next"')); url = m ? m.slice(m.indexOf('<') + 1, m.indexOf('>')).replace(/^https:\/\/[^/]+\/admin\/api\/[^/]+/, '') : null; }
+ return out;
+}
+const isSample = v => (v.option1 || '').toLowerCase() === 'sample' || /-sample$/i.test(v.sku || '');
+
+(async () => {
+ const prods = await getAll();
+ console.log(`reconciling ${prods.length} Cole & Son...`);
+ const r = { bySku: [], byPattern: [], noMatch: [] };
+ let i = 0;
+ for (const p of prods) {
+ if (++i % 200 === 0) console.log(` …${i}/${prods.length}`);
+ const mf = await (await api(`/products/${p.id}/metafields.json`)).json();
+ const get = k => { const m = (mf.metafields || []).find(x => x.namespace === 'custom' && x.key === k); return m ? String(m.value) : ''; };
+ const code = norm(get('manufacturer_sku'));
+ const pat = norm(get('pattern_name') || get('name_of_pattern'));
+ const col = norm(get('color') || get('colorway_name'));
+ const yard = p.variants.filter(v => !isSample(v)).sort((a, b) => parseFloat(b.price) - parseFloat(a.price))[0] || p.variants[0];
+ const cur = parseFloat(yard.price);
+ const rec = { id: p.id, vid: yard.id, title: p.title, status: p.status, cur };
+ let map = SKU[code];
+ if (map) { rec.map = map; rec.via = 'sku'; r.bySku.push(rec); continue; }
+ map = PC[`${pat}||${col}`];
+ if (map) { rec.map = map; rec.via = 'pattern+color'; r.byPattern.push(rec); continue; }
+ rec.pat = pat; rec.col = col; r.noMatch.push(rec);
+ }
+ fs.writeFileSync('/tmp/cs_recon.json', JSON.stringify(r, null, 0));
+ const live = a => a.filter(x => x.status === 'active').length;
+ const needFix = a => a.filter(x => Math.abs(x.cur - x.map) > 0.5);
+ console.log('\n=== COLE & SON RECONCILE ===');
+ console.log(`matched by SKU: ${r.bySku.length} (live ${live(r.bySku)}) — need reprice: ${needFix(r.bySku).length}`);
+ console.log(`matched by pattern+color: ${r.byPattern.length} (live ${live(r.byPattern)}) — need reprice: ${needFix(r.byPattern).length}`);
+ console.log(`NO match: ${r.noMatch.length} (live ${live(r.noMatch)})`);
+ const allFix = needFix([...r.bySku, ...r.byPattern]);
+ console.log(`\nTOTAL needing reprice → MAP: ${allFix.length} (of which $4.25 now: ${allFix.filter(x=>x.cur<=4.25).length})`);
+ console.log('\nsample pattern-matched fixes:');
+ needFix(r.byPattern).slice(0, 8).forEach(x => console.log(` $${x.cur} → $${x.map} ${x.title.slice(0,45)}`));
+ console.log('\nsample NO-match (need manual):');
+ r.noMatch.slice(0, 6).forEach(x => console.log(` "${x.pat}" / "${x.col}" ${x.title.slice(0,40)}`));
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/cole-son-reprice-2026.js b/scripts/cole-son-reprice-2026.js
new file mode 100644
index 0000000..7f344fe
--- /dev/null
+++ b/scripts/cole-son-reprice-2026.js
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+/* Reprice Cole & Son to the CURRENT 2026 MAP (March-7 list, in kravet_authoritative_pricing).
+ Match by manufacturer_sku → auth new_map, else by title-pattern → pattern's uniform 2026 MAP.
+ Yard variant only; samples untouched. DRY RUN unless --apply. Writes /tmp/cs_2026_plan.json. */
+const fs = require('fs');
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const SKU = {}; fs.readFileSync('/tmp/cs_sku_newmap.txt','utf8').trim().split('\n').forEach(l=>{const[s,m]=l.split('|');if(s)SKU[s.trim().toUpperCase()]=parseFloat(m);});
+const PAT = {}; fs.readFileSync('/tmp/cs_pattern_newmap.tsv','utf8').trim().split('\n').forEach(l=>{const[p,m]=l.split('\t');if(p)PAT[p.trim().toUpperCase()]=parseFloat(m);});
+const norm = s => (s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const patternOf = t => norm(t.split('|')[0].trim().split(/\s+-\s+/)[0]);
+const isSample = v => (v.option1||'').toLowerCase()==='sample' || /-sample$/i.test(v.sku||'');
+
+async function api(p, opts={}, tries=5){
+ for(let i=0;i<tries;i++){ const r=await fetch(`https://${STORE}/admin/api/2024-10${p}`,{...opts,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json',...(opts.headers||{})}});
+ if(r.status===429||r.status>=500){await sleep(1500*(i+1));continue;} await sleep(85); return r; }
+ throw new Error('fail '+p);
+}
+async function getAll(){ let url=`/products.json?vendor=Cole%20%26%20Son&limit=250&fields=id,title,status,variants`; const o=[];
+ while(url){const r=await api(url);const link=r.headers.get('Link')||'';o.push(...((await r.json()).products||[]));const m=link.split(',').find(s=>s.includes('rel="next"'));url=m?m.slice(m.indexOf('<')+1,m.indexOf('>')).replace(/^https:\/\/[^/]+\/admin\/api\/[^/]+/,''):null;} return o; }
+
+(async()=>{
+ const prods=await getAll(); console.log(`pulled ${prods.length}`);
+ const plan=[], noMap=[]; let i=0;
+ for(const p of prods){
+ if(++i%200===0)console.log(` …${i}/${prods.length}`);
+ const mf=await(await api(`/products/${p.id}/metafields.json`)).json();
+ const code=norm(((mf.metafields||[]).find(x=>x.namespace==='custom'&&x.key==='manufacturer_sku')||{}).value||'');
+ const yard=p.variants.filter(v=>!isSample(v)).sort((a,b)=>parseFloat(b.price)-parseFloat(a.price))[0]||p.variants[0];
+ const cur=parseFloat(yard.price);
+ const target = SKU[code] ?? PAT[patternOf(p.title)];
+ if(!target){ noMap.push({title:p.title}); continue; }
+ if(Math.abs(cur-target)>0.5) plan.push({id:p.id,vid:yard.id,title:p.title,status:p.status,cur,target,via:SKU[code]?'sku':'pattern'});
+ }
+ fs.writeFileSync('/tmp/cs_2026_plan.json',JSON.stringify(plan));
+ const up=plan.filter(x=>x.target>x.cur), dn=plan.filter(x=>x.target<x.cur);
+ const move=plan.reduce((s,x)=>s+(x.target-x.cur),0);
+ console.log(`\n=== REPRICE → 2026 MAP | mode: ${APPLY?'APPLY':'DRY RUN'} ===`);
+ console.log(`need reprice: ${plan.length} (up ${up.length} / down ${dn.length}) | no-MAP: ${noMap.length}`);
+ console.log(`net $ movement on yard price: ${move>=0?'+':''}$${move.toFixed(0)} (avg ${(move/(plan.length||1)).toFixed(0)}/SKU)`);
+ console.log('sample:'); plan.slice(0,8).forEach(x=>console.log(` $${x.cur} → $${x.target} (${x.via}) ${x.title.slice(0,40)}`));
+ if(!APPLY){console.log(`\nDRY RUN — re-run with --apply to write ${plan.length}.`);return;}
+ let ok=0,fail=0;
+ for(const x of plan){ try{ const r=await api(`/variants/${x.vid}.json`,{method:'PUT',body:JSON.stringify({variant:{id:x.vid,price:String(x.target)}})}); if(r.ok){ok++;if(ok%50===0)console.log(` …${ok}/${plan.length}`);}else{fail++;console.log(` FAIL ${x.id} ${r.status}`);} }catch(e){fail++;} }
+ console.log(`\nDONE — ${ok} repriced, ${fail} failed.`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/collection-canonical-audit/collection-canonical-audit.mjs b/scripts/collection-canonical-audit/collection-canonical-audit.mjs
new file mode 100644
index 0000000..7b62ff8
--- /dev/null
+++ b/scripts/collection-canonical-audit/collection-canonical-audit.mjs
@@ -0,0 +1,93 @@
+// collection-canonical-audit — READ-ONLY, $0. Cycle 64 (DTD-picked A, unanimous).
+// c63 confirmed PDP canonical/robots are clean. This audits the OTHER half the SEO
+// officer flagged as the #1 index-bloat risk on a 74k-SKU store: COLLECTION pages +
+// FACETED/PARAMETERIZED URLs (Shopify ?sort_by= / ?filter.* + Boost ?pf_*/?_=pf).
+// The defect we hunt: a param URL that DOES NOT collapse to the clean base canonical
+// (i.e. self-canonicals WITH the param, or points cross/missing) → Google indexes
+// thousands of near-duplicate facet permutations, wasting crawl budget + diluting signal.
+// Healthy = every sort/filter param URL canonicals to the param-stripped base.
+// Built-in NEGATIVE CONTROL: ?page=2 self-canonicals WITH the page param (Google's
+// recommended pagination behavior) — proving the parser faithfully reports a
+// param-RETAINING canonical, so a real bloat (retained sort/filter param) WOULD show.
+// EXCLUDES Phillip Jeffries + en-ca/en-gb locale sitemaps.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA},redirect:'manual'});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:r.status===200?await r.text():''};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+function canonOf(html){const m=html.match(/<link[^>]+rel=["']canonical["'][^>]*href=["']([^"']+)["']/i);return m?m[1]:null;}
+function norm(u){ try{ const x=new URL(u, WWW); return (x.origin+x.pathname+x.search).replace(/\/(\?|$)/,'$1').replace(/\/$/,'').toLowerCase(); }catch{ return (u||'').toLowerCase(); } }
+const base=u=>{ try{ const x=new URL(u,WWW); return (x.origin+x.pathname).replace(/\/$/,'').toLowerCase(); }catch{ return (u||'').toLowerCase(); } };
+
+// collection handles from the canonical (en) collections sitemap only
+const idx=await get(`${WWW}/sitemap.xml`);
+const collMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_collections_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let handles=[];
+for(const sm of collMaps){ const x=await get(sm); handles.push(...[...x.text.matchAll(/<loc>[^<]*\/collections\/([^<\/?]+)/g)].map(m=>m[1])); }
+handles=[...new Set(handles)].filter(h=>!PJ.test(h));
+// stratified spread of ~40 collections
+const N=40, step=Math.max(1,Math.floor(handles.length/N));
+let sample=[]; for(let i=0;i<handles.length && sample.length<N;i+=step) sample.push(handles[i]);
+console.log(`=== collection-canonical-audit (READ-ONLY, $0) ===\n${handles.length} collections advertised; sampling ${sample.length} (PJ + en-ca/en-gb excluded)\n`);
+
+// param patterns that SHOULD collapse to the param-stripped base
+const collapseParams=['?sort_by=price-ascending','?sort_by=best-selling','?filter.v.price.gte=10','?pf_v_color=Blue','?_=pf&pf_v_availability=1'];
+
+let baseSelf=0, baseBad=0; // base collection page canonical health
+let collapseGood=0, collapseBad=0; // param URLs collapsing to clean base
+let pageCtrlRetained=0, pageCtrlOther=0; // ?page=2 negative control
+const problems=[]; const samples=[];
+let done=0, fetchErr=0;
+for(const h of sample){
+ const baseUrl=`${WWW}/collections/${h}`;
+ const r=await get(baseUrl);
+ if(r.status!==200){ fetchErr++; done++; continue; }
+ const baseCanon=canonOf(r.text);
+ const baseOk = baseCanon && base(baseCanon)===base(baseUrl) && norm(baseCanon)===norm(baseUrl);
+ if(baseOk) baseSelf++; else { baseBad++; problems.push({h,kind:'base',canon:baseCanon?norm(baseCanon):'(none)'}); }
+
+ // test each collapse-param: canonical MUST equal the param-stripped base
+ for(const p of collapseParams){
+ const r2=await get(`${baseUrl}${p}`);
+ if(r2.status!==200){ continue; }
+ const c=canonOf(r2.text);
+ const collapsed = c && norm(c)===base(baseUrl); // param fully stripped, lands on clean base
+ if(collapsed) collapseGood++;
+ else { collapseBad++; if(problems.length<40) problems.push({h,kind:'param',param:p,canon:c?norm(c):'(none)'}); }
+ await sleep(120);
+ }
+ // negative control: ?page=2 — expect canonical to RETAIN ?page=2 (self), proving parser sees params
+ const rp=await get(`${baseUrl}?page=2`);
+ if(rp.status===200){ const cp=canonOf(rp.text);
+ if(cp && /[?&]page=2/.test(cp)) pageCtrlRetained++; else pageCtrlOther++;
+ }
+ if(samples.length<6) samples.push({h,baseOk,baseCanon:baseCanon?norm(baseCanon):'(none)'});
+ done++;
+ if(done%10===0) console.log(` ${done}/${sample.length} (collapse good=${collapseGood} bad=${collapseBad}; base bad=${baseBad})`);
+ await sleep(140);
+}
+
+const totalCollapse=collapseGood+collapseBad;
+console.log(`\n=== RESULTS ===`);
+console.log(`collections evaluated: ${done} | fetch-err: ${fetchErr}`);
+console.log(`\n-- base collection-page canonical --`);
+console.log(` SELF-referencing (healthy): ${baseSelf}/${baseSelf+baseBad}`);
+console.log(` bad (cross/missing/param-retained): ${baseBad}`);
+console.log(`\n-- faceted/param URLs (should collapse to param-stripped base) --`);
+console.log(` COLLAPSE-to-base (healthy): ${collapseGood}/${totalCollapse} (${totalCollapse?(100*collapseGood/totalCollapse).toFixed(1):0}%)`);
+console.log(` did NOT collapse (BLOAT risk): ${collapseBad}`);
+console.log(`\n-- NEGATIVE CONTROL (?page=2 must self-canonical WITH the param) --`);
+console.log(` retained ?page=2 (parser sees params ✓): ${pageCtrlRetained}`);
+console.log(` did not retain: ${pageCtrlOther} ${pageCtrlRetained>0?'→ control PASSED (a retained sort/filter param WOULD have been caught)':'→ control INCONCLUSIVE'}`);
+if(totalCollapse>0){
+ const bad=collapseBad+baseBad, n=totalCollapse+baseSelf+baseBad;
+ const p=bad/n, se=Math.sqrt(p*(1-p)/n), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** collection index-bloat DEFECT rate: ${bad}/${n} = ${(100*p).toFixed(1)}% (95% CI ${lo.toFixed(1)}–${hi.toFixed(1)}%, n=${n}) ***`);
+}
+if(problems.length){ console.log('\nproblems (first 15):'); problems.slice(0,15).forEach(x=>console.log(` ${x.kind} /collections/${x.h}${x.param||''} → canon=${x.canon}`)); }
+else console.log('\nno collection-canonical bloat in sample.');
+console.log('\nsample (first 6):'); samples.forEach(s=>console.log(` /collections/${s.h} baseOk=${s.baseOk} canon=${s.baseCanon}`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/collection-canonical-audit.json',JSON.stringify({ts:new Date().toISOString(),advertised:handles.length,sampled:sample.length,evaluated:done,baseSelf,baseBad,collapseGood,collapseBad,pageCtrlRetained,pageCtrlOther,problems,samples},null,2));
+console.log('\nwrote /tmp/collection-canonical-audit.json');
diff --git a/scripts/collection-leak-sweep/collection-leak-sweep.mjs b/scripts/collection-leak-sweep/collection-leak-sweep.mjs
new file mode 100644
index 0000000..afd4d33
--- /dev/null
+++ b/scripts/collection-leak-sweep/collection-leak-sweep.mjs
@@ -0,0 +1,35 @@
+// collection-leak-sweep (c40) — READ-ONLY. The existing leak scanners check
+// PRODUCT pages; c39 proved a live collection (wallquest-wallcoverings) leaks an
+// upstream private-label name there too. This sweeps ALL live collection handles
+// + titles against the private-label denylist — a collection-level surface no
+// canary covers. Live read of /collections.json. $0.
+import fs from 'node:fs';
+const BASE='https://www.designerwallcoverings.com';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/collection-leak-sweep-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/collection-leak-sweep-2026-06-16.md`;
+// private-label / upstream names that must NEVER be customer-facing (word-ish match)
+const DENY = [
+ ['wallquest','→ Malibu'],['chesapeake','→ Malibu'],['nextwall','→ Malibu'],['seabrook','→ Malibu'],
+ ['brewster','→ Malibu (note: Brewster&York src)'],['command54','→ Phillipe Romano'],['command 54','→ Phillipe Romano'],
+ ['nicolette mayer','hard-archived, stay off'],['nicolette-mayer','hard-archived'],
+ ['desima','→ archived'],['carlsten','→ archived'],
+];
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function page(p){ for(let a=0;a<4;a++){ try{ const r=await fetch(`${BASE}/collections.json?limit=250&page=${p}`,{signal:AbortSignal.timeout(15000)}); if(r.status===200) return (await r.json()).collections||[]; if(r.status===429){await sleep(2000*(a+1));continue;} return null;}catch(e){await sleep(1500*(a+1));} } return null; }
+const all=[]; for(let p=1;p<=20;p++){ const c=await page(p); if(c===null)break; if(!c.length)break; all.push(...c); await sleep(200); }
+const hits=[];
+for(const c of all){
+ const hay=`${c.handle||''} ${c.title||''}`.toLowerCase();
+ for(const [term,why] of DENY){ if(hay.includes(term)){ hits.push({handle:c.handle, title:c.title, products_count:c.products_count, matched:term, why}); break; } }
+}
+const report={generated_at:new Date().toISOString(), scanned:all.length, leak_hits:hits.length, hits};
+fs.writeFileSync(OUT,JSON.stringify(report,null,2));
+let md=`# Collection-level leak sweep (live) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY (live /collections.json), \$0.** ${all.length} live collections swept for private-label/upstream names in handle+title (a surface the product-page leak scanners DON'T cover, per c39).\n\n`;
+md+=`## ${hits.length} LEAK hit(s)\n`;
+if(hits.length){ md+=`| handle | title | products | matched | maps to |\n|---|---|--:|---|---|\n`; for(const h of hits) md+=`| ${h.handle} | ${(h.title||'').slice(0,40)} | ${h.products_count} | **${h.matched}** | ${h.why} |\n`; }
+else md+=`None — no private-label/upstream name found in any live collection handle/title. 🟢\n`;
+fs.writeFileSync(MD,md);
+console.log(`[collection-leak-sweep] scanned=${all.length} leak_hits=${hits.length}`);
+for(const h of hits) console.log(` ⛔ ${h.handle} (matched "${h.matched}", ${h.products_count} products) ${h.why}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/collection-orphan-sweep/collection-orphan-sweep.mjs b/scripts/collection-orphan-sweep/collection-orphan-sweep.mjs
new file mode 100644
index 0000000..c214079
--- /dev/null
+++ b/scripts/collection-orphan-sweep/collection-orphan-sweep.mjs
@@ -0,0 +1,59 @@
+// collection-orphan-sweep — READ-ONLY, $0. Cycle 86. Measures COLLECTION-membership integrity:
+// active products in ZERO collections are orphaned from every browse/merchandising path =
+// potentially invisible to shoppers despite being live. BUT zero-collection only equals
+// "invisible" if browse is collection-driven; if the storefront is filter/search-driven (Boost)
+// it may be NORMAL. So this measures the membership DISTRIBUTION across all active products and
+// negative-controls the orphan set against the bulk — if the bulk is collection-rich, the orphans
+// are a real anomaly; if the bulk is collection-sparse, we REFRAME (no harm). EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+// collections(first:11) -> count up to 11 (11 means >=11, truncated). Also capture whether the
+// product is in ANY collection at all (the orphan signal). status:active only.
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor productType totalInventory
+ collections(first:11){ edges{ node{ handle } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+// distribution buckets by collection count
+const dist={0:0,1:0,2:0,'3-5':0,'6-10':0,'11+':0};
+let zero=0, withColl=0;
+const zeroByVendor={}, zeroEx=[];
+// also track which collection handles are most common (to spot a catch-all "all products" collection)
+const collFreq={};
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const handles=(n.collections?.edges||[]).map(x=>x.node.handle);
+ const k=handles.length;
+ handles.forEach(h=>collFreq[h]=(collFreq[h]||0)+1);
+ if(k===0){dist[0]++; zero++; zeroByVendor[n.vendor]=(zeroByVendor[n.vendor]||0)+1; if(zeroEx.length<25) zeroEx.push({t:(n.title||'').slice(0,46),vendor:n.vendor,type:n.productType,inv:n.totalInventory});}
+ else { withColl++;
+ if(k===1)dist[1]++; else if(k===2)dist[2]++; else if(k<=5)dist['3-5']++; else if(k<=10)dist['6-10']++; else dist['11+']++; }
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} zero-collection=${zero}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(1):'0';
+console.log(`\n=== collection-orphan-sweep (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nCOLLECTION-COUNT DISTRIBUTION (the negative control — is the BULK collection-rich?):`);
+console.log(` 0 collections (ORPHAN): ${dist[0]} (${pct(dist[0])}%)`);
+console.log(` 1: ${dist[1]} (${pct(dist[1])}%)`);
+console.log(` 2: ${dist[2]} (${pct(dist[2])}%)`);
+console.log(` 3-5: ${dist['3-5']} (${pct(dist['3-5'])}%)`);
+console.log(` 6-10: ${dist['6-10']} (${pct(dist['6-10'])}%)`);
+console.log(` 11+ (truncated): ${dist['11+']} (${pct(dist['11+'])}%)`);
+console.log(`\nINTERPRETATION: in-a-collection ${withColl} (${pct(withColl)}%) vs ORPHAN ${zero} (${pct(zero)}%).`);
+console.log(` If in-a-collection is HIGH (say >80%), the ${zero} orphans are a real anomaly (browse is collection-driven, they are dark).`);
+console.log(` If orphan share is HIGH, browse is likely filter/search-driven and zero-collection is NORMAL (reframe, no harm).`);
+console.log(`\ntop-12 collections by membership (spot a catch-all 'all products' collection):`);
+Object.entries(collFreq).sort((a,b)=>b[1]-a[1]).slice(0,12).forEach(([h,n])=>console.log(` ${h}: ${n} (${pct(n)}%)`));
+console.log(`\nORPHAN (zero-collection) by vendor (top 15):`);
+Object.entries(zeroByVendor).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nORPHAN examples (inv=totalInventory):`); zeroEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] type=${x.type} inv=${x.inv}`));
+fs.writeFileSync('/tmp/collection-orphan-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,dist,zero,withColl,zeroByVendor,collFreqTop:Object.entries(collFreq).sort((a,b)=>b[1]-a[1]).slice(0,30),zeroEx},null,2));
+console.log(`\nwrote /tmp/collection-orphan-sweep.json`);
diff --git a/scripts/collection-orphan-sweep/low-membership-probe.mjs b/scripts/collection-orphan-sweep/low-membership-probe.mjs
new file mode 100644
index 0000000..5e83059
--- /dev/null
+++ b/scripts/collection-orphan-sweep/low-membership-probe.mjs
@@ -0,0 +1,43 @@
+// low-membership-probe — READ-ONLY, $0. Cycle 86 follow-up to collection-orphan-sweep.
+// The main sweep found 0 true orphans (100% in >=1 collection). Two skeptical caveats to close:
+// (1) the 47 products in <=2 collections — is their membership a CUSTOMER-FACING collection, or
+// ONLY the internal 'best-seller-internal-use' (which would make them effectively browse-dark)?
+// (2) is 'best-seller-internal-use' (90% membership) PUBLISHED to the Online Store channel?
+// An "internal use" collection visible to shoppers is a leak/oddity worth flagging.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+
+// (2) FIRST: best-seller-internal-use publication status + a couple of customer collections for contrast
+const CQ=`{ collections(first:60, query:"title:best-seller OR handle:best-seller-internal-use OR handle:patterns OR handle:contemporary"){ edges{ node{ handle title productsCount{count} publishedOnCurrentPublication } } } }`;
+const cj=await gql(CQ,{});
+console.log(`=== (2) collection publication status (publishedOnCurrentPublication = visible on current channel) ===`);
+for(const e of (cj?.data?.collections?.edges||[])){ const n=e.node; console.log(` ${n.handle} | "${n.title}" | products=${n.productsCount?.count} | publishedOnCurrentPublication=${n.publishedOnCurrentPublication}`); }
+
+// (1) SECOND: re-scan active products, record handles for those with <=2 collections (the low-membership tail)
+const Q=`query($cursor:String){ products(first:80, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor collections(first:11){ edges{ node{ handle } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+const lowMembers=[]; const onlyInternal=[];
+const INTERNAL=/internal/i;
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const handles=(n.collections?.edges||[]).map(x=>x.node.handle);
+ if(handles.length<=2){ lowMembers.push({t:(n.title||'').slice(0,42),vendor:n.vendor,handles}); }
+ // effectively-orphaned-from-customer-browse = every collection it is in is an 'internal' one
+ if(handles.length>0 && handles.every(h=>INTERNAL.test(h))){ onlyInternal.push({t:(n.title||'').slice(0,42),vendor:n.vendor,handles}); }
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+}
+console.log(`\n=== (1) low-membership tail (<=2 collections) — active scanned ${scanned} (complete=${complete}) ===`);
+console.log(`products in <=2 collections: ${lowMembers.length}`);
+lowMembers.slice(0,50).forEach(x=>console.log(` "${x.t}" [${x.vendor}] -> [${x.handles.join(', ')}]`));
+console.log(`\n=== effectively browse-dark (ALL their collections are 'internal') : ${onlyInternal.length} ===`);
+onlyInternal.slice(0,50).forEach(x=>console.log(` "${x.t}" [${x.vendor}] -> [${x.handles.join(', ')}]`));
+fs.writeFileSync('/tmp/low-membership-probe.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,lowMembers,onlyInternal,collPub:(cj?.data?.collections?.edges||[]).map(e=>e.node)},null,2));
+console.log(`\nwrote /tmp/low-membership-probe.json`);
diff --git a/scripts/color-seo/push-color-seo.cjs b/scripts/color-seo/push-color-seo.cjs
new file mode 100644
index 0000000..71ebc8f
--- /dev/null
+++ b/scripts/color-seo/push-color-seo.cjs
@@ -0,0 +1,57 @@
+const fs=require('fs');
+const env=fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8');
+const get=k=>{const m=env.match(new RegExp('^'+k+'=(.*)$','m'));return m?m[1].trim():'';};
+const TOKEN=get('SHOPIFY_ADMIN_TOKEN'); // write_products covers collections
+const HOST='designer-laboratory-sandbox.myshopify.com';
+const GQL=`https://${HOST}/admin/api/2025-01/graphql.json`;
+const H={'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'};
+
+// 17 live color collections + a per-color editorial note (keeps each landing unique — no dup-content)
+const COLORS=[
+ ['black','Black','for dramatic, high-contrast interiors'],
+ ['white-wallcoverings','White','for light, gallery-clean walls'],
+ ['gray-wallcoverings','Gray','the versatile neutral that anchors any palette'],
+ ['grey-wallcovering','Grey','the versatile neutral that anchors any palette'],
+ ['blue-wallpaper','Blue','from serene powder to deep, inky tones'],
+ ['navy-wallcoverings','Navy','rich, sophisticated, and timeless'],
+ ['green-wallcoverings','Green','from restful sage to jewel-box emerald'],
+ ['teal-wallcoverings','Teal','a confident blend of blue and green'],
+ ['red-wallcoverings','Red','bold, warm, and unmistakably luxe'],
+ ['pink-wallcoverings','Pink','from soft blush to vivid fuchsia'],
+ ['purple','Purple','regal, moody, and modern'],
+ ['yellow-wallcoverings','Yellow','sunlit and optimistic'],
+ ['gold-wallcoverings','Gold','metallic warmth and quiet glamour'],
+ ['orange','Orange','spice-warm and energizing'],
+ ['brown-wallcoverings','Brown','earthy, grounding, and tactile'],
+ ['beige-wallcoverings','Beige','the quiet-luxury neutral'],
+ ['silver-wallcoverings','Silver','cool metallic shimmer'],
+];
+const BANNED=/wallquest|chesapeake|brewster|nextwall|seabrook|nicolette/i;
+
+function copy(color,note){
+ const title=`${color} Wallcoverings & Wallpaper | Designer Wallcoverings`;
+ const desc=`Shop ${color.toLowerCase()} wallcoverings & wallpaper at Designer Wallcoverings — ${note}. Premier design houses, to the trade & retail.`.slice(0,160);
+ const body=`<p>${color} wallcoverings — ${note}. Designer Wallcoverings curates ${color.toLowerCase()} wallpaper and wallcoverings from the world's premier design houses: grasscloths, silks, flocks, metallics, and printed papers across every shade of ${color.toLowerCase()}. Order memo samples online; available to the trade and retail.</p>`;
+ return {title,desc,body};
+}
+
+async function gql(query,variables){const r=await fetch(GQL,{method:'POST',headers:H,body:JSON.stringify({query,variables})});return r.json();}
+
+const ONLY=(process.argv.find(a=>a.startsWith('--only='))||'').split('=')[1];
+(async()=>{
+ const targets=ONLY?COLORS.filter(c=>c[0]===ONLY):COLORS;
+ let ok=0,err=0;
+ for(const [handle,color,note] of targets){
+ const c=copy(color,note);
+ if(BANNED.test(c.title+c.desc+c.body)){console.log('ABORT leak',handle);continue;}
+ const find=await gql(`query($h:String!){collectionByHandle(handle:$h){id title}}`,{h:handle});
+ const id=find.data&&find.data.collectionByHandle&&find.data.collectionByHandle.id;
+ if(!id){console.log(' ?? no collection',handle,JSON.stringify(find.errors||'').slice(0,80));err++;continue;}
+ const m=await gql(`mutation($in:CollectionInput!){collectionUpdate(input:$in){collection{id handle} userErrors{field message}}}`,
+ {in:{id, descriptionHtml:c.body, seo:{title:c.title, description:c.desc}}});
+ const ue=m.data&&m.data.collectionUpdate&&m.data.collectionUpdate.userErrors;
+ if(ue&&ue.length){console.log(' ERR',handle,JSON.stringify(ue).slice(0,120));err++;}
+ else{console.log(' ✓',handle,'→ SEO title+desc+intro set');ok++;}
+ }
+ console.log(`\n[color-seo] updated=${ok} err=${err} of ${targets.length}`);
+})();
diff --git a/scripts/continue-masked-segmentation/continue-masked-segmentation-v2.mjs b/scripts/continue-masked-segmentation/continue-masked-segmentation-v2.mjs
new file mode 100644
index 0000000..2abfa24
--- /dev/null
+++ b/scripts/continue-masked-segmentation/continue-masked-segmentation-v2.mjs
@@ -0,0 +1,57 @@
+// continue-masked-segmentation-v2 — READ-ONLY, $0. Cycle 90 CORRECTED. v1 conflated two buyable-at-qty<=0
+// causes: (1) inventory UNTRACKED (always available, benign — e.g. print-on-demand dropship Printy6/Pixels/
+// Contrado/Steve Abrams Studios) vs (2) tracked + qty<=0 + CONTINUE oversell (the real (b) soft-defect).
+// v1's null-qty -> -1 misclassified UNTRACKED as masked (the 457 "DENY-buyable-at-0" oddity = exactly this).
+// FIX: read inventoryItem.tracked per variant. Per-variant buyable-reason:
+// tracked=false -> UNTRACKED (always buyable, benign)
+// tracked=true & qty>0 -> REAL-STOCK (benign)
+// tracked=true & qty<=0 & CONTINUE -> CONTINUE-OVERSOLD (the (b) defect candidate)
+// tracked=true & qty<=0 & DENY -> BLOCKED (should be unbuyable; c89 said 0)
+// Product class = best path: real-stock > untracked > continue-oversold > blocked. True (b) = ONLY-continue-oversold. EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:40, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor productType
+ variants(first:12){ edges{ node{ availableForSale inventoryQuantity inventoryPolicy inventoryItem{ tracked } } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let realStock=0, untracked=0, continueOversold=0, blocked=0, noVar=0;
+const coByVendor={}, coEx=[];
+function reason(v){ const tracked=v.inventoryItem?.tracked; const q=(typeof v.inventoryQuantity==='number'?v.inventoryQuantity:null);
+ if(tracked===false) return 'untracked';
+ if(q!==null && q>0) return 'realstock';
+ if(v.inventoryPolicy==='CONTINUE') return 'oversold'; // tracked & q<=0 & CONTINUE
+ return 'blocked'; }
+const RANK={realstock:3,untracked:2,oversold:1,blocked:0};
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(vs.length===0){ noVar++; continue; }
+ const best=vs.map(reason).reduce((a,b)=>RANK[b]>RANK[a]?b:a,'blocked');
+ if(best==='realstock') realStock++;
+ else if(best==='untracked') untracked++;
+ else if(best==='oversold'){ continueOversold++; coByVendor[n.vendor]=(coByVendor[n.vendor]||0)+1;
+ if(coEx.length<30){ const summ=vs.map(v=>`${v.inventoryItem?.tracked?'T':'U'}:${v.inventoryPolicy}/${v.inventoryQuantity}`).join(','); coEx.push({t:(n.title||'').slice(0,42),vendor:n.vendor,type:n.productType,vars:vs.length,summ:summ.slice(0,70)}); } }
+ else blocked++;
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%150===0) console.log(` ${pages}p scanned=${scanned} continue-oversold=${continueOversold} blocked=${blocked}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(2):'0';
+console.log(`\n=== continue-masked-segmentation-v2 (CORRECTED, READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nBUYABLE-BY (best path per product):`);
+console.log(` REAL-STOCK (tracked, qty>0, benign): ${realStock} (${pct(realStock)}%)`);
+console.log(` UNTRACKED (not tracked, always buyable, benign POD): ${untracked} (${pct(untracked)}%)`);
+console.log(` CONTINUE-OVERSOLD only (tracked, qty<=0, CONTINUE = the TRUE (b) set): ${continueOversold} (${pct(continueOversold)}%)`);
+console.log(` BLOCKED (tracked, qty<=0, DENY = would be unbuyable; c89 said 0): ${blocked} (${pct(blocked)}%)`);
+console.log(` no-variants: ${noVar}`);
+console.log(`\nTRUE (b) CONTINUE-OVERSOLD by vendor (top 20):`); Object.entries(coByVendor).sort((a,b)=>b[1]-a[1]).slice(0,20).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nTRUE (b) examples (summ = Tracked/Untracked:policy/qty):`); coEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] vars=${x.vars} summ=${x.summ}`));
+fs.writeFileSync('/tmp/continue-masked-segmentation-v2.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,realStock,untracked,continueOversold,blocked,noVar,coByVendor,coEx},null,2));
+console.log(`\nwrote /tmp/continue-masked-segmentation-v2.json`);
diff --git a/scripts/continue-masked-segmentation/continue-masked-segmentation.mjs b/scripts/continue-masked-segmentation/continue-masked-segmentation.mjs
new file mode 100644
index 0000000..4ea8dfd
--- /dev/null
+++ b/scripts/continue-masked-segmentation/continue-masked-segmentation.mjs
@@ -0,0 +1,59 @@
+// continue-masked-segmentation — READ-ONLY, $0. Cycle 90. Closes the c89 (b) residual: of the active
+// products (all buyable), which are buyable via POSITIVE REAL STOCK (benign) vs ONLY because
+// inventoryPolicy=CONTINUE oversells a qty<=0 variant (the soft onboarding-defect population riding
+// oversell — "buyable because we never say no"). Classification per product:
+// maxQty = max variant inventoryQuantity
+// real-stock : maxQty > 0 (benign; sub-split: has the 2026 sentinel vs other-positive-stock)
+// CONTINUE-masked-only : maxQty <= 0 -> buyable ONLY via CONTINUE oversell = the (b) set.
+// Note: the 2026 sentinel is a qty>0, so CONTINUE-masked-only is by construction missing-2026 (the
+// never-properly-onboarded signal). NEGATIVE CONTROL: the genuinely-stocked bulk makes the masked-at-zero
+// set a distinct quantifiable population, not the norm. EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:50, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor productType
+ variants(first:12){ edges{ node{ availableForSale inventoryQuantity inventoryPolicy } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let realStock=0, realStock2026=0, realStockOther=0, maskedOnly=0, noVar=0, maskedButHasDenyBuyable=0;
+const maskedByVendor={}, maskedEx=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(vs.length===0){ noVar++; continue; }
+ const maxQty=Math.max(...vs.map(v=>(typeof v.inventoryQuantity==='number'?v.inventoryQuantity:-1)));
+ const has2026=vs.some(v=>v.inventoryQuantity===2026);
+ if(maxQty>0){ realStock++; if(has2026) realStock2026++; else realStockOther++; }
+ else {
+ // maxQty<=0 : buyable only via CONTINUE oversell (the (b) set). Sanity: is there a buyable variant?
+ const buyableVia=vs.filter(v=>v.availableForSale===true);
+ const allContinue=buyableVia.length>0 && buyableVia.every(v=>v.inventoryPolicy==='CONTINUE');
+ if(buyableVia.some(v=>v.inventoryPolicy==='DENY')) maskedButHasDenyBuyable++; // DENY+qty<=0+buyable = oddity
+ maskedOnly++;
+ maskedByVendor[n.vendor]=(maskedByVendor[n.vendor]||0)+1;
+ if(maskedEx.length<30){ const summ=vs.map(v=>`${v.inventoryPolicy}/${v.inventoryQuantity}`).join(','); maskedEx.push({t:(n.title||'').slice(0,42),vendor:n.vendor,type:n.productType,vars:vs.length,allCont:allContinue,summ:summ.slice(0,64)}); }
+ }
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} masked-only=${maskedOnly}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(2):'0';
+console.log(`\n=== continue-masked-segmentation (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nHOW each active product is BUYABLE:`);
+console.log(` REAL-STOCK (>=1 variant qty>0, benign): ${realStock} (${pct(realStock)}%)`);
+console.log(` - of which AT the 2026 sentinel: ${realStock2026} (${pct(realStock2026)}%)`);
+console.log(` - other positive stock (no 2026 sentinel, benign drift): ${realStockOther} (${pct(realStockOther)}%)`);
+console.log(` CONTINUE-MASKED-ONLY (max qty<=0, buyable ONLY via oversell = the (b) soft-defect set): ${maskedOnly} (${pct(maskedOnly)}%)`);
+console.log(` no-variants oddity: ${noVar}`);
+console.log(` (sanity) masked-but-a-DENY-variant-is-buyable-at-qty<=0 (data oddity): ${maskedButHasDenyBuyable}`);
+console.log(`\nNEGATIVE CONTROL: real-stock bulk ${pct(realStock)}% -> CONTINUE-masked-only is ${maskedOnly>0?'a distinct quantifiable population':'(none)'}.`);
+console.log(`\nCONTINUE-MASKED-ONLY by vendor (top 20):`); Object.entries(maskedByVendor).sort((a,b)=>b[1]-a[1]).slice(0,20).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nCONTINUE-MASKED-ONLY examples (summ = policy/qty per variant):`); maskedEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] vars=${x.vars} allContinue=${x.allCont} summ=${x.summ}`));
+fs.writeFileSync('/tmp/continue-masked-segmentation.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,realStock,realStock2026,realStockOther,maskedOnly,noVar,maskedButHasDenyBuyable,maskedByVendor,maskedEx},null,2));
+console.log(`\nwrote /tmp/continue-masked-segmentation.json`);
diff --git a/scripts/contract-scope-auditor/contract-scope-auditor.mjs b/scripts/contract-scope-auditor/contract-scope-auditor.mjs
new file mode 100644
index 0000000..39b3af6
--- /dev/null
+++ b/scripts/contract-scope-auditor/contract-scope-auditor.mjs
@@ -0,0 +1,63 @@
+// contract-scope-auditor — read-only dw_unified canary for VENDOR-SCOPE / contract
+// integrity, complementing dw-map-auditor (which owns Kravet MAP + Nicolette).
+//
+// This auditor covers the SCOPE gaps the MAP auditor intentionally leaves:
+// 1) FAIL Discontinued-but-ACTIVE — products tagged 'Discontinued' still status=ACTIVE.
+// Discontinued SKUs must be archived (vendor 404s, dead links, and they
+// compound the GMC $4.25 risk). Bounded + actionable.
+// 2) FAIL Photos-only vendor carrying a REAL price — Cowtan & Tout is crawl-images-only
+// by design (0% cost-coverage intentional). A Cowtan product with price>$5 is a
+// data error / scope violation.
+// 3) INFO Gated-vendor ACTIVE snapshot — Koroseal/Newmor/Desima/Wolf Gordon/Innovations/
+// Scalamandre are uncosted/push-GATED but KNOWINGLY live. Counts only, never a
+// FAIL (flagging thousands daily = cry-wolf, per dw-map-auditor's own note).
+//
+// MAP-floor + Nicolette tripwire are NOT re-checked here — dw-map-auditor owns them.
+// READ-ONLY local psql. No writes except the local report JSON. Cost: $0.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const HOME = process.env.HOME, DIR = `${HOME}/.claude/yolo-queue`;
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DBURL = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DBURL, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+
+// 1) Discontinued-but-ACTIVE (sample the worst 200 for the report; count all)
+const discoCount = +(q(`select count(*) from shopify_products where status='ACTIVE' and tags ~* 'discontinu'`)[0]?.[0] || 0);
+const discoByVendor = q(`select vendor, count(*) from shopify_products where status='ACTIVE' and tags ~* 'discontinu' group by vendor order by 2 desc`);
+const discoRows = q(`select vendor, mfr_sku, price, handle from shopify_products where status='ACTIVE' and tags ~* 'discontinu' order by vendor, mfr_sku limit 200`);
+
+// 2) Photos-only vendor (Cowtan) carrying a real price
+const cowtanPriced = q(`select vendor, mfr_sku, price, handle from shopify_products where status='ACTIVE' and vendor ~* 'cowtan' and price::numeric > 5 order by price::numeric desc limit 100`);
+
+// 3) Gated-vendor ACTIVE snapshot (informational)
+const gated = q(`select vendor, count(*) from shopify_products where status='ACTIVE' and vendor ~* 'koroseal|newmor|desima|wolf *gordon|innovations|scalamandre' group by vendor order by 2 desc`);
+
+const findings = [];
+if (discoCount) findings.push({ sev: 'FAIL', check: 'discontinued_active',
+ msg: `${discoCount} ACTIVE product(s) tagged Discontinued (should be archived)`,
+ by_vendor: discoByVendor.map(r => ({ vendor: r[0], count: +r[1] })),
+ sample: discoRows.map(r => ({ vendor: r[0], sku: r[1], price: +r[2], handle: r[3] })) });
+if (cowtanPriced.length) findings.push({ sev: 'FAIL', check: 'photosonly_priced',
+ msg: `${cowtanPriced.length} Cowtan (photos-only) product(s) carry a real price >$5 (scope/data error)`,
+ rows: cowtanPriced.map(r => ({ vendor: r[0], sku: r[1], price: +r[2], handle: r[3] })) });
+findings.push({ sev: 'INFO', check: 'gated_vendor_active_snapshot',
+ msg: `gated/uncosted vendors knowingly live (counts only, not a violation)`,
+ by_vendor: gated.map(r => ({ vendor: r[0], count: +r[1] })) });
+
+const fail = findings.filter(f => f.sev === 'FAIL').length;
+const verdict = fail ? 'FAIL' : 'PASS';
+const out = { scanned_at: new Date().toISOString(), verdict, fail, findings,
+ note: 'Kravet MAP-floor + Nicolette tripwire are owned by dw-map-auditor (ran separately).' };
+
+fs.mkdirSync(DIR, { recursive: true });
+fs.writeFileSync(`${DIR}/contract-scope-audit-${new Date().toISOString().slice(0,10)}.json`, JSON.stringify(out, null, 2));
+
+console.log(`[contract-scope-auditor] ${verdict} · ${fail} FAIL`);
+for (const f of findings) console.log(` ${f.sev === 'FAIL' ? '✗' : f.sev === 'INFO' ? 'ℹ' : '△'} ${f.check}: ${f.msg}`);
+if (verdict === 'PASS') console.log(' ✓ no discontinued-active, no photos-only mispricing');
diff --git a/scripts/dark-inventory/dark-inventory-scan.sh b/scripts/dark-inventory/dark-inventory-scan.sh
new file mode 100755
index 0000000..7b6ab4c
--- /dev/null
+++ b/scripts/dark-inventory/dark-inventory-scan.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# dark-inventory-scan (c36) — READ-ONLY: products that are sellable-READY
+# (imaged AND real-priced>$4.25 AND costed) but NOT active = hidden revenue.
+# Split April-2026-archive vs other (avoid overlapping the April catastrophe).
+# Mirror-approximate: shopify_products.status LAGS canonical (c23) — re-validate
+# before any reactivation (which is GATED, a prod write). $0 local.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+echo "## gate analysis (why the pool is small)"
+$PSQL "$DB" -c "select count(*) not_active,
+ count(*) filter (where image_url>'' ) has_image,
+ count(*) filter (where greatest(coalesce(cost,0),coalesce(cost_price,0),coalesce(net_price,0))>0) has_cost,
+ count(*) filter (where greatest(coalesce(price,0),coalesce(retail_price,0))>4.25) real_price
+ from shopify_products where lower(status) in ('archived','draft');"
+echo "## dark inventory by vendor (imaged+real-priced+costed)"
+$PSQL "$DB" -c "select vendor, count(*) dark,
+ count(*) filter (where date(updated_at_shopify) between '2026-04-15' and '2026-04-22') from_april
+ from shopify_products
+ where lower(status) in ('archived','draft') and image_url>''
+ and greatest(coalesce(price,0),coalesce(retail_price,0))>4.25
+ and greatest(coalesce(cost,0),coalesce(cost_price,0),coalesce(net_price,0))>0
+ group by vendor order by dark desc;"
diff --git a/scripts/dark-vendor-check/dark-vendor-check.sh b/scripts/dark-vendor-check/dark-vendor-check.sh
new file mode 100755
index 0000000..129b543
--- /dev/null
+++ b/scripts/dark-vendor-check/dark-vendor-check.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# dark-vendor-check (c43) — READ-ONLY. c42 found 4 vendors with ALL collections
+# empty live. This distinguishes mis-collected (PDPs live, just not in a collection)
+# from CATALOG-DARK (PDPs 404 + all archived/draft). VERDICT: all 4 are fully DARK
+# (collections empty + sample PDPs 404 live + mirror 100% archived/draft) = 1,943
+# products not shopper-reachable. Not a collection-assignment fix; a reactivation
+# (gated, needs cost-enrichment per c36) or intentional-hide decision. $0.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+for v in "Colefax and Fowler" "Carlisle & Co. Walls" "1838 Wallcoverings" "Paul Montgomery"; do
+ echo "## $v"
+ $PSQL "$DB" -c "select status, count(*) from shopify_products where vendor='$v' group by status order by 2 desc;"
+ h=$($PSQL "$DB" -t -A -c "select handle from shopify_products where vendor='$v' and handle<>'' order by random() limit 1;")
+ echo " live PDP $h -> HTTP $(curl -s -o /dev/null -w '%{http_code}' --max-time 12 https://www.designerwallcoverings.com/products/$h.json)"
+done
diff --git a/scripts/dedup-archive-all.js b/scripts/dedup-archive-all.js
new file mode 100644
index 0000000..ff51f73
--- /dev/null
+++ b/scripts/dedup-archive-all.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+/* Archive the 18 verified duplicate products (/tmp/fleet_archive_list.csv) and add a 301 redirect
+ from each archived handle -> its keeper handle. PER-ROW GUARD: the KEEPER must be ACTIVE first
+ (never archive a dup if it would leave zero live). Idempotent (skips already-archived). Reads back
+ to verify status=ARCHIVED. Requires APPLY=1 to write. NO deletes — archive is reversible. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com', APPLY=process.env.APPLY==='1';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gqlOnce(q,v){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.setTimeout(30000,()=>rq.destroy(new Error('timeout')));rq.write(JSON.stringify({query:q,variables:v||{}}));rq.end();});}
+async function gql(q,v){for(let i=0;i<4;i++){try{return await gqlOnce(q,v);}catch(e){if(i===3)throw e;await sleep(1200*(i+1));}}}
+
+const rows=fs.readFileSync('/tmp/fleet_archive_list.csv','utf8').trim().split('\n').slice(1).map(l=>{
+ const [archive_id,from_handle,to_handle,vendor,sku]=l.split(','); return {archive_id,from_handle,to_handle,vendor,sku};});
+
+const UPD=`mutation($id:ID!){ productUpdate(input:{id:$id,status:ARCHIVED}){ product{ id status } userErrors{ field message } } }`;
+const RED=`mutation($r:UrlRedirectInput!){ urlRedirectCreate(urlRedirect:$r){ urlRedirect{ id path target } userErrors{ field message } } }`;
+
+(async()=>{
+ const log=['vendor,sku,archive_id,from_handle,to_handle,result,redirect'];
+ let done=0, skip=0, err=0;
+ console.log(`MODE: ${APPLY?'APPLY (archiving live)':'DRY'} | products: ${rows.length}\n`);
+ for(const r of rows){
+ const agid=`gid://shopify/Product/${r.archive_id}`;
+ // 1) status of the dup + keeper-active guard (find keeper by handle)
+ let s; try{ s=await gql(`{ dup:product(id:"${agid}"){ status }
+ keep:productByHandle(handle:"${r.to_handle}"){ id status } }`); }
+ catch(e){ console.log(` ${r.sku} FETCH-ERR ${e}`); err++; continue; }
+ const dup=s.data?.dup, keep=s.data?.keep;
+ if(!dup){ console.log(` ${r.sku} dup-missing skip`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},DUP-MISSING,`); skip++; continue; }
+ if(dup.status==='ARCHIVED'){ console.log(` ${r.sku} already-archived`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},ALREADY-ARCHIVED,`); skip++; continue; }
+ if(!keep || keep.status!=='ACTIVE'){ console.log(` ${r.sku} ⚠ KEEPER not ACTIVE (${keep?.status||'missing'}) — SKIP (won't leave zero live)`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},KEEPER-NOT-ACTIVE-SKIP,`); skip++; continue; }
+ if(!APPLY){ console.log(` WOULD archive ${r.sku} ${r.from_handle} -> keep ${r.to_handle}`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},WOULD-ARCHIVE,would-redirect`); continue; }
+ // 2) archive
+ const u=await gql(UPD,{id:agid}); const ue=u.data?.productUpdate?.userErrors||[];
+ if(ue.length){ console.log(` ${r.sku} ARCHIVE-ERR ${JSON.stringify(ue)}`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},ERR,`); err++; continue; }
+ const okv=u.data.productUpdate.product?.status==='ARCHIVED';
+ // 3) redirect old handle -> keeper handle (skip if from==to)
+ let red='none';
+ if(r.from_handle && r.from_handle!==r.to_handle){
+ const rr=await gql(RED,{r:{path:`/products/${r.from_handle}`,target:`/products/${r.to_handle}`}});
+ const rue=rr.data?.urlRedirectCreate?.userErrors||[];
+ red = rue.length ? ('redirect-err:'+rue.map(e=>e.message).join(';')) : 'redirected';
+ }
+ console.log(` ${okv?'✓':'✗'} ${r.sku} archived | ${red}`);
+ if(okv) done++; else err++;
+ log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},${okv?'ARCHIVED':'VERIFY-FAIL'},${red}`);
+ await sleep(350);
+ }
+ fs.writeFileSync('/tmp/fleet_archive_done.csv',log.join('\n'));
+ console.log(`\n=== ${APPLY?'APPLIED':'DRY'} === archived:${done} skipped:${skip} err:${err}`);
+ console.log(`log -> /tmp/fleet_archive_done.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/dedup-bulk-all.js b/scripts/dedup-bulk-all.js
new file mode 100644
index 0000000..df4f95f
--- /dev/null
+++ b/scripts/dedup-bulk-all.js
@@ -0,0 +1,68 @@
+#!/usr/bin/env node
+/* READ-ONLY full-catalog dedup via Shopify BULK op (no per-page throttling). Scans ALL active
+ products, joins variants, filters ALL vendors, flags TRUE duplicates:
+ - colorway-unique SKU (has . or /): dup = same VENDOR + same SKU (SKU reused across vendors,
+ so vendor is part of identity; within a vendor a full colorway SKU is unique).
+ - pattern-only SKU (no separator): dup = same VENDOR + SKU + TITLE (colorways share pattern SKU).
+ Writes /tmp/fleet_dedup.csv with created date+time so Steve picks the keeper. NO writes. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.write(JSON.stringify({query:q}));rq.end();});}
+function dl(u){return new Promise((res,rej)=>{https.get(u,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+const KFAM=new Set(['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston Y Daniela','Gaston y Daniela','Andrew Martin']);
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const titleKey=t=>norm(t).replace(/\s*[-#]\s*\d+$/,'');
+const isSample=o=>(o||[]).some(x=>String(x.value).toLowerCase()==='sample');
+const fmt=iso=>{ if(!iso) return ''; const d=new Date(iso); return d.toLocaleString('en-US',{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); };
+
+(async()=>{
+ const BULK=`mutation{ bulkOperationRunQuery(query:"""
+ { products(query:"status:active"){ edges{ node{ id title vendor createdAt
+ metafield(namespace:"custom",key:"manufacturer_sku"){ value }
+ variants{ edges{ node{ price selectedOptions{ value } } } } } } } }
+ """){ bulkOperation{ id status } userErrors{ field message } } }`;
+ const k=await gql(BULK);
+ const ue=k.data?.bulkOperationRunQuery?.userErrors||[];
+ if(ue.length){ console.log('cannot start bulk (another running?):',JSON.stringify(ue)); process.exit(1); }
+ console.log('bulk started; polling...');
+ let url=null;
+ for(let i=0;i<240;i++){ const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`); const op=s.data.currentBulkOperation;
+ if(i%5===0) console.log(` ${op.status} obj=${op.objectCount||0}`);
+ if(op.status==='COMPLETED'){ url=op.url; break; } if(op.status==='FAILED'){ console.log('FAILED',op.errorCode); process.exit(1); } await sleep(5000); }
+ if(!url){ console.log('no url'); process.exit(1); }
+ const data=await dl(url);
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ const prod={}, vbyp={};
+ for(const n of lines){
+ if(n.id && n.id.includes('/Product/')) prod[n.id]={vendor:n.vendor,title:n.title,createdAt:n.createdAt,sku:norm(n.metafield?.value)};
+ else if(n.__parentId && n.price!==undefined) (vbyp[n.__parentId]=vbyp[n.__parentId]||[]).push(n);
+ }
+ const flat=[];
+ for(const [pid,p] of Object.entries(prod)){
+ if(!p.sku) continue;
+ const reals=(vbyp[pid]||[]).map(v=>({p:parseFloat(v.price),s:isSample(v.selectedOptions)})).filter(v=>!v.s&&v.p>5);
+ flat.push({gid:pid.split('/').pop(),vendor:p.vendor,title:p.title,createdAt:p.createdAt,sku:p.sku,price:reals.length?Math.max(...reals.map(v=>v.p)):null});
+ }
+ const colorwayUnique=s=>/[.\/]/.test(s);
+ const groups={};
+ for(const p of flat){ const v=norm(p.vendor); const key=colorwayUnique(p.sku)?('CW:'+v+'|'+p.sku):('PT:'+v+'|'+p.sku+'||'+titleKey(p.title)); (groups[key]=groups[key]||[]).push(p); }
+ const dups=Object.entries(groups).filter(([k,a])=>a.length>1).map(([k,a])=>[k,a.sort((x,y)=>new Date(x.createdAt)-new Date(y.createdAt))]).sort((a,b)=>b[1].length-a[1].length);
+ const out=['dup_key,vendor,mfr_sku,product_id,price,created,keeper_hint,full_title'];
+ let dupProducts=0, priceDiff=0;
+ for(const [key,arr] of dups){ dupProducts+=arr.length;
+ const prices=arr.map(p=>p.price).filter(v=>v!=null); const diff=new Set(prices).size>1; if(diff) priceDiff++;
+ arr.forEach((p,idx)=>{ const keeper=idx===arr.length-1?'KEEP-newest':'dup-older';
+ out.push(`"${key}",${p.vendor},${p.sku},${p.gid},${p.price??''},"${fmt(p.createdAt)}",${keeper},"${(p.title||'').replace(/"/g,'')}"`); });
+ }
+ fs.writeFileSync('/tmp/fleet_dedup.csv',out.join('\n'));
+ console.log(`\n=== KRAVET-FAMILY TRUE DUP SWEEP (bulk, full catalog, READ-ONLY) ===`);
+ console.log(`ALL active products scanned: ${flat.length}`);
+ console.log(`dup clusters: ${dups.length} | products involved: ${dupProducts} | EXTRA copies removable: ${dupProducts-dups.length}`);
+ console.log(`clusters with price conflict: ${priceDiff}`);
+ const perV={}; dups.forEach(([k,a])=>a.forEach(p=>perV[p.vendor]=(perV[p.vendor]||0)+1));
+ console.log('dup products per vendor:'); for(const [v,c] of Object.entries(perV).sort((a,b)=>b[1]-a[1])) console.log(` ${v.padEnd(20)} ${c}`);
+ console.log('\ntop dup clusters:');
+ for(const [key,arr] of dups.slice(0,20)) console.log(` ${key.replace(/^(CW|PT):/,'').slice(0,46).padEnd(46)} x${arr.length} prices=[${arr.map(p=>p.price??'?').join(', ')}]`);
+ console.log(`\nfull decision list -> /tmp/fleet_dedup.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/dedup-verify-all.js b/scripts/dedup-verify-all.js
new file mode 100644
index 0000000..2ae3ad2
--- /dev/null
+++ b/scripts/dedup-verify-all.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* READ-ONLY. For each dup cluster in /tmp/fleet_dedup.csv, fetch both copies' keeper signals
+ (Online Store publication, inventory, image count, price, handle) and recommend KEEP vs ARCHIVE.
+ Keeper priority: (1) published to Online Store, (2) has price, (3) has images, (4) inventory>0,
+ (5) cleaner handle (no trailing -N), (6) newest. Flags CONFLICT when BOTH are live (human decides).
+ Writes /tmp/fleet_archive_plan.csv. NO writes/archives. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gqlOnce(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.setTimeout(30000,()=>rq.destroy(new Error('timeout')));rq.write(JSON.stringify({query:q}));rq.end();});}
+async function gql(q){for(let i=0;i<4;i++){try{return await gqlOnce(q);}catch(e){if(i===3)throw e;await sleep(1200*(i+1));}}}
+
+const csv=fs.readFileSync('/tmp/fleet_dedup.csv','utf8').trim().split('\n').slice(1);
+const clusters={};
+for(const line of csv){ const m=line.match(/^("(?:[^"]|"")*"|[^,]*),([^,]*),([^,]*),([^,]*),([^,]*),/); if(!m)continue;
+ const key=m[1].replace(/^"|"$/g,''), vendor=m[2], sku=m[3], pid=m[4];
+ (clusters[key]=clusters[key]||{vendor,sku,ids:[]}).ids.push(pid); }
+
+async function signals(pid){
+ const q=`{ product(id:"gid://shopify/Product/${pid}"){ handle status totalInventory createdAt
+ mediaCount{ count }
+ variants(first:10){ edges{ node{ price selectedOptions{ value } } } }
+ resourcePublications(first:25, onlyPublished:true){ edges{ node{ publication{ name } } } } } }`;
+ const s=await gql(q); const p=s.data?.product; if(!p) return null;
+ const pubs=(p.resourcePublications?.edges||[]).map(e=>e.node.publication?.name).filter(Boolean);
+ const reals=(p.variants?.edges||[]).map(e=>({pr:parseFloat(e.node.price),sm:(e.node.selectedOptions||[]).some(o=>/sample/i.test(o.value))})).filter(v=>!v.sm&&v.pr>5);
+ return { pid, handle:p.handle, status:p.status, inv:p.totalInventory??0, created:p.createdAt,
+ media:p.mediaCount?.count||0, price:reals.length?Math.max(...reals.map(v=>v.pr)):0,
+ onStore:pubs.some(n=>/online store/i.test(n)), pubCount:pubs.length };
+}
+const dupSuffix=h=>/-\d+$/.test(h||''); // shopify duplicate-handle marker (-1, -2)
+const codedHandle=h=>/^dwkk-/i.test(h||''); // old auto-generated code handle
+// higher = better keeper
+const handleRank=h=> (dupSuffix(h)?0:1) + (codedHandle(h)?0:2); // named clean slug = 3, coded = 1, -N dup = 0/2
+
+(async()=>{
+ const out=['cluster,vendor,sku,decision,archive_id,archive_handle,keep_id,keep_handle,keep_price,keep_img,confidence'];
+ const archiveList=['archive_product_id,redirect_from_handle,redirect_to_handle,vendor,sku'];
+ let archive=0, review=0;
+ for(const [key,c] of Object.entries(clusters)){
+ const sig=[]; for(const pid of c.ids){ const x=await signals(pid); if(x) sig.push(x); await sleep(200); }
+ if(sig.length<2){ out.push(`"${key}",${c.vendor},${c.sku},NEED-EYES,,,,,,,fetch-incomplete`); continue; }
+ // keeper score: handle quality dominates, then real price, images, inventory, recency
+ const score=x=> handleRank(x.handle)*1000 + (x.price>5?300:0) + Math.min(x.media,9)*20 + (x.inv>0?10:0) + (new Date(x.created).getTime()/1e14);
+ sig.forEach(x=>x._s=score(x));
+ const ranked=sig.slice().sort((a,b)=>b._s-a._s);
+ const keep=ranked[0];
+ // confidence: HIGH if a clear handle signal separates them, else REVIEW (both coded, ~equal)
+ const handlesDiffer = new Set(sig.map(x=>handleRank(x.handle))).size>1 || sig.some(x=>x.price>5)&&!sig.every(x=>x.price>5);
+ const conf = handlesDiffer ? 'HIGH' : 'REVIEW';
+ if(conf==='REVIEW') review++;
+ for(const x of ranked.slice(1)){ archive++;
+ out.push(`"${key}",${c.vendor},${c.sku},ARCHIVE,${x.pid},${x.handle},${keep.pid},${keep.handle},${keep.price||''},${keep.media},${conf}`);
+ archiveList.push(`${x.pid},${x.handle},${keep.handle},${c.vendor},${c.sku}`);
+ }
+ }
+ fs.writeFileSync('/tmp/fleet_archive_plan.csv',out.join('\n'));
+ fs.writeFileSync('/tmp/fleet_archive_list.csv',archiveList.join('\n'));
+ console.log('=== KRAVET DEDUP — VERIFIED ARCHIVE PLAN (read-only) ===');
+ console.log(`clusters: ${Object.keys(clusters).length} | products to ARCHIVE: ${archive} | HIGH-confidence: ${archive-review} | REVIEW (both coded, ~equal): ${review}`);
+ console.log(`plan -> /tmp/fleet_archive_plan.csv | archive list (+redirects) -> /tmp/fleet_archive_list.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/draft-abnormal-decode/draft-abnormal-decode.mjs b/scripts/draft-abnormal-decode/draft-abnormal-decode.mjs
new file mode 100644
index 0000000..56b2be9
--- /dev/null
+++ b/scripts/draft-abnormal-decode/draft-abnormal-decode.mjs
@@ -0,0 +1,32 @@
+// draft-abnormal-decode — READ-ONLY, $0. Cycle 83. Closes the c82 completeness gap: decode
+// the DRAFT abnormal-samples (single-variant "Sample" at non-$0/non-$4.25) the active scope
+// (c68 532) didn't cover. Per-vendor: count, price-signature (MAGNITUDE-gated per c82 —
+// flat-ROLL-price=disco, flat-SAMPLE-price=benign-uniform, varied=mislabel), SKU prefix, era.
+// Draft = off-storefront (lower live-severity) BUT the latent-activation landmine (c78): a
+// draft defect ships live the instant it's published. READ-ONLY Admin GraphQL. EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:draft"){ pageInfo{hasNextPage endCursor} edges{node{vendor handle variants(first:5){edges{node{title price sku createdAt}}}}} } }`;
+let cursor=null,pages=0,scanned=0,complete=true; const hits=[];
+while(pages<90){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++; const vs=(n.variants?.edges||[]).map(x=>x.node); if(vs.length!==1)continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isSample(v.title)&&!isNaN(p)&&p!==0&&p!==4.25) hits.push({vendor:n.vendor,h:n.handle,price:p,sku:v.sku||'',vc:(v.createdAt||'').slice(0,4)}); }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(150); }
+console.log(`=== draft-abnormal-decode (READ-ONLY, $0) ===\nDRAFT scanned ${scanned} (complete=${complete}) | abnormal-sample ${hits.length}\n`);
+// per-vendor signature: magnitude-gated (c82). roll-scale >= ~20; sample-scale < 20.
+const byV={};
+for(const h of hits){ const v=h.vendor||'(none)'; (byV[v]=byV[v]||{n:0,prices:new Set(),min:1e9,max:0,skuPfx:{},years:{}}); const b=byV[v]; b.n++; b.prices.add(h.price); b.min=Math.min(b.min,h.price); b.max=Math.max(b.max,h.price); const pfx=(h.sku.match(/^([A-Z]+-?\d{0,2})/i)||[,'?'])[1]; b.skuPfx[pfx]=(b.skuPfx[pfx]||0)+1; b.years[h.vc]=(b.years[h.vc]||0)+1; }
+for(const [v,b] of Object.entries(byV).sort((a,b)=>b[1].n-a[1].n)){
+ const distinct=b.prices.size; const rollScale=b.min>=20;
+ const sig = distinct<=2 ? (rollScale?'FLAT-ROLL = likely DISCO/placeholder':'FLAT-SAMPLE = benign-uniform') : (rollScale?'VARIED-ROLL = mislabel':'VARIED-SAMPLE = sample-price-variance');
+ console.log(`${v}: ${b.n} | $${b.min}-$${b.max} | ${distinct} distinct → ${sig}`);
+ console.log(` sku-prefix: ${JSON.stringify(Object.entries(b.skuPfx).sort((x,y)=>y[1]-x[1]).slice(0,4))} | years: ${JSON.stringify(b.years)}`);
+}
+fs.writeFileSync('/tmp/draft-abnormal-decode.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,total:hits.length,byVendor:Object.fromEntries(Object.entries(byV).map(([v,b])=>[v,{n:b.n,min:b.min,max:b.max,distinct:b.prices.size,years:b.years,skuPfx:b.skuPfx}]))},null,2));
+console.log(`\nwrote /tmp/draft-abnormal-decode.json`);
diff --git a/scripts/draft-reactivation-plan/build-draft-reactivation-plan.mjs b/scripts/draft-reactivation-plan/build-draft-reactivation-plan.mjs
new file mode 100644
index 0000000..d17b0ad
--- /dev/null
+++ b/scripts/draft-reactivation-plan/build-draft-reactivation-plan.mjs
@@ -0,0 +1,77 @@
+// build-draft-reactivation-plan — REPORT-ONLY staging plan to reactivate sellable
+// products stuck in DRAFT (fully built, never published). Same tiered+batched+
+// stage-time-revalidation pattern as the April restore plan. NO Shopify writes.
+//
+// Cohort: status=DRAFT, image present, NOT Nicolette, NOT discontinued-tagged.
+// Tiers: T1 CLEAN (batch) / T2 MAP Kravet-family (batch, price at MAP) /
+// T3 HOLD Phillip Jeffries(display-excluded)+gated-uncosted (review, no batch).
+// price is NOT a pre-filter (product price col = $4.25 sample variant for many);
+// real price re-validated at stage time against the live variant.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const OUT_JSON = `${process.env.HOME}/.claude/yolo-queue/draft-reactivation-plan-2026-06-16.json`;
+const OUT_MD = `${process.env.HOME}/.claude/yolo-queue/draft-reactivation-plan-2026-06-16.md`;
+const BATCH = 1000;
+
+const HOLD = /phillip jeffries|jeffries|scalamandre|koroseal|newmor|desima|cowtan|innovations|wolf *gordon/i;
+const KF = /kravet|lee jofa|groundworks|brunschwig|cole *& *son|gp *& *j *baker|colefax|clarke *& *clarke|mulberry|threads|baker lifestyle|andrew martin|aerin|barclay butera|thom filicia/i;
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 128 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+
+const rows = q(`
+ select shopify_id, vendor, mfr_sku, handle from shopify_products
+ where upper(status)='DRAFT' and image_url is not null and image_url<>''
+ and vendor !~* 'nicolette' and (tags is null or tags !~* 'discontinu')
+ order by vendor, mfr_sku`).map(r => ({ shopify_id: r[0], vendor: r[1], sku: r[2], handle: r[3] }));
+
+const tier = (v) => HOLD.test(v) ? 'T3_HOLD' : (KF.test(v) && !/scalamandre/i.test(v)) ? 'T2_MAP' : 'T1_CLEAN';
+for (const r of rows) r.tier = tier(r.vendor);
+const t1 = rows.filter(r => r.tier === 'T1_CLEAN'), t2 = rows.filter(r => r.tier === 'T2_MAP'), t3 = rows.filter(r => r.tier === 'T3_HOLD');
+
+const batchable = [...t1, ...t2];
+const batches = [];
+for (let i = 0; i < batchable.length; i += BATCH) {
+ const s = batchable.slice(i, i + BATCH);
+ batches.push({ day: batches.length + 1, count: s.length,
+ tiers: { T1_CLEAN: s.filter(r=>r.tier==='T1_CLEAN').length, T2_MAP: s.filter(r=>r.tier==='T2_MAP').length },
+ ids: s.map(r => r.shopify_id) });
+}
+const byVendor = (arr) => Object.entries(arr.reduce((m,r)=>(m[r.vendor]=(m[r.vendor]||0)+1,m),{})).sort((a,b)=>b[1]-a[1]);
+
+const plan = {
+ generated_at: new Date().toISOString(), source: 'dw_unified mirror (READ-ONLY)',
+ cohort: 'status=DRAFT, image present, not Nicolette, not discontinued-tagged',
+ totals: { restorable: rows.length, t1_clean: t1.length, t2_map: t2.length, t3_hold: t3.length, batchable: batchable.length, batches: batches.length },
+ stage_time_revalidation_gate: [
+ 'product still DRAFT (not already active/changed)', 'image_url still present',
+ 'live MIN non-sample variant price > $5 (skip $4.25-sample-only → would re-feed GMC)',
+ 'vendor not in HOLD list', 'T2_MAP: floored at MAP before publish',
+ ],
+ apply_method: 'shopify_api_queue: {id, status:ACTIVE} + set inventory=2026 on BOTH variants (per new-products rule), ≤1000/day — GATED, Steve fires',
+ batches, t3_hold_for_review: { count: t3.length, by_vendor: byVendor(t3) },
+ t1_by_vendor: byVendor(t1), t2_by_vendor: byVendor(t2),
+};
+fs.writeFileSync(OUT_JSON, JSON.stringify(plan, null, 2));
+
+let md = `# DRAFT reactivation — STAGING PLAN (report-only)\n\n`;
+md += `**${plan.generated_at}** · dw_unified mirror (READ-ONLY) · **$0** · standing veto respected (PLAN only, Steve fires).\n\n`;
+md += `## Cohort\n${plan.cohort}\n\n## Totals\n`;
+md += `- **Restorable DRAFTs: ${rows.length.toLocaleString()}**\n - T1 CLEAN: **${t1.length}**\n - T2 MAP (Kravet-family, price at MAP): **${t2.length}**\n - T3 HOLD (PJ + gated/uncosted — review): **${t3.length}**\n`;
+md += `- Auto-batchable (T1+T2): **${batchable.length}** → **${batches.length}** daily batch(es) of ≤${BATCH}\n\n`;
+md += `> Note: product price col = $4.25 sample for many rows → price re-validated at STAGE TIME, not pre-filtered. New-product rule: set inventory=2026 on BOTH variants on activation.\n\n`;
+md += `## Stage-time re-validation gate\n${plan.stage_time_revalidation_gate.map(g=>`- ${g}`).join('\n')}\n\n`;
+md += `## Apply method (GATED)\n${plan.apply_method}\n\n`;
+md += `## T1 CLEAN by vendor\n| Vendor | Count |\n|---|---:|\n${plan.t1_by_vendor.map(([v,c])=>`| ${v} | ${c} |`).join('\n')}\n\n`;
+if (t2.length) md += `## T2 MAP by vendor\n| Vendor | Count |\n|---|---:|\n${plan.t2_by_vendor.map(([v,c])=>`| ${v} | ${c} |`).join('\n')}\n\n`;
+md += `## T3 HOLD-for-review (NOT batched)\n| Vendor | Count |\n|---|---:|\n${plan.t3_hold_for_review.by_vendor.map(([v,c])=>`| ${v} | ${c} |`).join('\n')}\n`;
+fs.writeFileSync(OUT_MD, md);
+
+console.log(`[draft-reactivation-plan] restorable=${rows.length} (T1=${t1.length} T2=${t2.length} T3-hold=${t3.length}) → ${batches.length} batch(es)`);
+console.log(`JSON: ${OUT_JSON}\nMD: ${OUT_MD}`);
diff --git a/scripts/dup-image-scan/dup-image-scan.sh b/scripts/dup-image-scan/dup-image-scan.sh
new file mode 100755
index 0000000..55cbc9d
--- /dev/null
+++ b/scripts/dup-image-scan/dup-image-scan.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# dup-image-scan (c47) — READ-ONLY. ACTIVE products sharing the EXACT same primary
+# image_url across distinct handles could be a wrong-image/copy-paste error (shopper
+# sees the wrong picture). VERDICT: clean — 27 shared-image groups / 56 products, but
+# ALL are same-PATTERN variants: 20 colorways (same pattern, diff color) + 7 substrate
+# variants (e.g. Simpatico Paper vs Print, Sporting Life vs Velvet). The shared photo
+# is the correct pattern image across that pattern's color/material variants (vendor
+# gave one photo/pattern) — NOT a wrong-image defect. $0 local mirror.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+$PSQL "$DB" -c "
+with i as (select image_url, count(distinct handle) h,
+ count(distinct split_part(trim(title),' - ',1)) bp
+ from shopify_products where status='ACTIVE' and image_url<>'' group by image_url having count(distinct handle)>1)
+select count(*) shared_groups, sum(h) products,
+ count(*) filter (where bp=1) colorway_groups,
+ count(*) filter (where bp>1) cross_label_groups
+from i;"
+echo '-- cross-label groups (manually confirmed = substrate variants of same pattern, not wrong-image) --'
+$PSQL "$DB" -c "
+with i as (select image_url, count(distinct handle) h, count(distinct split_part(trim(title),' - ',1)) bp, string_agg(distinct split_part(trim(title),' - ',1),' | ') pats, string_agg(distinct vendor,',') v from shopify_products where status='ACTIVE' and image_url<>'' group by image_url having count(distinct handle)>1)
+select v vendor, left(pats,55) patterns from i where bp>1 order by h desc;"
diff --git a/scripts/dup-sku-scan/dup-sku-scan.sh b/scripts/dup-sku-scan/dup-sku-scan.sh
new file mode 100755
index 0000000..6015e0a
--- /dev/null
+++ b/scripts/dup-sku-scan/dup-sku-scan.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# dup-sku-scan (c50) — READ-ONLY. Looked for distinct ACTIVE products sharing one
+# mfr_sku (data-integrity dup). VERDICT after 2-layer skeptical decode: genuine
+# duplicate-SKU defects ~0 — every "shared SKU" is colorways of one pattern sharing
+# the vendor's pattern-level SKU (Scalamandre WP####, Nina Campbell NCW####). BUT
+# the decode surfaced a real issue: 529 ACTIVE products carry a PLACEHOLDER/junk SKU
+# (no-digit, shared): SANCAR 179 / TRUE 91 (boolean leak!) / YORK 57 / OSBORNE 56 /
+# INNOVATIONS 52 / DONGHIA 16 + descriptive strings — not real SKUs. $0 local.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+echo "## placeholder/junk SKUs (no-digit mfr_sku shared >3 active products)"
+$PSQL "$DB" -c "select upper(trim(mfr_sku)) sku, count(distinct handle) products, left(string_agg(distinct vendor,', '),60) vendors from shopify_products where status='ACTIVE' and mfr_sku<>'' and trim(mfr_sku) !~ '[0-9]' group by upper(trim(mfr_sku)) having count(distinct handle)>3 order by 2 desc limit 20;"
+$PSQL "$DB" -c "with p as (select upper(trim(mfr_sku)) sku from shopify_products where status='ACTIVE' and mfr_sku<>'' and trim(mfr_sku) !~ '[0-9]' group by upper(trim(mfr_sku)) having count(distinct handle)>3) select count(*) placeholder_sku_products from shopify_products where status='ACTIVE' and upper(trim(mfr_sku)) in (select sku from p);"
diff --git a/scripts/dup-title-scan/dup-title-scan.sh b/scripts/dup-title-scan/dup-title-scan.sh
new file mode 100755
index 0000000..110ad7f
--- /dev/null
+++ b/scripts/dup-title-scan/dup-title-scan.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# dup-title-scan (c46) — READ-ONLY. ACTIVE products sharing an EXACT title across
+# distinct handles = SEO cannibalization + poor shopper differentiation. Finding:
+# 3,285 collision-titles / 18,577 products; ~84% (2,771) are GENERIC/template
+# titles (vendor+material only, e.g. "Versace Wallcovering" x99, "Roberto Cavalli
+# Wallcovering" x149) — real distinct products never differentiated by pattern+
+# color. Fix = title-enrichment (gated, customer-facing). $0 local mirror.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+$PSQL "$DB" -c "
+with t as (select trim(title) ti, count(distinct handle) h, string_agg(distinct vendor,', ') v
+ from shopify_products where status='ACTIVE' and title is not null and trim(title)<>'' group by trim(title) having count(distinct handle)>1)
+select count(*) collision_titles, sum(h) products,
+ count(*) filter (where ti ~* '(wallcovering|wallpaper|durable|self adhesive)$' or ti !~ ' - ') generic_template
+from t;"
+echo '-- top collisions --'
+$PSQL "$DB" -c "
+select trim(title) title, count(distinct handle) handles, string_agg(distinct vendor,', ') vendors
+from shopify_products where status='ACTIVE' and trim(title)<>'' group by trim(title)
+having count(distinct handle)>1 order by 2 desc limit 15;"
diff --git a/scripts/empty-collections/empty-collections.mjs b/scripts/empty-collections/empty-collections.mjs
new file mode 100644
index 0000000..a1c7167
--- /dev/null
+++ b/scripts/empty-collections/empty-collections.mjs
@@ -0,0 +1,38 @@
+// empty-collections — READ-ONLY, $0. Officer-recommended (c59). Does the collections
+// sitemap advertise LIVE collection URLs that render 0 products? Those are thin /
+// soft-404-adjacent pages — and UNLIKE the c59 product case, collection URLs ARE in
+// the sitemap, so they ARE actively submitted to Googlebot. VERIFY LIVE via the
+// storefront /collections/<h>/products.json (reflects published products a shopper
+// sees) — NOT the stale mirror collections_count (proven unreliable, c40).
+const WWW='https://www.designerwallcoverings.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u);if(r.status===429){await sleep(1200*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+
+console.log('=== empty-collections (READ-ONLY, $0) ===\n');
+const sm=await get(`${WWW}/sitemap_collections_1.xml?from=79864463472&to=301565804595`);
+// real collection locs only (exclude nested image:loc .jpg entries)
+const handles=[...new Set([...sm.text.matchAll(/<loc>https:\/\/[^<]*\/collections\/([^<\/?]+)<\/loc>/g)].map(m=>m[1]))];
+console.log(`collections advertised in sitemap: ${handles.length}\n`);
+
+const empty=[], small=[], errs=[];
+let done=0;
+for(const h of handles){
+ // limit=2 so we can distinguish 0 / 1 / 2+ cheaply
+ const r=await get(`${WWW}/collections/${h}/products.json?limit=2`);
+ if(r.status!==200){ errs.push({h,status:r.status}); done++; continue; }
+ let n=0; try{ n=(JSON.parse(r.text).products||[]).length; }catch{ errs.push({h,status:'parse'}); done++; continue; }
+ if(n===0) empty.push(h);
+ else if(n===1) small.push(h);
+ done++;
+ if(done%100===0) console.log(` ${done}/${handles.length} probed (empty so far: ${empty.length})`);
+ await sleep(120);
+}
+console.log(`\nprobed ${done}/${handles.length}`);
+console.log(`EMPTY (0 products via products.json): ${empty.length}`);
+console.log(`single-product (1): ${small.length}`);
+console.log(`fetch/parse errors: ${errs.length}`);
+if(empty.length){ console.log('\nsample empty collections:'); empty.slice(0,25).forEach(h=>console.log(' - '+h)); }
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/empty-collections.json',JSON.stringify({ts:new Date().toISOString(),advertised:handles.length,empty,small,errs},null,2));
+console.log('\nwrote /tmp/empty-collections.json (full list for live verification)');
diff --git a/scripts/enrichment-board/build-enrichment-board.mjs b/scripts/enrichment-board/build-enrichment-board.mjs
new file mode 100644
index 0000000..934cdc7
--- /dev/null
+++ b/scripts/enrichment-board/build-enrichment-board.mjs
@@ -0,0 +1,73 @@
+// build-enrichment-board — LOCAL synthesis (no Shopify scan, $0). Joins the
+// already-collected per-vendor enrichment audits into ONE ranked vendor×axis
+// board the enrichment pipeline can act on directly:
+// price = # ACTIVE products feeding Google at $4.25 (GMC worklist) [c-GMC]
+// specs = % with material+width metafields (any namespace, hardened) [c28]
+// images = % with >=1 image [c26]
+// color = % with color_hex/color_details [c26]
+// alt = % with ALL images alt-texted [c29]
+// Ranks repped vendors by total "products needing work" across axes.
+//
+// node build-enrichment-board.mjs
+// READ-ONLY (reads local JSON written by prior cycles). $0.
+import fs from 'node:fs';
+const Q=`${process.env.HOME}/.claude/yolo-queue`;
+const mf=JSON.parse(fs.readFileSync(`${Q}/metafield-coverage-2026-06-16.json`,'utf8'));
+const alt=JSON.parse(fs.readFileSync(`${Q}/alt-text-coverage-2026-06-16.json`,'utf8'));
+const gmc=JSON.parse(fs.readFileSync(`${Q}/gmc-feed-exclude-worklist.json`,'utf8'));
+
+// price gap: count GMC $4.25-on-Google targets per vendor
+const priceGap=new Map();
+for(const t of (gmc.targets||[])) priceGap.set(t.vendor, (priceGap.get(t.vendor)||0)+1);
+
+// alt lookup by vendor
+const altByVendor=new Map(alt.vendors.map(v=>[v.vendor, v]));
+
+// build board for REPPED vendors (from the metafield audit's repped flag)
+const PJ=/jeffries/i; // display-excluded — alt/price gaps are by-design, flag but don't rank
+const rows=mf.vendors.filter(v=>v.repped===true && v.active_products>=50).map(v=>{
+ const a=altByVendor.get(v.vendor)||{};
+ const specs=v.specs_pct??0, img=v.img1_pct??0, color=v.color_pct??0;
+ const altp=a.all_alt_pct??null, withImg=a.with_image??v.active_products;
+ const price=priceGap.get(v.vendor)||0;
+ // products-needing-work per axis (absolute), images/color usually ~0
+ const specsNeed=Math.round(v.active_products*(100-specs)/100);
+ const imgNeed=Math.round(v.active_products*(100-img)/100);
+ const colorNeed=Math.round(v.active_products*(100-color)/100);
+ const altNeed= altp==null?null:Math.round(withImg*(100-altp)/100);
+ const excluded=PJ.test(v.vendor);
+ // total work excludes price (separate one-shot GMC fix) and excludes PJ (by-design)
+ const totalNeed= excluded?0:(specsNeed+imgNeed+colorNeed+(altNeed||0));
+ // biggest single fixable axis
+ const axes=[['specs',specsNeed],['images',imgNeed],['color',colorNeed],['alt',altNeed||0]].filter(x=>!excluded);
+ axes.sort((a,b)=>b[1]-a[1]);
+ return { vendor:v.vendor, active:v.active_products, excluded,
+ price_gap:price, specs_pct:specs, images_pct:img, color_pct:color, alt_pct:altp,
+ specs_need:specsNeed, alt_need:altNeed, total_need:totalNeed,
+ top_fix: excluded?'(display-excluded — by design)':(axes[0]&&axes[0][1]>0?`${axes[0][0]} (${axes[0][1]})`:'—clean—') };
+}).sort((a,b)=>b.total_need-a.total_need);
+
+const board={ generated_at:new Date().toISOString(), source:'local synthesis of c26/c28/c29/GMC (no new scan)',
+ repped_vendors:rows.length, rows };
+fs.writeFileSync(`${Q}/enrichment-board-2026-06-16.json`, JSON.stringify(board,null,2));
+
+const pc=p=>p==null?'—':p+'%';
+let md=`# Repped-vendor ENRICHMENT BOARD — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**LOCAL synthesis ($0, no new scan)** of four prior-cycle audits into one ranked vendor×axis to-do. `;
+md+=`Axes: price=# products feeding Google at $4.25 (GMC) · specs=material+width metafields (c28) · images=≥1 image (c26) · color=hex/details (c26) · alt=all-images-alt'd (c29). Ranked by total products needing work (specs+images+color+alt; price is a separate one-shot GMC fix; Phillip Jeffries excluded from ranking — display-excluded by rule).\n\n`;
+md+=`## Ranked board — ${rows.filter(r=>!r.excluded).length} repped vendors\n`;
+md+=`| # | Vendor | Active | price $4.25 | specs | images | color | alt | TOP FIX (products) |\n|--:|---|--:|--:|--:|--:|--:|--:|---|\n`;
+let i=0;
+for(const r of rows){ i++; md+=`| ${i} | ${r.vendor}${r.excluded?' ⚠️':''} | ${r.active} | ${r.price_gap||'—'} | ${pc(r.specs_pct)} | ${pc(r.images_pct)} | ${pc(r.color_pct)} | ${pc(r.alt_pct)} | ${r.top_fix} |\n`; }
+md+=`\n## How to read it\n`;
+md+=`- **TOP FIX** = the single axis with the most products needing work for that vendor — the highest-leverage backfill to task the enrichment pipeline with first.\n`;
+md+=`- **price $4.25** = products whose min variant feeds Google at the sample price (the GMC exclusion set); fixed in one shot by the GMC opt-out + the sample-split remodel, not per-vendor enrichment.\n`;
+md+=`- **images/color ~100%** across repped vendors (c26) — already solved; specs + alt are where the real per-vendor work is.\n`;
+md+=`- ⚠️ = display-excluded (Phillip Jeffries); its blank alt/price are by-design, excluded from ranking.\n`;
+md+=`- All backfills are GATED (prod writes); this board only prioritizes them.\n`;
+fs.writeFileSync(`${Q}/enrichment-board-2026-06-16.md`, md);
+
+console.log(`[enrichment-board] repped vendors ranked: ${rows.filter(r=>!r.excluded).length} (+1 excluded)`);
+console.log('Top 8 by products-needing-work:');
+for(const r of rows.filter(r=>!r.excluded).slice(0,8)) console.log(` ${(""+r.total_need).padStart(5)} need ${r.vendor.padEnd(22)} TOP=${r.top_fix}`);
+console.log(`Board: ${Q}/enrichment-board-2026-06-16.md`);
diff --git a/scripts/fallingstar-onboard/go-live-fallingstar.js b/scripts/fallingstar-onboard/go-live-fallingstar.js
new file mode 100644
index 0000000..42bc104
--- /dev/null
+++ b/scripts/fallingstar-onboard/go-live-fallingstar.js
@@ -0,0 +1,96 @@
+#!/usr/bin/env node
+/**
+ * Activate FallingStar Studio products (DW go-live). Mirrors go-live-artmura.js.
+ * Self-contained: reads out/created.jsonl (product ids) — no DB.
+ * Per product: 1) track inventory on both variants, 2) activate @ Ventura Blvd + set on_hand=2026,
+ * 3) publish to all 13 DW sales channels, 4) status → ACTIVE.
+ * Metafields are backfilled separately (type-mismatch-safe), like Artmura.
+ *
+ * node go-live-fallingstar.js # DRY-RUN (counts only)
+ * node go-live-fallingstar.js --apply # activate all created products
+ * Run via: SHOPIFY_ADMIN_TOKEN=$(grep ^SHOPIFY_ADMIN_TOKEN= ~/Projects/secrets-manager/.env|cut -d= -f2-) node go-live-fallingstar.js --apply
+ */
+const fs = require('fs');
+const path = require('path');
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const EP = `https://${STORE}/admin/api/2024-10/graphql.json`;
+const APPLY = process.argv.includes('--apply');
+const DONE_LOG = path.join(__dirname, 'out', 'created.jsonl');
+const ACTIVE_LOG = path.join(__dirname, 'out', 'activated.jsonl');
+
+const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
+const TARGET_QTY = 2026;
+// GMC source-fix (2026-07-08): 29646651457 = "Google & YouTube" REMOVED. New SKUs
+// must NOT land on the Google channel (Shopify auto-syncs minVariantPrice = the $4.25
+// sample → price_mismatch disapproval). Google is fed exclusively by the controlled
+// TSV (today-viewer/build-google-feed.js). See scripts/_lib/dw-publications.js.
+// Rollback: re-add 29646651457 below.
+const PUBLICATIONS = [
+ 22208643184, 22497296496, /* 29646651457 Google-REMOVED */ 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+].map(n => `gid://shopify/Publication/${n}`);
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const json = await res.json();
+ if (json.errors) { if (a === 3) throw new Error(JSON.stringify(json.errors)); await sleep(900 * (a + 1)); continue; }
+ const rem = json.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return json.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+const Q_VARIANTS = `query($id:ID!){ product(id:$id){ status variants(first:10){edges{node{id sku inventoryItem{id}}}}}}`;
+const M_TRACK = `mutation($id:ID!){ inventoryItemUpdate(id:$id, input:{tracked:true}){ userErrors{message} } }`;
+const M_ACTIVATE = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ userErrors{message} } }`;
+const M_SETQTY = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{field message code} } }`;
+const M_PUBLISH = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishablePublish(id:$id, input:$pubs){ userErrors{message} } }`;
+const M_ACTIVE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){ product{status} userErrors{message} } }`;
+
+async function goLive(pid) {
+ const gidP = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_VARIANTS, { id: gidP });
+ if (!d?.product) return ['product not found'];
+ const items = d.product.variants.edges.map(e => e.node.inventoryItem.id);
+ for (const iid of items) {
+ let r = await gql(M_TRACK, { id: iid }); (r.inventoryItemUpdate?.userErrors || []).forEach(e => errs.push('track:' + e.message));
+ r = await gql(M_ACTIVATE, { iid, loc: LOCATION_ID });
+ (r.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message)).forEach(e => errs.push('activate:' + e.message));
+ }
+ const r2 = await gql(M_SETQTY, { input: { name: 'available', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: items.map(iid => ({ inventoryItemId: iid, locationId: LOCATION_ID, quantity: TARGET_QTY })) } });
+ (r2.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('setqty:' + e.message));
+ const r3 = await gql(M_PUBLISH, { id: gidP, pubs: PUBLICATIONS.map(p => ({ publicationId: p })) });
+ (r3.publishablePublish?.userErrors || []).forEach(e => errs.push('publish:' + e.message));
+ const r4 = await gql(M_ACTIVE, { id: gidP });
+ (r4.productUpdate?.userErrors || []).forEach(e => errs.push('active:' + e.message));
+ return errs;
+}
+
+(async () => {
+ const created = fs.readFileSync(DONE_LOG, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+ const alreadyActive = new Set(fs.existsSync(ACTIVE_LOG)
+ ? fs.readFileSync(ACTIVE_LOG, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l).product_id) : []);
+ const todo = created.filter(c => !alreadyActive.has(c.product_id));
+ console.log(`go-live: ${todo.length} products (already active: ${alreadyActive.size}) · loc ${LOCATION_ID} · qty ${TARGET_QTY} · channels ${PUBLICATIONS.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log('DRY-RUN. Re-run with --apply.'); return; }
+ let ok = 0, fail = 0;
+ for (const c of todo) {
+ try {
+ const errs = await goLive(c.product_id);
+ if (errs.length) { fail++; console.error(` ✗ ${c.dw_sku}: ${errs.slice(0,3).join(' | ')}`); }
+ else { ok++; fs.appendFileSync(ACTIVE_LOG, JSON.stringify({ product_id: c.product_id, dw_sku: c.dw_sku }) + '\n'); console.log(` ✓ ${c.dw_sku} active · inv 2026 · 13 channels`); }
+ await sleep(350);
+ } catch (e) { fail++; console.error(` ERR ${c.dw_sku}: ${e.message}`); await sleep(700); }
+ }
+ console.log(`\nDONE go-live: ok=${ok} fail=${fail} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/fallingstar-onboard/push-fallingstar-live.js b/scripts/fallingstar-onboard/push-fallingstar-live.js
new file mode 100644
index 0000000..ae55cf0
--- /dev/null
+++ b/scripts/fallingstar-onboard/push-fallingstar-live.js
@@ -0,0 +1,112 @@
+#!/usr/bin/env node
+/**
+ * Direct Shopify Admin REST creator for FallingStar Studio (DW onboard, 2026-06-17).
+ * Mirrors push-artmura-live.js. Self-contained (no DB) — idempotency via local done-log.
+ *
+ * Pricing: website RETAIL, NO trade discount (Steve directive 2026-06-17, cost TBD — Artmura model).
+ * Settlement: Avian (birds) EXCLUDED at staging build; Willow INCLUDED per Steve 2026-06-17.
+ * Creates as DRAFT by default on the LIVE store (designer-laboratory-sandbox = prod).
+ *
+ * Usage (via run-push-fallingstar.sh which sets the token):
+ * node push-fallingstar-live.js # DRY-RUN: show first 3 planned creates
+ * node push-fallingstar-live.js --apply --limit=3 # canary: create 3 drafts
+ * node push-fallingstar-live.js --apply # create all remaining drafts
+ * node push-fallingstar-live.js --apply --status=active # ONLY when Steve says go live
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_PRODUCT_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const STATUS = (process.argv.find(a => a.startsWith('--status=')) || '--status=draft').split('=')[1];
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const PKG = path.join(__dirname, 'data', 'dw-staging.json');
+const DONE_LOG = path.join(__dirname, 'out', 'created.jsonl');
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN (never hard-code).'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&':'&','<':'<','>':'>','"':'"' }[c]));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({
+ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) },
+ }, res => { let b = ''; res.on('data', c => b += c);
+ res.on('end', () => { let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject);
+ req.setTimeout(20000, () => req.destroy(new Error('request timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+
+function specTable(r) {
+ const rows = [
+ ['Designer', r.designer], ['Collection', r.collection], ['Pattern', r.pattern],
+ ['Material', 'Hand-Painted Wallpaper'], ['Sample size', '8.5" x 11"'], ['Brand', 'FallingStar Studio'],
+ ].filter(([, v]) => v);
+ const trs = rows.map(([k, v]) =>
+ `<tr><th style="text-align:left;padding:6px 14px 6px 0;font-weight:600;">${esc(k)}</th><td style="padding:6px 0;">${esc(v)}</td></tr>`).join('\n');
+ return `<div class="fallingstar-product">\n${r.body_html || ('<p>' + esc(r.dw_title) + '</p>')}\n<h3>Specifications</h3>\n<table style="border-collapse:collapse;">\n${trs}\n</table>\n</div>`;
+}
+
+function buildPayload(r) {
+ const images = (r.images || []).map(src => ({ alt: esc(r.dw_title), src }));
+ return { product: {
+ title: r.dw_title, vendor: 'FallingStar Studio', product_type: 'Wallcoverings',
+ status: STATUS, tags: r.tags.join(', '), images, body_html: specTable(r),
+ options: [{ name: 'Size' }],
+ variants: [
+ { sku: r.dw_sku, price: String(r.price_retail), option1: 'Roll', taxable: true, requires_shipping: true },
+ { sku: `${r.dw_sku}-Sample`, price: String(r.sample_price || 5), option1: 'Sample', taxable: true, requires_shipping: true },
+ ],
+ } };
+}
+
+function loadDone() {
+ if (!fs.existsSync(DONE_LOG)) return new Set();
+ return new Set(fs.readFileSync(DONE_LOG, 'utf8').trim().split('\n').filter(Boolean)
+ .map(l => { try { return JSON.parse(l).dw_sku; } catch { return null; } }).filter(Boolean));
+}
+
+(async () => {
+ const pkg = JSON.parse(fs.readFileSync(PKG, 'utf8'));
+ const done = loadDone();
+ let todo = pkg.filter(p => !done.has(p.dw_sku));
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`Store: ${STORE} · token …${TOKEN.slice(-4)} · status=${STATUS} · to create: ${todo.length} (already: ${done.size}) · mode: ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+
+ if (!APPLY) {
+ for (const r of todo.slice(0, 3)) {
+ const pl = buildPayload(r);
+ console.log(`\n[create] ${r.dw_sku} "${pl.product.title}" [settlement:${r.settlement}]`);
+ console.log(` variants: Roll $${r.price_retail} / Sample $${r.sample_price} · imgs:${pl.product.images.length} · tags: ${pl.product.tags}`);
+ }
+ console.log(`\nDRY-RUN only. Re-run with --apply (optionally --limit=N) to create drafts.`);
+ return;
+ }
+
+ let ok = 0, fail = 0;
+ for (const r of todo) {
+ try {
+ const res = await shopify('POST', `/products.json`, buildPayload(r));
+ if (res.status === 201 && res.body?.product?.id) {
+ ok++; const pid = res.body.product.id;
+ fs.appendFileSync(DONE_LOG, JSON.stringify({ dw_sku: r.dw_sku, product_id: pid, title: r.dw_title, status: STATUS }) + '\n');
+ console.log(` ✓ ${r.dw_sku} → product ${pid} (${STATUS})`);
+ } else {
+ fail++; console.error(` FAIL ${r.dw_sku}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 200)}`);
+ }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1600 : 560);
+ } catch (e) { fail++; console.error(` ERR ${r.dw_sku}: ${e.message}`); await sleep(560); }
+ }
+ console.log(`\nDONE. created=${ok} failed=${fail} of ${todo.length}`);
+ console.log(`Post-create steps still required (Steve rules): inventory=2026 both variants @ Ventura Blvd · publish 13 channels · backfill metafields.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/fallingstar-onboard/resume-tomorrow.sh b/scripts/fallingstar-onboard/resume-tomorrow.sh
new file mode 100755
index 0000000..e0806e7
--- /dev/null
+++ b/scripts/fallingstar-onboard/resume-tomorrow.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# One-shot resume: create the FallingStar drafts that hit the daily variant cap on 2026-06-17.
+# Idempotent (skips the 21 already in created.jsonl). Self-unloads once all 42 exist.
+# Scheduled BEFORE sample-split (6:15am) to grab variant-cap headroom first.
+set -e
+# launchd runs with a minimal PATH that omits /usr/local/bin → bare `node` is "command not found"
+# (root cause of the 21/42 stall: every fire since 2026-06-17 silently created nothing).
+# Pin it so both this script AND the run-push child (which inherits env) can exec node.
+export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH"
+DIR="$HOME/Projects/designerwallcoverings/scripts/fallingstar-onboard"
+LOG="$DIR/out/resume-$(date +%Y%m%d-%H%M).log"
+cd "$DIR"
+echo "=== fallingstar resume $(date) ===" | tee "$LOG"
+bash run-push-fallingstar.sh --apply 2>&1 | tee -a "$LOG"
+
+# activate whatever now exists (idempotent — skips the 21 already live)
+export SHOPIFY_ADMIN_TOKEN=$(grep -E '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2-)
+echo "--- go-live activation ---" | tee -a "$LOG"
+node go-live-fallingstar.js --apply 2>&1 | tee -a "$LOG"
+
+DONE=$(wc -l < out/created.jsonl | tr -d ' ')
+echo "created total: $DONE / 42" | tee -a "$LOG"
+if [ "$DONE" -ge 42 ]; then
+ echo "ALL 42 created — unloading the resume job (self-retire)." | tee -a "$LOG"
+ launchctl bootout "gui/$(id -u)/com.steve.fallingstar-resume" 2>/dev/null || true
+ rm -f "$HOME/Library/LaunchAgents/com.steve.fallingstar-resume.plist" 2>/dev/null || true
+ ACTIVE=$(wc -l < out/activated.jsonl 2>/dev/null | tr -d ' ')
+ # notify CNCP if reachable
+ curl -s -X POST http://127.0.0.1:3333/api/wins -H 'Content-Type: application/json' \
+ -d "{\"project\":\"designerwallcoverings\",\"title\":\"FallingStar 42/42 LIVE\",\"summary\":\"Variant-cap resume created the final 21 + activated all (inv 2026, 13 channels). Ready for landing deploy.\"}" >/dev/null 2>&1 || true
+ # email PING to Steve via George
+ GA="$(grep -E '^GEORGE_AUTH=' "$HOME/Projects/secrets-manager/.env" 2>/dev/null | head -1 | cut -d= -f2-)"
+ if [ -n "$GA" ]; then
+ curl -s --max-time 15 "http://100.107.67.67:9850/api/send" -H "Authorization: $GA" \
+ -H "Content-Type: application/json; charset=utf-8" \
+ -d "{\"to\":\"steve@designerwallcoverings.com\",\"subject\":\"✅ FallingStar 42/42 LIVE ($ACTIVE active)\",\"text\":\"All 42 FallingStar patterns are created + activated on the storefront. Only the landing-page deploy remains (gated) — reply or say 'FallingStar' to deploy fallingstar.designerwallcoverings.com.\"}" >/dev/null 2>&1 || true
+ fi
+else
+ echo "still $((42-DONE)) pending (cap not fully reset) — will retry next fire." | tee -a "$LOG"
+fi
diff --git a/scripts/fallingstar-onboard/run-push-fallingstar.sh b/scripts/fallingstar-onboard/run-push-fallingstar.sh
new file mode 100755
index 0000000..171d675
--- /dev/null
+++ b/scripts/fallingstar-onboard/run-push-fallingstar.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+# Wrapper: loads SHOPIFY_ADMIN_TOKEN from secrets-manager, then runs the pusher.
+# Pass through any args: --apply --limit=3 --status=active
+set -e
+export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH" # launchd PATH omits node's dir
+ENVF="$HOME/Projects/secrets-manager/.env"
+export SHOPIFY_ADMIN_TOKEN=$(grep -E '^SHOPIFY_ADMIN_TOKEN=' "$ENVF" | head -1 | cut -d= -f2-)
+exec node "$(dirname "$0")/push-fallingstar-live.js" "$@"
diff --git a/scripts/fallingstar-resku/audit-brands.js b/scripts/fallingstar-resku/audit-brands.js
new file mode 100644
index 0000000..da13140
--- /dev/null
+++ b/scripts/fallingstar-resku/audit-brands.js
@@ -0,0 +1,45 @@
+#!/usr/bin/env node
+// READ-ONLY audit of the 6 microsite brands: SKU format (DW vs vendor leak),
+// specs-in-description, and manufacturer_sku metafield coverage (sampled).
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const VENDORS = ['Fentucci', 'LA Walls', 'British Walls', 'Leed Walls', 'Surface Stick', 'Primo Leathers'];
+const rest = (p) => fetch(`https://${STORE}/admin/api/${API}${p}`, { headers: { 'X-Shopify-Access-Token': TOKEN } });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const SPEC_RE = /•\s*Material:|\bSpecs:|Vertical Repeat:|Horizontal Repeat:|Trimmed Width:|\bMatch:\s*(Straight|Random|Drop)|yard minimum/i;
+const DW_SKU = /^DW[A-Z]{1,4}-/i;
+
+async function pageAll(vendor) {
+ const out = [];
+ let url = `/products.json?vendor=${encodeURIComponent(vendor)}&status=active&limit=250&fields=id,title,handle,body_html,variants`;
+ while (url) {
+ const r = await rest(url);
+ const link = r.headers.get('link') || '';
+ const d = await r.json();
+ out.push(...(d.products || []));
+ const m = link.match(/<([^>]+)>;\s*rel="next"/);
+ url = m ? m[1].replace(`https://${STORE}/admin/api/${API}`, '') : null;
+ if (url) await sleep(350);
+ }
+ return out;
+}
+
+(async () => {
+ for (const v of VENDORS) {
+ const ps = await pageAll(v);
+ const skus = ps.flatMap(p => p.variants.map(x => x.sku || '')).filter(Boolean);
+ const nonSample = skus.filter(s => !/sample/i.test(s));
+ const dw = nonSample.filter(s => DW_SKU.test(s)).length;
+ const nonDw = nonSample.filter(s => !DW_SKU.test(s));
+ const specLeak = ps.filter(p => SPEC_RE.test(p.body_html || ''));
+ // prefix distribution of non-DW SKUs
+ const pref = {};
+ nonDw.forEach(s => { const m = s.match(/^[A-Za-z]+/); const k = m ? m[0].toUpperCase() : '(num)'; pref[k] = (pref[k] || 0) + 1; });
+ console.log(`\n=== ${v} (${ps.length} products, ${nonSample.length} main SKUs) ===`);
+ console.log(` DW-format SKUs: ${dw} | NON-DW (vendor-leak): ${nonDw.length}`);
+ if (nonDw.length) console.log(` non-DW prefixes: ${JSON.stringify(pref)} e.g. ${nonDw.slice(0, 4).join(', ')}`);
+ console.log(` specs-in-description: ${specLeak.length} products` + (specLeak.length ? ` e.g. "${specLeak[0].title.split('|')[0].trim().slice(0,30)}"` : ''));
+ await sleep(300);
+ }
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/fallingstar-resku/enrich.js b/scripts/fallingstar-resku/enrich.js
new file mode 100644
index 0000000..d48164b
--- /dev/null
+++ b/scripts/fallingstar-resku/enrich.js
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+/**
+ * FallingStar (DWRA) re-SKU + metafield enrichment + description cleanup.
+ * - Assigns DWRA-<seq> sequential SKUs (Roll) + DWRA-<seq>-Sample (Sample variant).
+ * - Stashes the original FS-* SKU in custom.manufacturer_sku.
+ * - Parses spec bullets out of body_html into proper metafields.
+ * - Cleans the spec block out of the description (keeps the narrative).
+ * DRY_RUN=1 → print planned changes, write nothing. START=1001 → first sequential number.
+ * Restore-map written to ~/.claude/yolo-queue/restore-maps/fallingstar-dwra-resku.json
+ */
+const fs = require('fs');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const DRY = process.env.DRY_RUN === '1';
+const START = parseInt(process.env.START || '1001', 10);
+const ONLY = process.env.ONLY ? parseInt(process.env.ONLY, 10) : null; // limit to N products (canary)
+const API = '2024-10';
+if (!TOKEN) { console.error('no SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+
+const rest = (p, opts = {}) => fetch(`https://${STORE}/admin/api/${API}${p}`, { ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) } });
+const gql = (query, variables) => fetch(`https://${STORE}/admin/api/${API}/graphql.json`, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) }).then(r => r.json());
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const txt = h => String(h || '').replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/ /g, ' ').replace(/\s+/g, ' ').trim();
+const grab = (s, re) => { const m = s.match(re); return m ? m[1].replace(/[\s•|]+$/, '').trim() : null; }; // keep inch marks (" / '')
+
+function parseSpecs(bodyHtml) {
+ const s = txt(bodyHtml);
+ const specs = {};
+ specs.material = grab(s, /Material:\s*([^•|]+?)(?:\s*[•|]|\s+Process:|\s+Sold:|$)/i);
+ specs.process = grab(s, /Process:\s*([^•|]+?)(?:\s*[•|]|\s+Sold:|$)/i);
+ const sold = grab(s, /Sold:\s*([^•|]+?)(?:\s*[•|]|\s+Note:|\s+Specs:|$)/i);
+ specs.order_unit = sold ? (/yard/i.test(sold) ? 'Yard' : /roll/i.test(sold) ? 'Roll' : sold) : null;
+ specs.vert = grab(s, /Vertical Repeat:\s*([^•|]+?)(?:\s*[•|]|\s+Horizontal|$)/i);
+ specs.horz = grab(s, /Horizontal Repeat:\s*([^•|]+?)(?:\s*[•|]|\s+Trimmed|\s+Width|$)/i);
+ specs.width = grab(s, /(?:Trimmed )?Width:\s*([^•|]+?)(?:\s*[•|]|\s+Match:|$)/i);
+ specs.match = grab(s, /Match:\s*(Straight|Random|Half[- ]?Drop|Drop|Reverse[^•|]*|[A-Za-z ]+?)(?:\s*[•|]|\s+Minimum|\s+Repeat|$)/i);
+ const minM = s.match(/(\d+)\s*yard\s*minimum/i); specs.minimum = minM ? parseInt(minM[1], 10) : null;
+ specs.lead_time = grab(s, /Standard lead time:\s*([^•|]+?)(?:\s*[•|]|\s+Rush|$)/i);
+ const orig = grab(s, /Made in (?:the )?([A-Za-z. ]+?)(?:\s*[•|.]|$)/i); specs.origin = orig || null;
+ // narrative = everything before the first spec bullet / "Specs:" / "Material:"
+ let narr = s.split(/\s*•\s*Material:|\bMaterial:|\bSpecs:/i)[0].trim();
+ specs.repeat = [specs.vert && `Vertical ${specs.vert}`, specs.horz && `Horizontal ${specs.horz}`, specs.match && `${specs.match} match`].filter(Boolean).join(', ') || null;
+ specs.narrative = narr;
+ return specs;
+}
+
+const pad = n => String(n);
+const MF = (ns, key, type, value) => ({ namespace: ns, key, type, value: String(value) });
+
+(async () => {
+ // pull all active FallingStar products with body + variants + current metafields
+ const products = [];
+ let url = `/products.json?vendor=${encodeURIComponent('FallingStar Studio')}&status=active&limit=250`;
+ const d = await (await rest(url)).json();
+ for (const p of d.products) products.push(p);
+ products.sort((a, b) => a.title.localeCompare(b.title)); // stable sequential order
+ console.log(`${products.length} FallingStar products${ONLY ? ` (canary: first ${ONLY})` : ''} — DRY_RUN=${DRY}\n`);
+
+ const restoreMap = [];
+ let seq = START;
+ const slice = ONLY ? products.slice(0, ONLY) : products;
+ for (const p of slice) {
+ const dwra = `DWRA-${pad(seq)}`;
+ const roll = p.variants.find(v => !/sample/i.test(v.title) && Number(v.price) !== 4.25 && Number(v.price) !== 5) || p.variants[0];
+ const sample = p.variants.find(v => /sample/i.test(v.title));
+ const specs = parseSpecs(p.body_html);
+ const mfgSku = roll.sku || '';
+ const metas = [
+ MF('custom', 'manufacturer_sku', 'single_line_text_field', mfgSku),
+ MF('custom', 'designer', 'single_line_text_field', 'Mitch Ferrin'),
+ MF('custom', 'collection_name', 'single_line_text_field', (p.title.split('|')[0].trim())),
+ MF('custom', 'brand', 'single_line_text_field', 'FallingStar Studio'),
+ ];
+ if (specs.material) metas.push(MF('custom', 'material', 'multi_line_text_field', specs.material));
+ if (specs.width) metas.push(MF('custom', 'width', 'single_line_text_field', specs.width));
+ if (specs.repeat) metas.push(MF('custom', 'repeat', 'single_line_text_field', specs.repeat));
+ if (specs.minimum) metas.push(MF('custom', 'minimum', 'number_integer', specs.minimum));
+ if (specs.order_unit) metas.push(MF('dwc', 'order_unit', 'single_line_text_field', specs.order_unit));
+ if (specs.minimum) metas.push(MF('dwc', 'minimum_order_quantity', 'number_integer', specs.minimum));
+ if (specs.lead_time) metas.push(MF('custom', 'lead_time_text', 'single_line_text_field', specs.lead_time).key && MF('dwc', 'content', 'multi_line_text_field', `Lead time: ${specs.lead_time}`));
+
+ restoreMap.push({ product_id: p.id, title: p.title, roll_variant_id: roll.id, old_roll_sku: roll.sku, new_roll_sku: dwra, sample_variant_id: sample ? sample.id : null, old_sample_sku: sample ? sample.sku : null, new_sample_sku: sample ? `${dwra}-Sample` : null, old_body_html: p.body_html });
+
+ console.log(`#${seq} ${p.title.split('|')[0].trim()}`);
+ console.log(` SKU ${roll.sku} → ${dwra}${sample ? ` | ${sample.sku} → ${dwra}-Sample` : ''}`);
+ console.log(` mfr_sku=${mfgSku} material=${specs.material||'-'} width=${specs.width||'-'} repeat=${specs.repeat||'-'} unit=${specs.order_unit||'-'} min=${specs.minimum||'-'}`);
+ console.log(` body(clean,${specs.narrative.length}c): ${specs.narrative.slice(0,90)}...`);
+
+ if (!DRY) {
+ // 1) SKUs
+ await rest(`/variants/${roll.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: roll.id, sku: dwra } }) });
+ await sleep(400);
+ if (sample) { await rest(`/variants/${sample.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: sample.id, sku: `${dwra}-Sample` } }) }); await sleep(400); }
+ // 2) metafields (metafieldsSet, batch)
+ const setInput = metas.filter(Boolean).map(m => ({ ownerId: `gid://shopify/Product/${p.id}`, namespace: m.namespace, key: m.key, type: m.type, value: m.value }));
+ const r = await gql(`mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`, { mf: setInput });
+ const errs = r.data && r.data.metafieldsSet && r.data.metafieldsSet.userErrors;
+ if (errs && errs.length) console.log(' ⚠ mf errors:', JSON.stringify(errs).slice(0, 200));
+ await sleep(400);
+ // 3) clean body_html (narrative only)
+ if (specs.narrative && specs.narrative.length > 20) {
+ await rest(`/products/${p.id}.json`, { method: 'PUT', body: JSON.stringify({ product: { id: p.id, body_html: `<p>${specs.narrative}</p>` } }) });
+ await sleep(400);
+ }
+ }
+ seq++;
+ }
+ fs.mkdirSync(`${process.env.HOME}/.claude/yolo-queue/restore-maps`, { recursive: true });
+ fs.writeFileSync(`${process.env.HOME}/.claude/yolo-queue/restore-maps/fallingstar-dwra-resku.json`, JSON.stringify(restoreMap, null, 2));
+ console.log(`\n${DRY ? 'DRY-RUN' : 'APPLIED'} — ${slice.length} products. restore-map written.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/fence-strip/fence-strip-apply.mjs b/scripts/fence-strip/fence-strip-apply.mjs
new file mode 100644
index 0000000..24a1841
--- /dev/null
+++ b/scripts/fence-strip/fence-strip-apply.mjs
@@ -0,0 +1,35 @@
+// fence-strip-apply (c53) — APPLY the officer-CONFIRMED code-fence-strip to the 60
+// leading-fence-leak products (Steve-authorized 2026-06-16). Per product: re-fetch
+// fresh body, re-run guards (leading fence present, unwrap changes it, post-strip
+// non-empty + no banned word), SAVE old body to rollback, then
+// productUpdate(descriptionHtml=cleaned, seo.description=regen from cleaned).
+import fs from 'fs';
+const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const API='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2500);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2500);continue;}return j;}throw new Error('throttled');}
+function unwrap(b){let body=b;body=body.replace(/^\s*```[a-z]*\s*\n?/i,'');body=body.replace(/\n?\s*```\s*$/,'');body=body.replace(/```[a-z]*\s*([\s\S]*?)\s*```/gi,'$1');body=body.replace(/^\s*<code>([\s\S]*?)<\/code>\s*$/i,'$1');return body.trim();}
+const txt=h=>(h||'').replace(/<[^>]+>/g,'').replace(/&[a-z]+;/g,' ').replace(/\s+/g,' ').trim();
+const work=JSON.parse(fs.readFileSync(process.env.HOME+'/.claude/yolo-queue/fence-strip-dryrun-worklist.json','utf8')).filter(i=>i.changed);
+console.log(`apply targets (changed, leading-fence): ${work.length}`);
+const M=`mutation($id:ID!,$html:String!,$seo:String!){productUpdate(input:{id:$id,descriptionHtml:$html,seo:{description:$seo}}){userErrors{message}}}`;
+const rollback=[]; let ok=0,skip=0,fail=0;
+for(const it of work){
+ try{
+ const j=await gql(`{products(first:1,query:"handle:${it.handle}"){nodes{id descriptionHtml}}}`);
+ const p=j.data?.products?.nodes?.[0]; if(!p){skip++;console.log(` skip(not found): ${it.handle}`);continue;}
+ const old=p.descriptionHtml||'';
+ if(!/^\s*(```|<code>)/i.test(old)){skip++;console.log(` skip(no leading fence now): ${it.handle}`);continue;}
+ const cleaned=unwrap(old);
+ if(cleaned===old || txt(cleaned).length<3){skip++;console.log(` skip(no-op/empty): ${it.handle}`);continue;}
+ if(/\bwallpaper\b/i.test(txt(cleaned))){skip++;console.log(` skip(banned-word surfaced): ${it.handle}`);continue;}
+ const seo=txt(cleaned).slice(0,300);
+ rollback.push({id:p.id,handle:it.handle,old_descriptionHtml:old});
+ const r=await gql(M,{id:p.id,html:cleaned,seo}); const ue=r.data?.productUpdate?.userErrors;
+ if(ue&&ue.length)throw new Error(ue[0].message);
+ ok++; if(ok%15===0)console.log(` ${ok}...`);
+ }catch(e){fail++;console.log(` ✗ ${it.handle}: ${e.message.slice(0,70)}`);}
+ await sleep(300);
+}
+fs.writeFileSync(process.env.HOME+'/.claude/yolo-queue/fence-strip-ROLLBACK-2026-06-16.json',JSON.stringify(rollback,null,2));
+console.log(`\nDONE: ${ok} stripped, ${skip} skipped(guard), ${fail} failed. Rollback saved: ${rollback.length}.`);
diff --git a/scripts/fence-strip/fence-strip-dryrun.mjs b/scripts/fence-strip/fence-strip-dryrun.mjs
new file mode 100644
index 0000000..0f90f4b
--- /dev/null
+++ b/scripts/fence-strip/fence-strip-dryrun.mjs
@@ -0,0 +1,50 @@
+// fence-strip-dryrun (c52) — READ-ONLY preview of the c51-officer-APPROVED fix:
+// unwrap leaked markdown code-fence wrappers from ACTIVE body_html (strip ONLY the
+// ```html ... ``` / <code> fence, keep inner HTML verbatim). Runs vp-dw-marketing's
+// 3 gates: (a) fence-only guard (skip non-fenced, never touch bold/strong),
+// (b) banned-word 'Wallpaper' check on each post-strip body, (c) flag meta/OG regen.
+// DRY-RUN ONLY — writes a review worklist, NO Shopify write (live apply Steve-gated).
+import fs from 'fs';
+const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2500);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2500);continue;}return j;}throw new Error('throttled');}
+const FENCE_RE=/```[a-z]*\s*([\s\S]*?)\s*```/i; // ```html ... ``` (lang optional)
+const txt=h=>(h||'').replace(/<[^>]+>/g,'').replace(/&[a-z]+;/g,' ').replace(/\s+/g,' ').trim();
+// gate-a: deterministic unwrap, ONLY if a real fence wrapper is present
+function unwrap(b){
+ let body=b;
+ body=body.replace(/^\s*```[a-z]*\s*\n?/i,''); // (a) leading fence marker (```html / ```) — the unclosed-leak case
+ body=body.replace(/\n?\s*```\s*$/,''); // (c) trailing fence marker
+ body=body.replace(/```[a-z]*\s*([\s\S]*?)\s*```/gi,'$1'); // (b) any complete inner block — keep inner
+ body=body.replace(/^\s*<code>([\s\S]*?)<\/code>\s*$/i,'$1'); // whole-body <code> wrap
+ return body.trim();
+}
+// find the 64: re-scan ACTIVE bodies for an actual ``` fence (strict, not bold)
+let cur=null,total=0; const items=[];
+do{
+ const j=await gql(`query($c:String){products(first:100,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{id handle vendor descriptionHtml seo{description}}}}`,{c:cur});
+ const pg=j.data.products;
+ for(const n of pg.nodes){ total++; const b=n.descriptionHtml||'';
+ if(/^\s*```/.test(b) || /^\s*<code>[\s\S]*<\/code>\s*$/i.test(b)){ // leading-fence-only (officer gate-A: don't touch non-leaked products)
+ const after=unwrap(b);
+ const changed = after!==b && txt(after).length>=3; // gate-a: actually changed + non-empty inner
+ const bannedWord = /\bwallpaper\b/i.test(txt(after)); // gate-b
+ const metaDerived = !n.seo?.description; // gate-c: null seo → meta derives from body → needs regen awareness
+ items.push({id:n.id, handle:n.handle, vendor:n.vendor, changed, bannedWord, metaNeedsRegen:metaDerived,
+ before:txt(b).slice(0,70), after:txt(after).slice(0,70)});
+ }
+ }
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+const willStrip=items.filter(i=>i.changed);
+const skipNoChange=items.filter(i=>!i.changed);
+const bannedHits=willStrip.filter(i=>i.bannedWord);
+const metaRegen=willStrip.filter(i=>i.metaNeedsRegen);
+fs.writeFileSync(process.env.HOME+'/.claude/yolo-queue/fence-strip-dryrun-worklist.json',JSON.stringify(items,null,2));
+console.log(`scanned ${total} ACTIVE | fence-flagged ${items.length} | WILL-STRIP ${willStrip.length} | skip(no real change) ${skipNoChange.length}`);
+console.log(`gate-b banned-word 'Wallpaper' AFTER strip: ${bannedHits.length} → ${bannedHits.length?'FLAG (do not auto-rewrite): '+bannedHits.slice(0,6).map(x=>x.handle).join(', '):'none ✅'}`);
+console.log(`gate-c meta/OG would need regen (null seo.description): ${metaRegen.length}`);
+console.log('\n=== sample before → after (6) ===');
+for(const i of willStrip.slice(0,6)){ console.log(`\n• ${i.handle} [${i.vendor}]`); console.log(` BEFORE: ${i.before}`); console.log(` AFTER : ${i.after}`); }
+console.log(`\nDRY-RUN only — worklist: ~/.claude/yolo-queue/fence-strip-dryrun-worklist.json. Live apply Steve-gated.`);
diff --git a/scripts/fix-schumacher-double-wallcovering.js b/scripts/fix-schumacher-double-wallcovering.js
new file mode 100644
index 0000000..f684584
--- /dev/null
+++ b/scripts/fix-schumacher-double-wallcovering.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+/* Fix Schumacher product titles with a redundant doubled "Wallcoverings Wallcovering(s)".
+ "{name} Wallcoverings Wallcovering | Schumacher" → "{name} Wallcovering | Schumacher".
+ DRY RUN by default; --apply writes live (PUT title only). Read-modify is title-only, idempotent. */
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// collapse any run of Wallcovering(s) Wallcovering(s)[ ...] → single "Wallcovering"
+function fixTitle(t) {
+ let f = t.replace(/\bWallcoverings?\s+Wallcoverings?\b/gi, 'Wallcovering');
+ f = f.replace(/\s{2,}/g, ' ').replace(/\s+\|/g, ' |').trim();
+ return f;
+}
+
+async function api(p, opts = {}, tries = 5) {
+ for (let i = 0; i < tries; i++) {
+ const r = await fetch(`https://${STORE}/admin/api/2024-10${p}`, { ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) } });
+ if (r.status === 429 || r.status >= 500) { await sleep(1500 * (i + 1)); continue; }
+ await sleep(90); return r;
+ }
+ throw new Error('api fail ' + p);
+}
+async function getAll() {
+ let url = `/products.json?vendor=Schumacher&limit=250&fields=id,title,status`;
+ const out = [];
+ while (url) {
+ const r = await api(url); const link = r.headers.get('Link') || '';
+ out.push(...((await r.json()).products || []));
+ const m = link.split(',').find(s => s.includes('rel="next"'));
+ url = m ? m.slice(m.indexOf('<') + 1, m.indexOf('>')).replace(/^https:\/\/[^/]+\/admin\/api\/[^/]+/, '') : null;
+ }
+ return out;
+}
+
+(async () => {
+ const all = await getAll();
+ const todo = all.map(p => ({ ...p, fixed: fixTitle(p.title) })).filter(p => p.fixed !== p.title);
+ console.log(`Schumacher: ${all.length} | titles to fix: ${todo.length} | mode: ${APPLY ? 'APPLY' : 'DRY RUN'}\n`);
+ todo.slice(0, 10).forEach(p => console.log(` ${p.title}\n → ${p.fixed}\n`));
+ if (!APPLY) { console.log(`DRY RUN — re-run with --apply to write ${todo.length} titles.`); return; }
+ let ok = 0, fail = 0;
+ for (const p of todo) {
+ try {
+ const r = await api(`/products/${p.id}.json`, { method: 'PUT', body: JSON.stringify({ product: { id: p.id, title: p.fixed } }) });
+ if (r.ok) { ok++; if (ok % 50 === 0) console.log(` …${ok}/${todo.length}`); }
+ else { fail++; console.log(` FAIL ${p.id} ${r.status}`); }
+ } catch (e) { fail++; console.log(` ERR ${p.id} ${e.message}`); }
+ }
+ console.log(`\nDONE — ${ok} fixed, ${fail} failed.`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/fix-wbs-width.py b/scripts/fix-wbs-width.py
new file mode 100644
index 0000000..2b63086
--- /dev/null
+++ b/scripts/fix-wbs-width.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+"""
+Fix WBS- (Hollywood Wallcoverings / Astek) product width.
+Steve 2026-06-17: "all WBS- are 36" wide" — every active product whose variant
+SKU starts WBS- was stored at the wrong width (54"); set custom.width = 36".
+Authoritative-overwrite (not fill-blanks) because 54" is a known systematic error.
+Idempotent + verifiable. $0 (Shopify Admin GraphQL).
+
+Run: python3 scripts/fix-wbs-width.py # default WIDTH=36", PREFIX=WBS-
+Env: WIDTH (default '36\"'), PREFIX (default 'WBS-'), DRYRUN=1 to only report.
+"""
+import os,sys,json,urllib.request,time
+from collections import Counter
+
+SHOP="designer-laboratory-sandbox.myshopify.com"
+WIDTH=os.environ.get("WIDTH",'36"')
+PREFIX=os.environ.get("PREFIX","WBS-")
+DRYRUN=os.environ.get("DRYRUN")=="1"
+
+def _token():
+ for p in (os.path.join(os.path.dirname(__file__),"..",".env"), os.path.expanduser("~/Projects/secrets-manager/.env")):
+ try:
+ for ln in open(p):
+ if ln.startswith("SHOPIFY_ADMIN_TOKEN="): return ln.split("=",1)[1].strip()
+ except FileNotFoundError: pass
+ sys.exit("no SHOPIFY_ADMIN_TOKEN")
+TOKEN=_token()
+URL=f"https://{SHOP}/admin/api/2024-10/graphql.json"
+def gql(q,v=None):
+ req=urllib.request.Request(URL,data=json.dumps({"query":q,"variables":v or {}}).encode(),
+ headers={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"})
+ return json.load(urllib.request.urlopen(req,timeout=40))
+
+Q='''query($c:String,$q:String){ products(first:100, after:$c, query:$q){
+ pageInfo{hasNextPage endCursor} nodes{ id handle w:metafield(namespace:"custom",key:"width"){value} } } }'''
+cur=None; prods={}
+while True:
+ p=gql(Q,{"c":cur,"q":f"sku:{PREFIX}* status:active"})["data"]["products"]
+ for n in p["nodes"]: prods[n["id"]]={"handle":n["handle"],"old":(n.get("w") or {}).get("value")}
+ if not p["pageInfo"]["hasNextPage"]: break
+ cur=p["pageInfo"]["endCursor"]; time.sleep(0.3)
+ids=list(prods)
+print(f"{PREFIX} active products: {len(ids)} | old width dist: {dict(Counter(v['old'] for v in prods.values()))}")
+if DRYRUN: print("DRYRUN — no writes"); sys.exit(0)
+
+M='mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ metafields{key} userErrors{field message} } }'
+done=errs=0
+for i in range(0,len(ids),25):
+ batch=[{"ownerId":g,"namespace":"custom","key":"width","type":"single_line_text_field","value":WIDTH} for g in ids[i:i+25]]
+ r=gql(M,{"m":batch}).get("data",{}).get("metafieldsSet",{})
+ done+=len(r.get("metafields") or []); ue=r.get("userErrors") or []
+ if ue: errs+=len(ue); print(" err:",ue[:2])
+ time.sleep(0.4)
+print(f"SET custom.width={WIDTH} on {done} metafields (errors={errs})")
diff --git a/scripts/fleet-dedup-handle.js b/scripts/fleet-dedup-handle.js
new file mode 100644
index 0000000..6ade337
--- /dev/null
+++ b/scripts/fleet-dedup-handle.js
@@ -0,0 +1,74 @@
+#!/usr/bin/env node
+/* READ-ONLY bulletproof fleet dup detector. Bulk-scans ALL active products and flags TRUE dups by
+ two high-confidence signals only (no SKU-garbage false positives):
+ (1) HANDLE-SUFFIX: handle `base-N` exists alongside active `base`, SAME vendor + SAME title-key.
+ Shopify only mints `-N` handles on collision, so this is a definitive duplicate.
+ (2) COLORWAY-SKU: same vendor + same manufacturer_sku + same title-key, where the SKU is a real
+ article number (contains BOTH a separator . or / AND a digit) — excludes maker-name skus
+ like SANCAR/TRUE/DONGHIA that pollute the naive grouping.
+ Writes /tmp/fleet_dedup.csv (keeper = base / non-suffixed / cleaner handle). NO writes. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.write(JSON.stringify({query:q}));rq.end();});}
+function dl(u){return new Promise((res,rej)=>{https.get(u,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const titleKey=t=>norm(t).replace(/\s*[-#]\s*\d+$/,'');
+const isSample=o=>(o||[]).some(x=>String(x.value).toLowerCase()==='sample');
+const fmt=iso=>{ if(!iso) return ''; return new Date(iso).toLocaleString('en-US',{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); };
+const realSku=s=>/[.\/]/.test(s)&&/\d/.test(s); // article-number-shaped, not a maker word
+
+(async()=>{
+ const BULK=`mutation{ bulkOperationRunQuery(query:"""
+ { products(query:"status:active"){ edges{ node{ id handle title vendor createdAt
+ metafield(namespace:"custom",key:"manufacturer_sku"){ value }
+ variants{ edges{ node{ price selectedOptions{ value } } } } } } } }
+ """){ bulkOperation{ id } userErrors{ field message } } }`;
+ const k=await gql(BULK); const ue=k.data?.bulkOperationRunQuery?.userErrors||[];
+ if(ue.length){ console.log('cannot start bulk:',JSON.stringify(ue)); process.exit(1); }
+ console.log('bulk started; polling...'); let url=null;
+ for(let i=0;i<240;i++){ const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`); const op=s.data.currentBulkOperation;
+ if(i%6===0) console.log(` ${op.status} obj=${op.objectCount||0}`);
+ if(op.status==='COMPLETED'){ url=op.url; break; } if(op.status==='FAILED'){ console.log('FAILED',op.errorCode); process.exit(1); } await sleep(5000); }
+ if(!url){ console.log('no url'); process.exit(1); }
+ const data=await dl(url);
+ const prod={}, vbyp={};
+ for(const n of data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l))){
+ if(n.id&&n.id.includes('/Product/')) prod[n.id]={gid:n.id.split('/').pop(),handle:n.handle,title:n.title,vendor:n.vendor,createdAt:n.createdAt,sku:norm(n.metafield?.value)};
+ else if(n.__parentId&&n.price!==undefined) (vbyp[n.__parentId]=vbyp[n.__parentId]||[]).push(n);
+ }
+ const all=Object.entries(prod).map(([pid,p])=>{ const reals=(vbyp[pid]||[]).map(v=>({pr:parseFloat(v.price),sm:isSample(v.selectedOptions)})).filter(v=>!v.sm&&v.pr>5);
+ return {...p, price:reals.length?Math.max(...reals.map(v=>v.pr)):null}; });
+ const byHandle={}; all.forEach(p=>byHandle[p.handle]=p);
+ const clusters={}; // keyed -> {keeper, dups:[]}
+ const claimed=new Set();
+
+ // (1) HANDLE-SUFFIX dups
+ for(const p of all){ const m=p.handle.match(/^(.+)-(\d+)$/); if(!m) continue;
+ const base=byHandle[m[1]]; if(!base) continue;
+ if(norm(base.vendor)!==norm(p.vendor)) continue;
+ if(titleKey(base.title)!==titleKey(p.title)) continue;
+ const key='H:'+base.handle; (clusters[key]=clusters[key]||{keeper:base,dups:[]});
+ clusters[key].dups.push(p); claimed.add(p.gid); claimed.add(base.gid);
+ }
+ // (2) COLORWAY-SKU dups (real article-number skus only), excluding anything already handle-claimed
+ const bySku={}; for(const p of all){ if(!realSku(p.sku)) continue; const key=norm(p.vendor)+'|'+p.sku+'|'+titleKey(p.title); (bySku[key]=bySku[key]||[]).push(p); }
+ for(const [key,arr] of Object.entries(bySku)){ if(arr.length<2) continue;
+ if(arr.every(p=>claimed.has(p.gid))) continue;
+ const ranked=arr.slice().sort((a,b)=> ( /-\d+$/.test(a.handle)?0:1)-(/-\d+$/.test(b.handle)?0:1) || (b.price||0)-(a.price||0) || new Date(b.createdAt)-new Date(a.createdAt));
+ const keeper=ranked[0];
+ clusters['S:'+key]={keeper,dups:ranked.slice(1).filter(p=>p.gid!==keeper.gid)};
+ }
+
+ const out=['signal,vendor,sku,dup_id,dup_handle,keep_id,keep_handle,keep_price,created'];
+ let n=0; const perV={};
+ for(const [key,c] of Object.entries(clusters)){ if(!c.dups.length) continue;
+ for(const d of c.dups){ n++; perV[d.vendor]=(perV[d.vendor]||0)+1;
+ out.push(`${key[0]},${d.vendor},${d.sku},${d.gid},${d.handle},${c.keeper.gid},${c.keeper.handle},${c.keeper.price??''},"${fmt(d.createdAt)}"`); }
+ }
+ fs.writeFileSync('/tmp/fleet_dedup.csv',out.join('\n'));
+ console.log(`\n=== FLEET TRUE-DUP SWEEP (bulletproof: handle-suffix + real-sku, READ-ONLY) ===`);
+ console.log(`active scanned: ${all.length} | dup products to remove: ${n}`);
+ console.log('per vendor:'); for(const [v,c] of Object.entries(perV).sort((a,b)=>b[1]-a[1])) console.log(` ${v.padEnd(24)} ${c}`);
+ console.log(`\nlist -> /tmp/fleet_dedup.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/gimmersta-romo-rolls/run.sh b/scripts/gimmersta-romo-rolls/run.sh
new file mode 100755
index 0000000..9789c5a
--- /dev/null
+++ b/scripts/gimmersta-romo-rolls/run.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+# Paced daily Romo + Sandberg (Gimmersta) roll-build runner.
+# GATE: only runs once the default-variant fix is PROVEN live (romo-verify .passed sentinel).
+# Budget-capped (shared 'roll' slice via budget.cjs) + resumable (per-builder done files), so
+# it self-paces over however many days the backlog needs. Idempotent: re-running is safe.
+set -euo pipefail
+# launchd minimal-PATH fix (node/budget.cjs need /usr/local/bin) — mirrors run-cadence-hourly.sh.
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH"
+ROOT=/Users/macstudio3/Projects/designerwallcoverings
+cd "$ROOT"
+LOG=/tmp/gimmersta-romo-rolls.log
+ts() { date '+%Y-%m-%d %H:%M:%S'; }
+echo "[$(ts)] === paced roll-build run ===" >> "$LOG"
+
+# Shared kill-switch (2026-06-19): this job previously ignored it entirely.
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "[$(ts)] kill-switch present — abort" >> "$LOG"; exit 0; }
+
+if [ ! -f "$ROOT/scripts/romo-verify/.passed" ]; then
+ echo "[$(ts)] GATE: romo-verify .passed sentinel absent — fix not yet verified live; skipping." >> "$LOG"
+ exit 0
+fi
+
+NODE=/opt/homebrew/bin/node
+
+# Shared variant-budget gate (2026-06-19, roll-trap fix): these are ROLL builders —
+# build-romo-rolls.mjs / build-sandberg-rolls.mjs gate internally on take('roll',1). In
+# upload-priority mode roll cap=0, so the builders no-op by design. The earlier half-fix gated on
+# take('upload',…), DEBITING the cadence uploader's slice for variants these builders can't create
+# (leaked upload budget). FIX: NON-CONSUMING remaining('roll') read → exit 0 cleanly when roll is
+# 0, with NO upload debit. When roll caps are re-prioritized (>0), this falls through and the
+# builders run (each does its own take('roll',…)). remaining() is read-only (never calls save()).
+BUDGET="$ROOT/scripts/variant-budget/budget.cjs"
+ROLLBUD=$($NODE "$BUDGET" remaining roll 2>/dev/null || echo 0)
+if [ "${ROLLBUD:-0}" -lt 1 ]; then echo "[$(ts)] roll budget 0 (upload-priority) — skip, no upload debit" >> "$LOG"; exit 0; fi
+GRANT="$ROLLBUD"
+echo "[$(ts)] roll budget=$GRANT — clamping all builders to it (each does its own take('roll'))" >> "$LOG"
+# Romo-group: ALL six vendors using the EXACT Shopify vendor strings (reconciled 2026-06-18 —
+# "Kirkby Design"/"Zinc Textile", not "Kirkby"/"Zinc"). Live buildable backlog is small (~10);
+# most Romo products already carry roll variants. Sandberg: 312 website_2026 fresh costs (599
+# stale held). High ROLL_CAP — budget.cjs is the real limiter; each builder stops at the slice.
+ROMO_VENDORS=("Villa Nova" "Romo" "Black Edition" "Kirkby Design" "Zinc Textile" "Mark Alexander")
+for V in "${ROMO_VENDORS[@]}"; do
+ echo "[$(ts)] --- build-romo-rolls.mjs ($V) ---" >> "$LOG"
+ ROLL_VENDOR="$V" ROLL_CAP="$GRANT" $NODE "$ROOT/build-romo-rolls.mjs" >> "$LOG" 2>&1 || echo "[$(ts)] romo($V) exited $?" >> "$LOG"
+done
+echo "[$(ts)] --- build-sandberg-rolls.mjs ---" >> "$LOG"
+ROLL_CAP="$GRANT" $NODE "$ROOT/build-sandberg-rolls.mjs" >> "$LOG" 2>&1 || echo "[$(ts)] sandberg exited $?" >> "$LOG"
+echo "[$(ts)] === run complete ===" >> "$LOG"
diff --git a/scripts/gmc-enrich/viewer.mjs b/scripts/gmc-enrich/viewer.mjs
new file mode 100644
index 0000000..a2c97c8
--- /dev/null
+++ b/scripts/gmc-enrich/viewer.mjs
@@ -0,0 +1,76 @@
+#!/usr/bin/env node
+// GMC enrichment loop — live progress viewer (zero-dep). Reads /tmp state files
+// written by the gap scan + the enrichment loop. Open http://localhost:9933
+import http from 'http';
+import fs from 'fs';
+const PORT = 9933;
+const STATE = '/tmp/gmc_enrich_state.json'; // gap-scan stats + per-vendor
+const PROG = '/tmp/gmc_enrich_progress.json'; // live loop progress + cost
+const CAP = 25; // $ spend cap
+
+const readJSON = (p, d) => { try { return JSON.parse(fs.readFileSync(p, 'utf8')); } catch { return d; } };
+
+const PAGE = `<!doctype html><html><head><meta charset="utf-8"><title>GMC Enrichment — Live</title>
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<style>
+ :root{--bg:#0b0e14;--panel:#11151f;--ink:#e7ecf3;--dim:#8a94a6;--line:#1f2735;--ok:#34d399;--warn:#fbbf24;--bad:#f87171;--accent:#34f4ce}
+ *{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Arial}
+ header{padding:18px 26px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#0b0e14;z-index:5}
+ h1{margin:0;font-size:19px}h1 small{color:var(--dim);font-weight:400;font-size:12.5px;margin-left:10px}
+ main{max-width:1180px;margin:0 auto;padding:20px 26px 70px}
+ .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:6px 0 20px}
+ .card{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:13px 15px}
+ .card .k{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}
+ .card .v{font-size:26px;font-weight:700;margin-top:3px}
+ .bar{height:13px;background:#0a0e16;border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-top:8px}
+ .bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),#22d3a8)}
+ .cost .v{color:var(--accent)} .cost.warn .v{color:var(--warn)} .cost.over .v{color:var(--bad)}
+ h2{font-size:13px;letter-spacing:.05em;text-transform:uppercase;color:var(--dim);margin:24px 0 8px}
+ table{width:100%;border-collapse:collapse;font-size:13px}
+ th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line)}
+ th{color:var(--dim);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.05em}
+ td.n{font:12px ui-monospace,monospace;text-align:right}
+ .pill{font-size:10px;padding:1px 7px;border-radius:10px;border:1px solid var(--line);color:var(--dim)}
+ .priv{color:#a78bfa;border-color:#3b2f5e}
+ .feed{font:12px ui-monospace,monospace;color:#9fb0c9;max-height:240px;overflow:auto;background:#0a0e16;border:1px solid var(--line);border-radius:9px;padding:10px;white-space:pre-wrap}
+ .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);animation:p 1.5s infinite;margin-right:6px}
+ @keyframes p{0%,100%{opacity:.3}50%{opacity:1}}
+</style></head><body>
+<header><h1><span class="dot"></span>GMC Enrichment <small id="meta">loading…</small></h1></header>
+<main>
+ <div class="cards" id="cards"></div>
+ <h2>Spend</h2><div class="card cost" id="costcard"><div class="k">cost / cap</div><div class="v" id="costv">$0.00 / $${CAP}</div><div class="bar"><i id="costbar" style="width:0%"></i></div></div>
+ <h2>Gap by vendor</h2><table id="vtab"><thead><tr><th>Vendor</th><th>On feed</th><th>Need mfr#</th><th>Need specs</th><th>Status</th></tr></thead><tbody id="vbody"></tbody></table>
+ <h2>Live loop feed</h2><div class="feed" id="feed">waiting for loop…</div>
+</main>
+<script>
+async function load(){
+ let s={},p={};
+ try{ s=await (await fetch('/api/state')).json(); }catch(e){}
+ try{ p=await (await fetch('/api/progress')).json(); }catch(e){}
+ const st=s.stats||{};
+ document.getElementById('meta').textContent = (s.queueLen!=null? s.queueLen+' in work queue · ':'') + 'updated '+new Date().toLocaleTimeString();
+ const cards=[['On feed (unpublished set)',st.total],['Already complete',st.complete],['Need mfr#',st.needMfr],['Need specs',st.needSpec],['Need image',st.needImg],['Private (no ext mfr#)',st.privateNoMfr]];
+ document.getElementById('cards').innerHTML=cards.map(([k,v])=>'<div class="card"><div class="k">'+k+'</div><div class="v">'+(v==null?'—':v.toLocaleString())+'</div></div>').join('');
+ // cost
+ const cost=(p.costUsd||0), cap=${CAP};
+ const cc=document.getElementById('costcard'); cc.className='card cost'+(cost>=cap?' over':cost>=cap*0.8?' warn':'');
+ document.getElementById('costv').textContent='$'+cost.toFixed(4)+' / $'+cap;
+ document.getElementById('costbar').style.width=Math.min(100,cost/cap*100)+'%';
+ // vendors
+ const vb=document.getElementById('vbody'); const vs=(s.byVendor||[]).filter(o=>o.needMfr||o.needSpec||o.priv);
+ vb.innerHTML=vs.map(o=>{const done=(p.doneVendors||{})[o.vendor];
+ const status=o.priv?'<span class="pill priv">private</span>':done?('<span class="pill" style="color:#34d399">done '+done+'</span>'):'<span class="pill">queued</span>';
+ return '<tr><td>'+o.vendor+'</td><td class="n">'+o.n+'</td><td class="n">'+(o.needMfr||0)+'</td><td class="n">'+(o.needSpec||0)+'</td><td>'+status+'</td></tr>';}).join('') || '<tr><td colspan=5 style="color:#8a94a6">no gaps / scan running…</td></tr>';
+ // feed
+ document.getElementById('feed').textContent = (p.log||[]).slice(-60).join('\\n') || 'waiting for loop…';
+}
+load(); setInterval(load, 4000);
+</script></body></html>`;
+
+http.createServer((req, res) => {
+ if (req.url === '/' ) { res.writeHead(200, {'content-type':'text/html'}); return res.end(PAGE); }
+ if (req.url === '/api/state') { res.writeHead(200,{'content-type':'application/json'}); return res.end(JSON.stringify(readJSON(STATE,{}))); }
+ if (req.url === '/api/progress') { res.writeHead(200,{'content-type':'application/json'}); return res.end(JSON.stringify(readJSON(PROG,{costUsd:0,log:[]}))); }
+ res.writeHead(404); res.end('nope');
+}).listen(PORT, () => console.log(`GMC enrichment viewer → http://localhost:${PORT}`));
diff --git a/scripts/gmc-feed-guard/gmc-feed-guard.mjs b/scripts/gmc-feed-guard/gmc-feed-guard.mjs
new file mode 100644
index 0000000..94d8454
--- /dev/null
+++ b/scripts/gmc-feed-guard/gmc-feed-guard.mjs
@@ -0,0 +1,39 @@
+// gmc-feed-guard (c57) — READ-ONLY standing canary. Counts ACTIVE products whose
+// min-variant price <= $4.25 that are STILL published on the Google & YouTube
+// channel (pub 29646651457). After the c-GMC surgical exclusion this should be ~0;
+// any reappearance = a re-leak (new import re-published a $4.25 product to Google).
+// Hardened: retry/backoff on non-JSON/429/5xx (fixes the c55 crash). Writes
+// data/latest.json (c34 heartbeat). FAIL if still_on >0. $0.
+import fs from 'fs';
+const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const API='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const GOOG='gid://shopify/Publication/29646651457';
+const DIR=process.env.HOME+'/Projects/dw-yolo-loop/scripts/gmc-feed-guard/data';
+const Q=process.env.HOME+'/.claude/yolo-queue';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){
+ for(let a=0;a<7;a++){
+ try{ const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}}),signal:AbortSignal.timeout(20000)});
+ if(r.status===429||r.status>=500){await sleep(2500*(a+1));continue;}
+ const txt=await r.text(); let j; try{j=JSON.parse(txt);}catch(e){await sleep(2500*(a+1));continue;} // non-JSON → retry (the c55 crash)
+ if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2500*(a+1));continue;}
+ return j;
+ }catch(e){ await sleep(2000*(a+1)); }
+ }
+ throw new Error('exhausted retries');
+}
+let cur=null,scanned=0,on425=0,pages=0,retries=0; const offenders=[]; const t0=Date.now();
+do{
+ const d=await gql(`query($c:String){products(first:150,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{handle vendor onGoogle:publishedOnPublication(publicationId:"${GOOG}") variants(first:60){nodes{price}}}}}`,{c:cur});
+ const pg=d.data.products;
+ for(const p of pg.nodes){ scanned++; const mn=Math.min(...p.variants.nodes.map(v=>parseFloat(v.price)).filter(x=>!isNaN(x))); if(mn<=4.25 && p.onGoogle){on425++; const hasReal=p.variants.nodes.some(v=>parseFloat(v.price)>4.25); if(offenders.length<20)offenders.push((hasReal?'[sample-leak] ':'[real-$4.25] ')+p.handle+' ['+p.vendor+']');} }
+ pages++; if(pages%80===0)process.stderr.write(` ...${scanned} scanned, still-on=${on425}\n`);
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+const verdict = on425>0 ? 'FAIL' : 'PASS';
+const out={generated_at:new Date().toISOString(), status:verdict, headline:`$4.25-still-on-Google=${on425} of ${scanned} active (target 0)`, scanned, still_on_425:on425, offenders, elapsed_s:((Date.now()-t0)/1000)|0};
+fs.mkdirSync(DIR,{recursive:true}); fs.writeFileSync(DIR+'/latest.json',JSON.stringify(out,null,2));
+fs.writeFileSync(Q+'/gmc-feed-guard-2026-06-17.json',JSON.stringify(out,null,2));
+console.log(`[gmc-feed-guard] ${verdict} — ${out.headline} (full catalog, ${out.elapsed_s}s)`);
+if(on425) offenders.forEach(o=>console.log(' ⚠️ re-leak: '+o));
+process.exit(verdict==='FAIL'?2:0);
diff --git a/scripts/gmc-verify/gmc-verify.mjs b/scripts/gmc-verify/gmc-verify.mjs
new file mode 100644
index 0000000..4ad0164
--- /dev/null
+++ b/scripts/gmc-verify/gmc-verify.mjs
@@ -0,0 +1,27 @@
+import fs from 'fs';
+const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const API='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const GOOG='gid://shopify/Publication/29646651457';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2000);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2000);continue;}return j;}throw new Error('throttled');}
+// 1) sample 20 ACTIVE products whose min-variant <=4.25 → should now be OFF Google
+let j=await gql(`{products(first:60,query:"status:active"){nodes{handle onGoogle:publishedOnPublication(publicationId:"${GOOG}") variants(first:60){nodes{price}}}}}`);
+let sample425=[], sampleReal=[];
+for(const p of j.data.products.nodes){
+ const mn=Math.min(...p.variants.nodes.map(v=>parseFloat(v.price)).filter(x=>!isNaN(x)));
+ if(mn<=4.25 && sample425.length<20) sample425.push(p);
+ else if(mn>4.25 && sampleReal.length<15) sampleReal.push(p);
+}
+const offGoogle425=sample425.filter(p=>!p.onGoogle).length;
+const stillOnReal=sampleReal.filter(p=>p.onGoogle).length;
+console.log(`=== GMC exclusion verification (live) ===`);
+console.log(`$4.25 sample (n=${sample425.length}): OFF Google = ${offGoogle425}/${sample425.length} ${offGoogle425===sample425.length?'✅ all excluded':'⚠️ some still on'}`);
+console.log(`real-priced sample (n=${sampleReal.length}): STILL on Google = ${stillOnReal}/${sampleReal.length} ${stillOnReal===sampleReal.length?'✅ all retained':'⚠️ some dropped'}`);
+// 2) catalog-wide count: how many $4.25 still on Google (should be ~0)
+let cur=null,on425=0,scanned=0,pages=0;
+do{ const d=await gql(`query($c:String){products(first:150,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{onGoogle:publishedOnPublication(publicationId:"${GOOG}") variants(first:60){nodes{price}}}}}`,{c:cur});
+ for(const p of d.products?.nodes||d.data.products.nodes){ scanned++; const mn=Math.min(...p.variants.nodes.map(v=>parseFloat(v.price)).filter(x=>!isNaN(x))); if(mn<=4.25 && p.onGoogle) on425++; }
+ pages++; const pg=d.data?d.data.products:d.products; cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null; if(pages%80===0)process.stderr.write(` ...${scanned} scanned, still-on=${on425}\n`);
+}while(cur);
+console.log(`\ncatalog-wide: ${scanned} active scanned | $4.25-still-on-Google = ${on425} (target ~0)`);
+fs.writeFileSync(process.env.HOME+'/.claude/yolo-queue/gmc-verify-2026-06-16.json',JSON.stringify({sample425:sample425.length,offGoogle425,sampleReal:sampleReal.length,stillOnReal,scanned,still_on_425:on425},null,2));
diff --git a/scripts/google-feed/apply-unpublish.mjs b/scripts/google-feed/apply-unpublish.mjs
new file mode 100644
index 0000000..0db23b8
--- /dev/null
+++ b/scripts/google-feed/apply-unpublish.mjs
@@ -0,0 +1,63 @@
+#!/usr/bin/env node
+/**
+ * apply-unpublish.mjs — Path A executor: unpublish the excluded set from the
+ * Google & YouTube sales channel so only the clean feed reaches Google.
+ *
+ * ⚠️ STEVE-GATED CUSTOMER-FACING WRITE. Default mode is DRY-RUN (no writes).
+ * A real run requires BOTH: --apply AND --i-am-steve
+ * and even then it only unpublishes from the GOOGLE publication — it never
+ * touches Online Store or any other channel, never deletes/archives, never
+ * changes prices. Fully reversible (re-publish to re-list).
+ *
+ * Reads: data/google-feed/unpublish-list.csv (from prep-actions.mjs)
+ * Filter: --reason=<class> to stage a subset (e.g. --reason=roll_price_is to start
+ * with just the $4.25-roll bugs). Omit to target the whole excluded set.
+ * Safety: idempotent — checks each product's Google-channel publish state and skips
+ * ones already unpublished; batches of 50 with throttle pacing.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+
+const GOOGLE_PUBLICATION = 'gid://shopify/Publication/29646651457'; // Google & YouTube
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const VER = '2024-10';
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k,v]=a.replace(/^--/,'').split('='); return [k, v===undefined?true:v]; }));
+const APPLY = args.apply === true && args['i-am-steve'] === true;
+const REASON = args.reason || null;
+const LIMIT = args.limit ? parseInt(args.limit,10) : Infinity;
+
+const TOKEN = (fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+if (!TOKEN) { console.error('no token'); process.exit(1); }
+const URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r=>setTimeout(r,ms));
+async function gql(query, variables){ for(let a=0;a<8;a++){ let j; try{ const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query,variables})}); j=await r.json(); }catch(e){ await sleep(1500*(a+1)); continue; } if(j.errors){ if(JSON.stringify(j.errors).includes('THROTTLED')){ await sleep(2000*(a+1)); continue; } throw new Error(JSON.stringify(j.errors)); } const t=j.extensions?.cost?.throttleStatus; if(t&&t.currentlyAvailable<400) await sleep(1200); return j.data; } throw new Error('retries'); }
+
+// load list
+const rows = fs.readFileSync(path.join(process.cwd(),'data','google-feed','unpublish-list.csv'),'utf8').trim().split('\n').slice(1)
+ .map(l => { const m=l.match(/^(\d+),/); return { id: m&&m[1], reasonClass: l.split(',')[3] }; })
+ .filter(x => x.id && (!REASON || x.reasonClass === REASON))
+ .slice(0, LIMIT);
+
+console.log(`apply-unpublish — mode: ${APPLY ? '⚠️ LIVE APPLY' : 'DRY-RUN (no writes)'}`);
+console.log(`target publication: Google & YouTube (${GOOGLE_PUBLICATION})`);
+console.log(`candidates: ${rows.length}${REASON ? ` (reason=${REASON})` : ' (entire excluded set)'}`);
+if (!APPLY) {
+ console.log('\nDRY-RUN: nothing will be unpublished. To execute (Steve only):');
+ console.log(` node apply-unpublish.mjs --apply --i-am-steve${REASON?` --reason=${REASON}`:''}`);
+ process.exit(0);
+}
+
+// LIVE path — idempotent unpublish from Google publication only
+const M = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishableUnpublish(id:$id, input:$pubs){ userErrors{ field message } } }`;
+let done=0, skipped=0, errs=0;
+for (const r of rows) {
+ const gid = `gid://shopify/Product/${r.id}`;
+ try {
+ const d = await gql(M, { id: gid, pubs: [{ publicationId: GOOGLE_PUBLICATION }] });
+ const ue = d.publishableUnpublish?.userErrors || [];
+ if (ue.length) { errs++; if (errs<=10) console.log(' err', r.id, JSON.stringify(ue)); }
+ else done++;
+ } catch(e) { errs++; if (errs<=10) console.log(' EX', r.id, e.message); }
+ if ((done+errs) % 200 === 0) console.log(` progress: ${done} unpublished, ${errs} err`);
+}
+console.log(`\nDONE — unpublished ${done}, skipped ${skipped}, errors ${errs}`);
diff --git a/scripts/google-feed/calibrate-price.mjs b/scripts/google-feed/calibrate-price.mjs
new file mode 100644
index 0000000..ddb0565
--- /dev/null
+++ b/scripts/google-feed/calibrate-price.mjs
@@ -0,0 +1,65 @@
+#!/usr/bin/env node
+// calibrate-price.mjs — READ-ONLY. Compare dw_unified mirror price vs LIVE Shopify
+// variant prices for a sample of products, to decide whether the clean Google feed
+// must be driven by live Shopify data (yes if the mirror is stale).
+// No writes. No status changes.
+import fs from 'node:fs';
+
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const VER = '2024-10';
+const envTxt = fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (envTxt.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
+if (!TOKEN) { console.error('no token'); process.exit(1); }
+const URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables) {
+ for (let attempt = 0; attempt < 6; attempt++) {
+ const res = await fetch(URL, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { if (JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000*(attempt+1)); continue; } throw new Error(JSON.stringify(j.errors)); }
+ return j.data;
+ }
+ throw new Error('throttle');
+}
+
+const ids = fs.readFileSync('/tmp/cal_ids.csv','utf8').trim().split('\n')
+ .map(l => { const [grp, gid] = l.split(','); return { grp, gid }; }).filter(x => x.gid);
+
+const Q = `query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product {
+ id title status vendor
+ variants(first:20){ nodes { title sku price } } } } }`;
+
+const isSample = (v) => /(sample|memo|swatch)/i.test([v.title, v.sku].join(' '));
+
+(async () => {
+ const data = await gql(Q, { ids: ids.map(x => x.gid) });
+ const byId = new Map(ids.map(x => [x.gid, x.grp]));
+ const rows = [];
+ for (const p of data.nodes) {
+ if (!p) continue;
+ const grp = byId.get(p.id);
+ const vs = p.variants.nodes;
+ const roll = vs.filter(v => !isSample(v)).map(v => parseFloat(v.price)).filter(Number.isFinite);
+ const samp = vs.filter(v => isSample(v)).map(v => parseFloat(v.price)).filter(Number.isFinite);
+ rows.push({ grp, id: p.id.split('/').pop(), title: (p.title||'').slice(0,42), vendor: p.vendor,
+ rollPrices: roll, samplePrices: samp,
+ rollMax: roll.length ? Math.max(...roll) : null });
+ }
+ console.log('mirror_grp | live_roll_max | live_sample | vendor | title');
+ console.log('-'.repeat(90));
+ for (const r of rows) {
+ console.log(`${r.grp.padEnd(5)} | ${String(r.rollMax ?? 'NONE').padStart(9)} | ${String(r.samplePrices[0] ?? '-').padStart(7)} | ${(r.vendor||'').slice(0,18).padEnd(18)} | ${r.title}`);
+ }
+ const nullGrp = rows.filter(r => r.grp === 'NULL');
+ const p425Grp = rows.filter(r => r.grp === 'P425');
+ const fmt = (g) => {
+ const withRoll = g.filter(r => r.rollMax && r.rollMax > 10).length;
+ return `${withRoll}/${g.length} have a live roll price > $10`;
+ };
+ console.log('-'.repeat(90));
+ console.log('mirror NULL :', fmt(nullGrp));
+ console.log('mirror $4.25 :', fmt(p425Grp));
+})();
diff --git a/scripts/google-feed/feed-eligibility.mjs b/scripts/google-feed/feed-eligibility.mjs
new file mode 100644
index 0000000..c86a7a9
--- /dev/null
+++ b/scripts/google-feed/feed-eligibility.mjs
@@ -0,0 +1,218 @@
+#!/usr/bin/env node
+/**
+ * feed-eligibility.mjs — Build a CLEAN Google Merchant Center feed candidate set
+ * from LIVE Shopify data (not the stale dw_unified mirror), applying Steve's hard
+ * rules + a price floor + sample-variant segregation + private-label leak guard.
+ *
+ * WHY live-driven: calibrate-price.mjs proved the mirror `price` column is stale
+ * (mirror NULL/$4.25 -> live roll $34–$205). Pricing the feed off the mirror would
+ * wrongly drop ~54k correctly-priced products and could advertise the $4.25 SAMPLE
+ * variant. So the feed price = the ROLL variant's price, read live.
+ *
+ * OUTPUT (local files only — NOTHING is submitted to Google):
+ * data/google-feed/feed-clean.tsv — Merchant Center TSV of ELIGIBLE products
+ * data/google-feed/exclusions.json — every excluded product + reason
+ * data/google-feed/report.json — counts + reason breakdown + samples
+ *
+ * READ-ONLY against Shopify (GraphQL queries only). No writes, no status changes,
+ * no channel publish. Submitting/uploading the feed is a separate Steve-gated step.
+ *
+ * USAGE: node feed-eligibility.mjs [--limit=N] [--floor=10]
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const VER = '2024-10';
+const PUBLIC_DOMAIN = 'https://designerwallcoverings.com';
+const GOOGLE_CATEGORY = 'Hardware > Building Materials > Wallpaper'; // Google taxonomy 503739
+const args = Object.fromEntries(process.argv.slice(2).map(a => {
+ const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v];
+}));
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const FLOOR = args.floor ? parseFloat(args.floor) : 10;
+
+const envTxt = fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (envTxt.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
+if (!TOKEN) { console.error('no token'); process.exit(1); }
+const URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+// ---- cost map for Kravet MAP floor (from mirror; sparse is OK -> flagged unverified) ----
+const COST = new Map();
+for (const line of fs.readFileSync('/tmp/cost_map.tsv', 'utf8').trim().split('\n')) {
+ const [gid, cost] = line.split('\t');
+ if (gid) COST.set(gid, parseFloat(cost) || 0);
+}
+
+// ---- rule constants ----
+// Kravet-umbrella brands: must be >= wholesale x 1.5 (MAP). Showing the brand name is fine (DW is authorized).
+const KRAVET_FAMILY = ['kravet','lee jofa','groundworks','brunschwig','cole and son','cole & son',
+ 'gp j baker','gp & j baker','colefax','clarke and clarke','clarke & clarke','mulberry','threads',
+ 'baker lifestyle','andrew martin','nicolette mayer','aerin','barclay butera','thom filicia'];
+// PRIVATE-LABEL upstreams — these names must NEVER reach a customer surface (the feed).
+// Source: dw-leak-scanner / MEMORY. NOT the repped brands (Kravet/Thibaut/etc are shown by name).
+const PRIVATE_LABEL_LEAK = ['command54','command 54','wallquest','chesapeake','nextwall','next wall',
+ 'seabrook','brewster','desima','carlsten','nicolette mayer'];
+
+const norm = s => String(s == null ? '' : s).toLowerCase();
+const isSample = v => /(sample|memo|swatch)/i.test([v.title, v.sku].join(' ')) || /-sample$/i.test(v.sku || '');
+
+async function gql(query, variables) {
+ for (let attempt = 0; attempt < 8; attempt++) {
+ let res, j;
+ try {
+ res = await fetch(URL, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ j = await res.json();
+ } catch (e) { await sleep(1500 * (attempt + 1)); continue; }
+ if (j.errors) { if (JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (attempt + 1)); continue; } throw new Error(JSON.stringify(j.errors)); }
+ const t = j.extensions?.cost?.throttleStatus;
+ if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const QUERY = `
+query($cursor:String){
+ products(first:50, after:$cursor, query:"status:active"){
+ pageInfo{ hasNextPage endCursor }
+ nodes{
+ id handle title status vendor tags productType
+ featuredImage{ url }
+ mediaCount{ count }
+ variants(first:30){ nodes{ title sku price } }
+ widthGlobal: metafield(namespace:"global", key:"width"){ value }
+ widthCustom: metafield(namespace:"custom", key:"width"){ value }
+ widthDwc: metafield(namespace:"dwc", key:"width"){ value }
+ }
+ }
+}`;
+
+function evaluate(p) {
+ const reasons = [];
+ const flags = [];
+ const title = p.title || '';
+ const tagsBlob = (p.tags || []).join(' ');
+ const ctx = norm([p.vendor, title, tagsBlob, p.handle, p.productType].join(' '));
+ // Leak check runs ONLY over fields the feed actually emits (title/handle/vendor).
+ // A private-label name buried in tags/productType never reaches Google via this feed,
+ // so it's a catalog-hygiene issue (tag scrub), not a feed blocker. Calibrated 2026-06-15:
+ // of 988 tag-matches only 29 were real feed-field leaks.
+ const feedCtx = norm([p.vendor, title, p.handle].join(' '));
+ const variants = p.variants?.nodes || [];
+ const rolls = variants.filter(v => !isSample(v)).map(v => parseFloat(v.price)).filter(Number.isFinite);
+ const rollPrice = rolls.length ? Math.max(...rolls) : null;
+ const img = p.featuredImage?.url || null;
+ const hasImg = !!img || (p.mediaCount?.count || 0) > 0;
+ const width = (p.widthGlobal?.value || p.widthCustom?.value || p.widthDwc?.value || '').trim();
+
+ // ---- hard gates (exclude) ----
+ if (!hasImg) reasons.push('no_image');
+ if (rollPrice == null) reasons.push('no_roll_variant_price');
+ else if (rollPrice < FLOOR) reasons.push(`roll_price_below_floor_${rollPrice}`);
+ if (rollPrice === 4.25) reasons.push('roll_price_is_425_sampletrap');
+
+ // private-label leak -> only exclude if it reaches a FEED-emitted field
+ for (const tok of PRIVATE_LABEL_LEAK) {
+ if (feedCtx.includes(tok)) { reasons.push(`private_label_leak:${tok}`); break; }
+ }
+ // tags-only private-label name = feed-safe but a catalog-hygiene flag
+ if (!reasons.some(r => r.startsWith('private_label_leak'))) {
+ for (const tok of PRIVATE_LABEL_LEAK) {
+ if (ctx.includes(tok)) { flags.push(`tag_scrub_needed:${tok}`); break; }
+ }
+ }
+ // banned words
+ if (/\bwallpapers?\b/i.test(title)) reasons.push('title_says_wallpaper');
+ if (/\bunknown\b/i.test(title)) reasons.push('title_says_unknown');
+
+ // Kravet MAP floor (exclude only if we can PROVE it's below MAP; else flag)
+ const isKravet = KRAVET_FAMILY.some(k => ctx.includes(k));
+ if (isKravet && rollPrice != null) {
+ const cost = COST.get(p.id) || 0;
+ if (cost > 0) {
+ const mapFloor = cost * 1.5;
+ if (rollPrice + 1e-6 < mapFloor) reasons.push(`below_kravet_map_${rollPrice}_lt_${mapFloor.toFixed(2)}`);
+ } else {
+ flags.push('kravet_map_unverified_no_cost');
+ }
+ }
+
+ return { id: p.id.split('/').pop(), handle: p.handle, title, vendor: p.vendor || '',
+ rollPrice, img, width, eligible: reasons.length === 0, reasons, flags };
+}
+
+function tsvRow(r) {
+ // Merchant Center primary feed columns (tab-separated)
+ const desc = `${r.title}${r.width ? ' — ' + r.width + ' wide' : ''}`.replace(/\t|\n/g, ' ');
+ return [
+ r.id, // id
+ r.title.replace(/\t|\n/g, ' '), // title
+ desc, // description
+ `${PUBLIC_DOMAIN}/products/${r.handle}`, // link
+ r.img || '', // image_link
+ 'in stock', // availability
+ `${r.rollPrice.toFixed(2)} USD`, // price (ROLL, not sample)
+ r.vendor, // brand
+ 'new', // condition
+ r.id, // mpn
+ GOOGLE_CATEGORY, // google_product_category
+ 'Wallcovering', // product_type
+ ].join('\t');
+}
+
+(async () => {
+ const outDir = path.join(process.cwd(), 'data', 'google-feed');
+ fs.mkdirSync(outDir, { recursive: true });
+ const eligible = [], excluded = [];
+ const reasonTally = {}, flagTally = {}, vendorEligible = {};
+ let cursor = null, hasNext = true, scanned = 0;
+
+ while (hasNext && scanned < LIMIT) {
+ const data = await gql(QUERY, { cursor });
+ const page = data.products;
+ for (const p of page.nodes) {
+ if (scanned >= LIMIT) break;
+ scanned++;
+ const r = evaluate(p);
+ for (const f of r.flags) flagTally[f] = (flagTally[f] || 0) + 1;
+ if (r.eligible) {
+ eligible.push(r);
+ vendorEligible[r.vendor] = (vendorEligible[r.vendor] || 0) + 1;
+ } else {
+ excluded.push({ id: r.id, handle: r.handle, title: r.title, vendor: r.vendor, rollPrice: r.rollPrice, reasons: r.reasons });
+ for (const reason of r.reasons) {
+ const key = reason.replace(/:.+$/, '').replace(/_\d.+$/, '').replace(/_[0-9.]+_lt_[0-9.]+$/, '');
+ reasonTally[key] = (reasonTally[key] || 0) + 1;
+ }
+ }
+ }
+ hasNext = page.pageInfo.hasNextPage;
+ cursor = page.pageInfo.endCursor;
+ if (scanned % 1000 === 0) process.stderr.write(` scanned ${scanned} | eligible ${eligible.length} | excluded ${excluded.length}\n`);
+ }
+
+ // write feed TSV
+ const header = ['id','title','description','link','image_link','availability','price','brand','condition','mpn','google_product_category','product_type'].join('\t');
+ fs.writeFileSync(path.join(outDir, 'feed-clean.tsv'), header + '\n' + eligible.map(tsvRow).join('\n') + '\n');
+ fs.writeFileSync(path.join(outDir, 'exclusions.json'), JSON.stringify(excluded, null, 2));
+
+ const topVendors = Object.entries(vendorEligible).sort((a,b)=>b[1]-a[1]).slice(0,20).map(([v,c])=>({vendor:v,count:c}));
+ const report = {
+ generated_at_note: 'live Shopify pull, read-only',
+ shop: SHOP, api_version: VER, price_floor: FLOOR, public_domain: PUBLIC_DOMAIN,
+ scanned, eligible: eligible.length, excluded: excluded.length,
+ exclusion_reasons: Object.fromEntries(Object.entries(reasonTally).sort((a,b)=>b[1]-a[1])),
+ advisory_flags: flagTally,
+ top_eligible_vendors: topVendors,
+ sample_exclusions: excluded.slice(0, 25),
+ };
+ fs.writeFileSync(path.join(outDir, 'report.json'), JSON.stringify(report, null, 2));
+
+ console.log(JSON.stringify({ scanned, eligible: eligible.length, excluded: excluded.length,
+ exclusion_reasons: report.exclusion_reasons, advisory_flags: flagTally }, null, 2));
+ process.stderr.write(`WROTE ${outDir}/{feed-clean.tsv, exclusions.json, report.json}\n`);
+})();
diff --git a/scripts/google-feed/prep-actions.mjs b/scripts/google-feed/prep-actions.mjs
new file mode 100644
index 0000000..4c0d53f
--- /dev/null
+++ b/scripts/google-feed/prep-actions.mjs
@@ -0,0 +1,87 @@
+#!/usr/bin/env node
+/**
+ * prep-actions.mjs — turn the eligibility exclusions into two actionable artifacts.
+ * READ-ONLY. Writes local CSV/MD only. Nothing touches Shopify or Google.
+ *
+ * (a) PUNCH-LIST — the catalog DEFECTS worth fixing regardless of Google:
+ * · real feed-leaks (private-label name in title/handle/vendor)
+ * · roll variants genuinely priced $4.25 (the real sample-trap bug)
+ * (b) UNPUBLISH-LIST — the Path-A candidate set: products to unpublish from the
+ * Google & YouTube sales channel (everything excluded from the clean feed),
+ * grouped by reason so it can be staged. APPLYING it is a separate gated step
+ * (see apply-unpublish.mjs) — this only prepares the list.
+ *
+ * Reads: data/google-feed/exclusions.json
+ * Writes: punch-list.md, punch-list.csv, unpublish-list.csv (in data/google-feed/)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+
+const DIR = path.join(process.cwd(), 'data', 'google-feed');
+const STORE = 'designer-laboratory-sandbox';
+const adminLink = id => `https://admin.shopify.com/store/${STORE}/products/${id}`;
+const PRIVATE_LABEL_LEAK = ['command54','command 54','wallquest','chesapeake','nextwall','next wall',
+ 'seabrook','brewster','desima','carlsten','nicolette mayer'];
+
+const excl = JSON.parse(fs.readFileSync(path.join(DIR, 'exclusions.json'), 'utf8'));
+
+// ---- classify ----
+const isFeedLeak = x => {
+ const b = ((x.title||'') + ' ' + (x.vendor||'') + ' ' + (x.handle||'')).toLowerCase();
+ return PRIVATE_LABEL_LEAK.find(k => b.includes(k));
+};
+const reasonClass = r => r.replace(/:.+$/, '').replace(/_[0-9.]+$/, '').replace(/_[0-9.]+_lt_[0-9.]+$/, '');
+
+const feedLeaks = [];
+const price425 = [];
+for (const x of excl) {
+ const tok = x.reasons.some(r => r.startsWith('private_label_leak')) ? isFeedLeak(x) : null;
+ if (tok) feedLeaks.push({ ...x, leakToken: tok });
+ if (x.reasons.some(r => r.startsWith('roll_price_is_425'))) price425.push(x);
+}
+
+// ---- (a) punch-list ----
+const csvEsc = s => `"${String(s == null ? '' : s).replace(/"/g, '""')}"`;
+const punchCsv = ['type,id,vendor,title,detail,admin_link'];
+for (const x of feedLeaks)
+ punchCsv.push(['feed_leak', x.id, csvEsc(x.vendor), csvEsc(x.title), `private-label name "${x.leakToken}" in title/handle/vendor`, adminLink(x.id)].join(','));
+for (const x of price425)
+ punchCsv.push(['roll_price_4.25', x.id, csvEsc(x.vendor), csvEsc(x.title), 'roll/non-sample variant priced $4.25', adminLink(x.id)].join(','));
+fs.writeFileSync(path.join(DIR, 'punch-list.csv'), punchCsv.join('\n') + '\n');
+
+const md = [];
+md.push('# DW catalog punch-list (from Google-feed eligibility pass)\n');
+md.push('Two defect classes worth fixing regardless of the Google feed. READ-ONLY scan — no changes made.\n');
+md.push(`## A. Real feed-leaks — private-label name in a customer-facing field (${feedLeaks.length})\n`);
+md.push('These leak the upstream vendor name through the storefront/feed. Some may be false alarms where the token is a legit pattern/colorway name (e.g. "Chesapeake"/"Carlsten") — verify before scrubbing.\n');
+md.push('| token | vendor | title | fix |');
+md.push('|---|---|---|---|');
+for (const x of feedLeaks.slice(0, 60))
+ md.push(`| ${x.leakToken} | ${x.vendor} | ${x.title.slice(0,55)} | [admin](${adminLink(x.id)}) |`);
+if (feedLeaks.length > 60) md.push(`| … | | +${feedLeaks.length-60} more in punch-list.csv | |`);
+md.push(`\n## B. Roll variant genuinely priced $4.25 — real sample-trap bug (${price425.length})\n`);
+md.push('A non-sample/roll variant priced $4.25 cannot be sold correctly. Reprice to the real roll price.\n');
+md.push('| vendor | title | fix |');
+md.push('|---|---|---|');
+for (const x of price425.slice(0, 60))
+ md.push(`| ${x.vendor} | ${x.title.slice(0,55)} | [admin](${adminLink(x.id)}) |`);
+if (price425.length > 60) md.push(`| | +${price425.length-60} more in punch-list.csv | |`);
+fs.writeFileSync(path.join(DIR, 'punch-list.md'), md.join('\n') + '\n');
+
+// ---- (b) unpublish-list (Path A candidates) ----
+const upCsv = ['id,handle,vendor,reason_class,reasons,admin_link'];
+const byClass = {};
+for (const x of excl) {
+ const cls = reasonClass(x.reasons[0]);
+ byClass[cls] = (byClass[cls] || 0) + 1;
+ upCsv.push([x.id, csvEsc(x.handle), csvEsc(x.vendor), cls, csvEsc(x.reasons.join('|')), adminLink(x.id)].join(','));
+}
+fs.writeFileSync(path.join(DIR, 'unpublish-list.csv'), upCsv.join('\n') + '\n');
+
+// ---- summary ----
+console.log('PUNCH-LIST:');
+console.log(' feed-leaks (title/handle/vendor):', feedLeaks.length);
+console.log(' roll-priced-$4.25 bugs :', price425.length);
+console.log('\nUNPUBLISH-LIST (Path-A candidates):', excl.length, 'products, by reason class:');
+for (const [k,v] of Object.entries(byClass).sort((a,b)=>b[1]-a[1])) console.log(' '+String(v).padStart(6), k);
+console.log('\nwrote: punch-list.md, punch-list.csv, unpublish-list.csv');
diff --git a/scripts/greenland-onboard/alt-tags.mjs b/scripts/greenland-onboard/alt-tags.mjs
new file mode 100644
index 0000000..1235d23
--- /dev/null
+++ b/scripts/greenland-onboard/alt-tags.mjs
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+/**
+ * Set image alt text on every active Greenland/PR cork product to show our SKU + name:
+ * alt = "<Title> — <Cork-SKU>" e.g. "Montauk-Bison Gold Cork Wallcovering | Phillipe Romano — Cork-501620"
+ * node alt-tags.mjs # DRY-RUN
+ * node alt-tags.mjs --apply --limit=1
+ * node alt-tags.mjs --apply
+ */
+import { rest, restAll } from '../lib/shopify.mjs';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const dwSkuOf = p => { const v = p.variants.find(v => /^Cork-\d+$/.test((v.sku || '').trim())); return v ? v.sku.trim() : null; };
+
+async function main() {
+ let prods = (await restAll('/products.json?vendor=Phillipe%20Romano&status=active&fields=id,title,variants,images&limit=250', 'products'))
+ .filter(p => /Cork Wallcovering/.test(p.title) && (p.images || []).length && dwSkuOf(p));
+ if (LIMIT) prods = prods.slice(0, LIMIT);
+ console.log(`cork products with images: ${prods.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ let ok = 0, imgs = 0, fail = 0;
+ for (const p of prods) {
+ const alt = `${p.title} — ${dwSkuOf(p)}`;
+ if (!APPLY) { if (ok < 4) console.log(` ${(p.images || []).length} img → alt="${alt}"`); ok++; continue; }
+ for (const img of p.images) {
+ if (img.alt === alt) { continue; }
+ try {
+ const r = await rest(`/products/${p.id}/images/${img.id}.json`, { method: 'PUT', body: { image: { id: img.id, alt } } });
+ if (r.status === 200) imgs++; else { fail++; console.error(` FAIL img ${img.id}: ${r.status}`); }
+ await sleep(90);
+ } catch (e) { fail++; console.error(` ERR ${img.id}: ${String(e).slice(0, 90)}`); await sleep(250); }
+ }
+ ok++; if (ok % 25 === 0) console.log(` ...${ok} products (${imgs} imgs)`);
+ }
+ console.log(`\nDONE. products=${ok} images=${imgs} fail=${fail}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/greenland-onboard/build-payloads.mjs b/scripts/greenland-onboard/build-payloads.mjs
new file mode 100644
index 0000000..2d71fa5
--- /dev/null
+++ b/scripts/greenland-onboard/build-payloads.mjs
@@ -0,0 +1,97 @@
+#!/usr/bin/env node
+/**
+ * Build Greenland cork DRAFT payloads from dw_unified.greenland_catalog → out/payloads.jsonl.
+ * Quote-only posture (Pierre Frey model): Roll variant $0 + `quotes`/`Needs-Price`, Sample $4.25.
+ * Consumed by create-drafts.mjs (mirrors osborne-onboard/create-drafts.mjs).
+ * node build-payloads.mjs # build payloads.jsonl + print first 3
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execSync } from 'node:child_process';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const DB = 'postgresql:///dw_unified?host=/tmp&user=stevestudio2';
+const SAMPLE_PRICE = '4.25';
+
+const titleCase = s => (s || '').replace(/\w\S*/g, w => w[0].toUpperCase() + w.slice(1).toLowerCase()).trim();
+// "Wallpaper" is banned in customer-facing text — always Wallcovering
+const clean = s => (s || '').replace(/wall\s*paper/ig, 'Wallcovering').trim();
+
+function rows() {
+ const json = execSync(`psql "${DB}" -tAc "select coalesce(json_agg(row_to_json(t))::text,'[]') from (
+ select gl_id, mfr_sku, pattern_name, color_name, collection, width, width_inches, minimum_order,
+ pattern_repeat, fire_rating_us, backing, weight, material, composition, image_url, product_url
+ from greenland_catalog order by gl_id) t"`, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
+ return JSON.parse(json.trim());
+}
+
+function titleFor(r) {
+ const pat = titleCase(clean(r.pattern_name || r.mfr_sku));
+ const col = r.color_name && r.color_name.toLowerCase() !== (r.pattern_name || '').toLowerCase()
+ ? titleCase(clean(r.color_name)) : '';
+ return `${pat}${col ? ' ' + col : ''} | Greenland`.replace(/\s+/g, ' ').trim();
+}
+function tags(r) {
+ const t = new Set(['Greenland', 'Cork', 'Wallcovering', 'quotes', 'Needs-Price']);
+ if (r.collection && !/tip\s*cards?/i.test(r.collection)) t.add(titleCase(r.collection));
+ if (r.material) t.add(titleCase(r.material));
+ return [...t].join(', ');
+}
+function bodyHtml(r) {
+ const rows = [
+ ['Pattern', clean(r.pattern_name)], ['Color', r.color_name], ['Material', r.material || 'Cork'],
+ ['Composition', r.composition], ['Width', r.width], ['Minimum Order', r.minimum_order],
+ ['Repeat', r.pattern_repeat], ['Backing', r.backing], ['Fire Rating', r.fire_rating_us],
+ ['Manufacturer SKU', r.mfr_sku], ['Collection', /tip\s*cards?/i.test(r.collection||'') ? '' : r.collection],
+ ].filter(([, v]) => v != null && String(v).trim() !== '');
+ const pat = titleCase(clean(r.pattern_name || r.mfr_sku));
+ return `<p>${pat} from Greenland's natural cork collection — a warm, tactile cork wallcovering. Priced by quote; request a memo sample to see the material in hand.</p>`
+ + `<table>${rows.map(([k, v]) => `<tr><td><strong>${k}</strong></td><td>${String(v)}</td></tr>`).join('')}</table>`;
+}
+function metafields(r) {
+ const mf = [];
+ const S = (ns, key, value, type = 'single_line_text_field') => { if (value != null && String(value).trim() !== '') mf.push({ namespace: ns, key, type, value: String(value) }); };
+ S('custom', 'manufacturer_sku', r.mfr_sku);
+ S('global', 'Brand', 'Greenland');
+ S('global', 'width', r.width);
+ S('global', 'repeat', r.pattern_repeat);
+ S('global', 'unit_of_measure', 'Priced Per Roll (Quote)');
+ S('custom', 'color', r.color_name);
+ S('custom', 'real_color_name', r.color_name);
+ if (r.width_inches != null) mf.push({ namespace: 'global', key: 'width_inches', type: 'number_decimal', value: String(r.width_inches) });
+ return mf;
+}
+
+function main() {
+ const data = rows();
+ const seen = new Set();
+ const fd = fs.openSync(path.join(OUT, 'payloads.jsonl'), 'w');
+ let n = 0;
+ for (const r of data) {
+ if (!r.mfr_sku || seen.has(r.mfr_sku)) continue; seen.add(r.mfr_sku);
+ const sku = `DWGL-${r.mfr_sku}`;
+ const o = {
+ mfr_sku: r.mfr_sku, sku, gl_id: r.gl_id, image_url: r.image_url || null,
+ product: {
+ title: titleFor(r), vendor: 'Greenland', product_type: 'Wallcovering',
+ status: 'draft', tags: tags(r), body_html: bodyHtml(r),
+ options: [{ name: 'Format' }],
+ // Greenland serves application/octet-stream → Shopify URL-ingest 422s.
+ // Image is downloaded + base64-attached post-create by create-drafts.mjs.
+ variants: [
+ { sku, price: '0.00', option1: 'Roll', taxable: true, requires_shipping: true, inventory_management: null },
+ { sku: `${sku}-Sample`, price: SAMPLE_PRICE, option1: 'Sample', taxable: true, requires_shipping: true, inventory_management: null },
+ ],
+ },
+ metafields: metafields(r),
+ };
+ fs.writeSync(fd, JSON.stringify(o) + '\n'); n++;
+ }
+ fs.closeSync(fd);
+ console.log(`✓ ${n} payloads → out/payloads.jsonl`);
+ const sample = fs.readFileSync(path.join(OUT, 'payloads.jsonl'), 'utf8').trim().split('\n').slice(0, 3).map(l => JSON.parse(l));
+ for (const o of sample) console.log(` [${o.sku}] "${o.product.title}" · Roll $${o.product.variants[0].price}/Sample $${o.product.variants[1].price} · mf:${o.metafields.length} · tags:${o.product.tags.split(', ').length} · img:${o.product.images.length}`);
+}
+main();
diff --git a/scripts/greenland-onboard/create-drafts.mjs b/scripts/greenland-onboard/create-drafts.mjs
new file mode 100644
index 0000000..4feeff2
--- /dev/null
+++ b/scripts/greenland-onboard/create-drafts.mjs
@@ -0,0 +1,118 @@
+#!/usr/bin/env node
+/**
+ * Create Greenland cork products as DRAFT on the live store (designer-laboratory-sandbox),
+ * then set metafields via GraphQL. Mirrors osborne-onboard/create-drafts.mjs but uses the
+ * shared ../lib/shopify.mjs client (owns token/throttle/backoff) so no env sourcing needed.
+ *
+ * node create-drafts.mjs # DRY-RUN: show plan
+ * node create-drafts.mjs --apply --limit=3 # canary
+ * node create-drafts.mjs --apply # all remaining (resumable, day-cap aware)
+ *
+ * Idempotent: skips any DWGL sku already live on Shopify OR already in out/created.jsonl.
+ * Cap-aware: draws from the shared 'upload' variant budget; stops cleanly when exhausted.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { createRequire } from 'node:module';
+import { rest, gql, restAll, SHOP, TOKEN } from '../lib/shopify.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const require = createRequire(import.meta.url);
+const budget = require('../variant-budget/budget.cjs');
+const BUDGET_CAT = 'backlog'; // background-trickle pool — never starves new-arrivals ('upload')
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`;
+
+const loadJsonl = f => fs.existsSync(path.join(OUT, f))
+ ? fs.readFileSync(path.join(OUT, f), 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l)) : [];
+
+// Greenland serves application/octet-stream → Shopify URL-ingest 422s. Download + base64-attach.
+async function attachImage(pid, url, filename) {
+ if (!url) return 'no-url';
+ try {
+ const resp = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!resp.ok) return `dl-${resp.status}`;
+ const b64 = Buffer.from(await resp.arrayBuffer()).toString('base64');
+ const r = await rest(`/products/${pid}/images.json`, { method: 'POST', body: { image: { attachment: b64, filename } } });
+ return (r.status === 200 || r.status === 201) ? 'ok' : `up-${r.status}`;
+ } catch (e) { return 'err'; }
+}
+
+async function liveGreenlandSkus() {
+ // idempotency: pull existing Greenland variant SKUs from the live store (empty on first run)
+ try {
+ const prods = await restAll('/products.json?vendor=Greenland&fields=id,variants&limit=250', 'products');
+ const s = new Set();
+ for (const p of prods) for (const v of (p.variants || [])) if (v.sku) s.add(v.sku.toUpperCase());
+ return s;
+ } catch { return new Set(); }
+}
+
+async function main() {
+ const payloads = loadJsonl('payloads.jsonl');
+ const liveSkus = await liveGreenlandSkus();
+ const created = loadJsonl('created.jsonl');
+ const createdSku = new Set(created.map(c => c.sku.toUpperCase()));
+ let todo = payloads.filter(p => !liveSkus.has(p.sku.toUpperCase()) && !createdSku.has(p.sku.toUpperCase()));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+
+ const headroom = budget.remaining(BUDGET_CAT);
+ console.log(`Store ${SHOP} · token …${TOKEN.slice(-4)} · payloads ${payloads.length} · live ${liveSkus.size} · to create ${todo.length} · '${BUDGET_CAT}' headroom ${headroom} variants (~${Math.floor(headroom/2)} products) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ for (const o of todo.slice(0, 3)) console.log(` [${o.sku}] "${o.product.title}" · Roll $${o.product.variants[0].price}/Sample $${o.product.variants[1].price} · mf:${o.metafields.length} · tags:${o.product.tags.split(', ').length} · img:${o.product.images.length}`);
+ console.log(`DRY-RUN. --apply (optionally --limit=N) to create drafts.`);
+ return;
+ }
+
+ const fd = fs.openSync(path.join(OUT, 'created.jsonl'), 'a');
+ let ok = 0, fail = 0, mfFail = 0, imgFail = 0;
+ for (const o of todo) {
+ const grant = budget.take(BUDGET_CAT, o.product.variants.length);
+ if (grant < o.product.variants.length) { console.error(`\n⛔ '${BUDGET_CAT}' budget exhausted today (granted ${grant}). Stop — resume tomorrow (idempotent).`); break; }
+ try {
+ const res = await rest('/products.json', { method: 'POST', body: { product: o.product } });
+ const body = await res.json().catch(() => ({}));
+ if (res.status === 201 && body?.product?.id) {
+ const pid = body.product.id;
+ if (o.metafields.length) {
+ const gid = `gid://shopify/Product/${pid}`;
+ const d = await gql(M_MF, { mf: o.metafields.map(m => ({ ownerId: gid, namespace: m.namespace, key: m.key, type: m.type, value: m.value })) });
+ const ue = d?.metafieldsSet?.userErrors || d?.__err || [];
+ if (ue.length) { mfFail++; console.error(` ⚠ mf ${o.sku}: ${JSON.stringify(ue).slice(0,160)}`); }
+ }
+ const imgRes = await attachImage(pid, o.image_url, `${o.mfr_sku}.jpg`);
+ if (imgRes !== 'ok') { imgFail++; if (imgRes !== 'no-url') console.error(` ⚠ img ${o.sku}: ${imgRes}`); }
+ fs.writeSync(fd, JSON.stringify({ mfr_sku: o.mfr_sku, sku: o.sku, gl_id: o.gl_id, product_id: String(pid), image: imgRes, status: 'draft', created_at: new Date().toISOString() }) + '\n');
+ ok++; if (ok % 20 === 0) console.log(` ...created ${ok} (fail ${fail}, mfFail ${mfFail}, imgFail ${imgFail})`);
+ } else {
+ const errStr = JSON.stringify(body).toLowerCase();
+ if (/exceed|limit|too many|maximum/.test(errStr) && /variant|product|day/.test(errStr)) { console.error(`\n⛔ Shopify cap on ${o.sku}. Stop — resume tomorrow.`); break; }
+ fail++; console.error(` FAIL ${o.sku}: HTTP ${res.status} ${JSON.stringify(body).slice(0,200)}`);
+ }
+ } catch (e) { fail++; console.error(` ERR ${o.sku}: ${String(e).slice(0,160)}`); await sleep(700); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. created=${ok} failed=${fail} mfFail=${mfFail} imgFail=${imgFail} of ${todo.length}`);
+}
+
+// --images-only: backfill images for already-created products that have 0 images on Shopify.
+async function imagesOnly() {
+ const created = loadJsonl('created.jsonl');
+ const byId = new Map(loadJsonl('payloads.jsonl').map(p => [p.sku, p.image_url]));
+ let fixed = 0, skip = 0, failn = 0;
+ for (const c of created) {
+ const r = await rest(`/products/${c.product_id}/images.json`);
+ const imgs = (await r.json()).images || [];
+ if (imgs.length) { skip++; continue; }
+ const url = c.image_url_used || byId.get(c.sku);
+ const res = await attachImage(c.product_id, url, `${c.mfr_sku}.jpg`);
+ if (res === 'ok') { fixed++; console.log(` ✓ img ${c.sku}`); } else { failn++; console.error(` ⚠ ${c.sku}: ${res}`); }
+ }
+ console.log(`\nIMAGES-ONLY. fixed=${fixed} already-had=${skip} failed=${failn}`);
+}
+
+(process.argv.includes('--images-only') ? imagesOnly() : main()).catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/greenland-onboard/finish-3-strays.mjs b/scripts/greenland-onboard/finish-3-strays.mjs
new file mode 100644
index 0000000..0c9f663
--- /dev/null
+++ b/scripts/greenland-onboard/finish-3-strays.mjs
@@ -0,0 +1,119 @@
+#!/usr/bin/env node
+/**
+ * Surgical finish for the 3 stray DWGL- cork products still LIVE on Shopify.
+ *
+ * Findings (2026-07-12):
+ * - DWGL-100011 Bark (mfr S300NQ8383, Montauk series) — no existing Montauk twin → CONVERT → Cork-502130
+ * - DWGL-100018 Antique Gold(mfr S300NQ8373, Montauk series) — no existing Montauk twin → CONVERT → Cork-502140
+ * - DWGL-100051 Bison Gold (mfr S300NQ8288, Montauk series) — DUPLICATE of the already-canonical
+ * Cork-501620 "Montauk-Bison Gold" (custom.manufacturer_sku=S300NQ8288) → ARCHIVE (no new number).
+ *
+ * CONVERT = re-SKU sample + ADD yard variant, city title, full metafields, $59.50 yard / $4.25 sample,
+ * 6-yd min/step, clean tags, canonical handle. Mirrors Cork-501620's exact shape.
+ * ARCHIVE = set status=archived (removes from live store; staging dw_sku points at the surviving twin).
+ *
+ * node finish-3-strays.mjs # DRY-RUN
+ * node finish-3-strays.mjs --apply
+ */
+import { rest, gql } from '../lib/shopify.mjs';
+
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){metafieldsSet(metafields:$mf){userErrors{message field}}}`;
+
+// mfr S300 series → city Montauk (per skill mapping)
+const CITY = 'Montauk';
+const PRICE = '59.50', MINSTEP = '6', WIDTH = "91.5 cm/36''", WIDTH_IN = '36.0';
+
+const CONVERT = [
+ { pid: 7880966930483, color: 'Bark', mfr: 'S300NQ8383', num: 502130 },
+ { pid: 7880967159859, color: 'Antique Gold', mfr: 'S300NQ8373', num: 502140 },
+];
+const ARCHIVE = [
+ { pid: 7880968241203, color: 'Bison Gold', mfr: 'S300NQ8288', survivor: 'Cork-501620' },
+];
+
+const slug = s => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
+
+async function convert(item) {
+ const dw = `Cork-${item.num}`;
+ const title = `${CITY}-${item.color} Cork Wallcovering | Phillipe Romano`;
+ const handle = `${slug(CITY)}-cork-wallcovering-${slug(item.color)}`;
+ // read current product to find the sample variant id + option name
+ const g = await rest(`/products/${item.pid}.json?fields=id,variants,tags`, {});
+ const p = (await g.json()).product;
+ const sampleV = p.variants.find(v => /-Sample\s*$/i.test((v.sku || '')) || /sample/i.test(v.option1 || '')) || p.variants[0];
+ // clean tags: canonical Cork line tag set (mirror Cork-501620)
+ const tags = 'Cork, Cork Wallcovering, display_variant, Montauk, Phillipe Romano, Trending Wallcovering Collection 2026, Wallcovering';
+ if (!APPLY) {
+ console.log(`CONVERT pid=${item.pid}`);
+ console.log(` title → ${title}`);
+ console.log(` handle → ${handle}`);
+ console.log(` yard → ${dw} @ $${PRICE} (ADD)`);
+ console.log(` sample → ${dw}-Sample @ $4.25 (re-SKU vid=${sampleV?.id})`);
+ console.log(` tags → ${tags}`);
+ console.log(` mfr → custom.manufacturer_sku=${item.mfr}`);
+ return { ok: true };
+ }
+ const variants = [
+ { sku: dw, price: PRICE, option1: 'Yard', taxable: true, requires_shipping: true, inventory_management: null },
+ { id: sampleV.id, sku: `${dw}-Sample`, price: '4.25', option1: 'Sample' },
+ ];
+ const body = { product: { id: item.pid, title, handle, status: 'active', tags, options: [{ name: 'Format' }], variants } };
+ const r = await rest(`/products/${item.pid}.json`, { method: 'PUT', body });
+ const rb = await r.json().catch(() => ({}));
+ if (r.status !== 200) { console.error(` FAIL PUT ${item.pid}: ${r.status} ${JSON.stringify(rb).slice(0, 160)}`); return { ok: false }; }
+ const vs = rb.product?.variants || [];
+ const yv = vs.find(v => /Yard/i.test(v.option1 || '') && !/sample/i.test(v.sku || ''));
+ const sv = vs.find(v => /-Sample/i.test(v.sku || ''));
+ const gid = `gid://shopify/Product/${item.pid}`;
+ const mf = [
+ { ownerId: gid, namespace: 'custom', key: 'manufacturer_sku', type: 'single_line_text_field', value: item.mfr },
+ { ownerId: gid, namespace: 'global', key: 'Brand', type: 'single_line_text_field', value: 'Phillipe Romano' },
+ { ownerId: gid, namespace: 'custom', key: 'brand', type: 'single_line_text_field', value: 'Phillipe Romano' },
+ { ownerId: gid, namespace: 'custom', key: 'pattern', type: 'single_line_text_field', value: CITY },
+ { ownerId: gid, namespace: 'global', key: 'width', type: 'single_line_text_field', value: WIDTH },
+ { ownerId: gid, namespace: 'global', key: 'width_inches', type: 'single_line_text_field', value: WIDTH_IN },
+ { ownerId: gid, namespace: 'global', key: 'unit_of_measure', type: 'single_line_text_field', value: 'Priced Per Yard' },
+ { ownerId: gid, namespace: 'global', key: 'v_prods_quantity_order_min', type: 'single_line_text_field', value: MINSTEP },
+ { ownerId: gid, namespace: 'global', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: MINSTEP },
+ ];
+ if (yv) { const yg = `gid://shopify/ProductVariant/${yv.id}`;
+ mf.push({ ownerId: yg, namespace: 'custom', key: 'v_prod_quantity_order_min', type: 'single_line_text_field', value: MINSTEP },
+ { ownerId: yg, namespace: 'custom', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: MINSTEP }); }
+ if (sv) { const sg = `gid://shopify/ProductVariant/${sv.id}`;
+ mf.push({ ownerId: sg, namespace: 'custom', key: 'v_prod_quantity_order_min', type: 'single_line_text_field', value: '1' },
+ { ownerId: sg, namespace: 'custom', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: '1' }); }
+ const mr = await gql(M_MF, { mf });
+ const uerr = mr?.metafieldsSet?.userErrors || [];
+ if (uerr.length) console.error(` metafield errs: ${JSON.stringify(uerr).slice(0, 200)}`);
+ // image alt = <Title> — <Cork-SKU>
+ const alt = `${title} — ${dw}`;
+ const imgs = rb.product?.images || [];
+ if (imgs[0]) {
+ await rest(`/products/${item.pid}/images/${imgs[0].id}.json`, { method: 'PUT', body: { image: { id: imgs[0].id, alt } } });
+ }
+ console.log(` CONVERTED ${item.pid} → ${dw} (${title})`);
+ await sleep(150);
+ return { ok: true, dw };
+}
+
+async function archive(item) {
+ if (!APPLY) {
+ console.log(`ARCHIVE pid=${item.pid} "${item.color}" (dup of ${item.survivor}); staging dw_sku→${item.survivor}`);
+ return { ok: true };
+ }
+ const r = await rest(`/products/${item.pid}.json`, { method: 'PUT', body: { product: { id: item.pid, status: 'archived' } } });
+ if (r.status !== 200) { console.error(` FAIL archive ${item.pid}: ${r.status}`); return { ok: false }; }
+ console.log(` ARCHIVED ${item.pid} (dup of ${item.survivor})`);
+ await sleep(150);
+ return { ok: true };
+}
+
+(async () => {
+ console.log(`=== finish-3-strays · ${APPLY ? 'APPLY' : 'DRY-RUN'} ===\n`);
+ for (const it of CONVERT) await convert(it);
+ console.log('');
+ for (const it of ARCHIVE) await archive(it);
+ console.log('\ndone.');
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/greenland-onboard/launch-pricing.mjs b/scripts/greenland-onboard/launch-pricing.mjs
new file mode 100644
index 0000000..050e1e5
--- /dev/null
+++ b/scripts/greenland-onboard/launch-pricing.mjs
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+/**
+ * Launch the Greenland→Phillipe Romano cork line: re-SKU CORK-<mfr> → DWLG-<num>,
+ * price the yard variant $59.50 with 6-yd min/step, keep the $4.25 sample, drop quote tags.
+ * Reads the canonical DW-number map (greenland-onboard/data/dwgl-map.json).
+ * node launch-pricing.mjs # DRY-RUN
+ * node launch-pricing.mjs --apply --limit=1 # canary
+ * node launch-pricing.mjs --apply
+ */
+import { readFileSync } from 'node:fs';
+import { rest, gql, restAll } from '../lib/shopify.mjs';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const PRICE = '59.50', MINSTEP = '6';
+const rawMap = JSON.parse(readFileSync(process.env.HOME + '/Projects/greenland-onboard/data/dwgl-map.json', 'utf8'));
+const map = new Map(); // key by BOTH mfr code and DW number
+for (const m of rawMap) { map.set(m.mfr.toUpperCase(), m); map.set(String(m.num), m); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){metafieldsSet(metafields:$mf){userErrors{message}}}`;
+const mfrOfSku = s => (s || '').replace(/-Sample\s*$/i, '').replace(/^(CORK|DWGL)-/i, '').trim().toUpperCase();
+const isSample = v => /-Sample\s*$/i.test(v.sku || '') || /sample/i.test(v.option1 || '');
+const isDone = p => p.variants.some(v => /^DWLG-\d+$/.test((v.sku||'').trim()) && parseFloat(v.price) >= 59);
+
+async function main() {
+ const prods = (await restAll('/products.json?vendor=Phillipe%20Romano&status=active&fields=id,title,tags,status,variants&limit=250', 'products'))
+ .filter(p => p.status === 'active' && /Cork Wallcovering/.test(p.title) && p.variants.some(v => map.has(mfrOfSku(v.sku))));
+ let todo = LIMIT ? prods.slice(0, LIMIT) : prods;
+ console.log(`Greenland/PR cork products: ${prods.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ let ok = 0, fail = 0;
+ for (const p of todo) {
+ if (isDone(p)) { continue; } // already yard-priced with a DWLG- SKU
+ const yardV = p.variants.find(v => !isSample(v));
+ const sampleV = p.variants.find(v => isSample(v));
+ const m = map.get(mfrOfSku(yardV?.sku || sampleV?.sku));
+ if (!m) { continue; }
+ const newTags = (p.tags || '').split(',').map(s => s.trim()).filter(Boolean)
+ .filter(t => !/^(quotes|needs-price)$/i.test(t)).join(', ');
+ if (!APPLY) { console.log(` ${p.title}\n yard ${yardV?.sku} → DWLG-${m.num} @ $${PRICE} min/step ${MINSTEP}; sample → DWLG-${m.num}-Sample $4.25; tags-quotes`); ok++; continue; }
+ try {
+ // Yard variant: update if present, ADD if the product is sample-only.
+ const variants = [];
+ variants.push(yardV
+ ? { id: yardV.id, sku: `DWLG-${m.num}`, price: PRICE, option1: 'Yard', taxable: true, requires_shipping: true, inventory_management: null }
+ : { sku: `DWLG-${m.num}`, price: PRICE, option1: 'Yard', taxable: true, requires_shipping: true, inventory_management: null });
+ if (sampleV) variants.push({ id: sampleV.id, sku: `DWLG-${m.num}-Sample`, price: '4.25', option1: 'Sample' });
+ const body = { product: { id: p.id, status: 'active', tags: newTags, options: [{ name: 'Format' }], variants } };
+ const r = await rest(`/products/${p.id}.json`, { method: 'PUT', body });
+ const rbody = await r.json().catch(() => ({}));
+ if (r.status !== 200) { fail++; console.error(` FAIL ${p.id}: ${r.status} ${JSON.stringify(rbody).slice(0,140)}`); continue; }
+ const vs = rbody.product?.variants || [];
+ const yv = vs.find(v => !isSample(v)), sv = vs.find(v => isSample(v));
+ const gid = `gid://shopify/Product/${p.id}`;
+ const mf = [
+ { ownerId: gid, namespace: 'global', key: 'v_prods_quantity_order_min', type: 'single_line_text_field', value: MINSTEP },
+ { ownerId: gid, namespace: 'global', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: MINSTEP },
+ { ownerId: gid, namespace: 'global', key: 'unit_of_measure', type: 'single_line_text_field', value: 'Priced Per Yard' },
+ ];
+ if (yv) { const yg = `gid://shopify/ProductVariant/${yv.id}`;
+ mf.push({ ownerId: yg, namespace: 'custom', key: 'v_prod_quantity_order_min', type: 'single_line_text_field', value: MINSTEP },
+ { ownerId: yg, namespace: 'custom', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: MINSTEP }); }
+ if (sv) { const sg = `gid://shopify/ProductVariant/${sv.id}`;
+ mf.push({ ownerId: sg, namespace: 'custom', key: 'v_prod_quantity_order_min', type: 'single_line_text_field', value: '1' },
+ { ownerId: sg, namespace: 'custom', key: 'v_prods_quantity_order_units', type: 'single_line_text_field', value: '1' }); }
+ await gql(M_MF, { mf });
+ ok++; if (ok % 25 === 0) console.log(` ...${ok}`); await sleep(120);
+ } catch (e) { fail++; console.error(` ERR ${p.id}: ${String(e).slice(0, 120)}`); await sleep(400); }
+ }
+ console.log(`\nDONE. ${APPLY ? 'launched' : 'planned'}=${ok} fail=${fail}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/greenland-onboard/reformat-titles.mjs b/scripts/greenland-onboard/reformat-titles.mjs
new file mode 100644
index 0000000..bace88b
--- /dev/null
+++ b/scripts/greenland-onboard/reformat-titles.mjs
@@ -0,0 +1,40 @@
+#!/usr/bin/env node
+/**
+ * Reformat every Phillipe Romano cork title:
+ * "<City> Cork Wallcovering (<Color>) | Phillipe Romano"
+ * → "<City>-<Color> Cork Wallcovering | Phillipe Romano"
+ * node reformat-titles.mjs # DRY-RUN
+ * node reformat-titles.mjs --apply --limit=3
+ * node reformat-titles.mjs --apply
+ */
+import { rest, restAll } from '../lib/shopify.mjs';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const RE = /^(.+?) Cork Wallcovering \((.+)\) \| Phillipe Romano$/;
+
+function newTitle(t) {
+ const m = t.match(RE);
+ if (!m) return null;
+ const [, city, color] = m;
+ return `${city}-${color} Cork Wallcovering | Phillipe Romano`;
+}
+
+async function main() {
+ let prods = await restAll('/products.json?vendor=Phillipe%20Romano&fields=id,title&limit=250', 'products');
+ prods = prods.filter(p => RE.test(p.title));
+ if (LIMIT) prods = prods.slice(0, LIMIT);
+ console.log(`PR cork products to reformat: ${prods.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ let ok = 0, fail = 0;
+ for (const p of prods) {
+ const nt = newTitle(p.title);
+ if (!nt || nt === p.title) continue;
+ if (!APPLY) { if (ok < 5) console.log(` "${p.title}"\n → "${nt}"`); ok++; continue; }
+ try {
+ const r = await rest(`/products/${p.id}.json`, { method: 'PUT', body: { product: { id: p.id, title: nt } } });
+ if (r.status === 200) { ok++; if (ok % 25 === 0) console.log(` ...${ok}`); }
+ else { fail++; console.error(` FAIL ${p.id}: ${r.status}`); }
+ } catch (e) { fail++; console.error(` ERR ${p.id}: ${String(e).slice(0, 100)}`); }
+ }
+ console.log(`\nDONE. ${APPLY ? 'retitled' : 'planned'}=${ok} fail=${fail}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/greenland-onboard/relabel-to-pr.mjs b/scripts/greenland-onboard/relabel-to-pr.mjs
new file mode 100644
index 0000000..8203605
--- /dev/null
+++ b/scripts/greenland-onboard/relabel-to-pr.mjs
@@ -0,0 +1,50 @@
+#!/usr/bin/env node
+/**
+ * Relabel ALL vendor=Greenland products → "Phillipe Romano" (private-label; "Greenland" must
+ * never be customer-facing). Idempotent + reversible metadata: vendor, title suffix, handle,
+ * global.Brand metafield, tags (drop Greenland, add Phillipe Romano + Phillipe Romano Corks).
+ * Covers both this session's drafts AND the parallel session's 213 active leak.
+ *
+ * node relabel-to-pr.mjs # DRY-RUN
+ * node relabel-to-pr.mjs --apply --limit=3
+ * node relabel-to-pr.mjs --apply
+ */
+import { rest, gql, restAll } from '../lib/shopify.mjs';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const OLD = 'Greenland', NEW = 'Phillipe Romano', COLL_TAG = 'Phillipe Romano Corks';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{message} } }`;
+
+function fixTitle(t){ return (t||'').replace(new RegExp(`\\|\\s*${OLD}\\s*$`,'i'), `| ${NEW}`).replace(new RegExp(`\\b${OLD}\\b`,'g'), NEW).replace(/\s+/g,' ').trim(); }
+function fixHandle(h){ return (h||'').replace(/greenland/gi,'phillipe-romano').replace(/-+/g,'-').replace(/^-|-$/g,''); }
+function fixTags(tags){
+ const set = new Set((tags||'').split(',').map(s=>s.trim()).filter(Boolean).filter(t=>!/^greenland$/i.test(t)));
+ set.add(NEW); set.add(COLL_TAG); set.add('Cork'); set.add('Wallcovering');
+ return [...set].join(', ');
+}
+
+async function main(){
+ let prods = await restAll(`/products.json?vendor=${encodeURIComponent(OLD)}&fields=id,title,handle,tags,status&limit=250`,'products');
+ if (LIMIT) prods = prods.slice(0, LIMIT);
+ console.log(`vendor=${OLD}: ${prods.length} products · ${APPLY?'APPLY':'DRY-RUN'}`);
+ if (!APPLY){ prods.slice(0,4).forEach(p=>console.log(` [${p.status}] "${p.title}" → "${fixTitle(p.title)}" · handle ${p.handle} → ${fixHandle(p.handle)}`)); console.log('DRY-RUN. --apply to relabel.'); return; }
+ let ok=0, fail=0, mfFail=0;
+ for (const p of prods){
+ try {
+ const body = { product: { id: p.id, vendor: NEW, title: fixTitle(p.title), handle: fixHandle(p.handle), tags: fixTags(p.tags) } };
+ const r = await rest(`/products/${p.id}.json`, { method:'PUT', body });
+ if (r.status===200){
+ const gid=`gid://shopify/Product/${p.id}`;
+ const d=await gql(M_MF,{mf:[
+ {ownerId:gid,namespace:'global',key:'Brand',type:'single_line_text_field',value:NEW},
+ {ownerId:gid,namespace:'custom',key:'brand',type:'single_line_text_field',value:NEW},
+ ]});
+ if ((d?.metafieldsSet?.userErrors||d?.__err||[]).length) mfFail++;
+ ok++; if(ok%25===0) console.log(` ...relabeled ${ok} (fail ${fail})`);
+ } else { fail++; console.error(` FAIL ${p.id}: HTTP ${r.status} ${JSON.stringify(await r.json().catch(()=>({}))).slice(0,140)}`); }
+ } catch(e){ fail++; console.error(` ERR ${p.id}: ${String(e).slice(0,120)}`); await sleep(600); }
+ }
+ console.log(`\nDONE. relabeled=${ok} failed=${fail} mfFail=${mfFail} of ${prods.length}`);
+}
+main().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/greenland-onboard/resume.sh b/scripts/greenland-onboard/resume.sh
new file mode 100755
index 0000000..f528f1c
--- /dev/null
+++ b/scripts/greenland-onboard/resume.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+# Daily Greenland cork onboard resume — trickle the remaining DRAFT creates under the shared
+# 'backlog' variant-budget slice (background pool, never starves 'upload'/new-arrivals).
+# create-drafts.mjs is idempotent (skips live + created.jsonl) + cap-clean (stops on 0 grant),
+# so redundant runs are no-ops and it self-terminates once all 213 are staged.
+# Fired by com.steve.greenland-onboard-resume at 00:10 + 13:00 (retry). Self-unloads when done.
+set -uo pipefail
+cd "$(dirname "$0")"
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH"
+LOG="out/resume.log"; mkdir -p out
+echo "=== $(date '+%F %T') greenland resume ===" >> "$LOG"
+
+# shared kill-switch
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "kill-switch present — skip" >> "$LOG"; exit 0; }
+
+# done? (created.jsonl has all 213) → self-unload the launchd job and exit
+CREATED=$(wc -l < out/created.jsonl 2>/dev/null | tr -d ' ')
+TOTAL=$(wc -l < out/payloads.jsonl 2>/dev/null | tr -d ' ')
+if [ "${CREATED:-0}" -ge "${TOTAL:-999}" ] && [ "${TOTAL:-0}" -gt 0 ]; then
+ echo "all $CREATED/$TOTAL staged — unloading job" >> "$LOG"
+ launchctl bootout "gui/$(id -u)/com.steve.greenland-onboard-resume" 2>/dev/null || true
+ exit 0
+fi
+
+node create-drafts.mjs --apply >> "$LOG" 2>&1
+# best-effort image backfill for anything that missed its image
+node create-drafts.mjs --images-only >> "$LOG" 2>&1
+echo "resume done: $(wc -l < out/created.jsonl 2>/dev/null | tr -d ' ')/$TOTAL staged" >> "$LOG"
diff --git a/scripts/greenland-onboard/swap-sku-dwlg-to-cork.mjs b/scripts/greenland-onboard/swap-sku-dwlg-to-cork.mjs
new file mode 100644
index 0000000..88daf04
--- /dev/null
+++ b/scripts/greenland-onboard/swap-sku-dwlg-to-cork.mjs
@@ -0,0 +1,15 @@
+import { rest, restAll } from '../lib/shopify.mjs';
+const APPLY = process.argv.includes('--apply');
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const prods=(await restAll('/products.json?vendor=Phillipe%20Romano&status=active&fields=id,title,variants&limit=250','products'))
+ .filter(p=>/Cork Wallcovering/.test(p.title) && p.variants.some(v=>/^DWLG-/i.test((v.sku||'').trim())));
+console.log(`${prods.length} products with DWLG- SKUs · ${APPLY?'APPLY':'DRY-RUN'}`);
+let ok=0,fail=0;
+for(const p of prods){
+ const variants=p.variants.filter(v=>/^DWLG-/i.test((v.sku||'').trim())).map(v=>({id:v.id, sku:v.sku.trim().replace(/^DWLG-/i,'Cork-')}));
+ if(!variants.length) continue;
+ if(!APPLY){ if(ok<4) console.log(` ${p.title}: ${p.variants.map(v=>v.sku).join(',')} -> ${variants.map(v=>v.sku).join(',')}`); ok++; continue; }
+ try{ const r=await rest(`/products/${p.id}.json`,{method:'PUT',body:{product:{id:p.id,variants}}}); if(r.status===200){ok++; if(ok%25===0)console.log(` ...${ok}`);} else {fail++;console.error(` FAIL ${p.id}: ${r.status}`);} await sleep(110);}
+ catch(e){fail++;console.error(` ERR ${p.id}: ${String(e).slice(0,100)}`);await sleep(300);}
+}
+console.log(`\nDONE. ${APPLY?'swapped':'planned'}=${ok} fail=${fail}`);
diff --git a/scripts/greenland-onboard/transform-to-pr.mjs b/scripts/greenland-onboard/transform-to-pr.mjs
new file mode 100644
index 0000000..9a8fd0f
--- /dev/null
+++ b/scripts/greenland-onboard/transform-to-pr.mjs
@@ -0,0 +1,97 @@
+#!/usr/bin/env node
+/**
+ * Transform Greenland cork → Phillipe Romano private-label, Command54 convention:
+ * vendor = Phillipe Romano (front-facing; "Greenland" NEVER appears)
+ * pattern = coastal-city name, ONE per series/style (S300, H171, ...)
+ * title = "<City> Cork Wallcovering (<Color>)"
+ * handle = "<city>-cork-wallcovering-<color>" (no "greenland")
+ * variant SKU = "CORK-<mfr>" (Sample: "CORK-<mfr>-Sample")
+ * global.Brand / custom.brand = Phillipe Romano ; tags scrub Greenland, add PR + city
+ * status = active (quote-only: Sample $4.25)
+ *
+ * node transform-to-pr.mjs # DRY-RUN (plan)
+ * node transform-to-pr.mjs --apply --limit=3 # canary
+ * node transform-to-pr.mjs --apply # full sweep of all vendor=Greenland
+ */
+import { rest, gql, restAll } from '../lib/shopify.mjs';
+import { execSync } from 'node:child_process';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const DB = 'postgresql:///dw_unified?host=/tmp&user=stevestudio2';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// series (mfr prefix: leading alpha + 2-4 digits) → coastal city (Command54 set). Deterministic.
+const CITY = {
+ S300: 'Montauk', H171: 'Nantucket', G0174: 'Newport', S176: 'Sag Harbor',
+ G0181: 'Cape May', G0155: 'Palm Beach', G0111: 'Kiawah', G0110: 'Hilton Head',
+ G0182: 'Chatham', G0154: 'Southampton', G0148: 'Amagansett', H192: "Martha's Vineyard",
+};
+const seriesOf = mfr => (String(mfr).match(/^[A-Za-z]+[0-9]{2,4}/) || [''])[0];
+const cityOf = mfr => CITY[seriesOf(mfr)] || 'Coastal';
+const titleCase = s => (s || '').replace(/\w\S*/g, w => w[0].toUpperCase() + w.slice(1).toLowerCase()).trim();
+const slug = s => (s || '').toLowerCase().replace(/['']/g, '').replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
+
+// greenland_catalog: mfr → {color, pattern}
+function catalog() {
+ const json = execSync(`psql "${DB}" -tAc "select coalesce(json_agg(json_build_object('mfr',mfr_sku,'color',color_name,'pattern',pattern_name))::text,'[]') from greenland_catalog"`, { encoding: 'utf8', maxBuffer: 64e6 });
+ const m = new Map();
+ for (const r of JSON.parse(json.trim())) m.set(String(r.mfr).toUpperCase(), r);
+ return m;
+}
+// resolve a product's mfr code from its variant SKU (DWGL-<mfr> / CORK-<mfr>) or manufacturer_sku mf
+async function mfrOf(p) {
+ for (const v of p.variants || []) {
+ const m = (v.sku || '').replace(/-Sample$/i, '').replace(/^(DWGL|CORK)-/i, '');
+ if (/^[A-Za-z]+[0-9]/.test(m) && !/^\d+$/.test(m)) return m.toUpperCase(); // real mfr, not sequential DWGL-100xxx
+ }
+ const d = await gql(`{product(id:"gid://shopify/Product/${p.id}"){metafield(namespace:"custom",key:"manufacturer_sku"){value}}}`);
+ return (d?.product?.metafield?.value || '').toUpperCase();
+}
+
+function plan(mfr, cat) {
+ const rec = cat.get(mfr) || {};
+ const color = titleCase(rec.color || rec.pattern || mfr);
+ const city = cityOf(mfr);
+ const title = `${city} Cork Wallcovering (${color}) | Phillipe Romano`;
+ const handle = slug(`${city}-cork-wallcovering-${color}`);
+ const sku = `CORK-${mfr}`;
+ const tags = ['Phillipe Romano', 'Cork', 'Cork Wallcovering', 'Wallcovering', city].join(', ');
+ return { color, city, title, handle, sku, tags };
+}
+
+async function main() {
+ const cat = catalog();
+ let prods = await restAll(`/products.json?vendor=${encodeURIComponent('Greenland')}&fields=id,title,handle,tags,status,variants&limit=250`, 'products');
+ if (LIMIT) prods = prods.slice(0, LIMIT);
+ console.log(`vendor=Greenland: ${prods.length} products · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ let ok = 0, fail = 0, skip = 0;
+ const seenSku = new Set();
+ for (const p of prods) {
+ const mfr = await mfrOf(p);
+ if (!mfr) { skip++; console.error(` ? no mfr for ${p.id} "${p.title}"`); continue; }
+ const pl = plan(mfr, cat);
+ if (!APPLY) { if (ok < 5) console.log(` "${p.title}" → "${pl.title}" sku ${pl.sku} /${pl.handle}`); ok++; continue; }
+ // dedup: if we already transformed this mfr this run, archive the extra
+ if (seenSku.has(pl.sku)) {
+ await rest(`/products/${p.id}.json`, { method: 'PUT', body: { product: { id: p.id, status: 'archived' } } });
+ skip++; console.log(` ⊘ archived dup ${p.id} (${pl.sku})`); continue;
+ }
+ seenSku.add(pl.sku);
+ try {
+ const variants = (p.variants || []).map(v => ({ id: v.id, sku: /-Sample$/i.test(v.sku || '') ? `${pl.sku}-Sample` : pl.sku }));
+ const body = { product: { id: p.id, vendor: 'Phillipe Romano', title: pl.title, handle: pl.handle, tags: pl.tags, status: 'active', variants } };
+ const r = await rest(`/products/${p.id}.json`, { method: 'PUT', body });
+ if (r.status === 200) {
+ const gid = `gid://shopify/Product/${p.id}`;
+ await gql(`mutation($mf:[MetafieldsSetInput!]!){metafieldsSet(metafields:$mf){userErrors{message}}}`, { mf: [
+ { ownerId: gid, namespace: 'global', key: 'Brand', type: 'single_line_text_field', value: 'Phillipe Romano' },
+ { ownerId: gid, namespace: 'custom', key: 'brand', type: 'single_line_text_field', value: 'Phillipe Romano' },
+ { ownerId: gid, namespace: 'custom', key: 'pattern', type: 'single_line_text_field', value: pl.city },
+ ] });
+ ok++; if (ok % 25 === 0) console.log(` ...transformed ${ok}`);
+ } else { fail++; console.error(` FAIL ${p.id}: ${r.status} ${JSON.stringify(await r.json().catch(()=>({}))).slice(0,140)}`); }
+ } catch (e) { fail++; console.error(` ERR ${p.id}: ${String(e).slice(0,120)}`); await sleep(600); }
+ }
+ console.log(`\nDONE. ${APPLY ? 'transformed' : 'planned'}=${ok} archived/skip=${skip} fail=${fail}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/groundworks-emit-load-sql.mjs b/scripts/groundworks-emit-load-sql.mjs
new file mode 100644
index 0000000..777e4fc
--- /dev/null
+++ b/scripts/groundworks-emit-load-sql.mjs
@@ -0,0 +1,51 @@
+import fs from 'fs';
+const rows=JSON.parse(fs.readFileSync('/tmp/groundworks-wc.json','utf8'));
+const q=v=>v==null?'NULL':`'${String(v).replace(/'/g,"''")}'`;
+const n=v=>v==null||v===''?'NULL':(isFinite(+v)?String(+v):'NULL');
+let sql=`
+BEGIN;
+CREATE TABLE IF NOT EXISTS groundworks_catalog (
+ id serial PRIMARY KEY,
+ mfr_sku text UNIQUE NOT NULL,
+ dw_sku text,
+ name text,
+ brand text DEFAULT 'GROUNDWORKS',
+ designer text,
+ collection text,
+ product_type text,
+ type_label text,
+ uom text,
+ status text,
+ wholesale numeric(10,2),
+ map_price numeric(10,2),
+ kravet_retail numeric(10,2),
+ image_url text,
+ thumb_url text,
+ product_url text,
+ color_name text,
+ color_hex text,
+ color_code text,
+ palette jsonb,
+ composition text,
+ leadtime text,
+ width numeric,
+ repeat_h numeric,
+ repeat_v numeric,
+ repeat_uom text,
+ finish text,
+ made_in text,
+ sample_available int,
+ algolia_object_id text,
+ price_basis text DEFAULT 'MAP = wholesale x 1.5 (Kravet-umbrella rule)',
+ source text DEFAULT 'kravet_algolia_feed',
+ staged_at timestamptz DEFAULT now()
+);
+`;
+for(const r of rows){
+ sql+=`INSERT INTO groundworks_catalog (mfr_sku,name,brand,designer,collection,product_type,type_label,uom,status,wholesale,map_price,kravet_retail,image_url,thumb_url,product_url,color_name,color_hex,color_code,composition,leadtime,width,repeat_h,repeat_v,repeat_uom,finish,made_in,sample_available,algolia_object_id) VALUES (`+
+ [q(r.mfr_sku),q(r.name),`'GROUNDWORKS'`,q(r.designer),q(r.collection),q(r.product_type),q(r.type_label),q(r.uom),q(r.status),n(r.wholesale),n(r.map_price),n(r.kravet_retail),q(r.image_url),q(r.thumb),q(r.url),q(r.color_name),q(r.color_hex),q(r.color_code),q(r.composition),q(r.leadtime),n(r.width),n(r.repeat_h),n(r.repeat_v),q(r.repeat_uom),q(r.finish),q(r.made_in),n(r.sample_available),q(r.objectID)].join(',')+
+ `) ON CONFLICT (mfr_sku) DO UPDATE SET name=EXCLUDED.name,wholesale=EXCLUDED.wholesale,map_price=EXCLUDED.map_price,status=EXCLUDED.status,image_url=EXCLUDED.image_url,staged_at=now();\n`;
+}
+sql+='COMMIT;\n';
+fs.writeFileSync('/tmp/groundworks-load.sql',sql);
+console.error('SQL rows:',rows.length,'bytes:',sql.length);
diff --git a/scripts/groundworks-palette-enrich.py b/scripts/groundworks-palette-enrich.py
new file mode 100644
index 0000000..3e5ed82
--- /dev/null
+++ b/scripts/groundworks-palette-enrich.py
@@ -0,0 +1,45 @@
+import json,urllib.request,io,sys
+from collections import Counter
+from concurrent.futures import ThreadPoolExecutor
+from PIL import Image
+LEX={"Chalk":"#f3f0e9","Alabaster":"#eee9df","Ivory":"#efe7d3","Cream":"#efe2c6","Linen":"#e9e0cf","Bone":"#e3d9c6","Porcelain":"#ece9e2","Oatmeal":"#d9cdb8","Flax":"#ddceac","Greige":"#cabfae","Mushroom":"#b9ad9c","Putty":"#c8bca9","Stone":"#b8b0a3","Sand":"#d8c7a6","Taupe":"#b6a892","Pebble":"#c2bbb0","Tan":"#c9a875","Camel":"#bf9b6a","Khaki":"#b3a06e","Caramel":"#a9743f","Chestnut":"#6e4326","Tobacco":"#7a5a36","Walnut":"#5a4632","Mocha":"#6f5847","Espresso":"#3f2f25","Dove":"#cfccc6","Silver":"#c8c8c8","Ash":"#b2b2ad","Fog":"#c4c8c9","Smoke":"#9b9d9c","Pewter":"#8e9192","Slate":"#5d676d","Graphite":"#454a4d","Charcoal":"#3a3a3a","Ink":"#1f2730","Noir":"#171717","Onyx":"#222124","Ebony":"#2a2320","Jet":"#101012","Celadon":"#9bb6a1","Pistachio":"#b6c79a","Sage":"#9caa8a","Eucalyptus":"#8fa595","Moss":"#6f7d4e","Olive":"#7a7a45","Loden":"#4f5d3a","Hunter":"#33523f","Forest":"#2f4a36","Emerald":"#2f7a55","Verdigris":"#5e9a8a","Powder":"#cfe0ea","Sky":"#a9cbe0","Wedgwood":"#7fa0c0","Cornflower":"#7a93d0","French Blue":"#5b7fb0","Cerulean":"#3f7fb0","Denim":"#4b6786","Teal":"#357a7d","Peacock":"#1f6f78","Prussian":"#28415c","Indigo":"#33406b","Navy":"#27314f","Midnight":"#1b2436","Buttercream":"#f3e7b8","Champagne":"#e6d6a8","Maize":"#e6cf6b","Citrine":"#d8c047","Saffron":"#d99e2b","Amber":"#c9962f","Ochre":"#b5852f","Mustard":"#c9a227","Gold":"#c4a35a","Brass":"#b08d57","Apricot":"#e7b48a","Peach":"#e9c1a3","Clay":"#b97a55","Terracotta":"#b5683f","Persimmon":"#c75c39","Pumpkin":"#c4702a","Copper":"#a5683f","Rust":"#9a5230","Sienna":"#8a4b32","Blush":"#e7c4c2","Rose":"#d99fa6","Dusty Rose":"#c08f90","Coral":"#e3795f","Cinnabar":"#b8432f","Brick":"#9a4435","Oxblood":"#5e2526","Claret":"#6e2233","Garnet":"#7a2030","Burgundy":"#6e2233","Crimson":"#a01f2e","Lavender":"#cdc1de","Lilac":"#c7b1d6","Heather":"#a892ad","Mauve":"#a98792","Amethyst":"#8a6aa0","Plum":"#6a4768","Aubergine":"#4a2f44","Platinum":"#d6d3cb","Bronze":"#8a6a40","Gunmetal":"#4d5356"}
+FAM={'Chalk':'White','Alabaster':'White','Ivory':'White','Cream':'Cream','Linen':'Cream','Bone':'White','Porcelain':'White','Oatmeal':'Beige','Flax':'Beige','Greige':'Neutral','Mushroom':'Neutral','Putty':'Neutral','Stone':'Neutral','Sand':'Beige','Taupe':'Brown','Pebble':'Neutral','Tan':'Brown','Camel':'Brown','Khaki':'Brown','Caramel':'Brown','Chestnut':'Brown','Tobacco':'Brown','Walnut':'Brown','Mocha':'Brown','Espresso':'Brown','Dove':'Gray','Silver':'Gray','Ash':'Gray','Fog':'Gray','Smoke':'Gray','Pewter':'Gray','Slate':'Gray','Graphite':'Gray','Charcoal':'Gray','Ink':'Black','Noir':'Black','Onyx':'Black','Ebony':'Black','Jet':'Black','Celadon':'Green','Pistachio':'Green','Sage':'Green','Eucalyptus':'Green','Moss':'Green','Olive':'Green','Loden':'Green','Hunter':'Green','Forest':'Green','Emerald':'Green','Verdigris':'Green','Powder':'Blue','Sky':'Blue','Wedgwood':'Blue','Cornflower':'Blue','French Blue':'Blue','Cerulean':'Blue','Denim':'Blue','Teal':'Aqua','Peacock':'Aqua','Prussian':'Blue','Indigo':'Blue','Navy':'Blue','Midnight':'Blue','Buttercream':'Yellow','Champagne':'Gold','Maize':'Yellow','Citrine':'Yellow','Saffron':'Gold','Amber':'Gold','Ochre':'Gold','Mustard':'Yellow','Gold':'Gold','Brass':'Gold','Apricot':'Orange','Peach':'Orange','Clay':'Terracotta','Terracotta':'Terracotta','Persimmon':'Orange','Pumpkin':'Orange','Copper':'Orange','Rust':'Orange','Sienna':'Brown','Blush':'Pink','Rose':'Pink','Dusty Rose':'Pink','Coral':'Coral','Cinnabar':'Red','Brick':'Red','Oxblood':'Burgundy','Claret':'Burgundy','Garnet':'Burgundy','Burgundy':'Burgundy','Crimson':'Red','Lavender':'Purple','Lilac':'Purple','Heather':'Purple','Mauve':'Purple','Amethyst':'Purple','Plum':'Purple','Aubergine':'Purple','Platinum':'Gray','Bronze':'Gold','Gunmetal':'Gray'}
+hx=lambda h:tuple(int(h.lstrip('#')[i:i+2],16) for i in (0,2,4))
+LV=[(n,hx(v)) for n,v in LEX.items()]
+def nearest(rgb): return min(LV,key=lambda kv:sum((a-b)**2 for a,b in zip(rgb,kv[1])))[0]
+def palette(url):
+ raw=urllib.request.urlopen(urllib.request.Request(url,headers={'User-Agent':'Mozilla/5.0'}),timeout=25).read()
+ im=Image.open(io.BytesIO(raw)).convert('RGB').resize((100,100))
+ q=im.quantize(colors=8,method=Image.MEDIANCUT)
+ pal=q.getpalette(); idxs=list(q.getdata()); total=len(idxs); cnt=Counter(idxs); out=[]
+ for idx,c in cnt.most_common():
+ rgb=(pal[idx*3],pal[idx*3+1],pal[idx*3+2]); pct=round(100*c/total)
+ nm=nearest(rgb); out.append({'hex':'#%02x%02x%02x'%rgb,'name':nm,'bucket':FAM.get(nm,'Neutral'),'pct':pct})
+ merged={}
+ for c in out:
+ k=c['name']
+ if k in merged: merged[k]['pct']+=c['pct']
+ else: merged[k]=dict(c)
+ return sorted([c for c in merged.values() if c['pct']>=3],key=lambda c:-c['pct'])[:6]
+rows=[l.split('\t') for l in open('/tmp/gw-images.tsv').read().splitlines() if l.strip()]
+def work(r):
+ rid,url=r[0],r[1]
+ try:
+ pal=palette(url)
+ if not pal: return (rid,None)
+ return (rid,{'palette':pal,'hex':pal[0]['hex'],'name':pal[0]['name'],'bucket':pal[0]['bucket']})
+ except Exception as e: return (rid,None)
+res={}; done=0
+with ThreadPoolExecutor(max_workers=24) as ex:
+ for rid,r in ex.map(work,rows):
+ done+=1
+ if r: res[rid]=r
+ if done%100==0: print(f"{done}/{len(rows)} ({len(res)} ok)",file=sys.stderr,flush=True)
+# emit TSV: id \t palette_json \t hex \t name \t bucket
+with open('/tmp/gw-palette-out.tsv','w') as f:
+ for rid,r in res.items():
+ pj=json.dumps(r['palette']).replace('\t',' ')
+ f.write(f"{rid}\t{pj}\t{r['hex']}\t{r['name']}\t{r['bucket']}\n")
+import statistics
+avg=statistics.mean(len(r['palette']) for r in res.values()) if res else 0
+print(f"DONE enriched {len(res)}/{len(rows)}; avg {avg:.1f} colors/product",file=sys.stderr)
diff --git a/scripts/handle-freshness/handle-freshness-canary.mjs b/scripts/handle-freshness/handle-freshness-canary.mjs
new file mode 100644
index 0000000..835c9fb
--- /dev/null
+++ b/scripts/handle-freshness/handle-freshness-canary.mjs
@@ -0,0 +1,110 @@
+// handle-freshness-canary — does each dw_unified ACTIVE product actually resolve
+// on the live storefront? Samples N ACTIVE handles (stratified across vendors),
+// GETs https://www.designerwallcoverings.com/products/<handle>.json, and counts
+// 404s = stale/unpublished handles a shopper literally cannot reach.
+//
+// This is the VALIDATED signal salvaged from cycle 21 (the killed availability-
+// drift canary). Unlike variant.available (by-design-false on a trade/inquiry
+// store → cry-wolf), a 404 on a mirror-ACTIVE handle is UNAMBIGUOUS: the product
+// is not shopper-reachable (stale handle, unpublished, or mirror↔live drift).
+// It directly de-risks the gated reactivation/restore applies — those set
+// products ACTIVE by id, but a stale handle means shoppers still 404.
+//
+// node handle-freshness-canary.mjs [--n 300] [--per-vendor 0] [--warn 5] [--fail 15]
+// READ-ONLY (public product JSON + local psql). $0. No writes.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const BASE = 'https://www.designerwallcoverings.com';
+const args = process.argv.slice(2);
+const N = parseInt(args.find((_,i,a)=>a[i-1]==='--n') || '300', 10) || 300;
+const PER_VENDOR = parseInt(args.find((_,i,a)=>a[i-1]==='--per-vendor') || '0', 10) || 0; // 0 = flat random across all
+const WARN = parseFloat(args.find((_,i,a)=>a[i-1]==='--warn') || '5') || 5; // %
+const FAIL = parseFloat(args.find((_,i,a)=>a[i-1]==='--fail') || '15') || 15; // %
+const today = new Date().toISOString().slice(0,10); // dynamic — a scheduled run must not clobber a prior day's report
+const OUT = `${process.env.HOME}/.claude/yolo-queue/handle-freshness-${today}.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/handle-freshness-${today}.md`;
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 64*1024*1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+// best-effort local CNCP alert — timeout-bounded, NEVER throws (canary must still finish).
+async function alertCNCP(note) {
+ try { const ac = new AbortController(); const t = setTimeout(()=>ac.abort(), 6000);
+ const r = await fetch(`${process.env.CNCP_URL||'http://localhost:3333'}/api/parking-lot`,
+ { method:'POST', headers:{'Content-Type':'application/json'},
+ body: JSON.stringify({ url:'file://handle-freshness-canary', note }), signal: ac.signal });
+ clearTimeout(t); return r.ok; } catch { return false; }
+}
+
+// stratified or flat sample. random() ordering = representative draw (not oldest-biased like cycle 21's first run).
+let rows;
+if (PER_VENDOR > 0) {
+ rows = q(`with r as (select vendor, handle, mfr_sku, row_number() over (partition by vendor order by random()) rn
+ from shopify_products where status='ACTIVE' and handle is not null and handle<>'')
+ select vendor, handle, mfr_sku from r where rn <= ${PER_VENDOR} order by random() limit ${N}`)
+ .map(r => ({ vendor: r[0], handle: r[1], sku: r[2] }));
+} else {
+ rows = q(`select vendor, handle, mfr_sku from shopify_products
+ where status='ACTIVE' and handle is not null and handle<>'' order by random() limit ${N}`)
+ .map(r => ({ vendor: r[0], handle: r[1], sku: r[2] }));
+}
+
+async function check(p) {
+ try {
+ const res = await fetch(`${BASE}/products/${encodeURIComponent(p.handle)}.json`,
+ { headers: { 'User-Agent': 'dw-handle-freshness-canary' }, signal: AbortSignal.timeout(15000) });
+ if (res.status === 404) return { ...p, state: 'STALE_404' };
+ if (res.status === 200) return { ...p, state: 'OK' };
+ if (res.status === 429 || res.status >= 500) return { ...p, state: 'UNKNOWN', http: res.status };
+ return { ...p, state: 'UNKNOWN', http: res.status };
+ } catch (e) { return { ...p, state: 'UNKNOWN', detail: String(e.message).slice(0,40) }; }
+}
+
+(async () => {
+ const results = [];
+ for (const p of rows) { results.push(await check(p)); await sleep(120); }
+ const ok = results.filter(r => r.state==='OK').length;
+ const stale = results.filter(r => r.state==='STALE_404');
+ const unknown = results.filter(r => r.state==='UNKNOWN').length;
+ const decided = ok + stale.length; // exclude UNKNOWN from the rate denominator
+ const driftPct = decided ? (stale.length / decided) * 100 : 0;
+ // Wald 95% CI half-width on the drift proportion (bounded estimate, honest about sample size)
+ const pHat = decided ? stale.length/decided : 0;
+ const ci = decided ? 1.96 * Math.sqrt(pHat*(1-pHat)/decided) * 100 : 0;
+ const verdict = driftPct >= FAIL ? 'FAIL' : driftPct >= WARN ? 'WARN' : 'PASS';
+
+ const byVendor = {};
+ for (const r of results) { (byVendor[r.vendor] ||= {n:0,stale:0}); byVendor[r.vendor].n++; if (r.state==='STALE_404') byVendor[r.vendor].stale++; }
+ const worstVendors = Object.entries(byVendor).filter(([,v])=>v.stale>0).sort((a,b)=>b[1].stale-a[1].stale).slice(0,10);
+
+ const report = { generated_at: new Date().toISOString(), sampled: results.length, decided, ok, stale: stale.length,
+ unknown, drift_pct: +driftPct.toFixed(2), ci95_halfwidth_pct: +ci.toFixed(2), verdict, warn_at: WARN, fail_at: FAIL,
+ stale_handles: stale.map(s=>({vendor:s.vendor,sku:s.sku,handle:s.handle})),
+ worst_vendors: worstVendors.map(([v,s])=>({vendor:v, sampled:s.n, stale:s.stale})) };
+ fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+ const emoji = verdict==='FAIL'?'🔴':verdict==='WARN'?'🟠':'🟢';
+ let md = `# Handle-freshness canary — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md += `Sampled **${results.length}** random ACTIVE handles (mirror) → GET storefront \`/products/<handle>.json\`. **READ-ONLY, $0.**\n\n`;
+ md += `## ${emoji} ${verdict} — drift ${driftPct.toFixed(1)}% ±${ci.toFixed(1)} (95% CI), thresholds WARN≥${WARN}% / FAIL≥${FAIL}%\n`;
+ md += `OK=${ok} · STALE_404=${stale.length} · UNKNOWN=${unknown} (excluded from rate) · decided n=${decided}\n\n`;
+ md += stale.length ? `### Stale (mirror-ACTIVE but storefront 404)\n| Vendor | SKU | Handle |\n|---|---|---|\n`
+ + stale.slice(0,40).map(s=>`| ${s.vendor} | ${s.sku} | ${s.handle} |`).join('\n') + '\n\n'
+ : `No stale handles in the sample — every sampled ACTIVE product resolves on the storefront. 🟢\n\n`;
+ if (worstVendors.length) { md += `### Worst vendors (by stale count in sample)\n| Vendor | Sampled | Stale |\n|---|---:|---:|\n`
+ + worstVendors.map(([v,s])=>`| ${v} | ${s.n} | ${s.stale} |`).join('\n') + '\n\n'; }
+ md += `_Random representative draw (not oldest-biased). UNKNOWN (429/5xx/timeout) excluded from the drift denominator — transient, not drift. Scale --n for tighter CI._\n`;
+ fs.writeFileSync(MD, md);
+
+ console.log(`[handle-freshness] ${emoji} ${verdict} · drift=${driftPct.toFixed(1)}% ±${ci.toFixed(1)} · OK=${ok} STALE=${stale.length} UNK=${unknown} (n=${results.length})`);
+ console.log(`Report: ${MD}`);
+ if (verdict === 'FAIL') await alertCNCP(`[HANDLE-FRESHNESS 🔴 FAIL] storefront drift ${driftPct.toFixed(1)}% (${stale.length}/${decided}) — mirror-ACTIVE handles returning 404; shoppers can't reach them`);
+ process.exit(verdict==='FAIL'?2:0);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/henry-tank-viewer.mjs b/scripts/henry-tank-viewer.mjs
new file mode 100644
index 0000000..5298416
--- /dev/null
+++ b/scripts/henry-tank-viewer.mjs
@@ -0,0 +1,127 @@
+#!/usr/bin/env node
+/**
+ * henry-tank-viewer.mjs — live "tank filling up" view of the Spoonflower→Henry
+ * image archive. The 2TB Henry drive is the tank; water = drive usage; the bright
+ * band = the Spoonflower archive actively growing. Live counts + rate + throttle.
+ *
+ * http://localhost:9986
+ */
+import http from 'node:http';
+import { execSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PORT = 9986;
+const DIR = '/Volumes/Henry/spoonflower';
+const LOG = DIR + '/_archive.log';
+const CURSOR = DIR + '/_descend_cursor';
+
+let cache = { ts: 0, data: null };
+let lastSample = { ts: 0, images: 0 };
+function sh(c) { try { return execSync(c, { encoding: 'utf8', timeout: 15000 }).trim(); } catch { return ''; } }
+
+function snapshot() {
+ // df: 1K-blocks total/used/avail for the Henry volume
+ const df = sh(`df -k ${DIR} | tail -1`).split(/\s+/);
+ const totalKB = +df[1] || 0, usedKB = +df[2] || 0, availKB = +df[3] || 0;
+ const images = +sh(`ls -U -1 ${DIR}/*.png 2>/dev/null | wc -l`) || 0;
+ const archKB = +(sh(`du -sk ${DIR} 2>/dev/null`).split(/\s+/)[0]) || 0;
+ // counts from the script's _progress.json (no dependency on launchd stdio)
+ let prog = {}; try { prog = JSON.parse(fs.readFileSync(DIR + '/_progress.json', 'utf8')); } catch {}
+ // fill rate = new images/sec between snapshots
+ let rate = 0;
+ if (lastSample.ts) { const dt = (Date.now() - lastSample.ts) / 1000; if (dt > 0) rate = Math.max(0, (images - lastSample.images) / dt); }
+ lastSample = { ts: Date.now(), images };
+ let cursor = prog.lastId || 0; try { cursor = +fs.readFileSync(CURSOR, 'utf8').trim() || cursor; } catch {}
+ const START_ID = 22550000; // ~newest design id (top of the chronological space)
+ const descendPct = cursor > 0 ? Math.max(0, Math.min(100, (START_ID - cursor) / START_ID * 100)) : 0;
+ const alive = !!sh(`pgrep -f spoonflower-henry-download | head -1`);
+ return {
+ images, archGB: archKB / 1048576, totalTB: totalKB / 1073741824,
+ usedTB: usedKB / 1073741824, availTB: availKB / 1073741824,
+ drivePct: totalKB ? usedKB / totalKB * 100 : 0,
+ archPctOfDrive: totalKB ? archKB / totalKB * 100 : 0,
+ rate, saved: prog.saved || 0, skip: prog.skip || 0, notWp: prog.notWp || 0,
+ throttled: prog.throttled || 0, cursor, descendPct, alive,
+ };
+}
+function getData() { const now = Date.now(); if (now - cache.ts > 2500) cache = { ts: now, data: snapshot() }; return cache.data; }
+
+const HTML = `<!doctype html><html><head><meta charset=utf8><title>Henry Tank — Spoonflower Archive</title>
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{background:#0a0e14;color:#e6edf3;font:14px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;display:flex;flex-direction:column;align-items:center;min-height:100vh;padding:28px}
+h1{font-weight:600;letter-spacing:.3px;margin-bottom:4px}
+.sub{color:#7d8590;font-size:12px;margin-bottom:22px}
+.wrap{display:flex;gap:40px;align-items:center;flex-wrap:wrap;justify-content:center}
+.tank{position:relative;width:240px;height:420px;border:4px solid #2b3banner;border-radius:18px;border-color:#30363d;background:linear-gradient(#0d1117,#11161d);overflow:hidden;box-shadow:0 0 40px #00000080,inset 0 0 30px #00000060}
+.water{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,#1f6feb,#0b3d91);transition:height 1.2s cubic-bezier(.4,0,.2,1)}
+.water::before,.water::after{content:'';position:absolute;top:-14px;left:-50%;width:200%;height:28px;background:radial-gradient(circle at 50% 100%,#1f6feb 40%,transparent 41%) repeat-x;background-size:38px 28px;animation:wave 3.5s linear infinite;opacity:.7}
+.water::after{background-size:52px 28px;animation-duration:5s;animation-direction:reverse;opacity:.4}
+@keyframes wave{from{transform:translateX(0)}to{transform:translateX(38px)}}
+.arch{position:absolute;left:0;right:0;background:linear-gradient(180deg,#3fb950,#2ea043);box-shadow:0 0 18px #3fb95080;transition:all 1.2s ease}
+.bub{position:absolute;bottom:0;width:8px;height:8px;background:#ffffff55;border-radius:50%;animation:rise linear infinite}
+@keyframes rise{from{transform:translateY(0);opacity:.7}to{transform:translateY(-420px);opacity:0}}
+.ticks{position:absolute;inset:0;pointer-events:none}
+.ticks i{position:absolute;left:0;width:12px;border-top:1px solid #30363d;font-size:0}
+.stats{display:flex;flex-direction:column;gap:14px;min-width:260px}
+.big{font-size:46px;font-weight:700;color:#3fb950;line-height:1}
+.big small{font-size:16px;color:#7d8590;font-weight:500}
+.row{display:flex;justify-content:space-between;padding:9px 14px;background:#11161d;border:1px solid #21262d;border-radius:9px}
+.row b{color:#e6edf3;font-variant-numeric:tabular-nums}
+.k{color:#7d8590}
+.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:middle}
+.live .dot{background:#3fb950;box-shadow:0 0 8px #3fb950;animation:pulse 1.4s infinite}
+.dead .dot{background:#f85149}
+@keyframes pulse{50%{opacity:.4}}
+.lvl{position:absolute;right:10px;font-size:11px;color:#c9d1d9;background:#0d1117cc;padding:2px 7px;border-radius:5px;transition:bottom 1.2s ease}
+</style></head><body>
+<h1>Henry Tank — Spoonflower Archive</h1>
+<div class=sub id=status>connecting…</div>
+<div class=wrap>
+ <div class=tank id=tank>
+ <div class=water id=water style=height:0%></div>
+ <div class=arch id=arch style="bottom:0;height:0%"></div>
+ <div class=lvl id=lvl style=bottom:0>0%</div>
+ <div class=ticks id=ticks></div>
+ </div>
+ <div class=stats>
+ <div class=big><span id=imgs>0</span> <small>images</small></div>
+ <div class=row><span class=k>Spoonflower archive</span><b id=archgb>0 GB</b></div>
+ <div class=row><span class=k>Download rate</span><b id=rate>0 /s</b></div>
+ <div class=row><span class=k>Catalog scanned (newest→oldest)</span><b id=descend>0%</b></div>
+ <div class=row><span class=k>Henry drive</span><b id=drive>0 / 0 TB</b></div>
+ <div class=row><span class=k>Throttled</span><b id=throttled>0</b></div>
+ <div class=row id=liverow class=live><span class=k><span class=dot></span><span id=livetxt>live</span></span><b id=lastid>—</b></div>
+ </div>
+</div>
+<script>
+const tk=document.getElementById('ticks');for(let p=10;p<100;p+=10){const i=document.createElement('i');i.style.bottom=p+'%';tk.appendChild(i);}
+// bubbles
+const tank=document.getElementById('tank');for(let n=0;n<9;n++){const b=document.createElement('div');b.className='bub';b.style.left=(8+Math.random()*84)+'%';b.style.animationDuration=(3+Math.random()*4)+'s';b.style.animationDelay=(Math.random()*4)+'s';b.style.width=b.style.height=(5+Math.random()*7)+'px';tank.appendChild(b);}
+const fmt=n=>n>=1000?(n/1000).toFixed(n>=10000?0:1)+'k':n;
+async function tick(){
+ try{
+ const d=await (await fetch('/api/progress')).json();
+ const pct=d.descendPct; // tank fills by catalog scanned newest→oldest
+ document.getElementById('water').style.height=Math.max(pct,0.3).toFixed(3)+'%';
+ document.getElementById('arch').style.height='0%';
+ const lvl=document.getElementById('lvl');lvl.style.bottom='calc('+pct.toFixed(3)+'% - 9px)';lvl.textContent=pct.toFixed(2)+'%';
+ document.getElementById('imgs').textContent=d.images.toLocaleString();
+ document.getElementById('archgb').textContent=d.archGB.toFixed(d.archGB<10?2:1)+' GB';
+ document.getElementById('rate').textContent=d.rate.toFixed(1)+' /s';
+ document.getElementById('descend').textContent=d.descendPct.toFixed(2)+'%';
+ document.getElementById('drive').textContent=d.usedTB.toFixed(2)+' / '+d.totalTB.toFixed(2)+' TB';
+ document.getElementById('throttled').textContent=d.throttled;
+ document.getElementById('lastid').textContent=d.cursor?('id '+d.cursor.toLocaleString()):'phase 1';
+ const lr=document.getElementById('liverow');lr.className=d.alive?'row live':'row dead';
+ document.getElementById('livetxt').textContent=d.alive?'archiving':'stopped';
+ document.getElementById('status').textContent='catalog scanned newest→oldest • '+(d.alive?'archiving':'paused')+' • '+d.images.toLocaleString()+' imgs on Henry • updated '+new Date().toLocaleTimeString();
+ }catch(e){document.getElementById('status').textContent='viewer error: '+e.message;}
+}
+tick();setInterval(tick,2500);
+</script></body></html>`;
+
+http.createServer((req, res) => {
+ if (req.url.startsWith('/api/progress')) { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(getData())); return; }
+ res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(HTML);
+}).listen(PORT, () => console.log('Henry tank viewer → http://localhost:' + PORT));
diff --git a/scripts/hreflang-locale-audit/hreflang-locale-audit.mjs b/scripts/hreflang-locale-audit/hreflang-locale-audit.mjs
new file mode 100644
index 0000000..1eaf8a5
--- /dev/null
+++ b/scripts/hreflang-locale-audit/hreflang-locale-audit.mjs
@@ -0,0 +1,104 @@
+// hreflang-locale-audit — READ-ONLY, $0. Cycle 65 (DTD-picked A, unanimous).
+// c63 (PDP canonical/robots) + c64 (collection/facet/tag canonicals) both CLEAN. This
+// audits the biggest REMAINING dupe vector both structurally excluded: the en / en-ca /
+// en-gb locale duplication the sitemap actively advertises. The two known Shopify
+// multi-locale failure modes:
+// (1) DUPLICATE CONTENT — the en-ca/en-gb URL serves a 200 page that self-canonicals
+// (Google indexes 3 copies of the same content), OR
+// (2) BROKEN HREFLANG — the en page advertises en-CA/en-GB alternates that don't
+// resolve to a reciprocal 200 self-referencing locale page (Google ignores them).
+// Recon found: en page emits 4 hreflang (x-default/en/en-CA/en-GB), but the en-ca/en-gb
+// URLs 302-REDIRECT to en. So the SAFE outcome (consolidation, no dupe) is the hypothesis
+// — this audit confirms it fleet-wide + sizes any real 200-dupe exposure.
+// Built-in NEGATIVE CONTROL: the en page is KNOWN to carry hreflang tags → assert the
+// parser extracts >0 of them (proves it's not blind to hreflang link tags).
+// EXCLUDES Phillip Jeffries.
+const BASE='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA},redirect:'manual'});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,loc:r.headers.get('location'),text:(r.status===200)?await r.text():''};}catch(e){await sleep(800*(a+1));}}return {status:0,loc:null,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+function canonOf(html){const m=html.match(/<link[^>]+rel=["']canonical["'][^>]*href=["']([^"']+)["']/i);return m?m[1]:null;}
+function hreflangs(html){const out=[];
+ for(const m of html.matchAll(/<link[^>]+rel=["']alternate["'][^>]*hreflang=["']([^"']+)["'][^>]*href=["']([^"']+)["']/gi)) out.push({lang:m[1].toLowerCase(),href:m[2]});
+ for(const m of html.matchAll(/<link[^>]+hreflang=["']([^"']+)["'][^>]*rel=["']alternate["'][^>]*href=["']([^"']+)["']/gi)) out.push({lang:m[1].toLowerCase(),href:m[2]});
+ // dedupe by lang
+ const seen=new Set(); return out.filter(x=>!seen.has(x.lang)&&seen.add(x.lang));
+}
+const rel=u=>{ try{ return new URL(u,BASE).pathname.replace(/\/$/,'').toLowerCase(); }catch{ return (u||'').toLowerCase(); } };
+
+// gather a stratified sample of product handles (from product sitemaps)
+const idx=await get(`${BASE}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let handles=[];
+for(const sm of prodMaps){ const x=await get(sm); const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]); if(hs.length) handles.push(hs[Math.floor(hs.length/2)]); }
+handles=[...new Set(handles)].filter(h=>!PJ.test(h)).slice(0,30);
+console.log(`=== hreflang-locale-audit (READ-ONLY, $0) ===\nsampling ${handles.length} product handles across en/en-ca/en-gb (PJ excluded)\n`);
+
+let enSelfCanon=0, enHasHreflang=0, hreflangParserOk=0;
+let localeConsolidates=0, localeDupe200=0, localeCanonToEn=0, localeMissing=0;
+let reciprocalOk=0, reciprocalBroken=0;
+const problems=[]; const samples=[];
+let done=0;
+for(const h of handles){
+ const enUrl=`${BASE}/products/${h}`;
+ const en=await get(enUrl);
+ if(en.status!==200){ done++; continue; }
+ // en canonical
+ const ec=canonOf(en.text);
+ if(ec && rel(ec)===rel(enUrl)) enSelfCanon++;
+ // en hreflang set
+ const hl=hreflangs(en.text);
+ if(hl.length>0){ enHasHreflang++; hreflangParserOk++; }
+ const advCA=hl.find(x=>x.lang==='en-ca'); const advGB=hl.find(x=>x.lang==='en-gb');
+
+ // probe the en-ca + en-gb variant URLs themselves
+ for(const [loc,adv] of [['en-ca',advCA],['en-gb',advGB]]){
+ const lurl=`${BASE}/${loc}/products/${h}`;
+ const lr=await get(lurl);
+ if(lr.status>=300 && lr.status<400){
+ // consolidates to en? (redirect target = en URL)
+ if(lr.loc && rel(lr.loc)===rel(enUrl)) localeConsolidates++;
+ else { localeConsolidates++; } // any redirect away from a standalone locale page = consolidation
+ } else if(lr.status===200){
+ const lc=canonOf(lr.text);
+ if(lc && rel(lc)===rel(enUrl)){ localeCanonToEn++; } // 200 but canonical→en = consolidated via canonical (acceptable)
+ else if(lc && rel(lc)===rel(lurl)){ localeDupe200++; if(problems.length<30) problems.push({h,loc,issue:'DUPE-200-self-canonical',canon:rel(lc)}); } // real dup content
+ else { localeMissing++; if(problems.length<30) problems.push({h,loc,issue:'200-no/odd-canonical',canon:lc?rel(lc):'(none)'}); }
+ // reciprocity: a 200 locale page should carry a return hreflang to en + self
+ const lhl=hreflangs(lr.text); const hasReturn=lhl.some(x=>x.lang==='en'||x.lang==='x-default');
+ if(hasReturn) reciprocalOk++; else reciprocalBroken++;
+ } else { localeMissing++; }
+ await sleep(110);
+ }
+ if(samples.length<5) samples.push({h,enHreflang:hl.length,langs:hl.map(x=>x.lang).join('/')});
+ done++;
+ if(done%10===0) console.log(` ${done}/${handles.length} (consolidate=${localeConsolidates} dupe200=${localeDupe200} canon→en=${localeCanonToEn})`);
+ await sleep(120);
+}
+
+const localeProbes=localeConsolidates+localeDupe200+localeCanonToEn+localeMissing;
+console.log(`\n=== RESULTS ===`);
+console.log(`en pages evaluated: ${done}`);
+console.log(` en self-canonical: ${enSelfCanon}/${done}`);
+console.log(` en pages carrying hreflang annotations: ${enHasHreflang}/${done}`);
+console.log(`\n-- NEGATIVE CONTROL (hreflang parser) --`);
+console.log(` pages where parser extracted >0 hreflang tags: ${hreflangParserOk}/${done} ${hreflangParserOk>0?'→ PASSED (parser sees hreflang link tags; a real annotation would be detected)':'→ FAILED/INCONCLUSIVE'}`);
+console.log(`\n-- en-ca / en-gb locale variant URLs (${localeProbes} probed) --`);
+console.log(` CONSOLIDATES to en (3xx redirect → en) [SAFE, no dupe]: ${localeConsolidates}`);
+console.log(` 200 but canonical→en (consolidated via canonical) [acceptable]: ${localeCanonToEn}`);
+console.log(` *** 200 self-canonical DUPLICATE CONTENT [the real risk]: ${localeDupe200} ***`);
+console.log(` other/missing: ${localeMissing}`);
+console.log(`\n-- hreflang reciprocity (only meaningful for 200 locale pages) --`);
+console.log(` return-tag present: ${reciprocalOk} | broken: ${reciprocalBroken}`);
+if(localeProbes>0){
+ const dupe=localeDupe200, p=dupe/localeProbes, se=Math.sqrt(p*(1-p)/localeProbes), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** locale DUPLICATE-CONTENT rate: ${dupe}/${localeProbes} = ${(100*p).toFixed(1)}% (95% CI ${lo.toFixed(1)}–${hi.toFixed(1)}%, n=${localeProbes}) ***`);
+}
+if(problems.length){ console.log('\nproblems (first 15):'); problems.slice(0,15).forEach(x=>console.log(` /${x.loc}/products/${x.h.slice(0,38)} → ${x.issue} canon=${x.canon}`)); }
+else console.log('\nno locale duplicate-content / canonical problems in sample.');
+console.log('\nsample (first 5):'); samples.forEach(s=>console.log(` ${s.h.slice(0,40)} hreflang=${s.enHreflang} [${s.langs}]`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/hreflang-locale-audit.json',JSON.stringify({ts:new Date().toISOString(),sampled:handles.length,evaluated:done,enSelfCanon,enHasHreflang,hreflangParserOk,localeConsolidates,localeCanonToEn,localeDupe200,localeMissing,reciprocalOk,reciprocalBroken,problems,samples},null,2));
+console.log('\nwrote /tmp/hreflang-locale-audit.json');
diff --git a/scripts/image-alt-audit/image-alt-audit-rendered.mjs b/scripts/image-alt-audit/image-alt-audit-rendered.mjs
new file mode 100644
index 0000000..1907478
--- /dev/null
+++ b/scripts/image-alt-audit/image-alt-audit-rendered.mjs
@@ -0,0 +1,100 @@
+// image-alt-audit-rendered — READ-ONLY, $0. Cycle 66 RE-MEASUREMENT (officer REVISE).
+// The v1 measured product.json images[].alt = the STORED layer. The compliance officer
+// proved (live, n=2) the theme constructs alt at RENDER time: a product that is 100%
+// alt:null in products.json renders a MIX of populated / empty / missing-attribute alts.
+// So WCAG/ADA exposure must be measured on RENDERED HTML, and the three alt states
+// separated (empty alt="" is WCAG-CORRECT for decorative/zoom-pair images; only a
+// product-content image with NO usable alt is a real §1.1.1 violation).
+// METHOD: fetch rendered PDP HTML; extract <img> referencing cdn.shopify product media;
+// group by normalized image URL (collapses zoom/lazy duplicate pairs); per UNIQUE
+// content image record the BEST alt across its instances (populated > empty > missing).
+// Classify each unique content image: POPULATED / EMPTY-alt / NO-alt-attribute.
+// NEGATIVE CONTROL: print real populated alts (parser reads them) + confirm we can
+// distinguish empty="" from a missing attribute on real tags.
+// EXCLUDES Phillip Jeffries + UI chrome (svg/icons, non-/products/ media).
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+const norm=s=>(s||'').toLowerCase().replace(/[^a-z0-9]+/g,' ').trim();
+// normalize a shopify cdn image URL: strip size suffix (_600x, _1024x1024) + query → identity of the underlying asset
+function imgId(u){ try{ let p=new URL(u, WWW).pathname; p=p.replace(/_(\d+x\d*|\d*x\d+|small|medium|large|grande|pico|icon|thumb|compact|master)\b/gi,''); return p.toLowerCase(); }catch{ return (u||'').toLowerCase(); } }
+
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let handles=[];
+for(const sm of prodMaps){ const x=await get(sm); const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]); const step=Math.max(1,Math.floor(hs.length/3)); for(let i=0;i<hs.length&&handles.length<120;i+=step) handles.push(hs[i]); }
+handles=[...new Set(handles)].filter(h=>!PJ.test(h)).slice(0,80);
+console.log(`=== image-alt-audit-RENDERED (READ-ONLY, $0) ===\nre-measuring ${handles.length} live PDPs at the RENDERED layer (PJ excluded)\n`);
+
+let prodEval=0, prodAllCovered=0, prodHasViolation=0, pjSkip=0, fetchErr=0;
+let uImgTotal=0, uPopulated=0, uEmpty=0, uMissingAttr=0, uMeaningful=0;
+const populatedSamples=[], emptySamples=[], missingSamples=[], problems=[];
+let done=0;
+for(const h of handles){
+ const r=await get(`${WWW}/products/${h}`);
+ if(r.status!==200){ fetchErr++; done++; continue; }
+ if(PJ.test(h)){ pjSkip++; done++; continue; }
+ // pull product title for meaningfulness check
+ const title=norm((r.text.match(/<title>([^<]*)<\/title>/i)||[])[1]||'');
+ const titleToks=title.split(' ').filter(t=>t.length>3);
+ // all <img> tags referencing shopify product CDN media (exclude svg/icons/chrome)
+ const tags=[...r.text.matchAll(/<img[^>]*>/gi)].map(m=>m[0])
+ .filter(t=>/cdn\.shopify\.com\/s\/files|\/products\//i.test(t))
+ .filter(t=>!/\.svg|icon|logo|close|chevron|arrow|spinner|loader/i.test(t));
+ if(tags.length===0){ // no parseable product-media img in rendered HTML — skip (can't measure rendered layer)
+ done++; await sleep(90); continue; }
+ prodEval++;
+ // group by underlying asset, keep BEST alt state per asset (populated > empty="" > missing-attr)
+ const byAsset=new Map(); // id -> {state:'pop'|'empty'|'missing', alt}
+ for(const t of tags){
+ // resolve the asset url from src OR data-src OR srcset first url
+ const su=(t.match(/\s(?:data-src|src)=["']([^"']+)["']/i)||[])[1] || (t.match(/srcset=["']([^"',\s]+)/i)||[])[1] || '';
+ if(!/cdn\.shopify\.com|\/products\//i.test(su)) continue;
+ const id=imgId(su);
+ const hasAltAttr=/\salt\s*=/i.test(t);
+ const altVal=hasAltAttr?((t.match(/\salt\s*=\s*["']([^"']*)["']/i)||[,''])[1]).trim():null;
+ const state = altVal && altVal.length>0 ? 'pop' : (hasAltAttr ? 'empty' : 'missing');
+ const prev=byAsset.get(id);
+ const rank={pop:3,empty:2,missing:1};
+ if(!prev || rank[state]>rank[prev.state]) byAsset.set(id,{state,alt:altVal||''});
+ }
+ if(byAsset.size===0){ done++; await sleep(90); continue; }
+ let violation=false;
+ for(const [id,info] of byAsset){
+ uImgTotal++;
+ if(info.state==='pop'){ uPopulated++; const na=norm(info.alt); if(titleToks.some(tk=>na.includes(tk))) uMeaningful++; if(populatedSamples.length<6) populatedSamples.push({h,alt:info.alt.slice(0,70)}); }
+ else if(info.state==='empty'){ uEmpty++; if(emptySamples.length<6) emptySamples.push({h,id:id.slice(-40)}); }
+ else { uMissingAttr++; violation=true; if(missingSamples.length<8) missingSamples.push({h,id:id.slice(-40)}); }
+ }
+ if(violation){ prodHasViolation++; problems.push({h,issue:`has image(s) with NO alt attribute`}); }
+ else prodAllCovered++;
+ done++;
+ if(done%20===0) console.log(` ${done}/${handles.length} (unique content imgs: pop=${uPopulated} empty=${uEmpty} no-attr=${uMissingAttr})`);
+ await sleep(110);
+}
+
+console.log(`\n=== RESULTS (RENDERED layer, unique content images) ===`);
+console.log(`PDPs with parseable product-media imgs: ${prodEval} | PJ-skip: ${pjSkip} | fetch-err: ${fetchErr} | unparseable(skipped): ${done-prodEval-pjSkip-fetchErr}`);
+console.log(`unique content images classified: ${uImgTotal}`);
+console.log(`\n-- three alt states (separated per officer) --`);
+console.log(` POPULATED alt: ${uImgTotal?(100*uPopulated/uImgTotal).toFixed(1):0}% (${uPopulated}) [meaningful: ${uPopulated?(100*uMeaningful/uPopulated).toFixed(1):0}%]`);
+console.log(` EMPTY alt="" : ${uImgTotal?(100*uEmpty/uImgTotal).toFixed(1):0}% (${uEmpty}) [WCAG-OK if decorative/zoom-pair]`);
+console.log(` *** NO alt ATTRIBUTE (genuine §1.1.1 risk): ${uImgTotal?(100*uMissingAttr/uImgTotal).toFixed(1):0}% (${uMissingAttr}) ***`);
+console.log(`\n-- product-level --`);
+console.log(` products where ALL content imgs have a usable (populated/empty) alt: ${prodAllCovered}/${prodEval}`);
+console.log(` products with >=1 NO-alt-attribute image: ${prodHasViolation}/${prodEval}`);
+if(uImgTotal>0){
+ const p=uMissingAttr/uImgTotal, se=Math.sqrt(p*(1-p)/uImgTotal), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** RENDERED no-alt-attribute rate: ${uMissingAttr}/${uImgTotal} = ${(100*p).toFixed(1)}% (95% CI ${lo.toFixed(1)}–${hi.toFixed(1)}%, n=${uImgTotal}) ***`);
+}
+console.log(`\n-- NEGATIVE CONTROL --`);
+console.log(` populated (parser reads value):`); populatedSamples.forEach(s=>console.log(` ${s.h.slice(0,32)} → "${s.alt}"`));
+console.log(` empty alt="" detected: ${uEmpty>0?'yes ('+emptySamples.length+' samples)':'none in sample'}`);
+console.log(` no-alt-attribute detected: ${uMissingAttr>0?'yes ('+missingSamples.length+' samples)':'none in sample'}`);
+if(missingSamples.length) missingSamples.forEach(s=>console.log(` NO-ATTR ${s.h.slice(0,40)}`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/image-alt-audit-rendered.json',JSON.stringify({ts:new Date().toISOString(),handles:handles.length,prodEval,prodAllCovered,prodHasViolation,uImgTotal,uPopulated,uEmpty,uMissingAttr,uMeaningful,populatedSamples,emptySamples,missingSamples,problems},null,2));
+console.log('\nwrote /tmp/image-alt-audit-rendered.json');
diff --git a/scripts/image-alt-audit/image-alt-audit.mjs b/scripts/image-alt-audit/image-alt-audit.mjs
new file mode 100644
index 0000000..15847a0
--- /dev/null
+++ b/scripts/image-alt-audit/image-alt-audit.mjs
@@ -0,0 +1,95 @@
+// image-alt-audit — READ-ONLY, $0. Cycle 66 (DTD-picked B, unanimous).
+// After 4 clean SEO-indexability cycles (c59/c63/c64/c65), pivot to a GENUINELY
+// uncovered surface: image alt-text coverage. Dual value — image-SEO (a wallcoverings
+// catalog where imagery IS the product → Google Images traffic) AND ADA/WCAG
+// accessibility (real legal-exposure surface). Source of truth = product.json
+// images[].alt (what Steve controls + what the theme renders). Per product/image we
+// measure: has >=1 image; image alt populated vs empty/missing; alt "meaningful"
+// (contains the SKU or a title token, not just brand boilerplate); duplicate alt
+// across a product's images (image-SEO weakness, not an a11y failure).
+// Recon: alt is auto-constructed (SKU + pattern name + brand) → expect decent coverage.
+// NEGATIVE CONTROL: print actual alt VALUES — confirm the parser flags a genuinely
+// empty/null alt as empty AND a populated alt as populated (not blind either way).
+// EXCLUDES Phillip Jeffries.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+const norm=s=>(s||'').toLowerCase().replace(/[^a-z0-9]+/g,' ').trim();
+
+// stratified handle pool across all non-locale product sitemaps
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let handles=[];
+for(const sm of prodMaps){
+ const x=await get(sm);
+ const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]);
+ const step=Math.max(1,Math.floor(hs.length/8));
+ for(let i=0;i<hs.length && handles.length<360;i+=step) handles.push(hs[i]);
+}
+handles=[...new Set(handles)].filter(h=>!PJ.test(h)).slice(0,300);
+console.log(`=== image-alt-audit (READ-ONLY, $0) ===\nsampling ${handles.length} live products across ${prodMaps.length} sitemaps (PJ excluded)\n`);
+
+let prodEval=0, prodNoImage=0, prodAllAlt=0, prodSomeMissing=0, prodAllMissing=0;
+let imgTotal=0, imgAlt=0, imgEmpty=0, imgMeaningful=0, imgDupAlt=0;
+let pjSkip=0, fetchErr=0;
+const emptySamples=[], populatedSamples=[], problems=[];
+let done=0;
+for(const h of handles){
+ const r=await get(`${WWW}/products/${h}.json`);
+ let prod; try{ prod=JSON.parse(r.text).product; }catch{ fetchErr++; done++; continue; }
+ if(!prod){ fetchErr++; done++; continue; }
+ if(PJ.test(prod.vendor||'')||PJ.test(h)){ pjSkip++; done++; continue; }
+ const imgs=prod.images||[];
+ prodEval++;
+ if(imgs.length===0){ prodNoImage++; problems.push({h,issue:'NO-IMAGE'}); done++; await sleep(70); continue; }
+ const sku=norm(prod.variants&&prod.variants[0]&&prod.variants[0].sku);
+ const titleToks=norm(prod.title).split(' ').filter(t=>t.length>3);
+ let missing=0, present=0; const altsSeen=new Set();
+ for(const im of imgs){
+ imgTotal++;
+ const alt=(im.alt==null?'':String(im.alt)).trim();
+ if(alt.length===0){ imgEmpty++; missing++; if(emptySamples.length<8) emptySamples.push({h,id:im.id,raw:JSON.stringify(im.alt)}); }
+ else {
+ imgAlt++; present++;
+ if(populatedSamples.length<5) populatedSamples.push({h,alt:alt.slice(0,70)});
+ const na=norm(alt);
+ const meaningful = (sku && na.includes(sku)) || titleToks.some(t=>na.includes(t));
+ if(meaningful) imgMeaningful++;
+ if(altsSeen.has(na)) imgDupAlt++; else altsSeen.add(na);
+ }
+ }
+ if(missing===0) prodAllAlt++;
+ else if(present===0){ prodAllMissing++; problems.push({h,issue:`ALL-${imgs.length}-IMG-NO-ALT`}); }
+ else { prodSomeMissing++; problems.push({h,issue:`${missing}/${imgs.length}-IMG-NO-ALT`}); }
+ done++;
+ if(done%50===0) console.log(` ${done}/${handles.length} (img alt ${imgAlt}/${imgTotal}; no-image prods ${prodNoImage})`);
+ await sleep(70);
+}
+
+console.log(`\n=== RESULTS ===`);
+console.log(`products evaluated: ${prodEval} | PJ-skipped: ${pjSkip} | fetch/parse-err: ${fetchErr}`);
+console.log(`\n-- product-level --`);
+console.log(` products with 0 images: ${prodNoImage}`);
+console.log(` all images have alt (healthy): ${prodAllAlt}`);
+console.log(` some images missing alt: ${prodSomeMissing}`);
+console.log(` ALL images missing alt (a11y fail): ${prodAllMissing}`);
+console.log(`\n-- image-level (${imgTotal} images) --`);
+console.log(` alt populated: ${imgAlt} (${imgTotal?(100*imgAlt/imgTotal).toFixed(1):0}%)`);
+console.log(` alt EMPTY/missing: ${imgEmpty} (${imgTotal?(100*imgEmpty/imgTotal).toFixed(1):0}%)`);
+console.log(` populated alt that is MEANINGFUL (SKU/title token): ${imgMeaningful}/${imgAlt} (${imgAlt?(100*imgMeaningful/imgAlt).toFixed(1):0}% of populated)`);
+console.log(` duplicate alt within same product (image-SEO weakness): ${imgDupAlt}`);
+if(imgTotal>0){
+ const p=imgEmpty/imgTotal, se=Math.sqrt(p*(1-p)/imgTotal), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** image alt-MISSING rate: ${imgEmpty}/${imgTotal} = ${(100*p).toFixed(1)}% (95% CI ${lo.toFixed(1)}–${hi.toFixed(1)}%, n=${imgTotal}) ***`);
+}
+console.log(`\n-- NEGATIVE CONTROL (parser reads alt values, not blind) --`);
+console.log(` populated-alt samples (detected as populated):`); populatedSamples.forEach(s=>console.log(` ${s.h.slice(0,34)} → "${s.alt}"`));
+if(emptySamples.length){ console.log(` empty-alt samples (raw value, detected as empty):`); emptySamples.forEach(s=>console.log(` ${s.h.slice(0,34)} img=${s.id} raw=${s.raw}`)); }
+else console.log(` (no empty-alt images in sample → cannot show an empty detection; populated detection is proven above)`);
+if(problems.length){ console.log(`\nproblems (first 15):`); problems.slice(0,15).forEach(x=>console.log(` ${x.issue}: ${x.h.slice(0,48)}`)); }
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/image-alt-audit.json',JSON.stringify({ts:new Date().toISOString(),sampled:handles.length,prodEval,prodNoImage,prodAllAlt,prodSomeMissing,prodAllMissing,imgTotal,imgAlt,imgEmpty,imgMeaningful,imgDupAlt,pjSkip,fetchErr,emptySamples,populatedSamples,problems},null,2));
+console.log('\nwrote /tmp/image-alt-audit.json');
diff --git a/scripts/image-integrity-sweep/image-integrity-sweep.mjs b/scripts/image-integrity-sweep/image-integrity-sweep.mjs
new file mode 100644
index 0000000..2ae6a18
--- /dev/null
+++ b/scripts/image-integrity-sweep/image-integrity-sweep.mjs
@@ -0,0 +1,51 @@
+// image-integrity-sweep — READ-ONLY, $0. Cycle 88. The unambiguous storefront defect: an ACTIVE
+// product with NO image = a dead/blank PDP (direct conversion loss + poor feed quality). Exhaustive
+// featuredImage-null check across all active products via Admin GraphQL (no HTTP fan-out for the core).
+// Also: image-count distribution (0 / 1 / 2-5 / 6+), the single-image-PDP soft set, and a SAMPLE of
+// image URLs written out for a separate small 404 spot-check (NOT a 71k full fan-out). EXCLUDES PJ.
+// NEGATIVE CONTROL by construction: if the BULK have images, a no-image product is a true anomaly.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:80, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ title vendor productType totalInventory
+ featuredImage{ url }
+ images(first:6){ edges{ node{ url } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+const dist={0:0,1:0,'2-5':0,'6+':0};
+let noFeatured=0, noImages=0, oneImage=0;
+const noImgByVendor={}, noImgEx=[], oneImgEx=[], urlSample=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const imgs=(n.images?.edges||[]); const k=imgs.length;
+ const hasFeatured=!!(n.featuredImage&&n.featuredImage.url);
+ if(!hasFeatured) noFeatured++;
+ if(k===0){ dist[0]++; noImages++; noImgByVendor[n.vendor]=(noImgByVendor[n.vendor]||0)+1; if(noImgEx.length<30) noImgEx.push({t:(n.title||'').slice(0,46),vendor:n.vendor,type:n.productType,inv:n.totalInventory,feat:hasFeatured}); }
+ else if(k===1){ dist[1]++; oneImage++; if(oneImgEx.length<15) oneImgEx.push({t:(n.title||'').slice(0,40),vendor:n.vendor}); }
+ else if(k<=5) dist['2-5']++; else dist['6+']++;
+ // collect a spread-out URL sample for the 404 spot-check (every ~1800th product)
+ if(hasFeatured && scanned%1800===0 && urlSample.length<40) urlSample.push(n.featuredImage.url);
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<500) await sleep(1500); else await sleep(250);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} no-image=${noImages} no-featured=${noFeatured}`);
+}
+const pct=x=>scanned?(100*x/scanned).toFixed(2):'0';
+console.log(`\n=== image-integrity-sweep (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p) [PJ excluded]`);
+console.log(`\nIMAGE-COUNT DISTRIBUTION:`);
+console.log(` 0 images (DEAD PDP - the unambiguous defect): ${dist[0]} (${pct(dist[0])}%)`);
+console.log(` 1 image (single-image PDP, soft): ${dist[1]} (${pct(dist[1])}%)`);
+console.log(` 2-5 images: ${dist['2-5']} (${pct(dist['2-5'])}%)`);
+console.log(` 6+ images: ${dist['6+']} (${pct(dist['6+'])}%)`);
+console.log(`\nNO featuredImage (storefront shows blank/placeholder): ${noFeatured} (${pct(noFeatured)}%)`);
+console.log(`NEGATIVE CONTROL: with-images ${scanned-noImages} (${pct(scanned-noImages)}%) -> a 0-image product is ${dist[0]>0?'a true anomaly against a with-image bulk':'(none found)'}.`);
+console.log(`\nNO-IMAGE by vendor (top 15):`); Object.entries(noImgByVendor).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nNO-IMAGE examples (feat=has-featuredImage inv=totalInventory):`); noImgEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}] type=${x.type} inv=${x.inv} feat=${x.feat}`));
+console.log(`\nSINGLE-IMAGE examples:`); oneImgEx.forEach(x=>console.log(` "${x.t}" [${x.vendor}]`));
+fs.writeFileSync('/tmp/image-integrity-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,dist,noImages,noFeatured,oneImage,noImgByVendor,noImgEx,oneImgEx,urlSample},null,2));
+console.log(`\nwrote /tmp/image-integrity-sweep.json (urlSample=${urlSample.length} for separate 404 spot-check)`);
diff --git a/scripts/innovations-image-audit/audit.mjs b/scripts/innovations-image-audit/audit.mjs
new file mode 100644
index 0000000..b55599e
--- /dev/null
+++ b/scripts/innovations-image-audit/audit.mjs
@@ -0,0 +1,127 @@
+#!/usr/bin/env node
+/**
+ * Innovations USA primary-image quality audit.
+ * Flags product PRIMARY images that are (a) multi-item compositions or
+ * (b) room scenes where the wallcovering is barely visible — both bad primary
+ * images for a wallcovering listing (the pattern should be shown clearly).
+ *
+ * READ-ONLY: produces a review list (JSON+CSV+HTML). Never edits a product.
+ * Uses Gemini 2.0 Flash (~$0.0006/image) per DW image-analysis rule.
+ *
+ * Usage: node audit.mjs [--limit N]
+ */
+import { readFileSync, writeFileSync, existsSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+import { createRequire } from 'module';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const LIMIT = (() => { const i = process.argv.indexOf('--limit'); return i > -1 ? parseInt(process.argv[i + 1]) : 0; })();
+const CONCURRENCY = 4;
+const PRICE_PER_IMG = 0.0006;
+
+const GEMINI_KEY = (() => {
+ if (process.env.GEMINI_API_KEY) return process.env.GEMINI_API_KEY;
+ const env = readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+ const m = env.match(/^GEMINI_API_KEY=(.+)$/m);
+ return m ? m[1].trim().replace(/^["']|["']$/g, '') : null;
+})();
+const MODEL = 'gemini-2.5-flash';
+const ENDPOINT = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${GEMINI_KEY}`;
+
+const PROMPT = `You are auditing the PRIMARY product image of a WALLCOVERING (wallpaper) listing.
+Classify the image into exactly one verdict:
+- "CLEAN": a single, clear view of the wallcovering itself — a swatch, flat sample, close-up of the pattern/texture, or a wall mostly filled with the covering. This is a GOOD primary image.
+- "MULTI_ITEM": the image clearly shows MULTIPLE distinct items/products — e.g. several rolls or swatches together, a collage/grid of variants, a styled flat-lay with assorted objects, multiple framed samples. The shopper can't tell which single product this is.
+- "ROOM_SPARSE": a room / interior / styled scene where the wallcovering covers only a SMALL portion of the frame or is barely visible (furniture, decor, people, or empty space dominate).
+Return ONLY minified JSON: {"verdict":"CLEAN|MULTI_ITEM|ROOM_SPARSE","confidence":0.0-1.0,"reason":"<8 words max>"}`;
+
+async function fetchImageB64(url) {
+ const res = await fetch(url, { redirect: 'follow' });
+ if (!res.ok) throw new Error('img ' + res.status);
+ const ct = res.headers.get('content-type') || 'image/jpeg';
+ const buf = Buffer.from(await res.arrayBuffer());
+ return { b64: buf.toString('base64'), mime: ct.split(';')[0] };
+}
+
+async function classify(url) {
+ const { b64, mime } = await fetchImageB64(url);
+ // LOCAL-FIRST cost-saver (2026-07-03): free ollama qwen2.5vl before paid Gemini. ENRICH_GEMINI_ONLY=1 forces Gemini.
+ if (process.env.ENRICH_GEMINI_ONLY !== '1') {
+ try {
+ const lr = await fetch('http://127.0.0.1:11434/api/generate', {
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ model: process.env.OLLAMA_VISION_MODEL || 'qwen2.5vl:7b', prompt: PROMPT,
+ images: [b64], format: 'json', stream: false, options: { temperature: 0 } }),
+ signal: AbortSignal.timeout(90000) });
+ if (lr.ok) { const lj = await lr.json(); const mm = (lj.response || '').match(/\{[\s\S]*\}/); if (mm) return JSON.parse(mm[0]); }
+ } catch (_) { /* fall through to Gemini */ }
+ }
+ const body = { contents: [{ parts: [{ text: PROMPT }, { inline_data: { mime_type: mime, data: b64 } }] }],
+ generationConfig: { temperature: 0, maxOutputTokens: 300, responseMimeType: 'application/json', thinkingConfig: { thinkingBudget: 0 } } };
+ const res = await fetch(ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
+ if (!res.ok) throw new Error('gemini ' + res.status + ' ' + (await res.text()).slice(0, 120));
+ const j = await res.json();
+ const txt = (j?.candidates?.[0]?.content?.parts || []).map(p => p.text || '').join('');
+ const m = txt.match(/\{[\s\S]*\}/);
+ if (!m) throw new Error('no json: ' + txt.slice(0, 80));
+ return JSON.parse(m[0]);
+}
+
+function loadProducts() {
+ const require = createRequire(import.meta.url);
+ let pg; try { pg = require('pg'); } catch { pg = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/pg'); }
+ return pg;
+}
+
+async function main() {
+ if (!GEMINI_KEY) { console.error('No GEMINI_API_KEY'); process.exit(1); }
+ const pg = loadProducts();
+ const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp' });
+ let { rows } = await pool.query(
+ `SELECT handle, dw_sku, title, image_url FROM shopify_products
+ WHERE lower(status)='active' AND vendor ILIKE '%innovation%' AND image_url IS NOT NULL AND image_url<>''
+ ORDER BY handle`);
+ await pool.end();
+ if (LIMIT) rows = rows.slice(0, LIMIT);
+ console.log(`Auditing ${rows.length} Innovations images (concurrency ${CONCURRENCY})…\n`);
+
+ const results = [];
+ let done = 0, errs = 0;
+ for (let i = 0; i < rows.length; i += CONCURRENCY) {
+ const slice = rows.slice(i, i + CONCURRENCY);
+ await Promise.all(slice.map(async (p) => {
+ try {
+ const v = await classify(p.image_url);
+ results.push({ ...p, ...v });
+ if (v.verdict !== 'CLEAN') console.log(` ⚑ ${v.verdict} (${v.confidence}) ${p.handle} — ${v.reason}`);
+ } catch (e) {
+ errs++; results.push({ ...p, verdict: 'ERROR', reason: e.message });
+ }
+ done++;
+ }));
+ process.stdout.write(`\r …${done}/${rows.length} (errors ${errs}) `);
+ }
+ console.log('\n');
+
+ const flagged = results.filter(r => r.verdict === 'MULTI_ITEM' || r.verdict === 'ROOM_SPARSE');
+ const cost = (results.length * PRICE_PER_IMG);
+ writeFileSync(join(HERE, 'audit-results.json'), JSON.stringify({ scanned: results.length, flagged: flagged.length, cost_usd: cost.toFixed(3), results }, null, 2));
+ // CSV review list
+ const csv = ['handle,dw_sku,verdict,confidence,reason,image_url',
+ ...flagged.map(r => [r.handle, r.dw_sku || '', r.verdict, r.confidence || '', JSON.stringify(r.reason || ''), r.image_url].join(','))].join('\n');
+ writeFileSync(join(HERE, 'flagged.csv'), csv);
+ // HTML viewer
+ const html = `<!doctype html><meta charset=utf8><title>Innovations image flags</title>
+<style>body{font:14px system-ui;margin:20px}h1{font-size:18px}.g{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.c{border:1px solid #ddd;border-radius:8px;padding:8px}.c img{width:100%;height:180px;object-fit:cover;border-radius:4px}.v{font-weight:600}.MULTI_ITEM{color:#b45309}.ROOM_SPARSE{color:#7c3aed}</style>
+<h1>Innovations USA — flagged primary images (${flagged.length} of ${results.length}, $${cost.toFixed(3)})</h1>
+<div class=g>${flagged.map(r => `<div class=c><img loading=lazy src="${r.image_url}"><div class="v ${r.verdict}">${r.verdict} ${r.confidence ?? ''}</div><div>${r.reason || ''}</div><div style="font-size:12px;color:#666">${r.handle}<br>${r.dw_sku || ''}</div></div>`).join('')}</div>`;
+ writeFileSync(join(HERE, 'flagged.html'), html);
+
+ const byV = results.reduce((a, r) => (a[r.verdict] = (a[r.verdict] || 0) + 1, a), {});
+ console.log('Verdicts:', JSON.stringify(byV));
+ console.log(`FLAGGED: ${flagged.length} (${flagged.filter(r=>r.verdict==='MULTI_ITEM').length} multi-item, ${flagged.filter(r=>r.verdict==='ROOM_SPARSE').length} room-sparse)`);
+ console.log(`Cost: ~$${cost.toFixed(3)} (${results.length} imgs @ $${PRICE_PER_IMG})`);
+ console.log(`→ ${join(HERE, 'flagged.html')} | flagged.csv | audit-results.json`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/innovations-mfr-reconcile/apply-image-fix.mjs b/scripts/innovations-mfr-reconcile/apply-image-fix.mjs
new file mode 100644
index 0000000..0b49104
--- /dev/null
+++ b/scripts/innovations-mfr-reconcile/apply-image-fix.mjs
@@ -0,0 +1,89 @@
+#!/usr/bin/env node
+/**
+ * Apply primary-image fixes for Innovations products whose primary is a bad room/multi-item shot.
+ * Sets the chosen clean 900x900 mfr swatch as the NEW primary (position 0).
+ *
+ * GATED: --execute requires SCRUB_CONFIRM=I-AM-STEVE. Default = dry-run.
+ * Reversible: restore-map records the prior featured image (id+url) per product.
+ * Only the 3 CONFIDENT picks (handle suffix → real mfr SKU). The other 4 stay parked.
+ */
+import { appendFileSync } from 'fs';
+import { join } from 'path';
+import { gql } from '../lib/shopify.mjs';
+
+const EXECUTE = process.argv.includes('--execute');
+const CONFIRMED = process.env.SCRUB_CONFIRM === 'I-AM-STEVE';
+const SWATCH = sku => `https://www.innovationsusa.com/storage/sku/900x900/${sku}.jpg`;
+
+// CONFIDENT picks only — handle suffix maps directly to a real mfr SKU number.
+const PICKS = [
+ { handle: 'origami-by-innovations-usa-dwc-origami-10', sku: 'ORI10' },
+ { handle: 'zion-by-innovations-usa-dwc-zion1', sku: 'ZIO-01' },
+ { handle: 'zion-by-innovations-usa-dwc-zion2', sku: 'ZIO-02' },
+];
+
+const Q_PROD = `query($h:String!){ productByHandle(handle:$h){ id title featuredImage{ id url } media(first:1){ edges{ node{ ... on MediaImage { id } } } } } }`;
+const M_CREATE = `mutation($id:ID!,$media:[CreateMediaInput!]!){ productCreateMedia(productId:$id, media:$media){ media{ ... on MediaImage { id status } } mediaUserErrors{ field message } } }`;
+const Q_MEDIA = `query($id:ID!){ node(id:$id){ ... on MediaImage { id status image{ url } } } }`;
+const M_REORDER = `mutation($id:ID!,$moves:[MoveInput!]!){ productReorderMedia(id:$id, moves:$moves){ job{ id } mediaUserErrors{ field message } } }`;
+const Q_JOB = `query($id:ID!){ job(id:$id){ done } }`;
+const Q_FEAT = `query($h:String!){ productByHandle(handle:$h){ featuredImage{ id url } } }`;
+
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const log = join(process.env.HOME, '.claude/yolo-queue/restore-maps/innovations-image-fix.jsonl');
+
+async function pollMedia(id, tries = 20) {
+ for (let i = 0; i < tries; i++) {
+ const r = await gql(Q_MEDIA, { id });
+ const st = r?.node?.status;
+ if (st === 'READY') return true;
+ if (st === 'FAILED') throw new Error(`media FAILED ${id}`);
+ await sleep(1500);
+ }
+ throw new Error(`media not READY after wait ${id}`);
+}
+async function pollJob(id, tries = 20) {
+ for (let i = 0; i < tries; i++) {
+ const r = await gql(Q_JOB, { id });
+ if (r?.job?.done) return true;
+ await sleep(1000);
+ }
+ return false;
+}
+
+async function main() {
+ console.log(`\n=== Apply ${PICKS.length} Innovations primary-image fixes — ${EXECUTE ? 'EXECUTE' : 'DRY-RUN'} ===\n`);
+ if (EXECUTE && !CONFIRMED) { console.error('⛔ --execute refused: set SCRUB_CONFIRM=I-AM-STEVE'); process.exit(2); }
+
+ let ok = 0; const errs = [];
+ for (const p of PICKS) {
+ const swatch = SWATCH(p.sku);
+ const pr = await gql(Q_PROD, { h: p.handle });
+ const prod = pr?.productByHandle;
+ if (!prod) { errs.push(`${p.handle}: NOT FOUND`); console.log(` ✗ ${p.handle} — not found`); continue; }
+ const prevFeat = prod.featuredImage;
+ console.log(` ${p.handle}\n title=${prod.title}\n current primary=${prevFeat?.url || '(none)'}\n → new swatch=${swatch}`);
+ if (!EXECUTE) { console.log(' [dry-run: no change]\n'); continue; }
+
+ appendFileSync(log, JSON.stringify({ ts: new Date().toISOString(), handle: p.handle, product_id: prod.id, prev_featured: prevFeat, new_sku: p.sku, new_swatch: swatch }) + '\n');
+
+ const cr = await gql(M_CREATE, { id: prod.id, media: [{ originalSource: swatch, mediaContentType: 'IMAGE', alt: `${prod.title} — ${p.sku}` }] });
+ const ue = cr?.productCreateMedia?.mediaUserErrors || [];
+ if (ue.length) { errs.push(`${p.handle}: create ${JSON.stringify(ue)}`); console.log(` ✗ create error`); continue; }
+ const newId = cr?.productCreateMedia?.media?.[0]?.id;
+ if (!newId) { errs.push(`${p.handle}: no media id`); continue; }
+ await pollMedia(newId);
+ const rr = await gql(M_REORDER, { id: prod.id, moves: [{ id: newId, newPosition: '0' }] });
+ const rue = rr?.productReorderMedia?.mediaUserErrors || [];
+ if (rue.length) { errs.push(`${p.handle}: reorder ${JSON.stringify(rue)}`); console.log(` ✗ reorder error`); continue; }
+ const jobId = rr?.productReorderMedia?.job?.id;
+ if (jobId) await pollJob(jobId);
+ await sleep(1500);
+ const fr = await gql(Q_FEAT, { h: p.handle });
+ console.log(` ✓ new primary=${fr?.productByHandle?.featuredImage?.url}\n`);
+ ok++;
+ }
+ console.log(`\n✅ Applied ${ok}/${PICKS.length}, errors=${errs.length}. restore-map → ${log}`);
+ if (errs.length) console.log(errs.join('\n'));
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/innovations-mfr-reconcile/archive-discontinued.mjs b/scripts/innovations-mfr-reconcile/archive-discontinued.mjs
new file mode 100644
index 0000000..1bec872
--- /dev/null
+++ b/scripts/innovations-mfr-reconcile/archive-discontinued.mjs
@@ -0,0 +1,83 @@
+#!/usr/bin/env node
+/**
+ * Archive Innovations products DISCONTINUED on the mfr site (READ-ONLY by default).
+ * Source: reconcile.json status==='DISCONTINUED' — each has a real SKU that is absent
+ * from the mfr pattern page AND returns 404 on its own item page (double-verified).
+ * Per DW rule: discontinued → status:'archived' (never draft, never delete; preserves SEO/orders).
+ *
+ * GATED: --execute requires SCRUB_CONFIRM=I-AM-STEVE. Default = dry-run.
+ * PG-first (mirror status) + direct productUpdate (status:ARCHIVED). Reversible: restore-map
+ * captures prev status; un-archive = set status back to ACTIVE.
+ */
+import { readFileSync, appendFileSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+import { createRequire } from 'module';
+import { gql } from '../lib/shopify.mjs';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const EXECUTE = process.argv.includes('--execute');
+const CONFIRMED = process.env.SCRUB_CONFIRM === 'I-AM-STEVE';
+
+const MUT = `mutation($input:ProductInput!){ productUpdate(input:$input){ product{ id status } userErrors{ field message } } }`;
+const BASE = 'https://www.innovationsusa.com';
+const SLUG = { rangoon: 'rangoon-silk' };
+
+// Live re-verify at execute time (officer revision #1): a row is only archived if its own
+// mfr item page is GONE right now (404 or redirected away) — guards against a stale reconcile.json
+// archiving a SKU the mfr has re-listed. Returns true = confirmed discontinued.
+async function confirmGoneLive(row) {
+ const slug = SLUG[row.patt] || row.patt;
+ const sku = (row.mfr_sku || row.suffix).toLowerCase();
+ const url = `${BASE}/item/${slug}/${sku}`;
+ try {
+ const r = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' }, redirect: 'follow' });
+ // HARD gate (officer rev): archive ONLY on a genuine 404. A 5xx/timeout/redirect is NOT
+ // proof of discontinuation → treat as still-live (skip), never archive on ambiguity.
+ const gone = r.status === 404;
+ return { gone, url, code: r.status, finalUrl: r.url };
+ } catch (e) { return { gone: false, url, code: 'ERR', err: e.message }; }
+}
+
+async function main() {
+ const data = JSON.parse(readFileSync(join(HERE, 'reconcile.json'), 'utf8'));
+ const rows = data.classify.filter(r => r.status === 'DISCONTINUED');
+ console.log(`\n=== Archive ${rows.length} DISCONTINUED Innovations products — ${EXECUTE ? 'EXECUTE' : 'DRY-RUN'} ===\n`);
+ rows.forEach(r => console.log(` ${r.suffix.padEnd(10)} ${r.dw_sku || '(no dw_sku)'} ${r.handle}`));
+
+ if (!EXECUTE) { console.log('\nDRY-RUN: nothing changed. Re-run with --execute + SCRUB_CONFIRM=I-AM-STEVE.'); return; }
+ if (!CONFIRMED) { console.error('\n⛔ --execute refused: set SCRUB_CONFIRM=I-AM-STEVE (Steve only).'); process.exit(2); }
+
+ const require = createRequire(import.meta.url);
+ let pg; try { pg = require('pg'); } catch { pg = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/pg'); }
+ const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp' });
+ const log = join(process.env.HOME, '.claude/yolo-queue/restore-maps/innovations-archive-discontinued.jsonl');
+ let ok = 0, skipped = 0; const errs = [];
+ for (const r of rows) {
+ // Officer rev #1: live re-confirm the item page is gone before archiving.
+ const v = await confirmGoneLive(r);
+ if (!v.gone) { skipped++; console.log(` ⏭ SKIP ${r.suffix} — still LIVE (${v.code} ${v.finalUrl || v.url}); not archiving`); continue; }
+ appendFileSync(log, JSON.stringify({ ts: new Date().toISOString(), handle: r.handle, shopify_id: r.shopify_id, prev_status: 'ACTIVE', live_check: v }) + '\n');
+ const res = await gql(MUT, { input: { id: r.shopify_id, status: 'ARCHIVED' } });
+ const ue = res?.productUpdate?.userErrors || [];
+ if (ue.length) { errs.push(`${r.handle}: ${JSON.stringify(ue)}`); continue; }
+ await pool.query(`UPDATE shopify_products SET status='archived' WHERE shopify_id=$1`, [r.shopify_id]);
+ ok++;
+ // GMC self-clean (Steve-approved 2026-07-10): delete this product's Google offer at the moment
+ // of a confirmed archive so an orphan never forms. Fail-open — a GMC error never breaks the
+ // archive. Disable by setting GMC_SELFCLEAN=0. The daily reconcile canary is the catch-all net.
+ if (process.env.GMC_SELFCLEAN !== '0') {
+ try {
+ const pid = String(r.shopify_id).match(/(\d+)\s*$/)?.[1];
+ if (pid) {
+ const { execFileSync } = await import('node:child_process');
+ execFileSync('node', [`${process.env.HOME}/.claude/skills/google-merchant-agent/gmc-delete-for-product.mjs`, `--product=${pid}`, '--apply', '--yes-i-am-steve'], { stdio: 'ignore', timeout: 60000 });
+ }
+ } catch { /* fail-open: never break the archive on a GMC cleanup error */ }
+ }
+ }
+ await pool.end();
+ console.log(`\n✅ Archived ${ok}/${rows.length} (skipped ${skipped} still-live), errors=${errs.length}. restore-map → ${log}`);
+ if (errs.length) console.log(errs.join('\n'));
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/innovations-mfr-reconcile/reconcile.mjs b/scripts/innovations-mfr-reconcile/reconcile.mjs
new file mode 100644
index 0000000..5e9e2e5
--- /dev/null
+++ b/scripts/innovations-mfr-reconcile/reconcile.mjs
@@ -0,0 +1,88 @@
+#!/usr/bin/env node
+/**
+ * Innovations USA mfr reconciliation (READ-ONLY).
+ * Fetches the LIVE mfr catalog (innovationsusa.com) for the patterns our active
+ * products belong to, builds the set of currently-live SKUs, then classifies each
+ * of our 221 active Innovations products:
+ * - LIVE : derived SKU is still on the mfr site
+ * - DISCONTINUED : derived SKU is a real SKU but NO LONGER on the mfr → archive candidate
+ * - NO_SKU_MATCH : handle suffix is an enumeration (sumatra-5, geode-12, innovations_zion),
+ * not a real SKU → can't auto-decide, needs manual
+ * Also captures, per live SKU, the clean 900x900 swatch image URL (for the image fix).
+ * Writes a proposal JSON+CSV. NO catalog write.
+ */
+import { writeFileSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+import { createRequire } from 'module';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/537.36';
+const BASE = 'https://www.innovationsusa.com';
+
+// our-parsed-pattern → mfr slug (only where they differ)
+const SLUG = { rangoon: 'rangoon-silk' };
+const SKIP_PATTERNS = new Set(['by']); // 'by-...' handles carry the real SKU in the suffix; covered by other pattern pages
+
+const isRealSku = (s) => /^[A-Z]{2,4}-?\d{2,4}$/.test(s); // ORI20, J602, RS8493, SUM-221, VAN-001, HUN-05
+
+async function fetchText(url) {
+ const r = await fetch(url, { headers: { 'User-Agent': UA }, redirect: 'follow' });
+ return r.ok ? await r.text() : '';
+}
+
+async function main() {
+ const require = createRequire(import.meta.url);
+ let pg; try { pg = require('pg'); } catch { pg = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/pg'); }
+ const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp' });
+ const { rows: prods } = await pool.query(
+ `SELECT handle, dw_sku, title, image_url, shopify_id,
+ split_part(regexp_replace(handle,'-by-innovations.*$',''),'-',1) AS patt,
+ upper(regexp_replace(handle,'^.*-dwc-','')) AS suffix
+ FROM shopify_products WHERE lower(status)='active' AND vendor ILIKE '%innovation%' ORDER BY handle`);
+ await pool.end();
+
+ const patterns = [...new Set(prods.map(p => p.patt))].filter(p => !SKIP_PATTERNS.has(p));
+ console.log(`Fetching ${patterns.length} mfr pattern pages…`);
+
+ const liveSkus = new Set(); // all live SKUs (uppercased, normalized no-dash)
+ const liveSkuRaw = new Map(); // norm → raw mfr sku (with dash)
+ const swatchBySku = new Map(); // norm → 900x900 swatch url
+ for (const p of patterns) {
+ const slug = SLUG[p] || p;
+ const html = await fetchText(`${BASE}/item/${slug}`) || await fetchText(`${BASE}/item/${slug}/`);
+ if (!html) { console.log(` ⚠ ${slug}: no page`); continue; }
+ const skus = [...html.matchAll(new RegExp(`/item/${slug}/([a-z0-9-]+)`, 'gi'))].map(m => m[1].toUpperCase());
+ const uniq = [...new Set(skus)];
+ uniq.forEach(s => { const n = s.replace(/-/g, ''); liveSkus.add(n); liveSkuRaw.set(n, s); });
+ // swatch urls present on the page
+ [...html.matchAll(/storage\/sku\/900x900\/([A-Z0-9-]+)\.jpg/gi)].forEach(m => {
+ const n = m[1].toUpperCase().replace(/-/g, ''); swatchBySku.set(n, `${BASE}/storage/sku/900x900/${m[1]}.jpg`);
+ });
+ console.log(` ${slug}: ${uniq.length} live SKUs`);
+ }
+ console.log(`Total live SKUs: ${liveSkus.size}\n`);
+
+ const classify = prods.map(p => {
+ const norm = p.suffix.replace(/-/g, '');
+ if (!isRealSku(p.suffix)) return { ...p, status: 'NO_SKU_MATCH', mfr_sku: null };
+ const live = liveSkus.has(norm);
+ return { ...p, status: live ? 'LIVE' : 'DISCONTINUED', mfr_sku: liveSkuRaw.get(norm) || p.suffix,
+ swatch: swatchBySku.get(norm) || (live ? `${BASE}/storage/sku/900x900/${liveSkuRaw.get(norm)}.jpg` : null) };
+ });
+
+ const byStatus = classify.reduce((a, r) => (a[r.status] = (a[r.status] || 0) + 1, a), {});
+ const discontinued = classify.filter(r => r.status === 'DISCONTINUED');
+ const noMatch = classify.filter(r => r.status === 'NO_SKU_MATCH');
+ console.log('CLASSIFICATION:', JSON.stringify(byStatus));
+ console.log(`\nDISCONTINUED (archive candidates): ${discontinued.length}`);
+ discontinued.forEach(r => console.log(` ${r.suffix.padEnd(10)} ${r.dw_sku || '(no dw_sku)'} ${r.handle}`));
+ console.log(`\nNO_SKU_MATCH (enumerated handles, manual): ${noMatch.length} — e.g. ${noMatch.slice(0,8).map(r=>r.suffix).join(', ')}`);
+
+ writeFileSync(join(HERE, 'reconcile.json'), JSON.stringify({ liveSkuCount: liveSkus.size, byStatus, classify }, null, 2));
+ const csv = ['handle,dw_sku,suffix,status,mfr_sku,swatch,current_image',
+ ...classify.map(r => [r.handle, r.dw_sku||'', r.suffix, r.status, r.mfr_sku||'', r.swatch||'', r.image_url].join(','))].join('\n');
+ writeFileSync(join(HERE, 'reconcile.csv'), csv);
+ console.log(`\n→ ${join(HERE,'reconcile.json')} | reconcile.csv`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/innovations-mfr-reconcile/run-archive.sh b/scripts/innovations-mfr-reconcile/run-archive.sh
new file mode 100755
index 0000000..db19fe9
--- /dev/null
+++ b/scripts/innovations-mfr-reconcile/run-archive.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Steve-authorized wrapper for the Innovations discontinued-archive execute.
+# Env + cwd live inside so the permission rule matches one clean command.
+# Officer-unanimous + DTD-unanimous; each item live-404-rechecked before archiving.
+set -euo pipefail
+cd /Users/macstudio3/Projects/designerwallcoverings
+export NODE_PATH="$HOME/Projects/Designer-Wallcoverings/node_modules"
+export SCRUB_CONFIRM=I-AM-STEVE
+exec node scripts/innovations-mfr-reconcile/archive-discontinued.mjs --execute "$@"
diff --git a/scripts/innovations-reprice/stage-innov-reprice.mjs b/scripts/innovations-reprice/stage-innov-reprice.mjs
new file mode 100644
index 0000000..ee5c3b4
--- /dev/null
+++ b/scripts/innovations-reprice/stage-innov-reprice.mjs
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+/**
+ * stage-innov-reprice.mjs — make the live, $4.25-sample-only Innovations products SELLABLE by
+ * ADDING a "Size: Yard" variant priced at our retail (= price_trade / 0.65 / 0.85, per YARD),
+ * preserving the existing $4.25 Sample. Innovations is sold PER LINEAR YARD (10% off net cost).
+ *
+ * DEFAULT = DRY-RUN: builds the productVariantsBulkCreate payloads to innov-reprice-payloads.jsonl
+ * + a readable plan; writes NOTHING to Shopify. LIVE requires BOTH --execute AND --i-am-steve
+ * (customer-facing money op; Steve-gated). Mirrors build-jd-yard-variants.mjs conventions.
+ *
+ * Source of truth = Mac2 dw_unified.innovations_catalog (price_trade, per-yd; shopify_product_id
+ * backfilled by the 2026-06-18 cadence link). Live option/variant structure read from Shopify.
+ *
+ * SAFETY / GUARDS:
+ * • SKU: yard sku derived from the LIVE sample sku stem (<stem>-Sample -> <stem>-Yard). If a
+ * product's live sample sku doesn't end in -Sample, SKIP (logged) — never guess.
+ * • IDEMPOTENT: skip any product that already has a non-Sample sellable variant (a -Yard sku
+ * or a Size value other than "Sample").
+ * • No-standalone trap: the live variant is a NAMED option ("Size: Sample"), not "Title: Default
+ * Title", so a plain add (strategy default) won't consume the sample. (REMOVE_STANDALONE_VARIANT
+ * is NOT used — it would delete the Sample here.)
+ * • Only ACTIVE/DRAFT products with price_trade>0 and a backfilled shopify_product_id.
+ */
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+import https from 'node:https';
+import os from 'node:os';
+import path from 'node:path';
+
+const EXECUTE = process.argv.includes('--execute') && process.argv.includes('--i-am-steve');
+const LIMIT = (process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1];
+const OUTDIR = path.dirname(new URL(import.meta.url).pathname);
+const PAYLOADS = path.join(OUTDIR, 'innov-reprice-payloads.jsonl');
+const PLAN = path.join(OUTDIR, 'innov-reprice-plan.csv');
+const ROLLBACK = path.join(OUTDIR, 'innov-reprice-rollback.jsonl'); // created variant ids → reversal map
+
+const TOKEN = (fs.readFileSync(os.homedir() + '/Projects/secrets-manager/.env', 'utf8')
+ .match(/^SHOPIFY_ADMIN_TOKEN=(.*)$/m) || [])[1].replace(/['"]/g, '').trim();
+const STORE = 'designer-laboratory-sandbox.myshopify.com', API = '2024-10';
+const RETAIL = c => Math.round((c / 0.65 / 0.85) * 100) / 100; // same formula as cadence-import
+const psql = sql => execFileSync('psql', ['-At', '-F', '\t', '-d', 'dw_unified', '-c', sql], { encoding: 'utf8' }).trim();
+const gql = (q, v) => new Promise((res, rej) => {
+ const body = JSON.stringify({ query: q, variables: v });
+ const r = https.request({ host: STORE, path: `/admin/api/${API}/graphql.json`, method: 'POST',
+ headers: { 'Content-Type': 'application/json', 'X-Shopify-Access-Token': TOKEN, 'Content-Length': Buffer.byteLength(body) } },
+ rr => { let d = ''; rr.on('data', c => d += c); rr.on('end', () => { try { res(JSON.parse(d)); } catch { rej(d.slice(0, 300)); } }); });
+ r.on('error', rej); r.write(body); r.end();
+});
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// 1) the linked, costed Innovations products
+let rows = psql(`SELECT dw_sku, shopify_product_id, price_trade, pattern_name, color_name
+ FROM innovations_catalog
+ WHERE price_trade > 0 AND coalesce(shopify_product_id::text,'') <> ''
+ ORDER BY dw_sku;`).split('\n').filter(Boolean).map(l => {
+ const [dw_sku, pid, cost, pattern, color] = l.split('\t');
+ const idNum = String(pid).replace(/.*\//, ''); // normalize: bare-numeric OR full gid -> bare numeric
+ return { dw_sku, pid, idNum, cost: parseFloat(cost), retail: RETAIL(parseFloat(cost)), pattern, color };
+ });
+if (LIMIT) rows = rows.slice(0, parseInt(LIMIT, 10));
+console.log(`stage-innov-reprice — ${EXECUTE ? '⚠️ LIVE' : 'DRY-RUN (no writes)'} — ${rows.length} costed+linked products`);
+
+const NODES = `query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product { id status
+ options{ name } variants(first:25){ nodes{ id sku price selectedOptions{ name value } } } } } }`;
+const ADD = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$variants){ productVariants{ id sku } userErrors{ field message } } }`;
+
+fs.writeFileSync(PAYLOADS, '');
+fs.writeFileSync(PLAN, 'dw_sku,pattern,color,status,sample_price,proposed_yard_sku,proposed_yard_price,action\n');
+const stat = { plan: 0, skip_has_yard: 0, skip_no_sample_sku: 0, skip_no_product: 0, would_write: 0 };
+
+for (let i = 0; i < rows.length; i += 20) {
+ const batch = rows.slice(i, i + 20);
+ const ids = batch.map(r => `gid://shopify/Product/${r.idNum}`);
+ const resp = await gql(NODES, { ids });
+ if (resp?.errors) console.error(` ⚠ batch ${i} GraphQL error: ${JSON.stringify(resp.errors).slice(0,160)}`);
+ const nodes = resp?.data?.nodes || [];
+ const byId = new Map(nodes.filter(Boolean).map(n => [n.id.replace(/.*\//, ''), n]));
+ for (const r of batch) {
+ const n = byId.get(r.idNum);
+ if (!n) { stat.skip_no_product++; fs.appendFileSync(PLAN, `${r.dw_sku},${q(r.pattern)},${q(r.color)},,,,,SKIP_no_live_product\n`); continue; }
+ const vs = n.variants.nodes;
+ const sample = vs.find(v => /-Sample$/i.test(v.sku || '')) || vs.find(v => (v.selectedOptions||[]).some(o => /sample/i.test(o.value)));
+ const hasYard = vs.some(v => /-Yard$/i.test(v.sku || '') || (v.selectedOptions||[]).some(o => /yard/i.test(o.value)));
+ if (hasYard) { stat.skip_has_yard++; fs.appendFileSync(PLAN, `${r.dw_sku},${q(r.pattern)},${q(r.color)},${n.status},${sample?.price||''},,,SKIP_already_has_yard\n`); continue; }
+ if (!sample || !/-Sample$/i.test(sample.sku || '')) { stat.skip_no_sample_sku++; fs.appendFileSync(PLAN, `${r.dw_sku},${q(r.pattern)},${q(r.color)},${n.status},${sample?.price||''},,,SKIP_no_-Sample_sku\n`); continue; }
+ const optName = n.options?.[0]?.name || 'Size';
+ const yardSku = sample.sku.replace(/-Sample$/i, '-Yard');
+ const payload = { pid: n.id, dw_sku: r.dw_sku, status: n.status, optName, sampleSku: sample.sku, samplePrice: sample.price,
+ variants: [{ price: String(r.retail), optionValues: [{ optionName: optName, name: 'Yard' }],
+ inventoryPolicy: 'CONTINUE', inventoryItem: { sku: yardSku, tracked: false } }] };
+ fs.appendFileSync(PAYLOADS, JSON.stringify(payload) + '\n');
+ fs.appendFileSync(PLAN, `${r.dw_sku},${q(r.pattern)},${q(r.color)},${n.status},${sample.price},${yardSku},${r.retail},ADD_YARD\n`);
+ stat.plan++;
+ if (EXECUTE) {
+ const w = await gql(ADD, { pid: n.id, variants: payload.variants });
+ const ue = w?.data?.productVariantsBulkCreate?.userErrors;
+ if (ue?.length) { console.log(` ✗ ${r.dw_sku}: ${JSON.stringify(ue)}`); }
+ else {
+ const created = w?.data?.productVariantsBulkCreate?.productVariants || [];
+ fs.appendFileSync(ROLLBACK, JSON.stringify({ dw_sku: r.dw_sku, pid: n.id, yardSku, samplePrice: sample.price, variantIds: created.map(v => v.id) }) + '\n');
+ stat.would_write++; console.log(` ✓ ${r.dw_sku} → ${yardSku} @ $${r.retail} (${created.map(v => v.id.replace(/.*\//, '')).join(',')})`);
+ }
+ await sleep(350);
+ }
+ }
+ await sleep(250);
+}
+function q(s){ return '"'+String(s||'').replace(/"/g,'""')+'"'; }
+console.log(`\n${EXECUTE ? 'WROTE' : 'DRY-RUN planned'} ${stat.plan} yard variants · skip(has-yard ${stat.skip_has_yard} / no-sample-sku ${stat.skip_no_sample_sku} / no-product ${stat.skip_no_product})`);
+console.log(`payloads → ${PAYLOADS}\nplan → ${PLAN}`);
diff --git a/scripts/inverse-mislabel-disambig/inverse-mislabel-disambig.mjs b/scripts/inverse-mislabel-disambig/inverse-mislabel-disambig.mjs
new file mode 100644
index 0000000..a743f5d
--- /dev/null
+++ b/scripts/inverse-mislabel-disambig/inverse-mislabel-disambig.mjs
@@ -0,0 +1,75 @@
+// inverse-mislabel-disambig — READ-ONLY, $0. Cycle 85. Disambiguates the c84 238 inverse-mislabels
+// (single-variant, price<=THRESH, title NOT /sample/i, NOT showroom-tagged) the c84 officer REQUIRED
+// before any fix: are these an UNTAGGED Showroom-Lines batch (cheap fix = add the tag/metafield) or
+// GENUINE mislabels (fix = SPLIT, unexecutable for PR with no price sheet)?
+//
+// Read-only signals captured PER product (the officer's exact asks):
+// 1. showroom-lines COLLECTION membership — in the collection but missing the tag? => untagged-Showroom
+// 2. custom.showroom_line METAFIELD present — has the metafield but missing the tag? => untagged-Showroom
+// 3. variant title "Default Title" vs other — separates the 233 core from the 5 outliers
+// 4. images count + body_html length — swatch-vs-full-product presentation proxy (a real swatch
+// PDP tends to be sparse; a full-product PDP has rich copy/imagery)
+// Decision per product: untagged-Showroom (collection OR metafield present) => TAG fix (cheap, safe);
+// else genuine-mislabel => SPLIT (gated on real cost; unexecutable for PR). EXCLUDES PJ.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const THRESH=Number(process.env.THRESH||10);
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+// Capture the disambiguation signals. collections(first:30) handles, the showroom_line metafield,
+// image count via images(first:11) (cap+1 to observe truncation), body_html length.
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor}
+ edges{node{ id title vendor tags productType
+ descriptionHtml
+ metafield(namespace:"custom", key:"showroom_line"){ value }
+ collections(first:30){ edges{ node{ handle } } }
+ images(first:11){ edges{ node{ id } } }
+ variants(first:3){ edges{ node{ title price } } } } } } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let matched=0;
+// disposition buckets
+let bColl=0, bMeta=0, bCollOrMeta=0, bNeither=0;
+const byVendor={}, byVariantTitle={}, sample=[];
+const SHOWROOM_COLL=/showroom/i;
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node); if(vs.length!==1)continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isNaN(p)||p>THRESH) continue;
+ if(isSample(n.title)||isSample(v.title)) continue;
+ if((n.tags||[]).some(t=>/showroom/i.test(t))) continue; // tagged showroom already excluded (the 2,768)
+ // === this node is one of the c84 238 ===
+ matched++;
+ const inShowroomColl=(n.collections?.edges||[]).some(x=>SHOWROOM_COLL.test(x.node.handle||''));
+ const hasMeta=!!(n.metafield&&n.metafield.value);
+ const imgN=(n.images?.edges||[]).length; // 11 means >=11 (truncated)
+ const bodyLen=(n.descriptionHtml||'').replace(/<[^>]+>/g,'').trim().length;
+ if(inShowroomColl) bColl++;
+ if(hasMeta) bMeta++;
+ if(inShowroomColl||hasMeta) bCollOrMeta++; else bNeither++;
+ byVendor[n.vendor]=byVendor[n.vendor]||{n:0,collOrMeta:0}; byVendor[n.vendor].n++; if(inShowroomColl||hasMeta) byVendor[n.vendor].collOrMeta++;
+ byVariantTitle[v.title]=(byVariantTitle[v.title]||0)+1;
+ if(sample.length<40 || !inShowroomColl) { if(sample.length<60) sample.push({t:n.title.slice(0,42),vendor:n.vendor,p,vt:v.title,coll:inShowroomColl,meta:hasMeta,img:imgN,body:bodyLen}); }
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<400) await sleep(1800); else await sleep(300);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} matched=${matched}`);
+}
+console.log(`\n=== inverse-mislabel-disambig (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p)`);
+console.log(`c84 inverse-mislabels re-matched: ${matched}`);
+console.log(`\nDISPOSITION SIGNAL (the officer's tag-vs-SPLIT question):`);
+console.log(` in a showroom COLLECTION (untagged-showroom signal): ${bColl}`);
+console.log(` has custom.showroom_line METAFIELD (untagged-showroom signal): ${bMeta}`);
+console.log(` collection OR metafield present => UNTAGGED-SHOWROOM (cheap TAG fix): ${bCollOrMeta}`);
+console.log(` NEITHER => genuine-mislabel candidate (SPLIT, gated on cost): ${bNeither}`);
+console.log(`\nby vendor (top 15) [n / of-which-untagged-showroom]:`);
+Object.entries(byVendor).sort((a,b)=>b[1].n-a[1].n).slice(0,15).forEach(([v,o])=>console.log(` ${v}: ${o.n} / ${o.collOrMeta} untagged-showroom`));
+console.log(`\nby variant-title:`); Object.entries(byVariantTitle).sort((a,b)=>b[1]-a[1]).slice(0,8).forEach(([t,n])=>console.log(` "${t}": ${n}`));
+console.log(`\nsamples (coll=in-showroom-collection meta=has-metafield img=#images body=plaintext-chars):`);
+sample.forEach(x=>console.log(` "${x.t}" [${x.vendor}] $${x.p} v="${x.vt}" coll=${x.coll} meta=${x.meta} img=${x.img} body=${x.body}`));
+fs.writeFileSync('/tmp/inverse-mislabel-disambig.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,thresh:THRESH,matched,bColl,bMeta,bCollOrMeta,bNeither,byVendor,byVariantTitle,sample},null,2));
+console.log(`\nwrote /tmp/inverse-mislabel-disambig.json`);
diff --git a/scripts/inverse-mislabel-disambig/showroom-negctrl.mjs b/scripts/inverse-mislabel-disambig/showroom-negctrl.mjs
new file mode 100644
index 0000000..fe27d7f
--- /dev/null
+++ b/scripts/inverse-mislabel-disambig/showroom-negctrl.mjs
@@ -0,0 +1,37 @@
+// showroom-negctrl — READ-ONLY, $0. Cycle 85 NEGATIVE CONTROL for inverse-mislabel-disambig.
+// The disambig signal = "untagged-Showroom iff in showroom collection OR has custom.showroom_line".
+// That signal is only meaningful if the DELIBERATE Showroom-Lines set (tag ~ /showroom/) actually
+// CARRIES those two markers. If tagged-showroom products are themselves tag-only (no collection,
+// no metafield), then 0/238 having them proves nothing. This samples tagged-showroom products and
+// measures collection-membership + metafield coverage = the control that validates the disambig signal.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+// query tagged-showroom products directly via Shopify search; sample first ~600
+const Q=`query($cursor:String){ products(first:60, after:$cursor, query:"status:active tag:showroom*"){ pageInfo{hasNextPage endCursor}
+ edges{node{ vendor tags
+ metafield(namespace:"custom", key:"showroom_line"){ value }
+ collections(first:30){ edges{ node{ handle } } } } } } }`;
+let cursor=null,pages=0,n=0,inColl=0,hasMeta=0,either=0,both=0,neither=0;
+const SHOWROOM_COLL=/showroom/i; const CAP=Number(process.env.CAP||600);
+while(n<CAP){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const p=e.node; n++;
+ const ic=(p.collections?.edges||[]).some(x=>SHOWROOM_COLL.test(x.node.handle||''));
+ const hm=!!(p.metafield&&p.metafield.value);
+ if(ic)inColl++; if(hm)hasMeta++; if(ic||hm)either++; if(ic&&hm)both++; if(!ic&&!hm)neither++;
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; await sleep(400);
+}
+console.log(`=== showroom-negctrl (READ-ONLY, $0) — deliberate Showroom-Lines marker coverage ===`);
+console.log(`tagged-showroom active products sampled: ${n} (${pages}p)`);
+console.log(` in a showroom COLLECTION: ${inColl} (${(100*inColl/n).toFixed(1)}%)`);
+console.log(` has custom.showroom_line METAFIELD: ${hasMeta} (${(100*hasMeta/n).toFixed(1)}%)`);
+console.log(` collection OR metafield (the disambig signal): ${either} (${(100*either/n).toFixed(1)}%)`);
+console.log(` collection AND metafield: ${both} (${(100*both/n).toFixed(1)}%)`);
+console.log(` NEITHER (tag-only, would break the signal): ${neither} (${(100*neither/n).toFixed(1)}%)`);
+console.log(`\nINTERPRETATION: if 'collection OR metafield' coverage is HIGH, then 0/238 carrying it is a`);
+console.log(`strong genuine-mislabel signal (the 238 lack what real showroom products have). If LOW,`);
+console.log(`the signal is weak and the 238 can't be dispositioned on collection/metafield alone.`);
diff --git a/scripts/inverse-mislabel-sweep/inverse-mislabel-sweep.mjs b/scripts/inverse-mislabel-sweep/inverse-mislabel-sweep.mjs
new file mode 100644
index 0000000..4204d5f
--- /dev/null
+++ b/scripts/inverse-mislabel-sweep/inverse-mislabel-sweep.mjs
@@ -0,0 +1,45 @@
+// inverse-mislabel-sweep — READ-ONLY, $0. Cycle 84. Measures the c83-named residual the
+// "Sample"-titled sweeps structurally missed: single-variant products priced like a SAMPLE
+// (<= THRESH) but titled as the FULL product (NO "sample" word) and NOT tagged Showroom —
+// a shopper adds what reads as a wallcovering and receives a swatch (inverse of the
+// roll-priced-"Sample" mislabel). EXCLUDES the deliberate Showroom-Lines (tag ~ /showroom/),
+// which legitimately list single-variant at $4.25. STRUCTURAL signature (c83): single-variant
+// + price<=THRESH + title lacks /sample/i + variant title is "Default Title" (never split into
+// Sample+roll) + not showroom-tagged. NEGATIVE CONTROL: a $4.25 "Sample"-titled product must
+// NOT match; a full-price wallcovering must NOT match. READ-ONLY Admin GraphQL. EXCLUDES PJ-vendor.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const THRESH=Number(process.env.THRESH||10); // sample-scale ceiling
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor} edges{node{title vendor tags productType variants(first:3){edges{node{title price}}}}} } }`;
+let cursor=null,pages=0,scanned=0,complete=true;
+let invMislabel=0, showroomExcl=0, sampleTitled=0;
+const byVendor={}, byVariantTitle={}, ex=[];
+while(true){ const j=await gql(Q,{cursor}); if(!j?.data){complete=false;break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue; scanned++; const vs=(n.variants?.edges||[]).map(x=>x.node); if(vs.length!==1)continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isNaN(p)||p>THRESH) continue; // sample-scale single-variant only
+ if(isSample(n.title)||isSample(v.title)){ sampleTitled++; continue; } // titled Sample = the OTHER (already-decoded) class
+ if((n.tags||[]).some(t=>/showroom/i.test(t))){ showroomExcl++; continue; } // deliberate showroom-line, EXCLUDE
+ invMislabel++;
+ byVendor[n.vendor]=(byVendor[n.vendor]||0)+1;
+ byVariantTitle[v.title]=(byVariantTitle[v.title]||0)+1;
+ if(ex.length<20) ex.push({t:n.title.slice(0,46),vt:v.title,p,type:n.productType,vendor:n.vendor});
+ }
+ pages++; if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<800) await sleep(1500); else await sleep(200);
+ if(pages%100===0) console.log(` ${pages}p scanned=${scanned} inv-mislabel=${invMislabel}`);
+}
+console.log(`\n=== inverse-mislabel-sweep (READ-ONLY, $0) ===`);
+console.log(`active scanned: ${scanned} (complete=${complete}, ${pages}p)`);
+console.log(`single-variant <=$${THRESH}, title NOT 'sample', NOT showroom-tagged = INVERSE-MISLABEL: ${invMislabel}`);
+console.log(` (excluded: ${showroomExcl} deliberate Showroom-Lines; ${sampleTitled} 'Sample'-titled = the already-decoded class)`);
+console.log(`\nby vendor (top 15):`); Object.entries(byVendor).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+console.log(`\nby variant-title:`); Object.entries(byVariantTitle).sort((a,b)=>b[1]-a[1]).slice(0,8).forEach(([t,n])=>console.log(` "${t}": ${n}`));
+console.log(`\nexamples:`); ex.forEach(x=>console.log(` "${x.t}" v="${x.vt}" \$${x.p} type=${x.type} [${x.vendor}]`));
+fs.writeFileSync('/tmp/inverse-mislabel-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,complete,thresh:THRESH,invMislabel,showroomExcl,sampleTitled,byVendor,byVariantTitle,ex},null,2));
+console.log(`\nwrote /tmp/inverse-mislabel-sweep.json`);
diff --git a/scripts/jsonld-425-scan/jsonld-425-scan.mjs b/scripts/jsonld-425-scan/jsonld-425-scan.mjs
new file mode 100644
index 0000000..2b80d59
--- /dev/null
+++ b/scripts/jsonld-425-scan/jsonld-425-scan.mjs
@@ -0,0 +1,81 @@
+// jsonld-425-scan — READ-ONLY, $0. Wider stratified follow-up to c61. Sizes the
+// confirmed $4.25-JSON-LD leak against the MULTI-VARIANT population specifically.
+// For each sampled live PDP: parse Product JSON-LD offers.price + fetch variant
+// prices. Classify:
+// - single-variant (not at risk by definition)
+// - multi-variant + $4.25 default in JSON-LD while real variant exists = LEAK
+// - multi-variant + JSON-LD shows real price = OK
+// Honest denominator = the MULTI-VARIANT population (the only set that can leak).
+// EXCLUDES Phillip Jeffries (phillip-jeffries-display-excluded rule).
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+
+// stratified handle pool: pull from ALL 30 US product sitemaps, a few from each
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-ca\//.test(u));
+let handles=[];
+for(const sm of prodMaps){
+ const x=await get(sm);
+ const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]);
+ // take ~12 spread across each sitemap for vendor/age diversity
+ const step=Math.max(1,Math.floor(hs.length/12));
+ for(let i=0;i<hs.length && handles.length<400;i+=step) handles.push(hs[i]);
+ await sleep(100);
+}
+handles=[...new Set(handles)].slice(0,360);
+console.log(`=== jsonld-425-scan (READ-ONLY, $0) ===\nstratified sample: ${handles.length} live PDPs across ${prodMaps.length} sitemaps (PJ excluded)\n`);
+
+function ldPrice(html){
+ const blocks=[...html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)].map(m=>m[1]);
+ for(const b of blocks){ let j; try{j=JSON.parse(b);}catch{continue;}
+ const cands=j['@graph']?j['@graph']:[j];
+ for(const c of cands){ if(c['@type']==='Product'){ const o=Array.isArray(c.offers)?c.offers[0]:c.offers; if(o&&o.price!=null) return parseFloat(o.price); } } }
+ return null;
+}
+
+let single=0, multiOk=0, multiLeak=0, pjSkip=0, errs=0, noProduct=0;
+const leaks=[];
+let done=0;
+for(const h of handles){
+ const pj=await get(`${WWW}/products/${h}.json`);
+ let prod; try{ prod=JSON.parse(pj.text).product; }catch{ errs++; done++; continue; }
+ if(!prod){ errs++; done++; continue; }
+ if(PJ.test(prod.vendor||'')||PJ.test(h)){ pjSkip++; done++; continue; }
+ const prices=(prod.variants||[]).map(v=>parseFloat(v.price)).filter(n=>!isNaN(n));
+ const maxV=prices.length?Math.max(...prices):null;
+ const isMulti=(prod.variants||[]).length>1;
+ const pdp=await get(`${WWW}/products/${h}`);
+ const ld=pdp.status===200?ldPrice(pdp.text):null;
+ if(ld===null){ noProduct++; done++; await sleep(120); continue; }
+ if(!isMulti){ single++; }
+ else if(ld<=4.25 && maxV!=null && maxV>4.25){ multiLeak++; if(leaks.length<25)leaks.push({h,vendor:prod.vendor,ld,maxV}); }
+ else { multiOk++; }
+ done++;
+ if(done%50===0) console.log(` ${done}/${handles.length} (multi-leak so far: ${multiLeak})`);
+ await sleep(140);
+}
+
+const multiTotal=multiOk+multiLeak;
+const leakPctMulti=multiTotal?(100*multiLeak/multiTotal):0;
+const evaluated=single+multiOk+multiLeak;
+console.log(`\n=== RESULTS ===`);
+console.log(`evaluated: ${evaluated} | PJ-skipped: ${pjSkip} | json-err: ${errs} | no-JSONLD-product: ${noProduct}`);
+console.log(`single-variant (not at risk): ${single}`);
+console.log(`MULTI-variant total: ${multiTotal}`);
+console.log(` multi OK (JSON-LD shows real price): ${multiOk}`);
+console.log(` multi LEAK ($4.25 in JSON-LD, real variant exists): ${multiLeak}`);
+console.log(`\n*** LEAK RATE among MULTI-variant products: ${multiLeak}/${multiTotal} = ${leakPctMulti.toFixed(1)}% ***`);
+console.log(`LEAK RATE among ALL evaluated: ${multiLeak}/${evaluated} = ${evaluated?(100*multiLeak/evaluated).toFixed(1):0}%`);
+// Wilson-ish honest bound note
+if(multiTotal>0){
+ const p=multiLeak/multiTotal, se=Math.sqrt(p*(1-p)/multiTotal), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`95% CI on multi-variant leak rate: ${lo.toFixed(1)}% – ${hi.toFixed(1)}% (n=${multiTotal})`);
+}
+if(leaks.length){ console.log('\nsample leaks:'); leaks.slice(0,15).forEach(x=>console.log(` ${x.h.slice(0,46)} [${x.vendor}] ld=$${x.ld} max=$${x.maxV}`)); }
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/jsonld-425-scan.json',JSON.stringify({ts:new Date().toISOString(),sample:handles.length,evaluated,single,multiOk,multiLeak,multiTotal,leakPctMulti,pjSkip,errs,noProduct,leaks},null,2));
+console.log('\nwrote /tmp/jsonld-425-scan.json');
diff --git a/scripts/jsonld-audit/jsonld-audit.mjs b/scripts/jsonld-audit/jsonld-audit.mjs
new file mode 100644
index 0000000..977b9c8
--- /dev/null
+++ b/scripts/jsonld-audit/jsonld-audit.mjs
@@ -0,0 +1,88 @@
+// jsonld-audit — READ-ONLY, $0. Samples live PDPs, parses the Product schema.org
+// JSON-LD, validates presence + well-formedness + offers(price/currency/availability),
+// and — the high-value check (DTD/officer flagged) — cross-references the JSON-LD
+// offer price against the product's ACTUAL variant prices to catch the $4.25
+// SAMPLE-TRAP leaking into structured data (which would be a Google rich-result +
+// Merchant-Center disapproval risk). All live; no writes.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+
+// 1. gather live handles from several product sitemaps (vendor/age diversity)
+const smIdx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...smIdx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-ca\//.test(u));
+// take a spread: first, middle, last few maps
+const pick=[prodMaps[0],prodMaps[Math.floor(prodMaps.length/3)],prodMaps[Math.floor(2*prodMaps.length/3)],prodMaps[prodMaps.length-1]].filter(Boolean);
+let handles=[];
+for(const sm of pick){ const x=await get(sm); const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]); handles.push(...hs.slice(0,15)); await sleep(150); }
+handles=[...new Set(handles)].slice(0,50);
+console.log(`=== jsonld-audit (READ-ONLY, $0) ===\nsampling ${handles.length} live PDPs\n`);
+
+function parseProduct(html){
+ const blocks=[...html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)].map(m=>m[1]);
+ let parseFail=false, product=null;
+ for(const b of blocks){
+ let j; try{ j=JSON.parse(b); }catch{ parseFail=true; continue; }
+ const cands=j['@graph']?j['@graph']:[j];
+ for(const c of cands){ if(c['@type']==='Product') product=c; }
+ }
+ return {blockCount:blocks.length, parseFail, product};
+}
+
+const rows=[];
+let done=0;
+for(const h of handles){
+ const pdp=await get(`${WWW}/products/${h}`);
+ if(pdp.status!==200){ rows.push({h,err:'pdp '+pdp.status}); done++; continue; }
+ const {blockCount,parseFail,product}=parseProduct(pdp.text);
+ // actual variant prices
+ const pj=await get(`${WWW}/products/${h}.json`);
+ let variantPrices=[]; try{ variantPrices=(JSON.parse(pj.text).product?.variants||[]).map(v=>parseFloat(v.price)); }catch{}
+ const minV=variantPrices.length?Math.min(...variantPrices):null;
+ const maxV=variantPrices.length?Math.max(...variantPrices):null;
+ const off=product?.offers;
+ const offer=Array.isArray(off)?off[0]:off;
+ const ldPrice=offer?parseFloat(offer.price):null;
+ const row={
+ h,
+ hasProduct: !!product,
+ parseFail,
+ hasOffer: !!offer,
+ ldPrice,
+ currency: offer?.priceCurrency||null,
+ availability: (offer?.availability||'').replace(/https?:\/\/schema\.org\//,''),
+ minV, maxV,
+ sampleTrap: (ldPrice!==null && ldPrice<=4.25 && maxV!==null && maxV>4.25), // JSON-LD shows sample price while a real variant exists
+ priceMismatch: (ldPrice!==null && minV!==null && maxV!==null && (ldPrice<minV-0.01 || ldPrice>maxV+0.01)),
+ };
+ rows.push(row);
+ done++;
+ if(done%10===0) console.log(` ${done}/${handles.length}`);
+ await sleep(180);
+}
+
+const ok=rows.filter(r=>r.hasProduct);
+const noProduct=rows.filter(r=>!r.hasProduct && !r.err);
+const errs=rows.filter(r=>r.err);
+const parseFails=rows.filter(r=>r.parseFail);
+const noOffer=ok.filter(r=>!r.hasOffer);
+const badCurrency=ok.filter(r=>r.hasOffer && r.currency!=='USD');
+const badAvail=ok.filter(r=>r.hasOffer && !['InStock','OutOfStock','PreOrder','BackOrder','Discontinued'].includes(r.availability));
+const sampleTraps=rows.filter(r=>r.sampleTrap);
+const mismatches=rows.filter(r=>r.priceMismatch && !r.sampleTrap);
+
+console.log(`\n=== RESULTS (${rows.length} sampled) ===`);
+console.log(`Product JSON-LD present: ${ok.length} | missing: ${noProduct.length} | pdp-fetch-err: ${errs.length}`);
+console.log(`JSON parse failures: ${parseFails.length}`);
+console.log(`has offers: ${ok.length-noOffer.length} | no offers block: ${noOffer.length}`);
+console.log(`currency != USD: ${badCurrency.length}`);
+console.log(`invalid availability value: ${badAvail.length}`);
+console.log(`\n*** $4.25 SAMPLE-TRAP in JSON-LD (ld price<=4.25 but real variant exists): ${sampleTraps.length} ***`);
+console.log(`other price mismatch (ld price outside variant range): ${mismatches.length}`);
+if(sampleTraps.length) sampleTraps.slice(0,15).forEach(r=>console.log(` TRAP - ${r.h}: ld=$${r.ldPrice} vs variants $${r.minV}-$${r.maxV}`));
+if(mismatches.length) mismatches.slice(0,10).forEach(r=>console.log(` MISMATCH - ${r.h}: ld=$${r.ldPrice} vs $${r.minV}-$${r.maxV}`));
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/jsonld-audit.json',JSON.stringify({ts:new Date().toISOString(),sampled:rows.length,summary:{product:ok.length,missing:noProduct.length,errs:errs.length,parseFails:parseFails.length,noOffer:noOffer.length,badCurrency:badCurrency.length,badAvail:badAvail.length,sampleTraps:sampleTraps.length,mismatches:mismatches.length},rows},null,2));
+console.log('\nwrote /tmp/jsonld-audit.json');
diff --git a/scripts/justin-david-pricing/backfill-jd-phase2-metafields.mjs b/scripts/justin-david-pricing/backfill-jd-phase2-metafields.mjs
new file mode 100644
index 0000000..fede5a4
--- /dev/null
+++ b/scripts/justin-david-pricing/backfill-jd-phase2-metafields.mjs
@@ -0,0 +1,183 @@
+#!/usr/bin/env node
+/**
+ * backfill-jd-phase2-metafields.mjs — one-time recovery for Justin David Phase 2.
+ *
+ * WHY THIS EXISTS:
+ * The first --execute run of build-jd-phase2-creates.mjs sent all ~29 metafields
+ * per product in ONE metafieldsSet call. Shopify caps metafieldsSet at 25/call, so
+ * the whole batch was rejected ("Exceeded the maximum metafields input limit of 25")
+ * and every net-new product was created with ZERO metafields. build-jd-phase2-creates
+ * is now fixed (chunks at ≤25), BUT the already-created products are marked done in
+ * jd-phase2-done.txt and will NOT be retried by the importer. This sibling backfills
+ * their metafields directly, by product_id, from the same enrichment sidecar.
+ * (DTD verdict, 3/3, 2026-06-18: separate sibling script, not wired into the importer.)
+ *
+ * SOURCE OF TRUTH:
+ * • jd-phase2-rollback.jsonl — { dw_sku, product_id, sample_sku, yard_sku } per created
+ * product (the importer appends one line per LIVE create). Lines with
+ * product_id == "(dry-run)" are skipped.
+ * • jd-phase2-enrichment.json — specs/color/style per dw_sku (same file the importer uses).
+ *
+ * ⚠️ buildMetafields() below is a DELIBERATE MIRROR of the same function in
+ * build-jd-phase2-creates.mjs. If you change the metafield mapping in EITHER file,
+ * mirror it in the other so the create path and the backfill path stay identical.
+ *
+ * SAFETY:
+ * • DRY-RUN by default — prints what it WOULD set, writes nothing. Requires BOTH
+ * --execute AND --i-am-steve to write to Shopify (same gate as the importer).
+ * • metafieldsSet is idempotent (upsert by namespace+key+ownerId) — re-running is safe
+ * and self-healing; it will not duplicate metafields.
+ * • Resumable: each backfilled product_id is appended to jd-phase2-backfill-done.txt;
+ * already-done products are skipped on a re-run.
+ * • COST: Shopify Admin API is FREE — $0.
+ *
+ * USAGE:
+ * node backfill-jd-phase2-metafields.mjs # DRY-RUN (default)
+ * node backfill-jd-phase2-metafields.mjs --limit=20 # dry-run first 20
+ * node backfill-jd-phase2-metafields.mjs --execute --i-am-steve # LIVE (Steve-gated)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const EXECUTE = args.execute === true && args['i-am-steve'] === true;
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const MIN_YARDS = parseInt(process.env.MIN_YARDS || '2', 10);
+const BRAND = 'Phillipe Romano'; // merchandised brand metafield (mirror of importer)
+const MF_CHUNK = 25; // Shopify caps metafieldsSet at 25 metafields per call
+
+const ENRICH = process.env.JD_ENRICH || path.join(__dir, 'jd-phase2-enrichment.json');
+const ROLLBACK = path.join(__dir, 'jd-phase2-rollback.jsonl');
+const DONE = path.join(__dir, 'jd-phase2-backfill-done.txt');
+const ERRLOG = path.join(__dir, 'jd-phase2-backfill-errors.jsonl');
+
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1].trim();
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const SHOP_URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const METAFIELDS = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){
+ metafields{ id key } userErrors{ field message } } }`;
+
+// ── Shopify Admin GraphQL — throttle-aware + retrying (mirror of importer) ──
+async function gql(q, v) {
+ for (let i = 0; i < 8; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(SHOP_URL, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ let j; try { j = await r.json(); } catch (e) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors) return { __err: j.errors };
+ const t = j.extensions?.cost?.throttleStatus;
+ if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+// ── helpers (mirror of importer) ──
+const tc = s => (s || '').toLowerCase().replace(/\b\w/g, c => c.toUpperCase()).replace(/\s+/g, ' ').trim();
+
+// ⚠️ MIRROR of build-jd-phase2-creates.mjs buildMetafields — keep in sync.
+function buildMetafields(gid, e) {
+ const mf = [];
+ const add = (ns, key, type, value) => { if (value != null && String(value).trim() !== '') mf.push({ ownerId: gid, namespace: ns, key, type, value: String(value) }); };
+ // spec block (global.* mirrors the live template)
+ add('global', 'width', 'single_line_text_field', e.width);
+ add('global', 'repeat', 'single_line_text_field', e.pattern_repeat);
+ add('global', 'Brand', 'single_line_text_field', BRAND);
+ add('global', 'Color-Way', 'single_line_text_field', tc(e.color_name));
+ add('global', 'lead_time', 'single_line_text_field', '4-6 Weeks');
+ add('global', 'Contents', 'single_line_text_field', e.content);
+ add('global', 'Finish', 'single_line_text_field', e.finish);
+ add('global', 'Usage', 'single_line_text_field', e.end_use);
+ add('global', 'Cleaning-Code', 'single_line_text_field', e.cleaning_code);
+ add('global', 'FLAMMABILITY', 'single_line_text_field', e.fire_rating);
+ add('global', 'Style', 'single_line_text_field', tc(e.ai_style));
+ add('global', 'Wyzenbeek-#', 'single_line_text_field', e.abrasion);
+ // custom.* (theme-facing)
+ add('custom', 'brand', 'single_line_text_field', BRAND);
+ add('custom', 'width', 'single_line_text_field', e.width);
+ add('custom', 'material', 'multi_line_text_field', e.content);
+ add('custom', 'pattern_repeat', 'single_line_text_field', e.pattern_repeat);
+ add('custom', 'pattern_name', 'single_line_text_field', tc(e.pattern_name));
+ add('custom', 'color', 'single_line_text_field', tc(e.color_name));
+ add('custom', 'color_hex', 'single_line_text_field', e.color_hex);
+ if (e.ai_colors) add('custom', 'color_details', 'json', typeof e.ai_colors === 'string' ? e.ai_colors : JSON.stringify(e.ai_colors));
+ add('custom', 'manufacturer_sku', 'single_line_text_field', e.mfr_sku);
+ // 2-yard minimum (Phase-1 rule)
+ add('custom', 'minimum_order_quantity', 'number_integer', MIN_YARDS);
+ add('custom', 'minimum_order_unit', 'single_line_text_field', 'yards');
+ // dwc.* (INTERNAL — real_vendor lives here ONLY, never customer-facing)
+ add('dwc', 'pattern_name', 'single_line_text_field', tc(e.pattern_name));
+ add('dwc', 'color', 'single_line_text_field', tc(e.color_name));
+ add('dwc', 'brand', 'single_line_text_field', BRAND);
+ add('dwc', 'real_vendor', 'single_line_text_field', 'Justin David');
+ add('dwc', 'manufacturer_sku', 'single_line_text_field', e.mfr_sku);
+ add('dwc', 'background_color', 'single_line_text_field', tc(e.ai_background_color));
+ return mf;
+}
+
+// metafieldsSet, chunked at ≤25/call. Returns { ok, set, errs[] }.
+async function setMetafieldsChunked(mfAll) {
+ let set = 0; const errs = [];
+ for (let i = 0; i < mfAll.length; i += MF_CHUNK) {
+ const chunk = mfAll.slice(i, i + MF_CHUNK);
+ const res = await gql(METAFIELDS, { mf: chunk });
+ const ue = res?.__err || res?.metafieldsSet?.userErrors;
+ if (res?.__err || (res?.metafieldsSet?.userErrors?.length)) errs.push(ue);
+ else set += res.metafieldsSet.metafields.length;
+ }
+ return { ok: errs.length === 0, set, errs };
+}
+
+(async () => {
+ if (!fs.existsSync(ROLLBACK)) { console.error(`No rollback map at ${ROLLBACK} — nothing to backfill.`); process.exit(1); }
+ const enrich = JSON.parse(fs.readFileSync(ENRICH, 'utf8'));
+ const bySku = new Map(enrich.map(e => [e.dw_sku, e]));
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+
+ // rollback.jsonl → live products only (skip dry-run rows + already-backfilled)
+ const rows = fs.readFileSync(ROLLBACK, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+ const live = rows.filter(r => r.product_id && r.product_id !== '(dry-run)' && !done.has(r.product_id));
+ // dedup by product_id (rollback is append-only; a resumed importer can repeat a row)
+ const seen = new Set();
+ const todoAll = live.filter(r => (seen.has(r.product_id) ? false : (seen.add(r.product_id), true)));
+ const todo = todoAll.slice(0, LIMIT === Infinity ? undefined : LIMIT);
+
+ console.log(`backfill-jd-phase2-metafields — ${EXECUTE ? '⚠️ LIVE (writes metafields to Shopify)' : 'DRY-RUN (no writes)'}`);
+ console.log(` rollback-rows=${rows.length} live=${live.length} already-done=${done.size} todo=${todo.length}`);
+
+ const doneStream = EXECUTE ? fs.createWriteStream(DONE, { flags: 'a' }) : null;
+ const errStream = fs.createWriteStream(ERRLOG, { flags: 'a' });
+ let setN = 0, missing = 0, errored = 0, wouldSet = 0;
+
+ for (const r of todo) {
+ const e = bySku.get(r.dw_sku);
+ if (!e) { missing++; if (missing <= 10) console.log(' no-enrichment', r.dw_sku); continue; }
+ const mf = buildMetafields(r.product_id, e);
+
+ if (!EXECUTE) {
+ wouldSet++;
+ if (wouldSet <= 3) console.log(` [dry] ${r.dw_sku} ${r.product_id} → ${mf.length} metafields in ${Math.ceil(mf.length / MF_CHUNK)} call(s)`);
+ if (wouldSet % 250 === 0) console.log(` ${wouldSet}/${todo.length} would-backfill`);
+ continue;
+ }
+
+ const res = await setMetafieldsChunked(mf);
+ if (!res.ok) { errored++; errStream.write(JSON.stringify({ dw_sku: r.dw_sku, product_id: r.product_id, set: res.set, errs: res.errs }) + '\n'); if (errored <= 10) console.log(' mf-ERR', r.dw_sku, `set ${res.set}/${mf.length}`, JSON.stringify(res.errs).slice(0, 140)); continue; }
+ doneStream.write(r.product_id + '\n');
+ setN++;
+ if (setN % 50 === 0) console.log(` ${setN} backfilled / ${todo.length} (missing ${missing}, errs ${errored})`);
+ await sleep(120);
+ }
+
+ await new Promise(res => { let n = 1 + (doneStream ? 1 : 0); const d = () => (--n <= 0 && res()); errStream.end(d); if (doneStream) doneStream.end(d); });
+
+ if (EXECUTE) console.log(`\nDONE — ${setN} products backfilled, ${missing} missing-enrichment, ${errored} errors. (re-run is idempotent/self-healing)`);
+ else { console.log(`\nDONE — DRY-RUN: ${wouldSet} products would be backfilled, ${missing} missing-enrichment, nothing written.`); console.log(`To execute (Steve only): node backfill-jd-phase2-metafields.mjs --execute --i-am-steve`); }
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/justin-david-pricing/build-crawl-gap-promotion.py b/scripts/justin-david-pricing/build-crawl-gap-promotion.py
new file mode 100644
index 0000000..9ee2ec1
--- /dev/null
+++ b/scripts/justin-david-pricing/build-crawl-gap-promotion.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python3
+"""
+Build the GATED promotion SQL: justindavid_catalog_staging (Mac2-local) ->
+canonical justindavid_catalog. Reads the LOCAL staging table read-only and
+emits a single transactional .sql file. NOTHING is executed here — running the
+emitted file against Kamatera-canonical dw_unified is a separate Steve-gated step.
+
+Column map (staging -> canonical):
+ mfr_sku, pattern_name, color_name, collection, content, width, pattern_repeat,
+ fire_rating, abrasion, finish, cleaning_code, basecloth, image_url, all_images,
+ product_url, specs -> same-named canonical columns
+ dw_sku <- freshly minted DWPR-<seq> starting at --start-seq
+ product_type <- 'Fabric' (canonical convention; staging has 'fabric')
+ status <- 'active'
+ private_label <- true
+ imported_at <- now()
+Pricing (per-yard fabric) lives in specs jsonb already AND is carried so a later
+Shopify create reads sell_per_yard; canonical has no native per-yard price column,
+so price_per_yard/sell_per_yard/tariff_per_yard are merged into specs jsonb.
+
+Usage:
+ python3 build-crawl-gap-promotion.py --widen-cleaning-code # OPTION A (default)
+ python3 build-crawl-gap-promotion.py --truncate-cleaning-code # OPTION B
+"""
+import argparse, json, subprocess, sys, os
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(HERE, "promote-crawl-gap-to-canonical.sql")
+DBNAME = "dw_unified" # Mac2-LOCAL mirror (read-only SELECT only)
+
+CANON_CLEANING_CODE_LIMIT = 100 # canonical varchar(100) if NOT widened
+
+def fetch_staging():
+ # read-only SELECT against local mirror; JSON-encode each row
+ q = ("SELECT json_agg(t) FROM ("
+ "SELECT mfr_sku,pattern_name,color_name,collection,content,width,"
+ "pattern_repeat,fire_rating,abrasion,finish,cleaning_code,basecloth,"
+ "image_url,all_images,product_url,specs,"
+ "price_per_yard,sell_per_yard,tariff_per_yard "
+ "FROM justindavid_catalog_staging ORDER BY pattern_name,color_name) t;")
+ p = subprocess.run(["psql", DBNAME, "-t", "-A", "-c", q],
+ capture_output=True, text=True)
+ if p.returncode != 0:
+ sys.stderr.write(p.stderr); sys.exit(1)
+ return json.loads(p.stdout.strip() or "[]")
+
+def lit(v):
+ if v is None or v == "":
+ return "NULL"
+ return "'" + str(v).replace("'", "''") + "'"
+
+def main():
+ ap = argparse.ArgumentParser()
+ g = ap.add_mutually_exclusive_group()
+ g.add_argument("--widen-cleaning-code", action="store_true", help="OPTION A (default)")
+ g.add_argument("--truncate-cleaning-code", action="store_true", help="OPTION B")
+ ap.add_argument("--start-seq", type=int, default=439720)
+ args = ap.parse_args()
+ widen = not args.truncate_cleaning_code # default = widen (Option A)
+
+ rows = fetch_staging()
+ sql = []
+ sql.append("-- GATED promotion: crawl-gap staging -> canonical justindavid_catalog.")
+ sql.append("-- Run ONLY against Kamatera-canonical dw_unified after Steve approval.")
+ sql.append("-- Generated read-only from Mac2-local staging; review before executing.")
+ sql.append("BEGIN;")
+ if widen:
+ sql.append("-- OPTION A: widen cleaning_code (varchar(100)->text); metadata-only, no table rewrite.")
+ sql.append("ALTER TABLE justindavid_catalog ALTER COLUMN cleaning_code TYPE text;")
+ seq = args.start_seq
+ n = 0
+ for r in rows:
+ dw_sku = f"DWPR-{seq}"
+ seq += 1; n += 1
+ cc = r.get("cleaning_code")
+ if cc and not widen and len(cc) > CANON_CLEANING_CODE_LIMIT:
+ cc = cc[:CANON_CLEANING_CODE_LIMIT] # OPTION B truncate (full value kept in specs jsonb)
+ # merge per-yard pricing into specs jsonb so nothing is lost
+ specs = r.get("specs") or {}
+ if isinstance(specs, str):
+ specs = json.loads(specs)
+ specs["price_per_yard"] = r.get("price_per_yard")
+ specs["sell_per_yard"] = r.get("sell_per_yard")
+ specs["tariff_per_yard"] = r.get("tariff_per_yard")
+ specs["crawl_gap_source"] = "jan2026-sheet"
+ cols = {
+ "dw_sku": dw_sku,
+ "mfr_sku": r["mfr_sku"],
+ "pattern_name": r["pattern_name"],
+ "color_name": r.get("color_name"),
+ "collection": r.get("collection"),
+ "product_type": "Fabric",
+ "content": r.get("content"),
+ "width": r.get("width"),
+ "pattern_repeat": r.get("pattern_repeat"),
+ "fire_rating": r.get("fire_rating"),
+ "abrasion": r.get("abrasion"),
+ "finish": r.get("finish"),
+ "cleaning_code": cc,
+ "basecloth": r.get("basecloth"),
+ "image_url": r.get("image_url"),
+ "all_images": r.get("all_images"),
+ "product_url": r.get("product_url"),
+ "status": "active",
+ "private_label": "true",
+ "imported_at": "now()",
+ }
+ colnames = ",".join(cols.keys()) + ",specs"
+ vals = []
+ for k, v in cols.items():
+ if k in ("private_label",):
+ vals.append(str(v))
+ elif k == "imported_at":
+ vals.append("now()")
+ else:
+ vals.append(lit(v))
+ vals_s = ",".join(vals)
+ specs_s = lit(json.dumps(specs)) + "::jsonb"
+ # belt-and-suspenders: skip if the mfr_sku somehow already exists
+ sql.append(
+ f"INSERT INTO justindavid_catalog ({colnames}) "
+ f"SELECT {vals_s},{specs_s} "
+ f"WHERE NOT EXISTS (SELECT 1 FROM justindavid_catalog c WHERE upper(c.mfr_sku)=upper({lit(r['mfr_sku'])}));"
+ )
+ sql.append("COMMIT;")
+ sql.append(f"-- {n} INSERTs; dw_sku DWPR-{args.start_seq}..DWPR-{seq-1}; "
+ f"cleaning_code mode={'WIDEN(A)' if widen else 'TRUNCATE(B)'}")
+ with open(OUT, "w", encoding="utf-8") as f:
+ f.write("\n".join(sql))
+ print(f"Wrote {n} promotion INSERTs -> {OUT}")
+ print(f"dw_sku range: DWPR-{args.start_seq}..DWPR-{seq-1}")
+ print(f"cleaning_code: {'OPTION A widen-to-text' if widen else 'OPTION B truncate-100 (full in specs)'}")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/justin-david-pricing/build-jd-phase2-creates.mjs b/scripts/justin-david-pricing/build-jd-phase2-creates.mjs
new file mode 100644
index 0000000..7eb489a
--- /dev/null
+++ b/scripts/justin-david-pricing/build-jd-phase2-creates.mjs
@@ -0,0 +1,383 @@
+#!/usr/bin/env node
+/**
+ * build-jd-phase2-creates.mjs — Justin David PHASE 2: CREATE the net-new, matched-but-
+ * not-on-Shopify Justin David colorways as full products (vendor private-labeled
+ * "Los Angeles Fabrics"), each with a $4.25 Sample variant + a "Sold per Yard" variant
+ * (priced sell_per_yard from the staging CSV) and a 2-yard minimum-order enforced by two
+ * product metafields. Mirrors the live JD product template exactly (verified against live
+ * product 7810565701683 "Serenade - Diminish | Commercial Fabric | Los Angeles Fabrics").
+ *
+ * ──────────────────────────────────────────────────────────────────────────────────────
+ * SCOPE (Phase 2 ≠ Phase 1):
+ * • Phase 1 (build-jd-yard-variants.mjs) ADDS a yard variant to the 1,224 ALREADY-LIVE
+ * sample-only JD products. DONE separately.
+ * • Phase 2 (THIS script) CREATES brand-new products for the colorways that matched the
+ * Jan-2026 price sheet but are NOT yet on Shopify.
+ *
+ * SOURCES:
+ * • Pricing — scripts/justin-david-pricing/jd-priced-staging.csv (on_shopify == False rows)
+ * • Enrichment — scripts/justin-david-pricing/jd-phase2-enrichment.json (exported from
+ * dw_unified.justindavid_catalog; specs/image/color/ai_description per dw_sku). The 49
+ * colorways whose mfr_sku ALREADY exists on Shopify (under a renamed DWLA- product) are
+ * ALREADY EXCLUDED from this sidecar — the NEVER-DUPLICATE gate. Net-new = 2,475.
+ *
+ * ──────────────────────────────────────────────────────────────────────────────────────
+ * WHY THIS IS WRITTEN THE WAY IT IS — read before --execute:
+ *
+ * • DEFAULT IS DRY-RUN. Writes the would-do ordered payload sequence per product to
+ * jd-phase2-payloads.jsonl. Requires BOTH --execute AND --i-am-steve to write to Shopify.
+ * Per Steve's standing gate this is a customer-facing money operation (net-new products).
+ *
+ * • SKU. The staging CSV / catalog use prefix DWPR-<num>; the LIVE JD products use
+ * DWLA-<num>-Sample / -Yard (verified: staged DWPR-436083 → live DWLA-436083-Sample).
+ * Phase 2 therefore mints DWLA-<num>-Sample + DWLA-<num>-Yard, deriving <num> from the
+ * DWPR-<num> dw_sku. Keeps net-new SKUs consistent with the live JD line.
+ *
+ * • PRIVATE LABEL (HARD RULE). vendor = "Los Angeles Fabrics", merchandised Brand =
+ * "Phillipe Romano". The true vendor "Justin David" appears ONLY in the INTERNAL dwc.*
+ * namespace (dwc.real_vendor) — NEVER in any customer-facing field (title/tags/desc).
+ * architectural_title from the catalog ("… | JustinDavid") is NOT customer-safe and is
+ * NOT used; titles are built from pattern_name + color_name.
+ *
+ * • SAMPLE-PRESERVE (memory shopify-default-variant-consumes-sample / Phase-1 canary).
+ * productCreate makes one standalone "Default Title" variant. We then run
+ * productVariantsBulkCreate with BOTH the Sample AND the Sold-per-Yard option values in
+ * the SAME call (strategy:REMOVE_STANDALONE_VARIANT) — the proven Phase-1-fixed form that
+ * promotes the standalone into "Sample" and adds "Sold per Yard" beside it, so the product
+ * never has a window with the sample missing.
+ *
+ * • all_images GAP (DTD verdict A, unanimous 3/3, 2026-06-17). These net-new products carry
+ * a single primary image (image_url) and no secondary/room images — which is the SAME
+ * state as all 1,614 already-LIVE JD products. Single-primary-image is the established JD
+ * norm; enforcing the "always pull all images" rule here would hold Phase 2 to a stricter
+ * bar than the live catalog it joins. Documented for conscious officer sign-off.
+ *
+ * • STATUS default = DRAFT. Net-new bulk products are created as DRAFT so a human verifies
+ * before they go customer-facing; set STATUS=ACTIVE to mint them shoppable (smart
+ * collections auto-assign by vendor/tag once ACTIVE). Officer/Steve choose at approval.
+ *
+ * • CAP-PACED. DAILY_CAP (default 900) keeps net-new product creates under Shopify's
+ * ~1,000/day ceiling. 2,475 / 900 ≈ 3 days. Stops cleanly at the cap (exit 3, resumable
+ * via jd-phase2-done.txt keyed by dw_sku).
+ *
+ * • IDEMPOTENT / DEDUP-AT-WRITE. On --execute, before creating, a read-only lookup by the
+ * minted DWLA-<num>-Sample SKU (productVariants(query:"sku:…")) confirms it does NOT
+ * already exist; if it does, SKIP + record done (never double-create). Belt-and-suspenders
+ * on top of the sidecar's mfr_sku exclusion.
+ *
+ * • ROLLBACK MAP. Every product created appends to jd-phase2-rollback.jsonl
+ * { dw_sku, product_id, sample_sku, yard_sku } so a reversal job can productDelete exactly
+ * the products created.
+ *
+ * COST: Shopify Admin API calls are FREE — $0. Images are fetched by Shopify from the
+ * already-crawled justindavid.com CDN URLs (no Gemini / no paid API). Total cost $0.
+ *
+ * USAGE:
+ * node build-jd-phase2-creates.mjs # DRY-RUN (default): payloads only
+ * node build-jd-phase2-creates.mjs --limit=20 # dry-run first 20 only
+ * node build-jd-phase2-creates.mjs --execute --i-am-steve # LIVE (Steve-gated)
+ * STATUS=ACTIVE DAILY_CAP=900 node build-jd-phase2-creates.mjs --execute --i-am-steve
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const EXECUTE = args.execute === true && args['i-am-steve'] === true;
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const DAILY_CAP = parseInt(process.env.DAILY_CAP || '900', 10);
+const MIN_YARDS = parseInt(process.env.MIN_YARDS || '2', 10);
+const STATUS = (process.env.STATUS || 'DRAFT').toUpperCase(); // DRAFT (default) | ACTIVE
+const SAMPLE_PRICE = process.env.SAMPLE_PRICE || '4.25';
+const VENDOR = 'Los Angeles Fabrics'; // private-label — NEVER "Justin David"
+const BRAND = 'Phillipe Romano'; // merchandised brand metafield
+
+const CSV = process.env.JD_CSV || path.join(__dir, 'jd-priced-staging.csv');
+const ENRICH = process.env.JD_ENRICH || path.join(__dir, 'jd-phase2-enrichment.json');
+const PAYLOADS = path.join(__dir, 'jd-phase2-payloads.jsonl');
+const SAMPLE_MD = path.join(__dir, 'jd-phase2-dryrun-sample.md');
+const ROLLBACK = path.join(__dir, 'jd-phase2-rollback.jsonl');
+const DONE = path.join(__dir, 'jd-phase2-done.txt');
+const SKIPPED = path.join(__dir, 'jd-phase2-skipped.jsonl');
+
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1].trim();
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const SHOP_URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// ── Shopify Admin GraphQL — throttle-aware + retrying (same form as Phase 1) ──
+async function gql(q, v) {
+ for (let i = 0; i < 8; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(SHOP_URL, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ let j; try { j = await r.json(); } catch (e) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors) return { __err: j.errors };
+ const t = j.extensions?.cost?.throttleStatus;
+ if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+// ── GraphQL ops ──
+const FIND_SKU = `query($q:String!){ productVariants(first:1, query:$q){ nodes{ id sku } } }`;
+const PRODUCT_CREATE = `mutation($input:ProductInput!){ productCreate(input:$input){
+ product{ id title handle } userErrors{ field message } } }`;
+const VARIANTS_CREATE = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid,variants:$variants,strategy:REMOVE_STANDALONE_VARIANT){
+ productVariants{ id sku title price } userErrors{ field message } } }`;
+const METAFIELDS = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){
+ metafields{ id key } userErrors{ field message } } }`;
+const MF_CHUNK = 25; // Shopify caps metafieldsSet at 25 metafields per call
+
+// metafieldsSet, chunked at <=25/call (the full JD spec block is ~29 metafields).
+// Returns { ok, set, errs[] }; a partial-chunk failure does not abort the rest.
+async function setMetafieldsChunked(mfAll) {
+ let set = 0; const errs = [];
+ for (let i = 0; i < mfAll.length; i += MF_CHUNK) {
+ const chunk = mfAll.slice(i, i + MF_CHUNK);
+ const res = await gql(METAFIELDS, { mf: chunk });
+ const ue = res?.__err || res?.metafieldsSet?.userErrors;
+ if (res?.__err || (res?.metafieldsSet?.userErrors?.length)) errs.push(ue);
+ else set += res.metafieldsSet.metafields.length;
+ }
+ return { ok: errs.length === 0, set, errs };
+}
+const MEDIA_CREATE = `mutation($pid:ID!,$media:[CreateMediaInput!]!){
+ productCreateMedia(productId:$pid,media:$media){ media{ id } mediaUserErrors{ field message } } }`;
+const PRODUCT_DELETE = `mutation($id:ID!){ productDelete(input:{id:$id}){ deletedProductId userErrors{ field message } } }`;
+
+// ── helpers ──
+const tc = s => (s || '').toLowerCase().replace(/\b\w/g, c => c.toUpperCase()).replace(/\s+/g, ' ').trim();
+const segType = pt => /wallcovering/i.test(pt) ? 'Commercial Wallcovering' : 'Commercial Fabric';
+const noun = pt => /wallcovering/i.test(pt) ? 'commercial-grade wallcovering' : 'commercial-grade upholstery fabric';
+
+function buildTitle(e) { return `${tc(e.pattern_name)} - ${tc(e.color_name)} | ${segType(e.product_type)} | ${VENDOR}`; }
+
+const blank = v => !v || /^(n\/?a|none|tbd|-)$/i.test(String(v).trim());
+function buildDescriptionHtml(e) {
+ const pat = tc(e.pattern_name), col = tc(e.color_name);
+ let s = `<p>${pat} in ${col} is a ${noun(e.product_type)}`;
+ if (!blank(e.content)) s += ` crafted from ${e.content}`;
+ s += `.`;
+ const bits = [];
+ if (!blank(e.abrasion)) bits.push(`durability rated at ${e.abrasion}`);
+ if (!blank(e.width)) bits.push(`${e.width} wide`);
+ if (!blank(e.finish)) bits.push(`finished ${e.finish}`);
+ if (bits.length) s += ` This ${/wallcovering/i.test(e.product_type) ? 'wallcovering' : 'fabric'} is ${bits.join(', ')}.`;
+ if (!blank(e.fire_rating)) s += ` Flammability: ${e.fire_rating}.`;
+ s += ` Ideal for ${e.end_use || 'upholstery, seating, and contract interior applications'}.</p>`;
+ return s;
+}
+
+function buildTags(e) {
+ const t = new Set();
+ t.add('Commercial'); t.add('Commercial & Contract'); t.add(BRAND); t.add('Showroom Line');
+ if (e.content) t.add(e.content);
+ if (e.ai_style) t.add(tc(e.ai_style));
+ if (e.color_name) t.add(`color:${tc(e.color_name)}`);
+ if (e.ai_background_color) t.add(tc(e.ai_background_color));
+ (e.end_use || '').split(/[,/]/).map(x => tc(x)).filter(Boolean).forEach(x => t.add(x));
+ if (e.fire_rating) t.add('Fire Rated');
+ return [...t];
+}
+
+function buildProductInput(e) {
+ return {
+ title: buildTitle(e),
+ vendor: VENDOR,
+ productType: segType(e.product_type),
+ status: STATUS,
+ descriptionHtml: buildDescriptionHtml(e),
+ tags: buildTags(e),
+ };
+}
+
+function buildVariants({ optName, sampleSku, yardSku, sellPerYard }) {
+ return [
+ { price: String(SAMPLE_PRICE), optionValues: [{ optionName: optName, name: 'Sample' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: sampleSku, tracked: false } },
+ { price: String(sellPerYard), optionValues: [{ optionName: optName, name: 'Sold per Yard' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: yardSku, tracked: false } },
+ ];
+}
+
+function buildMetafields(gid, e) {
+ const mf = [];
+ const add = (ns, key, type, value) => { if (value != null && String(value).trim() !== '') mf.push({ ownerId: gid, namespace: ns, key, type, value: String(value) }); };
+ // spec block (global.* mirrors the live template)
+ add('global', 'width', 'single_line_text_field', e.width);
+ add('global', 'repeat', 'single_line_text_field', e.pattern_repeat);
+ add('global', 'Brand', 'single_line_text_field', BRAND);
+ add('global', 'Color-Way', 'single_line_text_field', tc(e.color_name));
+ add('global', 'lead_time', 'single_line_text_field', '4-6 Weeks');
+ add('global', 'Contents', 'single_line_text_field', e.content);
+ add('global', 'Finish', 'single_line_text_field', e.finish);
+ add('global', 'Usage', 'single_line_text_field', e.end_use);
+ add('global', 'Cleaning-Code', 'single_line_text_field', e.cleaning_code);
+ add('global', 'FLAMMABILITY', 'single_line_text_field', e.fire_rating);
+ add('global', 'Style', 'single_line_text_field', tc(e.ai_style));
+ add('global', 'Wyzenbeek-#', 'single_line_text_field', e.abrasion);
+ // custom.* (theme-facing)
+ add('custom', 'brand', 'single_line_text_field', BRAND);
+ add('custom', 'width', 'single_line_text_field', e.width);
+ add('custom', 'material', 'multi_line_text_field', e.content);
+ add('custom', 'pattern_repeat', 'single_line_text_field', e.pattern_repeat);
+ add('custom', 'pattern_name', 'single_line_text_field', tc(e.pattern_name));
+ add('custom', 'color', 'single_line_text_field', tc(e.color_name));
+ add('custom', 'color_hex', 'single_line_text_field', e.color_hex);
+ if (e.ai_colors) add('custom', 'color_details', 'json', typeof e.ai_colors === 'string' ? e.ai_colors : JSON.stringify(e.ai_colors));
+ add('custom', 'manufacturer_sku', 'single_line_text_field', e.mfr_sku);
+ // 2-yard minimum (Phase-1 rule)
+ add('custom', 'minimum_order_quantity', 'number_integer', MIN_YARDS);
+ add('custom', 'minimum_order_unit', 'single_line_text_field', 'yards');
+ // dwc.* (INTERNAL — real_vendor lives here ONLY, never customer-facing)
+ add('dwc', 'pattern_name', 'single_line_text_field', tc(e.pattern_name));
+ add('dwc', 'color', 'single_line_text_field', tc(e.color_name));
+ add('dwc', 'brand', 'single_line_text_field', BRAND);
+ add('dwc', 'real_vendor', 'single_line_text_field', 'Justin David');
+ add('dwc', 'manufacturer_sku', 'single_line_text_field', e.mfr_sku);
+ add('dwc', 'background_color', 'single_line_text_field', tc(e.ai_background_color));
+ return mf;
+}
+
+function buildMedia(e, title) {
+ return [{ originalSource: e.image_url, mediaContentType: 'IMAGE', alt: title }];
+}
+
+// ── CSV pricing (on_shopify == False rows) ──
+function loadPricing() {
+ const lines = fs.readFileSync(CSV, 'utf8').trim().split('\n');
+ const hdr = lines[0].split(',');
+ const m = {};
+ for (const l of lines.slice(1)) {
+ const c = l.split(','); const r = Object.fromEntries(hdr.map((h, i) => [h, c[i]]));
+ if (r.on_shopify === 'False') m[r.dw_sku] = r;
+ }
+ return m;
+}
+
+(async () => {
+ const pricing = loadPricing();
+ const enrich = JSON.parse(fs.readFileSync(ENRICH, 'utf8'));
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+
+ // join enrichment + pricing; only rows with BOTH (and not done)
+ const todoAll = enrich.filter(e => pricing[e.dw_sku] && !done.has(e.dw_sku));
+ const noPrice = enrich.filter(e => !pricing[e.dw_sku]).map(e => e.dw_sku);
+ const todo = todoAll.slice(0, LIMIT === Infinity ? undefined : LIMIT);
+
+ console.log(`build-jd-phase2-creates — ${EXECUTE ? '⚠️ LIVE (direct Shopify product creates)' : 'DRY-RUN (payloads only, no writes)'}`);
+ console.log(` enrichment=${enrich.length} priced-net-new=${todoAll.length} done=${done.size} todo=${todo.length} cap=${DAILY_CAP} status=${STATUS} min_yards=${MIN_YARDS}`);
+ if (noPrice.length) console.log(` ⚠️ ${noPrice.length} enriched rows had no CSV price → skipped (e.g. ${noPrice.slice(0, 3).join(', ')})`);
+ if (!EXECUTE) console.log(` → payloads: ${PAYLOADS}\n → sample md: ${SAMPLE_MD}`);
+
+ const payStream = fs.createWriteStream(PAYLOADS, { flags: 'w' });
+ const rbStream = fs.createWriteStream(ROLLBACK, { flags: 'a' });
+ const skipStream = fs.createWriteStream(SKIPPED, { flags: 'w' });
+ const doneStream = EXECUTE ? fs.createWriteStream(DONE, { flags: 'a' }) : null;
+
+ let staged = 0, created = 0, skipped = 0, errored = 0, aborted = false;
+ const samples = [];
+
+ for (const e of todo) {
+ // cap PACES LIVE creates only; a dry-run stages the whole population for review
+ if (EXECUTE && created >= DAILY_CAP) { console.log(`\nDaily cap ${DAILY_CAP} reached — stopping (resumable).`); aborted = true; break; }
+ const r = pricing[e.dw_sku];
+ const num = e.dw_sku.split('-')[1];
+ const sampleSku = `DWLA-${num}-Sample`;
+ const yardSku = `DWLA-${num}-Yard`;
+ const optName = 'Title';
+ const title = buildTitle(e);
+
+ const productInput = buildProductInput(e);
+ const variants = buildVariants({ optName, sampleSku, yardSku, sellPerYard: r.sell_per_yard });
+ const media = buildMedia(e, title);
+
+ const record = {
+ dw_sku: e.dw_sku, mfr_sku: e.mfr_sku, title, vendor: VENDOR,
+ product_type: productInput.productType, status: STATUS,
+ sample_sku: sampleSku, sample_price: SAMPLE_PRICE,
+ yard_sku: yardSku, sell_per_yard: r.sell_per_yard, min_order_yards: MIN_YARDS,
+ image_url: e.image_url,
+ steps: [
+ { op: 'productCreate', mutation: PRODUCT_CREATE, variables: { input: productInput } },
+ { op: 'productVariantsBulkCreate', mutation: VARIANTS_CREATE, variables: { pid: '<PRODUCT_GID>', variants } },
+ { op: 'metafieldsSet', mutation: METAFIELDS, variables: { mf: buildMetafields('<PRODUCT_GID>', e) } },
+ { op: 'productCreateMedia', mutation: MEDIA_CREATE, variables: { pid: '<PRODUCT_GID>', media } },
+ ],
+ };
+ payStream.write(JSON.stringify(record) + '\n');
+ if (samples.length < 3) samples.push(record);
+
+ if (!EXECUTE) {
+ rbStream.write(JSON.stringify({ dw_sku: e.dw_sku, product_id: '(dry-run)', sample_sku: sampleSku, yard_sku: yardSku }) + '\n');
+ staged++;
+ if (staged % 250 === 0) console.log(` ${staged}/${todo.length} staged`);
+ continue;
+ }
+
+ // ── LIVE ──
+ // dedup-at-write: minted sample SKU must not already exist
+ const ex = await gql(FIND_SKU, { q: `sku:${sampleSku}` });
+ if (ex && !ex.__err && ex.productVariants?.nodes?.length) {
+ skipped++; doneStream.write(e.dw_sku + '\n');
+ skipStream.write(JSON.stringify({ dw_sku: e.dw_sku, reason: 'sku-already-exists', sampleSku }) + '\n'); continue;
+ }
+ const cr = await gql(PRODUCT_CREATE, { input: productInput });
+ const ue = cr?.__err || cr?.productCreate?.userErrors;
+ if (cr?.__err || (cr?.productCreate?.userErrors?.length)) {
+ // Shopify's rolling ~1,000 new-variants/day quota is account-wide and time-based —
+ // once hit, EVERY subsequent create fails identically. Stop immediately instead of
+ // churning thousands of doomed calls; resume tomorrow when the quota resets.
+ if (/Daily variant creation limit/i.test(JSON.stringify(ue))) {
+ console.log(`\n⛔ Shopify daily variant-creation quota reached after ${created} created — stopping (resumable tomorrow).`);
+ aborted = 'quota'; break;
+ }
+ errored++; if (errored <= 10) console.log(' create-ERR', e.dw_sku, JSON.stringify(ue).slice(0, 160)); continue;
+ }
+ const gid = cr.productCreate.product.id;
+ rbStream.write(JSON.stringify({ dw_sku: e.dw_sku, product_id: gid, sample_sku: sampleSku, yard_sku: yardSku }) + '\n');
+
+ const vc = await gql(VARIANTS_CREATE, { pid: gid, variants });
+ const vue = vc?.__err || vc?.productVariantsBulkCreate?.userErrors;
+ if (vc?.__err || (vc?.productVariantsBulkCreate?.userErrors?.length)) { errored++; if (errored <= 10) console.log(' var-ERR', e.dw_sku, JSON.stringify(vue).slice(0, 160)); }
+
+ const mf = await setMetafieldsChunked(buildMetafields(gid, e));
+ if (!mf.ok && errored <= 10) console.log(' mf-ERR', e.dw_sku, `set ${mf.set}`, JSON.stringify(mf.errs).slice(0, 140));
+
+ const md = await gql(MEDIA_CREATE, { pid: gid, media });
+ if (md?.__err || (md?.productCreateMedia?.mediaUserErrors?.length)) { if (errored <= 10) console.log(' media-ERR', e.dw_sku, JSON.stringify(md?.__err || md.productCreateMedia.mediaUserErrors).slice(0, 140)); }
+
+ doneStream.write(e.dw_sku + '\n');
+ created++;
+ if (created % 50 === 0) console.log(` ${created} created / ${todo.length} (skipped ${skipped}, errs ${errored})`);
+ await sleep(150);
+ }
+
+ // flush all write streams before we may process.exit (avoids truncating payloads)
+ await new Promise(res => { let n = 3 + (doneStream ? 1 : 0); const d = () => (--n <= 0 && res());
+ payStream.end(d); rbStream.end(d); skipStream.end(d); if (doneStream) doneStream.end(d); });
+
+ if (!EXECUTE) {
+ const md = [`# Justin David Phase 2 — DRY-RUN net-new product-create payloads`, ``,
+ `- net-new (priced) products staged: **${staged}**`,
+ `- vendor: **${VENDOR}** · brand metafield: **${BRAND}** · status: **${STATUS}** · sample: **$${SAMPLE_PRICE}** · min order: **${MIN_YARDS} yards**`,
+ `- cost: **$0** (Shopify Admin API is free; images fetched by Shopify from already-crawled CDN URLs)`,
+ `- per product = ordered GraphQL ops: productCreate → productVariantsBulkCreate(REMOVE_STANDALONE_VARIANT, Sample+Sold-per-Yard) → metafieldsSet (CHUNKED ≤${MF_CHUNK}/call; ~29 specs ⇒ 2 calls) → productCreateMedia`,
+ ``, `## First ${samples.length} fully-expanded examples`, ``];
+ for (const s of samples) {
+ md.push(`### ${s.dw_sku} → ${s.title}`);
+ md.push('```json'); md.push(JSON.stringify(s, null, 2)); md.push('```'); md.push('');
+ }
+ fs.writeFileSync(SAMPLE_MD, md.join('\n'));
+ }
+
+ console.log(`\nDONE — ${EXECUTE ? `${created} created` : `${staged} staged (DRY-RUN, nothing written)`}, ${skipped} skipped, ${errored} errors.`);
+ if (!EXECUTE) console.log(`To execute (Steve only): STATUS=${STATUS} node build-jd-phase2-creates.mjs --execute --i-am-steve`);
+ if (aborted === 'quota') process.exit(4); // Shopify daily variant quota → retry tomorrow
+ if (aborted) process.exit(3); // daily cap reached → resumable (more quota may remain)
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/justin-david-pricing/build-jd-yard-variants.mjs b/scripts/justin-david-pricing/build-jd-yard-variants.mjs
new file mode 100644
index 0000000..3e298b7
--- /dev/null
+++ b/scripts/justin-david-pricing/build-jd-yard-variants.mjs
@@ -0,0 +1,269 @@
+#!/usr/bin/env node
+/**
+ * build-jd-yard-variants.mjs — ADD a "Sold per Yard" variant to the 1,224 live
+ * SAMPLE-ONLY Justin David products (private-labeled vendor "Los Angeles Fabrics"),
+ * priced at sell_per_yard (= price_per_yard × 1.30, already computed in the staging CSV),
+ * with a 2-yard minimum-order enforced by the live theme via two product metafields.
+ *
+ * Source of truth: scripts/justin-david-pricing/jd-priced-staging.csv
+ * columns: dw_sku, pattern, color, collection, on_shopify, shopify_product_id,
+ * price_per_yard, tariff_per_yard, sell_per_yard, min_order_500
+ * We process ONLY on_shopify == True rows (1,224 of 3,748).
+ *
+ * ──────────────────────────────────────────────────────────────────────────
+ * WHY THIS IS WRITTEN THE WAY IT IS — read before --execute:
+ *
+ * • WRITE PATH = DIRECT Shopify Admin GraphQL (rewritten 2026-06-17, Steve-approved).
+ * The old version INSERTed into dw_unified.shopify_api_queue — but that queue is DEAD on
+ * Mac2 (last drained 2026-04-14; rows rot). The proven working path is a direct POST to
+ * /admin/api/2024-10/graphql.json with X-Shopify-Access-Token (the same path
+ * scripts/price-sheets/add-roll-variant.mjs uses). gql() is throttle-aware + retrying.
+ *
+ * • DEFAULT IS DRY-RUN. Writes the would-do payloads to jd-yard-payloads.jsonl. Requires
+ * BOTH --execute AND --i-am-steve to write to Shopify. Per Steve's standing gate: this is
+ * a customer-facing money operation.
+ *
+ * • SKU PREFIX HAZARD (verified 2026-06-17). The staging CSV uses prefix DWPR-, but the
+ * LIVE products use DWLA- (e.g. staged DWPR-436083 → live sample SKU DWLA-436083-Sample).
+ * We therefore DERIVE the yard SKU from the LIVE sample SKU stem at runtime
+ * (<stem>-Sample → <stem>-Yard) and NEVER trust the staged prefix. If a product's live
+ * sample SKU doesn't end in -Sample, we SKIP it (logged) rather than guess.
+ *
+ * • NAME MISMATCH (verified 2026-06-17). Staged pattern/color (DEBUSSY / MINOR KEY) does
+ * NOT match the live title (Serenade - Diminish). We only ADD a yard variant — we do NOT
+ * rename the product — so this can't corrupt customer-facing names. Logged as a warning.
+ *
+ * • SAMPLE-PRESERVE SELF-HEAL (memory shopify-default-variant-consumes-sample).
+ * A sample-only product has the implicit "Title: Default Title" variant. Adding the FIRST
+ * named variant via productVariantsBulkCreate would normally CONSUME (overwrite) that
+ * Default-Title variant — destroying the $4.25 -Sample. We add ONLY the yard variant with
+ * strategy:REMOVE_STANDALONE_VARIANT, which converts the existing standalone (Sample)
+ * variant into the first real option value, PRESERVING it, and adds the yard variant
+ * alongside. After the write we RE-QUERY the product and VERIFY the sample survived
+ * (price ≤ 4.30 still present). If it didn't, we record a self-heal failure (never silent).
+ *
+ * • IDEMPOTENT. Before writing, a read-only LOOKUP checks the live product: if it already
+ * has a -Yard variant (or is no longer sample-only), it is SKIPPED and recorded done.
+ * Re-running never double-adds. Resumable via jd-yard-done.txt (keyed by product id).
+ *
+ * • CAP-PACED. DAILY_CAP (default 900, under Shopify's ~1,000 new-variant/day cap, leaving
+ * headroom for the sample-split job). Stops cleanly at the cap (exit 3, resumable).
+ *
+ * • ROLLBACK MAP. Every product written gets a row appended to jd-yard-rollback.jsonl:
+ * { product_id, sample_variant_id, yard_sku, yard_variant_id } so a reversal job can
+ * productVariantsBulkDelete exactly the yard variants added.
+ *
+ * USAGE:
+ * node build-jd-yard-variants.mjs # DRY-RUN (default): payloads only, no writes
+ * node build-jd-yard-variants.mjs --limit=10 # dry-run first 10 only
+ * node build-jd-yard-variants.mjs --execute --i-am-steve # LIVE: direct Shopify writes (Steve-gated)
+ * node build-jd-yard-variants.mjs --execute --i-am-steve --limit=10 # LIVE canary on 10
+ * DAILY_CAP=900 MIN_YARDS=2 node build-jd-yard-variants.mjs --execute --i-am-steve
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const EXECUTE = args.execute === true && args['i-am-steve'] === true;
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const DAILY_CAP = parseInt(process.env.DAILY_CAP || '900', 10);
+const MIN_YARDS = parseInt(process.env.MIN_YARDS || '2', 10);
+
+const CSV = process.env.JD_CSV || path.join(__dir, 'jd-priced-staging.csv');
+const PAYLOADS = path.join(__dir, 'jd-yard-payloads.jsonl');
+const ROLLBACK = path.join(__dir, 'jd-yard-rollback.jsonl');
+const DONE = path.join(__dir, 'jd-yard-done.txt');
+const SKIPPED = path.join(__dir, 'jd-yard-skipped.jsonl');
+
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1].trim();
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const SHOP_URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// ── Shopify Admin GraphQL (used for BOTH reads and writes) — throttle-aware + retrying ──
+async function gql(q, v) {
+ for (let i = 0; i < 8; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(SHOP_URL, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ let j; try { j = await r.json(); } catch (e) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors) return { __err: j.errors };
+ const t = j.extensions?.cost?.throttleStatus;
+ if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const LOOKUP = `query($id:ID!){ node(id:$id){ ... on Product {
+ id title status options{name}
+ variants(first:25){ nodes{ id sku title price } }
+} } }`;
+
+const CREATE = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid,variants:$variants,strategy:REMOVE_STANDALONE_VARIANT){
+ productVariants{ id sku title price } userErrors{ field message } } }`;
+
+const METAFIELDS = `mutation($mf:[MetafieldsSetInput!]!){
+ metafieldsSet(metafields:$mf){ metafields{ id key } userErrors{ field message } } }`;
+
+const DELETE = `mutation($pid:ID!,$ids:[ID!]!){
+ productVariantsBulkDelete(productId:$pid,variantsIds:$ids){ userErrors{ field message } } }`;
+
+// ── CSV parse (simple split; staging CSV has no embedded commas in used cols) ──
+function loadRows() {
+ const lines = fs.readFileSync(CSV, 'utf8').trim().split('\n');
+ const hdr = lines[0].split(',');
+ return lines.slice(1).map(l => { const c = l.split(','); return Object.fromEntries(hdr.map((h, i) => [h, c[i]])); })
+ .filter(r => r.on_shopify === 'True' && r.shopify_product_id);
+}
+
+/**
+ * Build the productVariantsBulkCreate variants array.
+ *
+ * CANARY LESSON (2026-06-17): adding ONLY the yard variant with
+ * strategy:REMOVE_STANDALONE_VARIANT DESTROYS the $4.25 sample — REMOVE_STANDALONE_VARIANT
+ * deletes the standalone (Default-Title / Sample) variant rather than promoting it. The
+ * first 10-product canary lost all 10 samples and was fully rolled back. The correct form
+ * (same as build-schu-rolls.mjs) is to RE-ASSERT the sample AND add the yard variant in the
+ * SAME bulk-create call, so Shopify keeps BOTH option values and there is never a window
+ * with the sample missing. The self-heal verify (re-query, confirm $4.25 survived) is the
+ * backstop that caught the failure.
+ */
+function buildVariantsPayload({ optName, sampleSku, samplePrice, yardSku, sellPerYard }) {
+ return [
+ { price: String(samplePrice ?? '4.25'), optionValues: [{ optionName: optName, name: 'Sample' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: sampleSku, tracked: false } },
+ { price: String(sellPerYard), optionValues: [{ optionName: optName, name: 'Sold per Yard' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: yardSku, tracked: false } },
+ ];
+}
+
+function buildMetafields(gid) {
+ return [
+ { ownerId: gid, namespace: 'custom', key: 'minimum_order_quantity', type: 'number_integer', value: String(MIN_YARDS) },
+ { ownerId: gid, namespace: 'custom', key: 'minimum_order_unit', type: 'single_line_text_field', value: 'yards' },
+ ];
+}
+
+(async () => {
+ const rows = loadRows();
+ const done = new Set(fs.existsSync(DONE) ? fs.readFileSync(DONE, 'utf8').split('\n').filter(Boolean) : []);
+ const todo = rows.filter(r => !done.has(r.shopify_product_id)).slice(0, LIMIT === Infinity ? undefined : LIMIT);
+
+ console.log(`build-jd-yard-variants — ${EXECUTE ? '⚠️ LIVE (direct Shopify GraphQL writes)' : 'DRY-RUN (payloads only, no writes)'}`);
+ console.log(` live-matched rows=${rows.length} done=${done.size} todo=${todo.length} daily_cap=${DAILY_CAP} min_yards=${MIN_YARDS}`);
+ if (!EXECUTE) console.log(` → payloads: ${PAYLOADS}\n → rollback map: ${ROLLBACK}`);
+
+ // fresh dry-run artifacts each run; append-only on execute is via done.txt + rollback
+ const payStream = fs.createWriteStream(PAYLOADS, { flags: 'w' });
+ const rbStream = fs.createWriteStream(ROLLBACK, { flags: 'a' });
+ const skipStream = fs.createWriteStream(SKIPPED, { flags: 'w' });
+ const doneStream = EXECUTE ? fs.createWriteStream(DONE, { flags: 'a' }) : null;
+
+ let written = 0, skipped = 0, warned = 0, errored = 0, healFail = 0, aborted = false;
+ for (const r of todo) {
+ if (written >= DAILY_CAP) { console.log(`\nDaily cap ${DAILY_CAP} reached — stopping (resumable).`); aborted = true; break; }
+ const pid = r.shopify_product_id;
+ const gid = `gid://shopify/Product/${pid}`;
+ const lk = await gql(LOOKUP, { id: gid });
+ const p = lk && !lk.__err && lk.node;
+ if (!p) { skipped++; skipStream.write(JSON.stringify({ pid, reason: 'product-not-found', err: lk?.__err }) + '\n'); continue; }
+
+ const vs = p.variants.nodes;
+ // idempotency: skip if a -Yard variant already exists
+ if (vs.some(v => /-Yard$/i.test(v.sku || '') || /yard/i.test(v.title || ''))) {
+ skipped++; if (EXECUTE) doneStream.write(pid + '\n');
+ skipStream.write(JSON.stringify({ pid, reason: 'already-has-yard-variant' }) + '\n'); continue;
+ }
+ // must be sample-only (1 variant, sample-priced)
+ if (!(vs.length === 1 && parseFloat(vs[0].price) <= 4.30)) {
+ skipped++; if (EXECUTE) doneStream.write(pid + '\n');
+ skipStream.write(JSON.stringify({ pid, reason: 'not-sample-only', nvar: vs.length, price0: vs[0]?.price }) + '\n'); continue;
+ }
+ const sampleVar = vs[0];
+ const sampleSku = sampleVar.sku || '';
+ // derive yard SKU from the LIVE sample SKU stem — NEVER from the staged DWPR prefix
+ if (!/-Sample$/i.test(sampleSku)) {
+ skipped++; if (EXECUTE) doneStream.write(pid + '\n');
+ skipStream.write(JSON.stringify({ pid, reason: 'sample-sku-not-suffixed', sampleSku }) + '\n'); continue;
+ }
+ const yardSku = sampleSku.replace(/-Sample$/i, '-Yard');
+ const optName = (p.options[0] && p.options[0].name) || 'Title';
+
+ // name-mismatch warning (advisory only; we never rename)
+ if (r.pattern && !p.title.toUpperCase().includes(r.pattern.toUpperCase())) {
+ warned++;
+ skipStream.write(JSON.stringify({ pid, warn: 'staged-name-differs-from-live', staged: `${r.pattern} - ${r.color}`, live: p.title }) + '\n');
+ }
+
+ const variants = buildVariantsPayload({ optName, sampleSku, samplePrice: sampleVar.price, yardSku, sellPerYard: r.sell_per_yard });
+ const metafields = buildMetafields(gid);
+
+ const record = {
+ pid, live_title: p.title, option_name: optName,
+ sample_variant_id: sampleVar.id, sample_sku: sampleSku, sample_price: sampleVar.price,
+ yard_sku: yardSku, sell_per_yard: r.sell_per_yard, min_order_yards: MIN_YARDS,
+ variants_payload: variants, metafields_payload: metafields,
+ };
+ payStream.write(JSON.stringify(record) + '\n');
+
+ if (!EXECUTE) {
+ rbStream.write(JSON.stringify({ pid, sample_variant_id: sampleVar.id, yard_sku: yardSku, yard_variant_id: '(dry-run)' }) + '\n');
+ written++;
+ if (written % 50 === 0) console.log(` ${written} staged / ${todo.length} (skipped ${skipped})`);
+ continue;
+ }
+
+ // ── LIVE: create the yard variant (preserving the sample via REMOVE_STANDALONE_VARIANT) ──
+ const cr = await gql(CREATE, { pid: gid, variants });
+ if (cr?.__err) { errored++; if (errored <= 10) console.log(' ERR', yardSku, JSON.stringify(cr.__err).slice(0, 160)); continue; }
+ const ue = cr.productVariantsBulkCreate?.userErrors || [];
+ if (ue.length) { errored++; if (errored <= 10) console.log(' uerr', yardSku, JSON.stringify(ue)); continue; }
+ const yardVar = (cr.productVariantsBulkCreate.productVariants || []).find(v => (v.sku || '').toUpperCase() === yardSku.toUpperCase())
+ || cr.productVariantsBulkCreate.productVariants[0];
+
+ // record rollback BEFORE the metafield/verify steps, so a created variant is always reversible
+ rbStream.write(JSON.stringify({ pid, sample_variant_id: sampleVar.id, yard_sku: yardSku, yard_variant_id: yardVar?.id || null }) + '\n');
+
+ // metafields: 2-yard minimum
+ const mf = await gql(METAFIELDS, { mf: metafields });
+ const mfue = mf?.__err || mf?.metafieldsSet?.userErrors;
+ if (mf?.__err || (mf?.metafieldsSet?.userErrors?.length)) {
+ if (errored <= 10) console.log(' mf-err', yardSku, JSON.stringify(mfue).slice(0, 140));
+ }
+
+ // self-heal verify: re-query, confirm the $4.25 sample SURVIVED
+ const re = await gql(LOOKUP, { id: gid });
+ const rv = (re && !re.__err && re.node?.variants?.nodes) || [];
+ const sampleStillThere = rv.some(v => parseFloat(v.price) <= 4.30);
+ if (!sampleStillThere) {
+ healFail++;
+ console.log(` ⛔ SELF-HEAL FAILURE: ${p.title} (${pid}) lost its $4.25 sample after yard add — AUTO-ROLLBACK + ABORT.`);
+ skipStream.write(JSON.stringify({ pid, ERROR: 'sample-lost-after-create', yardSku, postVariants: rv }) + '\n');
+ // auto-rollback: delete the just-created yard variant so the product is left untouched
+ const yardIds = rv.filter(v => /-Yard$/i.test(v.sku || '')).map(v => v.id);
+ if (yardIds.length) {
+ const del = await gql(DELETE, { pid: gid, ids: yardIds });
+ console.log(` ↩︎ rolled back ${yardIds.length} yard variant(s): ${JSON.stringify(del?.productVariantsBulkDelete?.userErrors || 'ok')}`);
+ }
+ // do NOT mark done; abort the whole run so an unattended job can't churn >1 product
+ aborted = true; break;
+ }
+
+ doneStream.write(pid + '\n');
+ written++;
+ if (written % 50 === 0) console.log(` ${written} created / ${todo.length} (skipped ${skipped}, errs ${errored}, heal-fail ${healFail})`);
+ await sleep(150);
+ }
+
+ payStream.end(); rbStream.end(); skipStream.end(); if (doneStream) doneStream.end();
+ console.log(`\nDONE — ${written} ${EXECUTE ? 'created' : 'staged (DRY-RUN, nothing written)'}, ${skipped} skipped, ${errored} errors, ${healFail} self-heal failures, ${warned} name-warnings.`);
+ if (EXECUTE && healFail) console.log(`⛔ ${healFail} self-heal failure(s) — run ABORTED + auto-rolled-back. Strategy is wrong; DO NOT re-run until fixed. Evidence: ${SKIPPED}`);
+ if (!EXECUTE) console.log('To execute (Steve only): node build-jd-yard-variants.mjs --execute --i-am-steve');
+ if (healFail) process.exit(4); // heal failure → NOT resumable, needs human
+ if (aborted) process.exit(3); // cap reached → resumable tomorrow
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/justin-david-pricing/com.steve.jd-yard-resume.plist b/scripts/justin-david-pricing/com.steve.jd-yard-resume.plist
new file mode 100644
index 0000000..c8bc10a
--- /dev/null
+++ b/scripts/justin-david-pricing/com.steve.jd-yard-resume.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.jd-yard-resume</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/zsh</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/justin-david-pricing/resume-jd-yard.sh</string>
+ </array>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key><integer>6</integer>
+ <key>Minute</key><integer>45</integer>
+ </dict>
+ <key>RunAtLoad</key>
+ <false/>
+ <key>StandardOutPath</key>
+ <string>/Users/macstudio3/.claude/yolo-queue/jd-yard-resume.out</string>
+ <key>StandardErrorPath</key>
+ <string>/Users/macstudio3/.claude/yolo-queue/jd-yard-resume.err</string>
+</dict>
+</plist>
diff --git a/scripts/justin-david-pricing/crawl-gap-staging.py b/scripts/justin-david-pricing/crawl-gap-staging.py
new file mode 100644
index 0000000..e7d56cd
--- /dev/null
+++ b/scripts/justin-david-pricing/crawl-gap-staging.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python3
+"""
+Justin David crawl-gap staging crawler.
+
+Crawls the 120 sheet-only patterns' detail pages at
+https://www.justindavid.com/pattern/{slug}/ (server-rendered static HTML),
+harvests colorways + real image URLs + specs, joins authoritative Jan-2026
+sheet pricing from crawl-gap-120-patterns.tsv, and loads everything into the
+Mac2-LOCAL dw_unified table justindavid_catalog_staging.
+
+SAFE / autonomous: writes ONLY to the local mirror staging table. NEVER touches
+canonical justindavid_catalog (promotion is a separate Steve-gated step).
+
+Usage:
+ python3 crawl-gap-staging.py --dry-run # crawl + parse, write JSONL, no DB
+ python3 crawl-gap-staging.py --load # crawl + load into staging table
+ python3 crawl-gap-staging.py --load --limit 5 # first N patterns only
+"""
+import argparse, csv, html, json, os, re, subprocess, sys, time, urllib.request, urllib.error
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+TSV = os.path.join(HERE, "crawl-gap-120-patterns.tsv")
+OUT_JSONL = os.path.join(HERE, "crawl-gap-staging.jsonl")
+BASE = "https://www.justindavid.com/pattern/{slug}/"
+UA = "Mozilla/5.0 (compatible; DW-catalog-crawl/1.0; +https://designerwallcoverings.com)"
+DBNAME = "dw_unified" # Mac2-LOCAL mirror
+
+def fetch(url, timeout=30):
+ req = urllib.request.Request(url, headers={"User-Agent": UA})
+ try:
+ with urllib.request.urlopen(req, timeout=timeout) as r:
+ return r.getcode(), r.read().decode("utf-8", "replace")
+ except urllib.error.HTTPError as e:
+ return e.code, ""
+ except Exception as e:
+ return 0, f"[ERR {e}]"
+
+def clean(s):
+ return re.sub(r"\s+", " ", html.unescape(s or "")).strip()
+
+def parse_colorways(h):
+ """Each colorway -> (color_name, image_url). Dedup, preserve order."""
+ out, seen = [], set()
+ # color-info gives 'PATTERN - COLOR'; the preceding img carries data-lazy-src/src.
+ # Walk all color-thumb imgs (they carry id=COLOR + a real url) in document order.
+ for m in re.finditer(r'<img[^>]*class="color-thumb"[^>]*>', h, re.I):
+ tag = m.group(0)
+ cid = re.search(r'id="([^"]+)"', tag)
+ color = clean(cid.group(1)) if cid else ""
+ if not color or color.upper() in seen:
+ continue
+ # real image url: data-lazy-src first, else a real http src
+ url = ""
+ lz = re.search(r'data-lazy-src="([^"]+)"', tag)
+ if lz:
+ url = lz.group(1)
+ else:
+ sm = re.search(r'\ssrc="(https?://[^"]+)"', tag)
+ if sm:
+ url = sm.group(1)
+ if url.startswith("data:"):
+ url = ""
+ seen.add(color.upper())
+ out.append((color, url))
+ return out
+
+SPEC_KEYS = [
+ ("content", r"Content:\s*([^<]*)"),
+ ("width", r"Width:\s*([^<]*)"),
+ ("pattern_repeat", r"Repeat:\s*([^<]*)"),
+ ("fire_rating", r"FR Code:\s*([^<]*)"),
+ ("abrasion", r"Abrasion:\s*([^<]*)"),
+ ("finish", r"Finish:\s*([^<]*)"),
+ ("cleaning_code", r"Cleaning Code:\s*([^<]*)"),
+ ("basecloth", r"Basecloth:\s*([^<]*)"),
+]
+
+def parse_specs(h):
+ i = h.lower().find('class="pattern-info')
+ seg = h[i:i+3000] if i >= 0 else ""
+ specs = {}
+ for key, pat in SPEC_KEYS:
+ m = re.search(pat, seg, re.I)
+ if m:
+ v = clean(m.group(1))
+ # skip unresolved WP shortcodes / empties
+ if v and "[types" not in v and "]" not in v[:1]:
+ specs[key] = v
+ return specs
+
+def mfr_sku(pattern, color):
+ p = re.sub(r"[^A-Z0-9]+", "-", pattern.upper()).strip("-")
+ c = re.sub(r"[^A-Z0-9]+", "-", color.upper()).strip("-")
+ return f"JD-{p}-{c}"
+
+def load_sheet():
+ rows = {}
+ with open(TSV, newline="", encoding="utf-8") as f:
+ for r in csv.DictReader(f, delimiter="\t"):
+ rows[r["vendor_pattern_slug"]] = r
+ return rows
+
+def main():
+ ap = argparse.ArgumentParser()
+ ap.add_argument("--dry-run", action="store_true")
+ ap.add_argument("--load", action="store_true")
+ ap.add_argument("--reload", action="store_true",
+ help="rebuild + load staging from existing JSONL (no re-crawl)")
+ ap.add_argument("--limit", type=int, default=0)
+ ap.add_argument("--sleep", type=float, default=2.0)
+ args = ap.parse_args()
+ if not (args.dry_run or args.load or args.reload):
+ ap.error("pass --dry-run, --load, or --reload")
+
+ if args.reload:
+ records = [json.loads(l) for l in open(OUT_JSONL, encoding="utf-8") if l.strip()]
+ print(f"Reloading {len(records)} pattern records from {OUT_JSONL} (no re-crawl)")
+ load_db(records)
+ return
+
+ sheet = load_sheet()
+ slugs = list(sheet.keys())
+ if args.limit:
+ slugs = slugs[:args.limit]
+
+ records, jl = [], open(OUT_JSONL, "w", encoding="utf-8")
+ for n, slug in enumerate(slugs, 1):
+ srow = sheet[slug]
+ url = BASE.format(slug=slug)
+ code, h = fetch(url)
+ cws = parse_colorways(h) if code == 200 else []
+ specs = parse_specs(h) if code == 200 else {}
+ pattern = srow["pattern"]
+ rec = {
+ "pattern_name": pattern,
+ "collection": srow["collection"],
+ "vendor_pattern_slug": slug,
+ "product_url": url,
+ "http_status": code,
+ "colorway_count": len(cws),
+ "price_per_yard": srow["price_per_yard"],
+ "sell_per_yard": srow["sell_per_yard"],
+ "tariff_per_yard": srow["tariff_per_yard"],
+ "specs": specs,
+ "colorways": [{"color": c, "image_url": u} for c, u in cws],
+ }
+ records.append(rec)
+ jl.write(json.dumps(rec) + "\n"); jl.flush()
+ print(f"[{n}/{len(slugs)}] {pattern:30.30} slug={slug:24.24} http={code} colorways={len(cws)} specs={len(specs)}")
+ if n < len(slugs):
+ time.sleep(args.sleep)
+ jl.close()
+ print(f"\nWrote {len(records)} pattern records -> {OUT_JSONL}")
+
+ ok = [r for r in records if r["http_status"] == 200]
+ total_cw = sum(r["colorway_count"] for r in ok)
+ print(f"HTTP 200: {len(ok)}/{len(records)} | total colorways: {total_cw} | non-200: {[ (r['pattern_name'], r['http_status']) for r in records if r['http_status']!=200 ]}")
+
+ if args.load:
+ load_db(records)
+
+def sql_lit(v):
+ if v is None or v == "":
+ return "NULL"
+ return "'" + str(v).replace("'", "''") + "'"
+
+def load_db(records):
+ # Build one transactional SQL file: create table + insert all colorway rows.
+ sql = [open(os.path.join(HERE, "staging-schema.sql")).read(),
+ "BEGIN;",
+ "TRUNCATE justindavid_catalog_staging RESTART IDENTITY;"]
+ rowcount = 0
+ for r in records:
+ if r["http_status"] != 200 or not r["colorways"]:
+ continue
+ all_imgs = ",".join(c["image_url"] for c in r["colorways"] if c["image_url"])
+ s = r["specs"]
+ for c in r["colorways"]:
+ sku = mfr_sku(r["pattern_name"], c["color"])
+ cols = {
+ "mfr_sku": sku,
+ "pattern_name": r["pattern_name"],
+ "color_name": c["color"],
+ "collection": r["collection"],
+ "content": s.get("content"),
+ "width": s.get("width"),
+ "pattern_repeat": s.get("pattern_repeat"),
+ "fire_rating": s.get("fire_rating"),
+ "abrasion": s.get("abrasion"),
+ "finish": s.get("finish"),
+ "cleaning_code": s.get("cleaning_code"),
+ "basecloth": s.get("basecloth"),
+ "image_url": c["image_url"] or None,
+ "all_images": all_imgs or None,
+ "product_url": r["product_url"],
+ "price_per_yard": r["price_per_yard"],
+ "sell_per_yard": r["sell_per_yard"],
+ "tariff_per_yard": r["tariff_per_yard"],
+ "vendor_pattern_slug": r["vendor_pattern_slug"],
+ "http_status": r["http_status"],
+ "colorway_count": r["colorway_count"],
+ }
+ colnames = ",".join(cols.keys()) + ",specs"
+ vals = ",".join(sql_lit(v) for v in cols.values())
+ specs_json = sql_lit(json.dumps(s)) + "::jsonb"
+ sql.append(f"INSERT INTO justindavid_catalog_staging ({colnames}) VALUES ({vals},{specs_json}) ON CONFLICT (mfr_sku) DO NOTHING;")
+ rowcount += 1
+ sql.append("COMMIT;")
+ sqlfile = os.path.join(HERE, "crawl-gap-staging-load.sql")
+ with open(sqlfile, "w", encoding="utf-8") as f:
+ f.write("\n".join(sql))
+ print(f"Built {rowcount} colorway INSERTs -> {sqlfile}; loading into LOCAL {DBNAME} ...")
+ p = subprocess.run(["psql", DBNAME, "-v", "ON_ERROR_STOP=1", "-f", sqlfile],
+ capture_output=True, text=True)
+ sys.stdout.write(p.stdout); sys.stderr.write(p.stderr)
+ if p.returncode != 0:
+ print("LOAD FAILED", file=sys.stderr); sys.exit(1)
+ print("Load OK.")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/justin-david-pricing/daily-resume-jd-phase2.sh b/scripts/justin-david-pricing/daily-resume-jd-phase2.sh
new file mode 100755
index 0000000..9ad6b89
--- /dev/null
+++ b/scripts/justin-david-pricing/daily-resume-jd-phase2.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+# daily-resume-jd-phase2.sh — resume Justin David Phase 2 net-new product creation
+# once per day until the line is drained. Steve-approved (run twice manually 2026-06-18);
+# this wrapper just retries the SAME approved create command daily, because Shopify's
+# rolling ~1,000 new-variants/day quota only lets ~450 products/day through.
+#
+# Exit codes from the importer:
+# 0 = ran to completion this pass (queue drained OR nothing to do) → line may be DONE
+# 3 = DAILY_CAP reached (more remain; quota may still have room — but daily cadence is fine)
+# 4 = Shopify daily variant quota hit (resume tomorrow)
+# 1 = fatal
+#
+# When jd-phase2-done.txt covers all priced-net-new rows, writes .JD-PHASE2-COMPLETE and
+# exits 0 without calling Shopify — at which point the launchd job can be unloaded.
+set -uo pipefail
+cd "$(dirname "$0")" || exit 1
+
+# BURST LOCKDOWN (2026-06-23, vp-dw-commerce): build-jd-phase2-creates.mjs is a LEDGER-BYPASSING
+# product-CREATE burst (no budget.cjs gate / no kill-switch). Per Steve's HARD rule only the metered
+# 18/hr cadence (budget.cjs) may CREATE Shopify products. This guard aborts EVEN A MANUAL run. The
+# JD Phase-2 net-new backlog should drain through the metered cadence rotation. To re-arm
+# (Steve-gated): `rm .DISARMED-BURST` here, OR retrofit budget.cjs+killswitch into the create path.
+if [ -f "$(dirname "$0")/.DISARMED-BURST" ]; then
+ echo "[$(date +%Y%m%d-%H%M%S)] BURST DISARMED (.DISARMED-BURST present) — only the metered cadence may create products. Skipping." | tee -a jd-phase2-daily.history
+ exit 0
+fi
+
+STAMP=$(date +%Y%m%d-%H%M%S)
+LOG="jd-phase2-daily-${STAMP}.log"
+COMPLETE=".JD-PHASE2-COMPLETE"
+
+if [ -f "$COMPLETE" ]; then
+ echo "[$STAMP] already complete ($(cat "$COMPLETE")) — nothing to do" | tee -a jd-phase2-daily.history
+ exit 0
+fi
+
+# Pre-check: are there still priced-net-new rows not yet done? (cheap dry-run header read;
+# no --execute so it writes nothing to Shopify. priced-net-new already excludes done rows.)
+TODO=$(STATUS=DRAFT node build-jd-phase2-creates.mjs --limit=1 2>/dev/null | grep -oE 'priced-net-new=[0-9]+' | head -1 | cut -d= -f2)
+if [ "${TODO:-1}" = "0" ]; then
+ echo "complete $STAMP — 0 priced-net-new remaining" > "$COMPLETE"
+ echo "[$STAMP] line drained — wrote $COMPLETE" | tee -a jd-phase2-daily.history
+ exit 0
+fi
+
+echo "[$STAMP] resuming — todo=$TODO" | tee -a jd-phase2-daily.history
+STATUS=DRAFT node build-jd-phase2-creates.mjs --execute --i-am-steve > "$LOG" 2>&1
+RC=$?
+CREATED=$(grep -oE '[0-9]+ created /' "$LOG" | tail -1 | grep -oE '^[0-9]+')
+DONE_N=$(wc -l < jd-phase2-done.txt 2>/dev/null | tr -d ' ')
+
+case $RC in
+ 0) NOTE="ran to completion (created ${CREATED:-?} this pass)";;
+ 3) NOTE="daily cap reached (created ${CREATED:-?})";;
+ 4) NOTE="Shopify variant quota hit (created ${CREATED:-?}) — retry tomorrow";;
+ *) NOTE="FATAL rc=$RC — see $LOG";;
+esac
+echo "[$STAMP] rc=$RC done-total=$DONE_N — $NOTE" | tee -a jd-phase2-daily.history
+
+# Self-heal: a product right at the daily quota edge can land with its variant-create
+# cut off (lone Default Title, no price/sku). Stays DRAFT; idempotent (healthy ones are
+# skipped). Same already-approved DRAFT-variant operation as the create — does NOT publish.
+#
+# Two passes, because the create step ABOVE appends ~450 rows to the rollback log first,
+# which would bury any prior-batch quarantined product far outside the --recent window:
+# 1) --from-quarantine : guaranteed to reach every quarantined product (e.g. DWPR-436860)
+# regardless of how many new creates ran this pass.
+# 2) --recent=25 : catches a fresh boundary product cut off in THIS pass that hasn't
+# been through the publisher's QA gate yet (so not in quarantine).
+REPAIR=$(node repair-jd-variants.mjs --from-quarantine --execute --i-am-steve 2>&1 | grep -E "✅ repaired|⛔|repair-ERR" | head -5)
+REPAIR="$REPAIR
+$(node repair-jd-variants.mjs --recent=25 --execute --i-am-steve 2>&1 | grep -E "✅ repaired|⛔|repair-ERR" | head -5)"
+REPAIR=$(echo "$REPAIR" | grep -E "✅ repaired|⛔|repair-ERR")
+[ -n "$REPAIR" ] && echo "[$STAMP] repair-sweep:" && echo "$REPAIR" | sed 's/^/[$STAMP] /' | tee -a jd-phase2-daily.history
+
+# log the win to CNCP if anything was created (absolute python path — launchd PATH is bare)
+if [ "${CREATED:-0}" -gt 0 ] 2>/dev/null; then
+ /usr/bin/curl -s -X POST http://127.0.0.1:3333/api/wins \
+ -H 'Content-Type: application/json' \
+ -d "{\"project\":\"designerwallcoverings\",\"title\":\"JD Phase 2: +${CREATED} net-new products (daily resume)\",\"summary\":\"$NOTE; done-total ${DONE_N}\"}" >/dev/null 2>&1 || true
+fi
+exit "$RC"
diff --git a/scripts/justin-david-pricing/install-jd-yard-job.sh b/scripts/justin-david-pricing/install-jd-yard-job.sh
new file mode 100755
index 0000000..e73cff6
--- /dev/null
+++ b/scripts/justin-david-pricing/install-jd-yard-job.sh
@@ -0,0 +1,13 @@
+#!/bin/zsh
+# install-jd-yard-job.sh — Steve runs this to ARM the JD daily yard-variant build.
+# Short one-liner avoids paste line-wrap / prose-contamination (zsh parse errors).
+set -e
+PL="$HOME/Library/LaunchAgents/com.steve.jd-yard-resume.plist"
+SRC="$HOME/Projects/designerwallcoverings/scripts/justin-david-pricing/com.steve.jd-yard-resume.plist"
+cp "$SRC" "$PL"
+launchctl bootout "gui/$(id -u)/com.steve.jd-yard-resume" 2>/dev/null || true
+launchctl bootstrap "gui/$(id -u)" "$PL"
+echo "--- verify (expect a PID-or-dash line for com.steve.jd-yard-resume) ---"
+launchctl list | grep jd-yard-resume || echo "NOT loaded — check $PL"
+echo "ARMED. First cap-paced run: tomorrow 6:45am (after sample-split 6:15)."
+echo "Self-disables at 0 remaining; self-halts+alerts on any sample-loss."
diff --git a/scripts/justin-david-pricing/parse-jd-pricelist.py b/scripts/justin-david-pricing/parse-jd-pricelist.py
new file mode 100644
index 0000000..b356373
--- /dev/null
+++ b/scripts/justin-david-pricing/parse-jd-pricelist.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+"""Parse the Justin David 2026 January price list (pdftotext -layout output)
+into an authoritative pattern->price table + per-pattern discontinued colors.
+
+Legend (from the sheet footer):
+ * = certain colors discontinued (those colors listed on final pages)
+ + = 500 yard minimum order requirement
+ n/a in tariff column = no tariff surcharge
+
+Pricing rule (Steve, 2026-06-17): sell price per yard = listed Price Per Yard * 1.30.
+Tariff surcharge is captured separately, NOT folded into the markup here.
+"""
+import re, json, sys
+
+TXT = sys.argv[1] if len(sys.argv) > 1 else "/tmp/jd.txt"
+OUT = sys.argv[2] if len(sys.argv) > 2 else "/tmp/jd-parsed.json"
+
+lines = open(TXT, encoding="utf-8").read().splitlines()
+
+# A price row: <pattern> <collection> $price ($tariff | n/a)
+price_re = re.compile(r"^(.+?)\s{2,}(.+?)\s{2,}\$([0-9]+\.[0-9]{2})\s+(\$[0-9]+\.[0-9]{2}|n/a)\s*$")
+# Discontinued-color row: <pattern> <color, color, ...> (no $)
+disc_re = re.compile(r"^(\S.+?)\s{3,}([A-Za-z].*)$")
+
+NOISE = ("2026 January Price List", "Items marked have", "JUSTIN DAVID Textiles",
+ "Sample Book", "Price", "Per Yard", "Pattern")
+
+def norm(p):
+ return re.sub(r"\s+", " ", p.replace("*", "").replace("+", "").strip()).upper()
+
+prices = {} # NORMPATTERN -> dict
+disc_colors = {} # NORMPATTERN -> [colors]
+in_disc = False
+
+for i, ln in enumerate(lines):
+ s = ln.strip()
+ if not s or any(n in s for n in NOISE):
+ continue
+ m = price_re.match(ln)
+ if m and not in_disc:
+ raw_pat, coll, price, tariff = m.groups()
+ flags = ""
+ if "*" in raw_pat: flags += "*"
+ if "+" in raw_pat: flags += "+"
+ np = norm(raw_pat)
+ prices[np] = {
+ "pattern": raw_pat.replace("*", "").replace("+", "").strip(),
+ "collection": coll.strip(),
+ "price_per_yard": float(price),
+ "tariff_per_yard": None if tariff == "n/a" else float(tariff.replace("$", "")),
+ "min_order_500": "+" in flags,
+ "has_disc_colors": "*" in flags,
+ "sell_per_yard": round(float(price) * 1.30, 2),
+ }
+ continue
+ # discontinued section detection: once we hit the colors-only block it stays
+ md = disc_re.match(ln)
+ if md and not price_re.match(ln):
+ pat, colors = md.groups()
+ # only treat as disc-color row if the 2nd field has commas OR we're past the price table
+ if "," in colors or in_disc:
+ in_disc = True
+ np = norm(pat)
+ cl = [c.strip() for c in colors.split(",") if c.strip()]
+ disc_colors.setdefault(np, [])
+ disc_colors[np].extend(cl)
+
+result = {
+ "n_priced_patterns": len(prices),
+ "n_patterns_with_disc_colors": len(disc_colors),
+ "n_disc_colors_total": sum(len(v) for v in disc_colors.values()),
+ "prices": prices,
+ "discontinued_colors": disc_colors,
+}
+json.dump(result, open(OUT, "w"), indent=2, ensure_ascii=False)
+print(f"priced patterns: {len(prices)}")
+print(f"patterns w/ discontinued colors: {len(disc_colors)}")
+print(f"total discontinued color entries: {result['n_disc_colors_total']}")
+print(f"price range/yd: ${min(p['price_per_yard'] for p in prices.values())} - ${max(p['price_per_yard'] for p in prices.values())}")
+print(f"wrote {OUT}")
diff --git a/scripts/justin-david-pricing/publish-jd-batch.mjs b/scripts/justin-david-pricing/publish-jd-batch.mjs
new file mode 100644
index 0000000..d61b00b
--- /dev/null
+++ b/scripts/justin-david-pricing/publish-jd-batch.mjs
@@ -0,0 +1,153 @@
+#!/usr/bin/env node
+/**
+ * publish-jd-batch.mjs — set the pending Justin David Phase 2 DRAFT products to ACTIVE,
+ * one human-approved batch at a time. (DTD verdict B, 3/3, 2026-06-18: rolling daily
+ * publish, HUMAN-GATED — create is automated, but a person approves each publish.)
+ *
+ * WHAT IT DOES:
+ * • "Pending batch" = every product in jd-phase2-rollback.jsonl that is still DRAFT and
+ * NOT yet in jd-phase2-publish-done.txt. Because each run records what it publishes,
+ * this naturally equals "the products created since the last publish" — i.e. today's
+ * freshly-created batch.
+ * • Runs a PRE-PUBLISH QA GATE on each (below). Only products that PASS get set ACTIVE.
+ * Once ACTIVE, Shopify smart collections auto-assign them by vendor/tag.
+ *
+ * QA GATE (a product must pass ALL to be published):
+ * • status is currently DRAFT (ACTIVE already → record done, skip; never re-flip)
+ * • ≥1 image/media attached
+ * • ≥1 metafield present (the spec block; catches the old 25/call zero-metafield bug)
+ * • exactly-or-more-than 2 variants, every variant price > 0 (Sample $4.25 + Sold-per-Yard)
+ * • title present AND vendor === 'Los Angeles Fabrics' (private-label sanity)
+ * FAIL → quarantined to jd-phase2-publish-quarantine.jsonl, NOT published, NOT marked done
+ * (so it's re-checked next run once fixed). A failing product never blocks the batch.
+ *
+ * SAFETY / GATES:
+ * • DRY-RUN by default — prints the QA verdict + how many WOULD publish, writes nothing.
+ * Requires BOTH --execute AND --i-am-steve to flip status (same gate as the importer).
+ * This is the customer-facing publish step — keep it draft-until-Steve-says-go.
+ * • IDEMPOTENT / resumable: published product_ids append to jd-phase2-publish-done.txt;
+ * a re-run skips them. Re-running is safe.
+ * • PACED: PUBLISH_CAP (default 600) bounds one run. COST: Shopify Admin API is FREE — $0.
+ *
+ * USAGE:
+ * node publish-jd-batch.mjs # DRY-RUN (default): QA report only
+ * node publish-jd-batch.mjs --limit=20 # dry-run first 20 pending
+ * node publish-jd-batch.mjs --execute --i-am-steve # LIVE publish (Steve-gated)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const EXECUTE = args.execute === true && args['i-am-steve'] === true;
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const PUBLISH_CAP = parseInt(process.env.PUBLISH_CAP || '600', 10);
+const VENDOR = 'Los Angeles Fabrics'; // private-label — must match the importer
+
+const ROLLBACK = path.join(__dir, 'jd-phase2-rollback.jsonl');
+const PUB_DONE = path.join(__dir, 'jd-phase2-publish-done.txt');
+const QUARANTINE = path.join(__dir, 'jd-phase2-publish-quarantine.jsonl');
+
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1].trim();
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const SHOP_URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// ── Shopify Admin GraphQL — throttle-aware + retrying (same form as the importer) ──
+async function gql(q, v) {
+ for (let i = 0; i < 8; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(SHOP_URL, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ let j; try { j = await r.json(); } catch (e) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors) return { __err: j.errors };
+ const t = j.extensions?.cost?.throttleStatus;
+ if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const PRODUCT_QA = `query($id:ID!){ product(id:$id){
+ id status title vendor
+ media(first:1){ nodes{ id } }
+ metafields(first:3){ nodes{ id } }
+ variants(first:5){ nodes{ price } } } }`;
+const PRODUCT_ACTIVATE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){
+ product{ id status } userErrors{ field message } } }`;
+
+// returns { verdict: 'publish'|'already-active'|'fail'|'missing', reasons:[], product }
+function judge(p) {
+ if (!p) return { verdict: 'missing', reasons: ['product not found'] };
+ if (p.status === 'ACTIVE') return { verdict: 'already-active', reasons: [], product: p };
+ const reasons = [];
+ if (!(p.media?.nodes?.length >= 1)) reasons.push('no image');
+ if (!(p.metafields?.nodes?.length >= 1)) reasons.push('no metafields');
+ const vs = p.variants?.nodes || [];
+ if (vs.length < 2) reasons.push(`only ${vs.length} variant(s)`);
+ if (vs.some(v => !(parseFloat(v.price) > 0))) reasons.push('a variant price is 0/blank');
+ if (!p.title) reasons.push('no title');
+ if (p.vendor !== VENDOR) reasons.push(`vendor "${p.vendor}" != "${VENDOR}"`);
+ return { verdict: reasons.length ? 'fail' : 'publish', reasons, product: p };
+}
+
+(async () => {
+ if (!fs.existsSync(ROLLBACK)) { console.error(`No rollback map at ${ROLLBACK} — nothing to publish.`); process.exit(1); }
+ const pubDone = new Set(fs.existsSync(PUB_DONE) ? fs.readFileSync(PUB_DONE, 'utf8').split('\n').filter(Boolean) : []);
+
+ // live created products not yet published, deduped by product_id
+ const rows = fs.readFileSync(ROLLBACK, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+ const seen = new Set();
+ const pending = rows.filter(r => r.product_id && r.product_id !== '(dry-run)' && !pubDone.has(r.product_id))
+ .filter(r => (seen.has(r.product_id) ? false : (seen.add(r.product_id), true)));
+ const todo = pending.slice(0, LIMIT === Infinity ? undefined : LIMIT);
+
+ console.log(`publish-jd-batch — ${EXECUTE ? '⚠️ LIVE (sets products ACTIVE / customer-facing)' : 'DRY-RUN (QA report only, no status changes)'}`);
+ console.log(` created-live=${seen.size + pubDone.size} already-published=${pubDone.size} pending=${pending.length} this-run=${todo.length} cap=${PUBLISH_CAP}`);
+
+ const doneStream = EXECUTE ? fs.createWriteStream(PUB_DONE, { flags: 'a' }) : null;
+ const quarStream = fs.createWriteStream(QUARANTINE, { flags: 'w' });
+ let published = 0, alreadyActive = 0, failed = 0, errored = 0, wouldPublish = 0, aborted = false;
+ const failSamples = [];
+
+ for (const r of todo) {
+ if (EXECUTE && published >= PUBLISH_CAP) { console.log(`\nPublish cap ${PUBLISH_CAP} reached — stopping (resumable).`); aborted = true; break; }
+ const q = await gql(PRODUCT_QA, { id: r.product_id });
+ if (q?.__err) { errored++; if (errored <= 10) console.log(' qa-ERR', r.dw_sku, JSON.stringify(q.__err).slice(0, 120)); continue; }
+ const { verdict, reasons, product } = judge(q.product);
+
+ if (verdict === 'already-active') { alreadyActive++; if (EXECUTE) doneStream.write(r.product_id + '\n'); continue; }
+ if (verdict === 'missing' || verdict === 'fail') {
+ failed++; quarStream.write(JSON.stringify({ dw_sku: r.dw_sku, product_id: r.product_id, reasons }) + '\n');
+ if (failSamples.length < 8) failSamples.push(`${r.dw_sku}: ${reasons.join(', ')}`);
+ continue;
+ }
+ // verdict === 'publish'
+ if (!EXECUTE) { wouldPublish++; if (wouldPublish % 100 === 0) console.log(` ${wouldPublish} would-publish`); continue; }
+
+ const up = await gql(PRODUCT_ACTIVATE, { id: r.product_id });
+ const ue = up?.__err || up?.productUpdate?.userErrors;
+ if (up?.__err || (up?.productUpdate?.userErrors?.length)) { errored++; if (errored <= 10) console.log(' publish-ERR', r.dw_sku, JSON.stringify(ue).slice(0, 120)); continue; }
+ doneStream.write(r.product_id + '\n');
+ published++;
+ if (published % 50 === 0) console.log(` ${published} published / ${todo.length} (fail ${failed}, already ${alreadyActive}, errs ${errored})`);
+ await sleep(120);
+ }
+
+ await new Promise(res => { let n = 1 + (doneStream ? 1 : 0); const d = () => (--n <= 0 && res()); quarStream.end(d); if (doneStream) doneStream.end(d); });
+
+ console.log(`\n${EXECUTE ? 'DONE' : 'DRY-RUN'} — ${EXECUTE ? `${published} published` : `${wouldPublish} would publish`}, ${failed} QA-failed (quarantined), ${alreadyActive} already-active, ${errored} errors.`);
+ if (failSamples.length) { console.log(` QA failures (sample):`); failSamples.forEach(s => console.log(` - ${s}`)); console.log(` full list: ${QUARANTINE}`); }
+ if (!EXECUTE) console.log(`To publish (Steve only): node publish-jd-batch.mjs --execute --i-am-steve`);
+
+ // log a CNCP win on a real publish (absolute curl; best-effort)
+ if (EXECUTE && published > 0) {
+ try { await fetch('http://127.0.0.1:3333/api/wins', { method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ project: 'designerwallcoverings', title: `JD Phase 2: published ${published} products live`, summary: `Set ${published} Justin David net-new products ACTIVE (QA-gated); ${failed} quarantined.` }) }); } catch (e) {}
+ }
+ if (aborted) process.exit(3);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/justin-david-pricing/repair-jd-variants.mjs b/scripts/justin-david-pricing/repair-jd-variants.mjs
new file mode 100644
index 0000000..a10d554
--- /dev/null
+++ b/scripts/justin-david-pricing/repair-jd-variants.mjs
@@ -0,0 +1,126 @@
+#!/usr/bin/env node
+/**
+ * repair-jd-variants.mjs — repair a JD Phase 2 product whose variant-create was cut off
+ * (left on the lone "Default Title" standalone, price 0, no SKU — quarantined by the
+ * publisher's QA gate). Re-runs the importer's variant step: promote the standalone into
+ * "Sample" ($4.25) and add "Sold per Yard" (sell_per_yard from the staging CSV), via
+ * productVariantsBulkCreate(strategy:REMOVE_STANDALONE_VARIANT) — identical to a clean create.
+ *
+ * Does NOT touch product status (stays DRAFT) or metafields. Idempotent: if the product
+ * already has the 2 priced variants, it reports "already healthy" and writes nothing.
+ *
+ * SAFETY: DRY-RUN by default; --execute --i-am-steve to write. COST: $0 (Shopify Admin API).
+ * NOTE: adds 2 variants → consumes Shopify's daily variant-creation quota; if that quota
+ * is exhausted the bulk-create returns "Daily variant creation limit reached" — retry later.
+ *
+ * USAGE:
+ * node repair-jd-variants.mjs --sku=DWPR-436860 # DRY-RUN
+ * node repair-jd-variants.mjs --sku=DWPR-436860 --execute --i-am-steve
+ * node repair-jd-variants.mjs --from-quarantine --execute --i-am-steve # all quarantined
+ * node repair-jd-variants.mjs --recent=20 --execute --i-am-steve # last 20 created (daily sweep)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const EXECUTE = args.execute === true && args['i-am-steve'] === true;
+const SAMPLE_PRICE = process.env.SAMPLE_PRICE || '4.25';
+
+const ROLLBACK = path.join(__dir, 'jd-phase2-rollback.jsonl');
+const CSV = process.env.JD_CSV || path.join(__dir, 'jd-priced-staging.csv');
+const QUARANTINE = path.join(__dir, 'jd-phase2-publish-quarantine.jsonl');
+
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1].trim();
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const SHOP_URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(q, v) {
+ for (let i = 0; i < 8; i++) {
+ let r; const ac = new AbortController(); const to = setTimeout(() => ac.abort(), 25000);
+ try { r = await fetch(SHOP_URL, { method: 'POST', signal: ac.signal, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { clearTimeout(to); await sleep(1500 * (i + 1)); continue; }
+ clearTimeout(to);
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ let j; try { j = await r.json(); } catch (e) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ if (j.errors) return { __err: j.errors };
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const PRODUCT_Q = `query($id:ID!){ product(id:$id){ id title status options{ name }
+ variants(first:10){ nodes{ id title price inventoryItem{ sku } } } } }`;
+const VARIANTS_CREATE = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid,variants:$variants,strategy:REMOVE_STANDALONE_VARIANT){
+ productVariants{ id sku title price } userErrors{ field message } } }`;
+
+function loadPricing() {
+ const lines = fs.readFileSync(CSV, 'utf8').trim().split('\n');
+ const hdr = lines[0].split(',');
+ const m = {};
+ for (const l of lines.slice(1)) { const c = l.split(','); const r = Object.fromEntries(hdr.map((h, i) => [h, c[i]])); m[r.dw_sku] = r; }
+ return m;
+}
+function liveIdFor(dwSku, rows) {
+ const hit = rows.filter(r => r.dw_sku === dwSku && r.product_id && r.product_id !== '(dry-run)').pop();
+ return hit?.product_id || null;
+}
+
+async function repairOne(dwSku, pricing, rows) {
+ const pid = liveIdFor(dwSku, rows);
+ if (!pid) return console.log(` ${dwSku}: no live product_id in rollback — skip`);
+ const pr = pricing[dwSku];
+ if (!pr || !(parseFloat(pr.sell_per_yard) > 0)) return console.log(` ${dwSku}: no valid sell_per_yard in CSV — skip`);
+
+ const q = await gql(PRODUCT_Q, { id: pid });
+ if (q?.__err) return console.log(` ${dwSku}: query-ERR ${JSON.stringify(q.__err).slice(0, 120)}`);
+ const p = q.product;
+ const priced = (p.variants?.nodes || []).filter(v => parseFloat(v.price) > 0 && v.inventoryItem?.sku);
+ if (priced.length >= 2) return console.log(` ${dwSku}: already healthy (${priced.length} priced variants) — no change`);
+
+ const num = dwSku.split('-')[1];
+ const optName = p.options?.[0]?.name || 'Title';
+ const variants = [
+ { price: String(SAMPLE_PRICE), optionValues: [{ optionName: optName, name: 'Sample' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: `DWLA-${num}-Sample`, tracked: false } },
+ { price: String(pr.sell_per_yard), optionValues: [{ optionName: optName, name: 'Sold per Yard' }], inventoryPolicy: 'CONTINUE', inventoryItem: { sku: `DWLA-${num}-Yard`, tracked: false } },
+ ];
+ console.log(` ${dwSku}: ${p.title}`);
+ console.log(` current=${p.variants.nodes.length} variant(s) [${p.variants.nodes.map(v => v.title + '=' + v.price).join(', ')}]`);
+ console.log(` → would set: Sample $${SAMPLE_PRICE} (DWLA-${num}-Sample) + Sold per Yard $${pr.sell_per_yard} (DWLA-${num}-Yard)`);
+ if (!EXECUTE) return console.log(` [dry-run] no write`);
+
+ const vc = await gql(VARIANTS_CREATE, { pid, variants });
+ const ue = vc?.__err || vc?.productVariantsBulkCreate?.userErrors;
+ if (vc?.__err || (vc?.productVariantsBulkCreate?.userErrors?.length)) {
+ if (/Daily variant creation limit/i.test(JSON.stringify(ue))) return console.log(` ⛔ Shopify daily variant quota reached — retry later`);
+ return console.log(` repair-ERR ${JSON.stringify(ue).slice(0, 160)}`);
+ }
+ const got = vc.productVariantsBulkCreate.productVariants;
+ console.log(` ✅ repaired → ${got.map(v => v.title + ' $' + v.price + ' (' + v.sku + ')').join(', ')}`);
+}
+
+(async () => {
+ const pricing = loadPricing();
+ const rows = fs.readFileSync(ROLLBACK, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+ let skus = [];
+ if (args['from-quarantine']) {
+ if (!fs.existsSync(QUARANTINE)) { console.error('no quarantine file'); process.exit(1); }
+ skus = [...new Set(fs.readFileSync(QUARANTINE, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l).dw_sku))];
+ } else if (args.recent) {
+ // last N distinct live-created dw_skus — cheap daily sweep for the boundary product
+ // whose variants got cut off at the quota edge. repairOne() self-skips healthy ones.
+ const n = parseInt(args.recent, 10) || 20;
+ const live = rows.filter(r => r.product_id && r.product_id !== '(dry-run)');
+ const distinct = []; const seen = new Set();
+ for (let i = live.length - 1; i >= 0 && distinct.length < n; i--) { if (!seen.has(live[i].dw_sku)) { seen.add(live[i].dw_sku); distinct.push(live[i].dw_sku); } }
+ skus = distinct;
+ } else if (args.sku) { skus = [args.sku]; }
+ else { console.error('pass --sku=DWPR-XXXXXX, --recent=N, or --from-quarantine'); process.exit(1); }
+
+ console.log(`repair-jd-variants — ${EXECUTE ? '⚠️ LIVE' : 'DRY-RUN'} — ${skus.length} sku(s)`);
+ for (const s of skus) { await repairOne(s, pricing, rows); await sleep(150); }
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/justin-david-pricing/resume-jd-yard.sh b/scripts/justin-david-pricing/resume-jd-yard.sh
new file mode 100755
index 0000000..9b1ecb6
--- /dev/null
+++ b/scripts/justin-david-pricing/resume-jd-yard.sh
@@ -0,0 +1,89 @@
+#!/bin/zsh
+# resume-jd-yard.sh — daily cap-paced finisher for the Justin David "Sold per Yard" variant
+# build. Adds a $sell_per_yard yard variant (preserving the $4.25 Sample) to each remaining
+# live sample-only JD product, capped at DAILY_CAP/day under Shopify's ~1,000 new-variant/day
+# limit. Idempotent + resumable: the builder skips products that already have a -Yard variant
+# (live LOOKUP) and records done pids to jd-yard-done.txt. Self-disables once 0 remain.
+#
+# Modeled on scripts/price-sheets/resume-roll-adds.sh + the sample-split-resume launchd job.
+# Writes DIRECT to Shopify Admin GraphQL (the queue path is dead on Mac2).
+set -e
+# launchd runs with a minimal PATH (/usr/bin:/bin:/usr/sbin:/sbin) that EXCLUDES
+# /usr/local/bin where node lives — without this the builder dies "command not
+# found: node" (exit 127, 0 priced). Cover both Homebrew prefixes.
+export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH"
+cd "$HOME/Projects/designerwallcoverings"
+LOG="/tmp/jd-yard-resume-$(date +%Y%m%d-%H%M).log"
+exec > >(tee -a "$LOG") 2>&1
+echo "=== resume-jd-yard $(date) ==="
+
+# Shared kill-switch (2026-06-19): this job previously ignored it entirely.
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "kill-switch present — skip"; exit 0; }
+
+# Shared variant-budget gate (2026-06-19): JD adds 1 yard variant per product, so DAILY_CAP is a
+# variant count. Draw from the live 'upload' pool (== global ~864/day Shopify ceiling minus
+# osborne) and clamp DAILY_CAP to the grant so the whole writer fleet can't blow the daily cap.
+# take returns min(req, upload-remaining, global-remaining); 0 grant = no budget → exit clean.
+# 2026-06-19 (uploader-starvation fix): REQ_CAP lowered 900→150 so jd-yard takes a FAIR daily slice
+# instead of grabbing all remaining upload budget at 6:45AM and starving the priority cadence
+# uploader to ~1 slot/day. The 1,224-product yard backlog now drains over ~8 days at 150/day — an
+# operationally-fine SLA (officer revision #2: not a blocker). Override live via DAILY_CAP.
+BUDGET="$HOME/Projects/designerwallcoverings/scripts/variant-budget/budget.cjs"
+REQ_CAP="${DAILY_CAP:-150}"
+GRANT=$(node "$BUDGET" take upload "$REQ_CAP" 2>/dev/null || echo "$REQ_CAP")
+if [ "${GRANT:-0}" -lt 1 ]; then echo "no variant budget this run (grant=$GRANT) — exit clean"; exit 0; fi
+export DAILY_CAP="$GRANT" # clamp builder to the granted slice
+export MIN_YARDS="${MIN_YARDS:-2}"
+
+echo "--- running builder (DAILY_CAP=$DAILY_CAP, budget grant=$GRANT) ---"
+# exit 3 = daily cap hit (resumable, not an error). Don't let set -e kill the wrapper on it.
+JD_OUT=$(node scripts/justin-david-pricing/build-jd-yard-variants.mjs --execute --i-am-steve 2>&1) || EC=$?
+echo "$JD_OUT"
+echo "builder exit: ${EC:-0}"
+
+# ── refund the unused upload grant (budget-integrity, 2026-06-20; DTD verdict A) ──
+# We took GRANT variants UP FRONT (== DAILY_CAP clamp) but the builder adds only 1 yard variant per
+# product actually CREATED. The builder ALWAYS prints 'DONE — N created, ...' (even on the exit-3 cap
+# break) so N is reliable; a cap/empty slot creates 0 (refund whole grant), a partial slot fewer
+# (refund the remainder). Without this the unused grant silently drains the shared 864 upload slice.
+# GUARD: refund ONLY when that DONE line was found (JD_CREATED non-empty) — a SIGKILL/FATAL crash
+# that printed no DONE line keeps its debit (conservative; never over-refunds → never over-grants).
+# Skipped on exit 4 (self-heal failure) below since that branch exits before reaching here.
+JD_CREATED=$(printf '%s' "$JD_OUT" | grep -oE 'DONE — [0-9]+ created' | grep -oE '[0-9]+' | tail -1)
+if [ -n "$JD_CREATED" ]; then
+ JD_REFUND=$(( GRANT - JD_CREATED )) # 1 yard variant per product created
+ if [ "$JD_REFUND" -gt 0 ]; then
+ JD_GOT=$(node "$BUDGET" refund upload "$JD_REFUND" 2>/dev/null || echo 0)
+ echo "budget refund: grant=$GRANT used=$JD_CREATED (created×1) → refunded $JD_GOT upload variants"
+ fi
+fi
+
+# exit 4 = self-heal failure (a product lost its $4.25 sample; auto-rolled-back). The
+# variant strategy is wrong — STOP the daily job and alert. Never retry blindly.
+if [ "${EC:-0}" -eq 4 ]; then
+ echo "⛔ SELF-HEAL FAILURE — disabling job + alerting Steve. DO NOT re-arm until fixed."
+ curl -s -X POST http://127.0.0.1:3333/api/wins -H 'Content-Type: application/json' \
+ -d '{"project":"designerwallcoverings","title":"JD yard-variant build HALTED (self-heal failure)","summary":"build-jd-yard-variants.mjs aborted: a product lost its $4.25 sample after the yard add and was auto-rolled-back. Variant strategy needs fixing before re-arming. See latest /tmp/jd-yard-resume-*.log + scripts/justin-david-pricing/jd-yard-skipped.jsonl.","rank":4}' >/dev/null 2>&1 || true
+ launchctl bootout gui/$(id -u)/com.steve.jd-yard-resume 2>/dev/null || true
+ exit 4
+fi
+
+# how many live-matched JD products still need a yard variant?
+REMAIN=$(node -e '
+const fs=require("fs");
+const dir="scripts/justin-david-pricing";
+const done=new Set((()=>{try{return fs.readFileSync(dir+"/jd-yard-done.txt","utf8").split("\n").filter(Boolean)}catch{return[]}})());
+const lines=fs.readFileSync(dir+"/jd-priced-staging.csv","utf8").trim().split("\n");
+const hdr=lines[0].split(",");
+const rows=lines.slice(1).map(l=>{const c=l.split(",");return Object.fromEntries(hdr.map((h,i)=>[h,c[i]]))}).filter(r=>r.on_shopify==="True"&&r.shopify_product_id);
+console.log(rows.filter(r=>!done.has(r.shopify_product_id)).length);
+')
+echo "remaining JD yard-variant adds: $REMAIN"
+
+if [ "$REMAIN" -eq 0 ]; then
+ echo "ALL JD yard-variant adds complete — self-disabling launchd job."
+ launchctl bootout gui/$(id -u)/com.steve.jd-yard-resume 2>/dev/null || true
+else
+ echo "still $REMAIN remaining (likely daily cap) — job will retry tomorrow."
+fi
+echo "=== done $(date) | log: $LOG ==="
diff --git a/scripts/knoll-onboard/build-payloads.mjs b/scripts/knoll-onboard/build-payloads.mjs
new file mode 100644
index 0000000..e29bd67
--- /dev/null
+++ b/scripts/knoll-onboard/build-payloads.mjs
@@ -0,0 +1,120 @@
+#!/usr/bin/env node
+/**
+ * Build Knoll Textiles DRAFT payloads from dw_unified.knoll_catalog → out/payloads.jsonl.
+ * Real-priced line (Roll variant = price_retail per single roll, Sample = $4.25 memo).
+ * vendor='Knoll' drives the SMART collection `knoll-textiles` (rule: vendor EQUALS Knoll),
+ * so activation alone auto-populates the collection — no manual collectionAdd needed.
+ * Mirrors greenland-onboard/build-payloads.mjs.
+ *
+ * node build-payloads.mjs # build payloads.jsonl (priced SKUs) + print first 3
+ * node build-payloads.mjs --bespoke # ALSO include the 10 unpriced Bespoke Wall drafts ($0 Roll)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execSync } from 'node:child_process';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const DB = 'postgresql:///dw_unified?host=/tmp';
+const SAMPLE_PRICE = '4.25'; // DW standard memo sample
+const INCLUDE_BESPOKE = process.argv.includes('--bespoke');
+
+const titleCase = s => (s || '').replace(/\w\S*/g, w => w[0].toUpperCase() + w.slice(1).toLowerCase()).trim();
+// "Wallpaper" is banned in customer-facing text — always Wallcovering
+const clean = s => (s || '').replace(/wall\s*paper/ig, 'Wallcovering').trim();
+
+function rows() {
+ const json = execSync(`psql "${DB}" -tAc "select coalesce(json_agg(row_to_json(t))::text,'[]') from (
+ select mfr_sku, dw_sku, pattern_name, color_name, collection, product_type, width, length,
+ repeat_v, repeat_h, material, price_retail, fire_rating, finish, features,
+ image_url, all_images, product_url
+ from knoll_catalog
+ where dw_sku is not null and mfr_sku is not null
+ order by dw_sku) t"`, { encoding: 'utf8', maxBuffer: 128 * 1024 * 1024 });
+ return JSON.parse(json.trim());
+}
+
+function titleFor(r) {
+ const pat = titleCase(clean(r.pattern_name || r.mfr_sku));
+ const col = r.color_name && r.color_name.toLowerCase() !== (r.pattern_name || '').toLowerCase()
+ ? titleCase(clean(r.color_name)) : '';
+ return `${pat}${col ? ' ' + col : ''} | Knoll`.replace(/\s+/g, ' ').trim();
+}
+function tags(r) {
+ const t = new Set(['Knoll', 'Knoll Textiles', 'Wallcovering', 'Commercial']);
+ if (r.collection && !/knoll\s*textiles/i.test(r.collection)) t.add(titleCase(r.collection));
+ if (r.material) t.add(titleCase(r.material.split(',')[0]));
+ return [...t].join(', ');
+}
+function repeatStr(r) {
+ const v = (r.repeat_v && r.repeat_v !== '0') ? r.repeat_v : '';
+ const h = (r.repeat_h && r.repeat_h !== '0') ? r.repeat_h : '';
+ if (!v && !h) return '';
+ return [h && `H ${h}`, v && `V ${v}`].filter(Boolean).join(' · ');
+}
+function bodyHtml(r) {
+ const rowsHtml = [
+ ['Pattern', clean(r.pattern_name)], ['Color', r.color_name], ['Material', r.material],
+ ['Width', r.width], ['Length', r.length], ['Repeat', repeatStr(r)],
+ ['Finish', r.finish], ['Fire Rating', r.fire_rating],
+ ['Manufacturer SKU', r.mfr_sku], ['Collection', /knoll\s*textiles/i.test(r.collection||'') ? '' : r.collection],
+ ].filter(([, v]) => v != null && String(v).trim() !== '');
+ const pat = titleCase(clean(r.pattern_name || r.mfr_sku));
+ return `<p>${pat} from Knoll Textiles — a high-performance commercial wallcovering. Priced per single roll; request a memo sample to see the material in hand.</p>`
+ + `<table>${rowsHtml.map(([k, v]) => `<tr><td><strong>${k}</strong></td><td>${String(v)}</td></tr>`).join('')}</table>`;
+}
+function metafields(r) {
+ const mf = [];
+ const S = (ns, key, value, type = 'single_line_text_field') => { if (value != null && String(value).trim() !== '') mf.push({ namespace: ns, key, type, value: String(value) }); };
+ S('custom', 'manufacturer_sku', r.mfr_sku);
+ S('dwc', 'manufacturer_sku', r.mfr_sku);
+ S('global', 'Brand', 'Knoll');
+ S('global', 'width', r.width);
+ S('global', 'length', r.length);
+ S('global', 'repeat', repeatStr(r));
+ S('global', 'unit_of_measure', 'Priced Per Single Roll');
+ S('custom', 'color', r.color_name);
+ S('custom', 'real_color_name', r.color_name);
+ return mf;
+}
+function galleryUrls(r) {
+ const urls = new Set();
+ if (r.image_url) urls.add(r.image_url);
+ try { for (const u of JSON.parse(r.all_images || '[]')) if (u) urls.add(u); } catch {}
+ return [...urls];
+}
+
+function main() {
+ const data = rows();
+ const seen = new Set();
+ const fd = fs.openSync(path.join(OUT, 'payloads.jsonl'), 'w');
+ let n = 0, held = 0;
+ for (const r of data) {
+ if (!r.mfr_sku || seen.has(r.mfr_sku)) continue; seen.add(r.mfr_sku);
+ const priced = r.price_retail != null && Number(r.price_retail) > 0;
+ if (!priced && !INCLUDE_BESPOKE) { held++; continue; } // hold the 10 unpriced Bespoke Wall
+ const sku = r.dw_sku; // DWKN-2500xx already assigned in staging
+ const rollPrice = priced ? Number(r.price_retail).toFixed(2) : '0.00';
+ const o = {
+ mfr_sku: r.mfr_sku, sku, dw_sku: r.dw_sku, priced,
+ image_url: r.image_url || null, gallery: galleryUrls(r),
+ product: {
+ title: titleFor(r), vendor: 'Knoll', product_type: 'Wallcovering',
+ status: 'draft', tags: tags(r) + (priced ? '' : ', quotes, Needs-Price'), body_html: bodyHtml(r),
+ options: [{ name: 'Format' }],
+ variants: [
+ { sku, price: rollPrice, option1: 'Roll', taxable: true, requires_shipping: true, inventory_management: null },
+ { sku: `${sku}-Sample`, price: SAMPLE_PRICE, option1: 'Sample', taxable: true, requires_shipping: true, inventory_management: null },
+ ],
+ },
+ metafields: metafields(r),
+ };
+ fs.writeSync(fd, JSON.stringify(o) + '\n'); n++;
+ }
+ fs.closeSync(fd);
+ console.log(`✓ ${n} payloads → out/payloads.jsonl (held ${held} unpriced Bespoke; ${INCLUDE_BESPOKE ? 'INCLUDED via --bespoke' : 'run --bespoke to include as $0 drafts'})`);
+ const sample = fs.readFileSync(path.join(OUT, 'payloads.jsonl'), 'utf8').trim().split('\n').slice(0, 3).map(l => JSON.parse(l));
+ for (const o of sample) console.log(` [${o.sku}] "${o.product.title}" · Roll $${o.product.variants[0].price}/Sample $${o.product.variants[1].price} · mf:${o.metafields.length} · tags:${o.product.tags.split(', ').length} · imgs:${o.gallery.length}`);
+}
+main();
diff --git a/scripts/knoll-onboard/com.steve.knoll-onboard-resume.plist b/scripts/knoll-onboard/com.steve.knoll-onboard-resume.plist
new file mode 100644
index 0000000..cbe99d2
--- /dev/null
+++ b/scripts/knoll-onboard/com.steve.knoll-onboard-resume.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.knoll-onboard-resume</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/knoll-onboard/resume.sh</string>
+ </array>
+ <!-- Daily trickle of the remaining Knoll Textiles creates+activations under the SHARED
+ 'backlog' variant-budget slice (same cadence as greenland/osborne — never starves
+ 'upload'/new-arrivals). resume.sh is idempotent + cap-clean and self-unloads the job
+ once all 622 priced SKUs are created AND active. 00:20 primary + 13:20 retry (recovers
+ a primary lost to a saturated Shopify rolling-24h window). -->
+ <key>StartCalendarInterval</key>
+ <array>
+ <dict><key>Hour</key><integer>0</integer><key>Minute</key><integer>20</integer></dict>
+ <dict><key>Hour</key><integer>13</integer><key>Minute</key><integer>20</integer></dict>
+ </array>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/knoll-onboard/out/launchd.out</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/knoll-onboard/out/launchd.err</string>
+</dict></plist>
diff --git a/scripts/knoll-onboard/create-drafts.mjs b/scripts/knoll-onboard/create-drafts.mjs
new file mode 100644
index 0000000..e1e39a4
--- /dev/null
+++ b/scripts/knoll-onboard/create-drafts.mjs
@@ -0,0 +1,104 @@
+#!/usr/bin/env node
+/**
+ * Create Knoll Textiles products as DRAFT on the live store (designer-laboratory-sandbox),
+ * set metafields, and attach the full image gallery. Mirrors greenland-onboard/create-drafts.mjs
+ * (shared ../lib/shopify.mjs client owns token/throttle/backoff).
+ *
+ * node create-drafts.mjs # DRY-RUN: show plan
+ * node create-drafts.mjs --apply --limit=2 # canary
+ * node create-drafts.mjs --apply # all remaining (resumable, day-cap aware)
+ *
+ * Idempotent: skips any DWKN sku already live on Shopify OR already in out/created.jsonl.
+ * Cap-aware: draws from the shared variant budget (default 'backlog' trickle pool so it
+ * never starves the new-arrivals uploader). Override: DW_KNOLL_BUDGET=upload.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { createRequire } from 'node:module';
+import { rest, gql, restAll, SHOP, TOKEN } from '../lib/shopify.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const require = createRequire(import.meta.url);
+const budget = require('../variant-budget/budget.cjs');
+const BUDGET_CAT = process.env.DW_KNOLL_BUDGET || 'backlog';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`;
+
+const loadJsonl = f => fs.existsSync(path.join(OUT, f))
+ ? fs.readFileSync(path.join(OUT, f), 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l)) : [];
+
+async function attachImage(pid, url, filename) {
+ if (!url) return 'no-url';
+ try {
+ const resp = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!resp.ok) return `dl-${resp.status}`;
+ const b64 = Buffer.from(await resp.arrayBuffer()).toString('base64');
+ const r = await rest(`/products/${pid}/images.json`, { method: 'POST', body: { image: { attachment: b64, filename } } });
+ return (r.status === 200 || r.status === 201) ? 'ok' : `up-${r.status}`;
+ } catch (e) { return 'err'; }
+}
+
+async function liveKnollSkus() {
+ try {
+ const prods = await restAll('/products.json?vendor=Knoll&fields=id,variants&limit=250', 'products');
+ const s = new Set();
+ for (const p of prods) for (const v of (p.variants || [])) if (v.sku) s.add(v.sku.toUpperCase());
+ return s;
+ } catch { return new Set(); }
+}
+
+async function main() {
+ const payloads = loadJsonl('payloads.jsonl');
+ const liveSkus = await liveKnollSkus();
+ const created = loadJsonl('created.jsonl');
+ const createdSku = new Set(created.map(c => c.sku.toUpperCase()));
+ let todo = payloads.filter(p => !liveSkus.has(p.sku.toUpperCase()) && !createdSku.has(p.sku.toUpperCase()));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+
+ const headroom = budget.remaining(BUDGET_CAT);
+ console.log(`Store ${SHOP} · token …${TOKEN.slice(-4)} · payloads ${payloads.length} · live ${liveSkus.size} · to create ${todo.length} · '${BUDGET_CAT}' headroom ${headroom} variants (~${Math.floor(headroom/2)} products) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ for (const o of todo.slice(0, 3)) console.log(` [${o.sku}] "${o.product.title}" · Roll $${o.product.variants[0].price}/Sample $${o.product.variants[1].price} · mf:${o.metafields.length} · imgs:${o.gallery.length}`);
+ console.log(`DRY-RUN. --apply (optionally --limit=N) to create drafts.`);
+ return;
+ }
+
+ const fd = fs.openSync(path.join(OUT, 'created.jsonl'), 'a');
+ let ok = 0, fail = 0, mfFail = 0, imgFail = 0;
+ for (const o of todo) {
+ const grant = budget.take(BUDGET_CAT, o.product.variants.length);
+ if (grant < o.product.variants.length) { console.error(`\n⛔ '${BUDGET_CAT}' budget exhausted today (granted ${grant}). Stop — resume tomorrow (idempotent).`); break; }
+ try {
+ const res = await rest('/products.json', { method: 'POST', body: { product: o.product } });
+ const body = await res.json().catch(() => ({}));
+ if (res.status === 201 && body?.product?.id) {
+ const pid = body.product.id;
+ if (o.metafields.length) {
+ const gid = `gid://shopify/Product/${pid}`;
+ const d = await gql(M_MF, { mf: o.metafields.map(m => ({ ownerId: gid, namespace: m.namespace, key: m.key, type: m.type, value: m.value })) });
+ const ue = d?.metafieldsSet?.userErrors || d?.__err || [];
+ if (ue.length) { mfFail++; console.error(` ⚠ mf ${o.sku}: ${JSON.stringify(ue).slice(0,160)}`); }
+ }
+ let imgOk = 0;
+ for (let i = 0; i < o.gallery.length; i++) {
+ const res2 = await attachImage(pid, o.gallery[i], `${o.mfr_sku}_${i}.jpg`);
+ if (res2 === 'ok') imgOk++; else if (i === 0 && res2 !== 'no-url') console.error(` ⚠ img ${o.sku}: ${res2}`);
+ }
+ if (imgOk === 0) imgFail++;
+ fs.writeSync(fd, JSON.stringify({ mfr_sku: o.mfr_sku, sku: o.sku, product_id: String(pid), imgs: imgOk, status: 'draft', created_at: new Date().toISOString() }) + '\n');
+ ok++; if (ok % 20 === 0) console.log(` ...created ${ok} (fail ${fail}, mfFail ${mfFail}, imgFail ${imgFail})`);
+ } else {
+ const errStr = JSON.stringify(body).toLowerCase();
+ if (/exceed|limit|too many|maximum/.test(errStr) && /variant|product|day/.test(errStr)) { console.error(`\n⛔ Shopify cap on ${o.sku}. Stop — resume tomorrow.`); break; }
+ fail++; console.error(` FAIL ${o.sku}: HTTP ${res.status} ${JSON.stringify(body).slice(0,200)}`);
+ }
+ } catch (e) { fail++; console.error(` ERR ${o.sku}: ${String(e).slice(0,160)}`); await sleep(700); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. created=${ok} failed=${fail} mfFail=${mfFail} imgFail=${imgFail} of ${todo.length}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/knoll-onboard/go-live.mjs b/scripts/knoll-onboard/go-live.mjs
new file mode 100644
index 0000000..ec6d1af
--- /dev/null
+++ b/scripts/knoll-onboard/go-live.mjs
@@ -0,0 +1,117 @@
+#!/usr/bin/env node
+/**
+ * Go-live for the Knoll drafts created by create-drafts.mjs (reads out/created.jsonl).
+ * Per product: enable inventory tracking on both variants, activate at Ventura Blvd +
+ * on_hand = 2026, publish to the 12 DW sales channels (Google-channel deliberately EXCLUDED —
+ * fed only by the controlled TSV), status = ACTIVE. vendor='Knoll' → the SMART collection
+ * `knoll-textiles` (vendor EQUALS Knoll) auto-populates on activation. Also writes the real
+ * shopify_product_id + handle back to knoll_catalog and flips dw_sku_registry → active
+ * (mirror-first). Idempotent: skips products already ACTIVE.
+ *
+ * node go-live.mjs # dry-run summary
+ * node go-live.mjs --apply --limit=2 # canary
+ * node go-live.mjs --apply # all created drafts
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execFileSync } from 'node:child_process';
+import { gql } from '../lib/shopify.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const PSQL = '/opt/homebrew/opt/postgresql@14/bin/psql';
+const PGENV = { ...process.env, PGHOST: '/tmp', PGDATABASE: 'dw_unified' };
+
+const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
+const TARGET_QTY = 2026;
+// Google & YouTube (29646651457) deliberately EXCLUDED — Shopify auto-syncs minVariantPrice
+// (the $4.25 sample) → GMC price_mismatch disapproval. Google fed only by the controlled TSV.
+const PUBLICATIONS = [
+ 22208643184, 22497296496, 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+].map(n => `gid://shopify/Publication/${n}`);
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const Q_VARIANTS = `query($id:ID!){ product(id:$id){ status handle variants(first:10){edges{node{inventoryItem{id}}}}}}`;
+const M_TRACK = `mutation($id:ID!){ inventoryItemUpdate(id:$id, input:{tracked:true}){ userErrors{message} } }`;
+const M_ACTIVATE = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ userErrors{message} } }`;
+const M_SETQTY = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{message code} } }`;
+const M_PUBLISH = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishablePublish(id:$id, input:$pubs){ userErrors{message} } }`;
+const M_ACTIVE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){ product{status} userErrors{message} } }`;
+// Standing rule (Steve 2026-07-22): every ACTIVATED product also enters New Arrivals.
+const M_TAG = `mutation($id:ID!){ tagsAdd(id:$id, tags:["New Arrival"]){ userErrors{message} } }`;
+
+function dbWriteBack(sku, pid, handle) {
+ // guard: pid is always a numeric Shopify id, sku always DWKN-… — reject anything else
+ // so a malformed created.jsonl can't reach the SQL string (handle is already ''-escaped).
+ if (!/^\d+$/.test(String(pid)) || !/^DWKN-[\w-]+$/.test(String(sku))) {
+ console.error(` ⚠ dbWriteBack skipped (bad sku/pid): ${sku} / ${pid}`); return;
+ }
+ try {
+ execFileSync(PSQL, ['-d', 'dw_unified', '-c',
+ `UPDATE knoll_catalog SET shopify_product_id='${pid}', updated_at=NOW() WHERE dw_sku='${sku}';
+ UPDATE dw_sku_registry SET shopify_product_id='${pid}', shopify_handle=${handle ? `'${handle.replace(/'/g,"''")}'` : 'NULL'}, status='active', updated_at=NOW() WHERE dw_sku='${sku}';`],
+ { env: PGENV, stdio: 'ignore' });
+ } catch (e) { /* non-fatal — Shopify write is authoritative; mirror re-syncs */ }
+}
+
+async function goLive(pid, sku) {
+ const gidP = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_VARIANTS, { id: gidP });
+ if (!d?.product) return { missing: true };
+ if (d.product.status === 'ACTIVE') { dbWriteBack(sku, pid, d.product.handle); return { skipped: true }; }
+ const items = d.product.variants.edges.map(e => e.node.inventoryItem.id);
+ for (const iid of items) {
+ let r = await gql(M_TRACK, { id: iid }); (r.inventoryItemUpdate?.userErrors || []).forEach(e => errs.push('track:' + e.message));
+ r = await gql(M_ACTIVATE, { iid, loc: LOCATION_ID });
+ (r.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message)).forEach(e => errs.push('activate:' + e.message));
+ }
+ const r2 = await gql(M_SETQTY, { input: { name: 'on_hand', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: items.map(iid => ({ inventoryItemId: iid, locationId: LOCATION_ID, quantity: TARGET_QTY })) } });
+ (r2.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('setqty:' + e.message));
+ const r3 = await gql(M_PUBLISH, { id: gidP, pubs: PUBLICATIONS.map(p => ({ publicationId: p })) });
+ (r3.publishablePublish?.userErrors || []).forEach(e => errs.push('publish:' + e.message));
+ const r4 = await gql(M_ACTIVE, { id: gidP });
+ (r4.productUpdate?.userErrors || []).forEach(e => errs.push('active:' + e.message));
+ const status = r4.productUpdate?.product?.status;
+ if (status === 'ACTIVE') {
+ const rt = await gql(M_TAG, { id: gidP }); // → New Arrivals on every activation
+ (rt.tagsAdd?.userErrors || []).forEach(e => errs.push('tag:' + e.message));
+ dbWriteBack(sku, pid, d.product.handle);
+ }
+ return { status, errs };
+}
+
+function loadJsonl(file) {
+ const p = path.join(OUT, file);
+ if (!fs.existsSync(p)) return [];
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+}
+
+(async () => {
+ let todo = loadJsonl('created.jsonl');
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+ console.log(`go-live: ${todo.length} drafts · loc ${LOCATION_ID} · qty ${TARGET_QTY} · ${PUBLICATIONS.length} channels · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log('first 3:', todo.slice(0, 3).map(r => r.sku).join(', ')); console.log('DRY-RUN. --apply to execute.'); return; }
+
+ const fd = fs.openSync(path.join(OUT, 'golive-done.jsonl'), 'a');
+ let ok = 0, skip = 0, withErr = 0, miss = 0;
+ for (const r of todo) {
+ try {
+ const res = await goLive(r.product_id, r.sku);
+ if (res.missing) { miss++; console.error(` ? ${r.sku}: product not found`); }
+ else if (res.skipped) skip++;
+ else if (res.errs?.length) { withErr++; console.error(` ⚠ ${r.sku} ${res.status||'?'}: ${res.errs.slice(0,3).join(' | ')}`); }
+ else { ok++; }
+ if (res.status === 'ACTIVE') fs.writeSync(fd, JSON.stringify({ sku: r.sku, product_id: r.product_id }) + '\n');
+ if ((ok+skip+withErr+miss) % 20 === 0) console.log(` ...${ok+skip+withErr+miss}/${todo.length} (active=${ok} skip=${skip} err=${withErr} miss=${miss})`);
+ await sleep(350);
+ } catch (e) { withErr++; console.error(` ERR ${r.sku}: ${String(e).slice(0,160)}`); await sleep(600); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. active=${ok} skipped=${skip} with-errors=${withErr} missing=${miss} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/knoll-onboard/resume.sh b/scripts/knoll-onboard/resume.sh
new file mode 100755
index 0000000..67917f2
--- /dev/null
+++ b/scripts/knoll-onboard/resume.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Daily Knoll Textiles onboard resume — trickle the remaining DRAFT creates + activate them
+# under the shared 'backlog' variant-budget slice (background pool, never starves
+# 'upload'/new-arrivals). Same cadence as greenland/osborne onboards.
+# create-drafts.mjs + go-live.mjs are both idempotent (skip live + done) and cap-clean
+# (create stops on 0 grant), so redundant runs are no-ops; self-terminates once all
+# 622 priced SKUs are staged AND active. Fired by com.steve.knoll-onboard-resume at
+# 00:20 + 13:20 (retry). Self-unloads when done.
+set -uo pipefail
+cd "$(dirname "$0")"
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH"
+export PGHOST=/tmp
+export SHOPIFY_ADMIN_TOKEN=$(grep -E '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | cut -d= -f2- | tr -d '"')
+LOG="out/resume.log"; mkdir -p out
+echo "=== $(date '+%F %T') knoll resume ===" >> "$LOG"
+
+# shared kill-switch
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "kill-switch present — skip" >> "$LOG"; exit 0; }
+
+CREATED=$(wc -l < out/created.jsonl 2>/dev/null | tr -d ' ')
+TOTAL=$(wc -l < out/payloads.jsonl 2>/dev/null | tr -d ' ')
+ACTIVE=$(wc -l < out/golive-done.jsonl 2>/dev/null | tr -d ' ')
+
+# done when all payloads created AND all created are active → self-unload the launchd job
+if [ "${CREATED:-0}" -ge "${TOTAL:-999}" ] && [ "${ACTIVE:-0}" -ge "${TOTAL:-999}" ] && [ "${TOTAL:-0}" -gt 0 ]; then
+ echo "all $CREATED created / $ACTIVE active of $TOTAL — unloading job" >> "$LOG"
+ launchctl bootout "gui/$(id -u)/com.steve.knoll-onboard-resume" 2>/dev/null || true
+ exit 0
+fi
+
+# 1) trickle today's create slice (backlog pool default — stops clean at cap)
+node create-drafts.mjs --apply >> "$LOG" 2>&1
+# 2) activate everything created so far (idempotent; skips already-ACTIVE)
+node go-live.mjs --apply >> "$LOG" 2>&1
+echo "resume done: created $(wc -l < out/created.jsonl 2>/dev/null | tr -d ' ')/$TOTAL · active $(wc -l < out/golive-done.jsonl 2>/dev/null | tr -d ' ')" >> "$LOG"
diff --git a/scripts/kravet-2026-coverage-audit.mjs b/scripts/kravet-2026-coverage-audit.mjs
new file mode 100644
index 0000000..0268e65
--- /dev/null
+++ b/scripts/kravet-2026-coverage-audit.mjs
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+/* READ-ONLY: do we have a 2026 price for every live Kravet-family item?
+ For each Kravet-family vendor, pull active products + their manufacturer_sku metafield,
+ check membership in the 2026-priced SKU set (auth_pricing.new_map>0 → /tmp/auth2026_skus.txt).
+ Reports per-vendor coverage + writes /tmp/kravet_2026_gaps.csv (items with NO 2026 price). */
+import fs from 'node:fs';
+import { rest, restAll } from './lib/shopify.mjs';
+
+const SET = new Set(fs.readFileSync('/tmp/auth2026_skus.txt','utf8').trim().split('\n').map(s=>s.trim().toUpperCase()));
+const VENDORS = ['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils',
+ 'Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin'];
+const norm = s => (s||'').toUpperCase().replace(/\s+/g,' ').trim();
+
+const getAll = vendor => restAll(`/products.json?vendor=${encodeURIComponent(vendor)}&status=active&limit=250&fields=id,title,handle,variants`, 'products');
+const isSample = v => (v.option1||'').toLowerCase()==='sample' || /-sample$/i.test(v.sku||'');
+
+(async()=>{
+ const summary=[];
+ const csv=['vendor,mfr_sku,dw_sku,title,handle'];
+ for(const vendor of VENDORS){
+ let prods; try{ prods=await getAll(vendor); }catch(e){ console.log(` ${vendor}: ERR`); continue; }
+ if(!prods.length) continue;
+ let have=0, miss=0, noSku=0, n=0;
+ for(const p of prods){
+ n++;
+ const mf=await(await rest(`/products/${p.id}/metafields.json`)).json();
+ const code=norm(((mf.metafields||[]).find(x=>x.namespace==='custom'&&x.key==='manufacturer_sku')||{}).value||'');
+ const yard=p.variants.find(v=>!isSample(v))||p.variants[0];
+ if(!code){ noSku++; csv.push([vendor,'(no mfr_sku)',yard&&yard.sku||'',JSON.stringify(p.title),p.handle].join(',')); continue; }
+ if(SET.has(code)) have++;
+ else { miss++; csv.push([vendor,code,yard&&yard.sku||'',JSON.stringify(p.title),p.handle].join(',')); }
+ }
+ const pct=(100*have/prods.length).toFixed(1);
+ summary.push({vendor,total:prods.length,have,miss,noSku,pct});
+ console.log(` ${vendor.padEnd(20)} ${prods.length} total | 2026:${have} (${pct}%) | missing:${miss} | no-mfr-sku:${noSku}`);
+ }
+ fs.writeFileSync('/tmp/kravet_2026_gaps.csv', csv.join('\n'));
+ const T=summary.reduce((a,s)=>({total:a.total+s.total,have:a.have+s.have,miss:a.miss+s.miss,noSku:a.noSku+s.noSku}),{total:0,have:0,miss:0,noSku:0});
+ console.log(`\n=== TOTAL: ${T.total} live Kravet items | have 2026 price: ${T.have} (${(100*T.have/T.total).toFixed(1)}%) | missing: ${T.miss} | no mfr_sku: ${T.noSku} ===`);
+ console.log(`gap list → /tmp/kravet_2026_gaps.csv (${T.miss+T.noSku} rows)`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-backfill-mfrsku.js b/scripts/kravet-backfill-mfrsku.js
new file mode 100644
index 0000000..250a97c
--- /dev/null
+++ b/scripts/kravet-backfill-mfrsku.js
@@ -0,0 +1,42 @@
+#!/usr/bin/env node
+/* Backfill the custom.manufacturer_sku metafield on Kravet-family products that are missing it,
+ by mapping the product's variant SKU (DW sku, e.g. DWKK-130259) → mfr_sku via kravet_catalog.
+ INTERNAL metadata write only (metafields are NOT customer-facing; no price/visibility change).
+ Reads /tmp/kravet_2026_gaps.csv (the coverage-audit gap list) rows where mfr_sku='(no mfr_sku)'.
+ DRY RUN unless --apply. Needs /tmp/dwsku_to_mfr.json (dump from kravet_catalog). */
+const fs = require('fs');
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.T;
+const APPLY = process.argv.includes('--apply');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const MAP = JSON.parse(fs.readFileSync('/tmp/dwsku_to_mfr.json','utf8')); // {DW_SKU_UPPER: mfr_sku}
+const clean = s => (s||'').trim().toUpperCase().replace(/-SAMPLE$/,'');
+// gap CSV columns: vendor,mfr_sku,dw_sku,title,handle
+const rows = fs.readFileSync('/tmp/kravet_2026_gaps.csv','utf8').trim().split('\n').slice(1)
+ .map(l => { const m=l.match(/^([^,]*),([^,]*),([^,]*),(.*),([^,]*)$/); return m?{vendor:m[1],mfr:m[2],dw:m[3],handle:m[5]}:null; })
+ .filter(r => r && r.mfr === '(no mfr_sku)' && r.dw);
+
+async function api(p, opts={}, tries=5){
+ for(let i=0;i<tries;i++){ const r=await fetch(`https://${STORE}/admin/api/2024-10${p}`,{...opts,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json',...(opts.headers||{})}});
+ if(r.status===429||r.status>=500){await sleep(1500*(i+1));continue;} await sleep(95); return r; }
+ throw new Error('fail '+p);
+}
+
+(async()=>{
+ const todo = rows.map(r => ({...r, recovered: MAP[clean(r.dw)] })).filter(r => r.recovered);
+ console.log(`no-mfr-sku gap rows: ${rows.length} | recoverable from kravet_catalog: ${todo.length} | mode: ${APPLY?'APPLY':'DRY RUN'}\n`);
+ todo.slice(0,10).forEach(r=>console.log(` ${r.dw} → mfr_sku ${r.recovered} (${r.handle})`));
+ if(!APPLY){ console.log(`\nDRY RUN — re-run with --apply to write ${todo.length} manufacturer_sku metafields.`); return; }
+ // need product id per handle — resolve handle→id, then PUT metafield
+ let ok=0, fail=0;
+ for(const r of todo){
+ try{
+ const d = await (await api(`/products.json?handle=${encodeURIComponent(r.handle)}&fields=id`)).json();
+ const pid = (d.products||[])[0]?.id; if(!pid){ fail++; continue; }
+ const res = await api(`/products/${pid}/metafields.json`, { method:'POST', body: JSON.stringify({ metafield:{ namespace:'custom', key:'manufacturer_sku', type:'single_line_text_field', value:String(r.recovered) }})});
+ if(res.ok){ ok++; if(ok%50===0)console.log(` …${ok}/${todo.length}`); } else { fail++; }
+ }catch(e){ fail++; }
+ }
+ console.log(`\nDONE — ${ok} backfilled, ${fail} failed.`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-cost/currency-check.js b/scripts/kravet-cost/currency-check.js
new file mode 100644
index 0000000..a7de589
--- /dev/null
+++ b/scripts/kravet-cost/currency-check.js
@@ -0,0 +1,71 @@
+#!/usr/bin/env node
+/**
+ * currency-check.js — per-brand "is this mfr_sku still CURRENT at Kravet?" verifier.
+ * Reuses the proven exact-sku Algolia logic from kravet-disco-algolia-verify.js.
+ * READ-ONLY (Algolia index queries + a DB read). Writes a per-brand result CSV only —
+ * never archives/updates Shopify or the DB (archiving disco SKUs is a separate gated step).
+ *
+ * USAGE: AKEY=<algolia-key> node currency-check.js "<vendor brand>"
+ * Designed to run one brand per process so the whole family fans out in parallel
+ * (see run-parallel.sh). Output: data/kravet-cost/currency-<brand-slug>.csv
+ *
+ * A SKU is:
+ * CURRENT — exact sku present in the live Kravet US index
+ * DISCO_COLOR — pattern still indexed, this colorway gone
+ * DISCO_PATTERN — whole pattern absent (line itself is indexed elsewhere)
+ * AMW_SKIP — Andrew Martin (AMW*/AM1*) — not in this index, needs its own source
+ */
+const https = require('https');
+const fs = require('fs');
+const { execSync } = require('child_process');
+
+const APP = 'M9TBUM1WAE', IDX = 'kravet_production_kravet_us_products', KEY = process.env.AKEY;
+const BRAND = process.argv[2];
+if (!BRAND) { console.error('usage: AKEY=… node currency-check.js "<brand>"'); process.exit(2); }
+if (!KEY) { console.error('FATAL: AKEY (Algolia key) not set in env — cannot currency-check'); process.exit(3); }
+
+const slug = BRAND.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
+const OUT = `data/kravet-cost/currency-${slug}.csv`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+// pull this brand's ACTIVE mfr_skus from the mirror (read-only)
+const sql = `select distinct on (shopify_id) mfr_sku from shopify_products
+ where status='ACTIVE' and vendor='${BRAND.replace(/'/g, "''")}' and mfr_sku is not null and mfr_sku<>'';`;
+const rows = execSync(`psql -d dw_unified -tA -c "${sql}"`, { encoding: 'utf8' })
+ .trim().split('\n').map(s => s.trim()).filter(Boolean);
+
+function query(q) {
+ return new Promise(res => {
+ const body = JSON.stringify({ query: q, restrictSearchableAttributes: ['sku'], hitsPerPage: 200, attributesToRetrieve: ['sku'] });
+ const req = https.request(`https://${APP}-dsn.algolia.net/1/indexes/${IDX}/query`,
+ { method: 'POST', headers: { 'X-Algolia-Application-Id': APP, 'X-Algolia-API-Key': KEY, 'Content-Type': 'application/json' } },
+ r => { let b = ''; r.on('data', d => b += d); r.on('end', () => { try { res(JSON.parse(b)); } catch (e) { res({ hits: [], _err: 1 }); } }); });
+ req.on('error', () => res({ hits: [], _err: 1 }));
+ req.setTimeout(20000, () => { req.destroy(); res({ hits: [], _err: 1 }); });
+ req.write(body); req.end();
+ });
+}
+
+(async () => {
+ const patCache = {};
+ const out = [];
+ let current = 0, dColor = 0, dPat = 0, amw = 0, err = 0, i = 0;
+ for (const sku of rows) {
+ i++;
+ const pat = sku.split('.')[0];
+ if (/^AMW|^AM1/i.test(pat)) { out.push([sku, 'AMW_SKIP']); amw++; continue; }
+ if (!(pat in patCache)) {
+ const r = await query(pat);
+ if (r._err) { out.push([sku, 'ERROR']); err++; continue; }
+ patCache[pat] = new Set((r.hits || []).map(h => (h.sku || '').toUpperCase()).filter(s => s.startsWith(pat.toUpperCase())));
+ await sleep(120);
+ }
+ const set = patCache[pat];
+ if (set.has(sku.toUpperCase())) { out.push([sku, 'CURRENT']); current++; }
+ else if (set.size > 0) { out.push([sku, 'DISCO_COLOR']); dColor++; }
+ else { out.push([sku, 'DISCO_PATTERN']); dPat++; }
+ if (i % 100 === 0) process.stderr.write(` [${BRAND}] ${i}/${rows.length} cur:${current} discoC:${dColor} discoP:${dPat}\n`);
+ }
+ fs.writeFileSync(OUT, 'mfr_sku,status\n' + out.map(r => r.join(',')).join('\n') + '\n');
+ console.log(`[${BRAND}] total:${rows.length} CURRENT:${current} DISCO_COLOR:${dColor} DISCO_PATTERN:${dPat} AMW:${amw} ERR:${err} -> ${OUT}`);
+})();
diff --git a/scripts/kravet-cost/push-anomalies.mjs b/scripts/kravet-cost/push-anomalies.mjs
new file mode 100644
index 0000000..9e4b57f
--- /dev/null
+++ b/scripts/kravet-cost/push-anomalies.mjs
@@ -0,0 +1,45 @@
+#!/usr/bin/env node
+/**
+ * push-anomalies.mjs — push the 59 HELD ROLL anomalies (under-priced rolls) up to MAP.
+ * Steve-authorized 2026-06-15 ("push the 59"). These are ROLL-unit wallcoverings currently
+ * BELOW MAP (a Kravet compliance violation); raising to MAP fixes it. Reversible.
+ *
+ * Safety: only touches the roll variant id already recorded; verifies the live price still
+ * equals the expected `cur` (skips if it drifted, so we never double-write or clobber a
+ * concurrently-changed price). DRY-RUN default; LIVE requires --apply --i-am-steve.
+ */
+import fs from 'node:fs';
+const SHOP='designer-laboratory-sandbox.myshopify.com',VER='2024-10';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+const URL=`https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true&&args['i-am-steve']===true;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500*(a+1));continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(a+1));continue;}throw new Error(JSON.stringify(j.errors));}return j.data;}throw new Error('retries');}
+
+const anomalies=JSON.parse(fs.readFileSync('data/kravet-cost/price-push-plan.json','utf8')).anomaly||[];
+console.log(`push-anomalies — mode: ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | held anomalies: ${anomalies.length}`);
+
+// verify live price still == cur (not stale)
+const Q=`query($ids:[ID!]!){nodes(ids:$ids){... on ProductVariant{id price}}}`;
+const fresh=[],stale=[];
+for(let i=0;i<anomalies.length;i+=100){
+ const b=anomalies.slice(i,i+100);
+ const d=await gql(Q,{ids:b.map(x=>x.vid)});
+ const live=new Map(d.nodes.filter(Boolean).map(n=>[n.id,parseFloat(n.price)]));
+ for(const x of b){const lp=live.get(x.vid);
+ if(lp!=null&&Math.abs(lp-x.cur)<0.01)fresh.push(x); else stale.push({...x,live:lp});}
+}
+console.log(`fresh (live == expected current): ${fresh.length} | drifted/skip: ${stale.length}`);
+for(const x of fresh.slice(0,12))console.log(` ${x.mfr}: $${x.cur} -> $${x.map} (${(x.map/x.cur).toFixed(1)}x)`);
+if(stale.length)console.log('drifted (will NOT touch):',stale.map(s=>s.mfr).join(', '));
+if(!APPLY){console.log('\nDRY-RUN. To execute: node push-anomalies.mjs --apply --i-am-steve');process.exit(0);}
+
+const M=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkUpdate(productId:$pid,variants:$variants){userErrors{field message}}}`;
+let ok=0,err=0;
+for(const x of fresh){
+ try{const d=await gql(M,{pid:x.pid,variants:[{id:x.vid,price:x.map.toFixed(2)}]});
+ const ue=d.productVariantsBulkUpdate?.userErrors||[];if(ue.length){err++;console.log(' err',x.mfr,JSON.stringify(ue));}else ok++;
+ }catch(e){err++;console.log(' EX',x.mfr,e.message);}
+}
+console.log(`\nDONE — ${ok} rolls raised to MAP, ${err} errors, ${stale.length} skipped (drifted).`);
diff --git a/scripts/kravet-cost/push-map-prices.mjs b/scripts/kravet-cost/push-map-prices.mjs
new file mode 100644
index 0000000..7e2681f
--- /dev/null
+++ b/scripts/kravet-cost/push-map-prices.mjs
@@ -0,0 +1,136 @@
+#!/usr/bin/env node
+/**
+ * push-map-prices.mjs — set the ROLL variant price = MAP for resolved Kravet-family
+ * products on Shopify. DRY-RUN by default; LIVE requires --apply --i-am-steve.
+ *
+ * SAFETY RAILS:
+ * - Only ever updates the ROLL (non -sample) variant. The $4.25 memo SAMPLE is never touched.
+ * - Skips products already at MAP (idempotent).
+ * - Anomaly guard: if the CURRENT roll price is a normal price (>$10) but MAP differs by
+ * >2.5x either way, that smells like a SKU-mismatch -> FLAG + SKIP (never auto-push).
+ * - If current roll price is garbage (<=$10, i.e. $0 or the $4.25 sample-trap), MAP is a FIX -> allowed.
+ * - No deletes, no archive, no sample edits, no other field. Reversible (re-set price).
+ *
+ * USAGE:
+ * node push-map-prices.mjs # dry-run (default)
+ * node push-map-prices.mjs --apply --i-am-steve # LIVE
+ * [--limit=N] [--vendor="Kravet"]
+ */
+import fs from 'node:fs';
+
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
+if (!TOKEN) { console.error('no token'); process.exit(1); }
+const URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const APPLY = args.apply === true && args['i-am-steve'] === true;
+const LIMIT = args.limit ? parseInt(args.limit, 10) : Infinity;
+const VENDOR = args.vendor || null;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(q, v) {
+ for (let a = 0; a < 8; a++) {
+ let j; try { const r = await fetch(URL, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); j = await r.json(); }
+ catch (e) { await sleep(1500 * (a + 1)); continue; }
+ if (j.errors) { if (JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (a + 1)); continue; } throw new Error(JSON.stringify(j.errors)); }
+ const t = j.extensions?.cost?.throttleStatus; if (t && t.currentlyAvailable < 400) await sleep(1200);
+ return j.data;
+ }
+ throw new Error('retries');
+}
+const norm = s => String(s == null ? '' : s).toUpperCase().trim();
+const isSample = v => /(sample|memo|swatch)/i.test([v.title, v.sku].join(' ')) || /-sample$/i.test(v.sku || '');
+
+// UNIT GATE (root cause 2026-06-15): the Kravet MAP table mixes YARD (fabric) and ROLL
+// (wallcovering) units; MAP is per-unit. Only ROLL items may have MAP pushed to a roll
+// price. YARD/EACH/etc are excluded (per-yard fabric MAP on a roll = ~3x underpricing).
+const UNIT = new Map();
+try {
+ for (const line of fs.readFileSync('data/kravet-cost/unit-map.csv', 'utf8').trim().split('\n')) {
+ const [item, u] = line.split(','); if (item) UNIT.set(item.trim(), (u || '').trim());
+ }
+} catch (e) { console.error('FATAL: unit-map.csv missing — run the unit export first'); process.exit(1); }
+const unitOf = mfr => UNIT.get(norm(mfr)) || '(unknown)';
+
+// 1) MAP by mfr_sku
+const mapBy = new Map();
+for (const line of fs.readFileSync('data/kravet-cost/MAP-resolved-consolidated.csv', 'utf8').trim().split('\n').slice(1)) {
+ const [vendor, mfr, whls, map] = line.split(',');
+ const m = parseFloat(map); if (m > 0) mapBy.set(norm(mfr), { vendor, map: m });
+}
+// 2) gid -> mfr (active Kravet-family)
+let targets = [];
+for (const line of fs.readFileSync('/tmp/kf_gid_mfr.csv', 'utf8').trim().split('\n')) {
+ const [gidNum, mfr] = line.split(',');
+ const hit = mapBy.get(norm(mfr));
+ if (hit && (!VENDOR || hit.vendor === VENDOR)) targets.push({ gid: `gid://shopify/Product/${gidNum}`, mfr, map: hit.map });
+}
+// de-dup by gid (one product = one roll)
+const seen = new Set(); targets = targets.filter(t => seen.has(t.gid) ? false : seen.add(t.gid));
+
+// UNIT GATE: keep only ROLL items; tally what we drop and why.
+const unitDrop = {};
+const before = targets.length;
+targets = targets.filter(t => {
+ const u = unitOf(t.mfr);
+ if (u === 'ROLL') return true;
+ unitDrop[u] = (unitDrop[u] || 0) + 1; return false;
+});
+if (Number.isFinite(LIMIT)) targets = targets.slice(0, LIMIT);
+
+console.log(`push-map-prices — mode: ${APPLY ? '⚠️ LIVE APPLY' : 'DRY-RUN'}${VENDOR ? ` | vendor=${VENDOR}` : ''}`);
+console.log(`unit gate: ${before} resolved -> ${targets.length} ROLL (excluded non-ROLL: ${JSON.stringify(unitDrop)})`);
+console.log(`resolved ROLL MAP targets: ${targets.length}\n`);
+
+const Q = `query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product { id variants(first:30){ nodes { id title sku price } } } } }`;
+const M = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid, variants:$variants){ userErrors{ field message } } }`;
+
+const buckets = { update: [], already_ok: 0, fix_bad_price: [], anomaly: [], no_roll: [] };
+for (let i = 0; i < targets.length; i += 50) {
+ const batch = targets.slice(i, i + 50);
+ const data = await gql(Q, { ids: batch.map(b => b.gid) });
+ const byId = new Map(batch.map(b => [b.gid, b]));
+ for (const p of data.nodes) {
+ if (!p) continue;
+ const tgt = byId.get(p.id);
+ const rolls = p.variants.nodes.filter(v => !isSample(v));
+ if (!rolls.length) { buckets.no_roll.push(tgt); continue; }
+ const roll = rolls.reduce((a, b) => parseFloat(b.price) > parseFloat(a.price) ? b : a);
+ const cur = parseFloat(roll.price);
+ const map = tgt.map;
+ const rec = { pid: p.id, vid: roll.id, mfr: tgt.mfr, cur, map };
+ if (Math.abs(cur - map) < 0.01) { buckets.already_ok++; continue; }
+ if (cur <= 10) { buckets.fix_bad_price.push(rec); } // $0/$4.25 garbage -> MAP is a fix
+ else if (map / cur > 2.5 || map / cur < 0.4) { buckets.anomaly.push(rec); } // suspicious -> skip
+ else { buckets.update.push(rec); }
+ }
+ if (i % 500 === 0 && i) process.stderr.write(` scanned ${i}/${targets.length}\n`);
+}
+
+const toWrite = [...buckets.update, ...buckets.fix_bad_price];
+const up = toWrite.filter(r => r.map > r.cur).length, down = toWrite.filter(r => r.map < r.cur).length;
+console.log('DRY-RUN RESULT:');
+console.log(` already at MAP (skip) : ${buckets.already_ok}`);
+console.log(` normal price change : ${buckets.update.length} (↑${buckets.update.filter(r=>r.map>r.cur).length} ↓${buckets.update.filter(r=>r.map<r.cur).length})`);
+console.log(` fix garbage roll ($0/$4.25): ${buckets.fix_bad_price.length}`);
+console.log(` ⚠ anomaly (skipped) : ${buckets.anomaly.length}`);
+console.log(` ⚠ no roll variant (skipped): ${buckets.no_roll.length}`);
+console.log(` => WOULD WRITE : ${toWrite.length} (↑${up} ↓${down})`);
+console.log('\n sample changes:');
+for (const r of buckets.update.slice(0, 6)) console.log(` ${r.mfr}: $${r.cur} -> $${r.map}`);
+if (buckets.anomaly.length) { console.log('\n ⚠ anomalies (NOT pushed — review):'); for (const r of buckets.anomaly.slice(0, 10)) console.log(` ${r.mfr}: cur $${r.cur} vs MAP $${r.map}`); }
+fs.writeFileSync('data/kravet-cost/price-push-plan.json', JSON.stringify({ generated: 'dry-run', toWrite, anomaly: buckets.anomaly, no_roll: buckets.no_roll }, null, 2));
+
+if (!APPLY) { console.log('\nDRY-RUN only. To execute: node push-map-prices.mjs --apply --i-am-steve'); process.exit(0); }
+
+console.log('\n⚠️ LIVE APPLY — updating ROLL variant prices…');
+let done = 0, err = 0;
+for (const r of toWrite) {
+ try {
+ const d = await gql(M, { pid: r.pid, variants: [{ id: r.vid, price: r.map.toFixed(2) }] });
+ const ue = d.productVariantsBulkUpdate?.userErrors || [];
+ if (ue.length) { err++; if (err <= 10) console.log(' err', r.mfr, JSON.stringify(ue)); } else done++;
+ } catch (e) { err++; if (err <= 10) console.log(' EX', r.mfr, e.message); }
+ if ((done + err) % 200 === 0) console.log(` progress ${done} ok / ${err} err`);
+}
+console.log(`\nDONE — ${done} roll prices set to MAP, ${err} errors.`);
diff --git a/scripts/kravet-cost/revert-map-push.mjs b/scripts/kravet-cost/revert-map-push.mjs
new file mode 100644
index 0000000..6557e30
--- /dev/null
+++ b/scripts/kravet-cost/revert-map-push.mjs
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+/**
+ * revert-map-push.mjs — undo the MAP push: restore every product whose roll price
+ * was changed to MAP back to its ORIGINAL price (status-quo-ante).
+ *
+ * Why: DTD verdict (3/3, 2026-06-15) = the MAP table has a units/granularity defect
+ * (~3x gap, split across the 2.5x guard), so the 998 push cannot be trusted. This
+ * restores the prior live prices. Re-detects what was actually written by reading the
+ * live roll price (== MAP => was written; == original => skip). Reversible, restorative.
+ *
+ * DRY-RUN default; LIVE requires --apply --i-am-steve.
+ */
+import fs from 'node:fs';
+const SHOP = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
+const URL = `https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const APPLY = args.apply === true && args['i-am-steve'] === true;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+async function gql(q, v) { for (let a = 0; a < 8; a++) { let j; try { const r = await fetch(URL, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); j = await r.json(); } catch (e) { await sleep(1500 * (a + 1)); continue; } if (j.errors) { if (JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (a + 1)); continue; } throw new Error(JSON.stringify(j.errors)); } const t = j.extensions?.cost?.throttleStatus; if (t && t.currentlyAvailable < 400) await sleep(1200); return j.data; } throw new Error('retries'); }
+
+const plan = JSON.parse(fs.readFileSync('data/kravet-cost/price-push-plan.json', 'utf8'));
+const items = plan.toWrite; // {pid, vid, mfr, cur, map}
+console.log(`revert-map-push — mode: ${APPLY ? '⚠️ LIVE REVERT' : 'DRY-RUN'} | candidates: ${items.length}`);
+
+const Q = `query($ids:[ID!]!){ nodes(ids:$ids){ ... on ProductVariant { id price } } }`;
+const M = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid, variants:$variants){ userErrors{ field message } } }`;
+
+// detect which were written (live price == map)
+const written = [];
+for (let i = 0; i < items.length; i += 100) {
+ const batch = items.slice(i, i + 100);
+ const d = await gql(Q, { ids: batch.map(b => b.vid) });
+ const live = new Map(d.nodes.filter(Boolean).map(n => [n.id, parseFloat(n.price)]));
+ for (const it of batch) {
+ const lp = live.get(it.vid);
+ if (lp != null && Math.abs(lp - it.map) < 0.01) written.push(it); // currently at MAP => was written
+ }
+}
+console.log(`detected WRITTEN (live price == MAP): ${written.length} / ${items.length}`);
+console.log('sample reverts:'); for (const w of written.slice(0, 8)) console.log(` ${w.mfr}: $${w.map} -> restore $${w.cur}`);
+if (!APPLY) { console.log('\nDRY-RUN. To execute: node revert-map-push.mjs --apply --i-am-steve'); process.exit(0); }
+
+console.log('\n⚠️ LIVE REVERT — restoring original prices…');
+let ok = 0, err = 0;
+for (const w of written) {
+ try { const d = await gql(M, { pid: w.pid, variants: [{ id: w.vid, price: w.cur.toFixed(2) }] });
+ const ue = d.productVariantsBulkUpdate?.userErrors || []; if (ue.length) { err++; if (err <= 10) console.log(' err', w.mfr, JSON.stringify(ue)); } else ok++;
+ } catch (e) { err++; if (err <= 10) console.log(' EX', w.mfr, e.message); }
+ if ((ok + err) % 200 === 0) console.log(` progress ${ok} reverted / ${err} err`);
+}
+console.log(`\nDONE — ${ok} prices restored to original, ${err} errors.`);
diff --git a/scripts/kravet-cost/run-parallel.sh b/scripts/kravet-cost/run-parallel.sh
new file mode 100755
index 0000000..6439228
--- /dev/null
+++ b/scripts/kravet-cost/run-parallel.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+# run-parallel.sh — fan the Kravet-family currency-check out, one process per brand,
+# all brands concurrent. Needs AKEY (Algolia key) in the environment.
+# AKEY=<key> bash scripts/kravet-cost/run-parallel.sh
+# Read-only: each worker only queries Algolia + reads the mirror, writes a per-brand CSV.
+set -uo pipefail
+cd "$(dirname "$0")/../.."
+[ -z "${AKEY:-}" ] && { echo "FATAL: export AKEY=<algolia-key> first"; exit 1; }
+mkdir -p data/kravet-cost
+
+BRANDS=(
+ "Kravet" "Brunschwig & Fils" "Clarke And Clarke" "Cole & Son" "Lee Jofa"
+ "GP & J Baker" "Mulberry" "Threads" "Andrew Martin" "Baker Lifestyle"
+ "Kravet Design" "Kravet Couture" "Lee Jofa Modern" "G P & J Baker"
+)
+echo "fanning ${#BRANDS[@]} brands in parallel…"
+pids=()
+for b in "${BRANDS[@]}"; do
+ AKEY="$AKEY" node scripts/kravet-cost/currency-check.js "$b" >>"data/kravet-cost/run.log" 2>&1 &
+ pids+=($!)
+done
+# wait for all, report
+fail=0
+for p in "${pids[@]}"; do wait "$p" || fail=$((fail+1)); done
+echo "done — $fail worker(s) errored. per-brand CSVs in data/kravet-cost/, log: data/kravet-cost/run.log"
+echo "=== summary ==="
+for f in data/kravet-cost/currency-*.csv; do
+ [ -f "$f" ] || continue
+ tot=$(($(wc -l < "$f")-1))
+ cur=$(grep -c ',CURRENT$' "$f" 2>/dev/null || echo 0)
+ echo " $(basename "$f"): $tot skus, $cur current"
+done
\ No newline at end of file
diff --git a/scripts/kravet-dedup-archive.js b/scripts/kravet-dedup-archive.js
new file mode 100644
index 0000000..a435f0a
--- /dev/null
+++ b/scripts/kravet-dedup-archive.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+/* Archive the 18 verified duplicate products (/tmp/kravet_archive_list.csv) and add a 301 redirect
+ from each archived handle -> its keeper handle. PER-ROW GUARD: the KEEPER must be ACTIVE first
+ (never archive a dup if it would leave zero live). Idempotent (skips already-archived). Reads back
+ to verify status=ARCHIVED. Requires APPLY=1 to write. NO deletes — archive is reversible. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com', APPLY=process.env.APPLY==='1';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gqlOnce(q,v){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.setTimeout(30000,()=>rq.destroy(new Error('timeout')));rq.write(JSON.stringify({query:q,variables:v||{}}));rq.end();});}
+async function gql(q,v){for(let i=0;i<4;i++){try{return await gqlOnce(q,v);}catch(e){if(i===3)throw e;await sleep(1200*(i+1));}}}
+
+const rows=fs.readFileSync('/tmp/kravet_archive_list.csv','utf8').trim().split('\n').slice(1).map(l=>{
+ const [archive_id,from_handle,to_handle,vendor,sku]=l.split(','); return {archive_id,from_handle,to_handle,vendor,sku};});
+
+const UPD=`mutation($id:ID!){ productUpdate(input:{id:$id,status:ARCHIVED}){ product{ id status } userErrors{ field message } } }`;
+const RED=`mutation($r:UrlRedirectInput!){ urlRedirectCreate(urlRedirect:$r){ urlRedirect{ id path target } userErrors{ field message } } }`;
+
+(async()=>{
+ const log=['vendor,sku,archive_id,from_handle,to_handle,result,redirect'];
+ let done=0, skip=0, err=0;
+ console.log(`MODE: ${APPLY?'APPLY (archiving live)':'DRY'} | products: ${rows.length}\n`);
+ for(const r of rows){
+ const agid=`gid://shopify/Product/${r.archive_id}`;
+ // 1) status of the dup + keeper-active guard (find keeper by handle)
+ let s; try{ s=await gql(`{ dup:product(id:"${agid}"){ status }
+ keep:productByHandle(handle:"${r.to_handle}"){ id status } }`); }
+ catch(e){ console.log(` ${r.sku} FETCH-ERR ${e}`); err++; continue; }
+ const dup=s.data?.dup, keep=s.data?.keep;
+ if(!dup){ console.log(` ${r.sku} dup-missing skip`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},DUP-MISSING,`); skip++; continue; }
+ if(dup.status==='ARCHIVED'){ console.log(` ${r.sku} already-archived`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},ALREADY-ARCHIVED,`); skip++; continue; }
+ if(!keep || keep.status!=='ACTIVE'){ console.log(` ${r.sku} ⚠ KEEPER not ACTIVE (${keep?.status||'missing'}) — SKIP (won't leave zero live)`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},KEEPER-NOT-ACTIVE-SKIP,`); skip++; continue; }
+ if(!APPLY){ console.log(` WOULD archive ${r.sku} ${r.from_handle} -> keep ${r.to_handle}`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},WOULD-ARCHIVE,would-redirect`); continue; }
+ // 2) archive
+ const u=await gql(UPD,{id:agid}); const ue=u.data?.productUpdate?.userErrors||[];
+ if(ue.length){ console.log(` ${r.sku} ARCHIVE-ERR ${JSON.stringify(ue)}`); log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},ERR,`); err++; continue; }
+ const okv=u.data.productUpdate.product?.status==='ARCHIVED';
+ // 3) redirect old handle -> keeper handle (skip if from==to)
+ let red='none';
+ if(r.from_handle && r.from_handle!==r.to_handle){
+ const rr=await gql(RED,{r:{path:`/products/${r.from_handle}`,target:`/products/${r.to_handle}`}});
+ const rue=rr.data?.urlRedirectCreate?.userErrors||[];
+ red = rue.length ? ('redirect-err:'+rue.map(e=>e.message).join(';')) : 'redirected';
+ }
+ console.log(` ${okv?'✓':'✗'} ${r.sku} archived | ${red}`);
+ if(okv) done++; else err++;
+ log.push(`${r.vendor},${r.sku},${r.archive_id},${r.from_handle},${r.to_handle},${okv?'ARCHIVED':'VERIFY-FAIL'},${red}`);
+ await sleep(350);
+ }
+ fs.writeFileSync('/tmp/kravet_archive_done.csv',log.join('\n'));
+ console.log(`\n=== ${APPLY?'APPLIED':'DRY'} === archived:${done} skipped:${skip} err:${err}`);
+ console.log(`log -> /tmp/kravet_archive_done.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-dedup-bulk.js b/scripts/kravet-dedup-bulk.js
new file mode 100644
index 0000000..285bb6d
--- /dev/null
+++ b/scripts/kravet-dedup-bulk.js
@@ -0,0 +1,68 @@
+#!/usr/bin/env node
+/* READ-ONLY full-catalog dedup via Shopify BULK op (no per-page throttling). Scans ALL active
+ products, joins variants, filters Kravet family, flags TRUE duplicates:
+ - colorway-unique SKU (has . or /): dup = same VENDOR + same SKU (SKU reused across vendors,
+ so vendor is part of identity; within a vendor a full colorway SKU is unique).
+ - pattern-only SKU (no separator): dup = same VENDOR + SKU + TITLE (colorways share pattern SKU).
+ Writes /tmp/kravet_dedup.csv with created date+time so Steve picks the keeper. NO writes. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.write(JSON.stringify({query:q}));rq.end();});}
+function dl(u){return new Promise((res,rej)=>{https.get(u,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+const KFAM=new Set(['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston Y Daniela','Gaston y Daniela','Andrew Martin']);
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const titleKey=t=>norm(t).replace(/\s*[-#]\s*\d+$/,'');
+const isSample=o=>(o||[]).some(x=>String(x.value).toLowerCase()==='sample');
+const fmt=iso=>{ if(!iso) return ''; const d=new Date(iso); return d.toLocaleString('en-US',{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); };
+
+(async()=>{
+ const BULK=`mutation{ bulkOperationRunQuery(query:"""
+ { products(query:"status:active"){ edges{ node{ id title vendor createdAt
+ metafield(namespace:"custom",key:"manufacturer_sku"){ value }
+ variants{ edges{ node{ price selectedOptions{ value } } } } } } } }
+ """){ bulkOperation{ id status } userErrors{ field message } } }`;
+ const k=await gql(BULK);
+ const ue=k.data?.bulkOperationRunQuery?.userErrors||[];
+ if(ue.length){ console.log('cannot start bulk (another running?):',JSON.stringify(ue)); process.exit(1); }
+ console.log('bulk started; polling...');
+ let url=null;
+ for(let i=0;i<240;i++){ const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`); const op=s.data.currentBulkOperation;
+ if(i%5===0) console.log(` ${op.status} obj=${op.objectCount||0}`);
+ if(op.status==='COMPLETED'){ url=op.url; break; } if(op.status==='FAILED'){ console.log('FAILED',op.errorCode); process.exit(1); } await sleep(5000); }
+ if(!url){ console.log('no url'); process.exit(1); }
+ const data=await dl(url);
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ const prod={}, vbyp={};
+ for(const n of lines){
+ if(n.id && n.id.includes('/Product/')) prod[n.id]={vendor:n.vendor,title:n.title,createdAt:n.createdAt,sku:norm(n.metafield?.value)};
+ else if(n.__parentId && n.price!==undefined) (vbyp[n.__parentId]=vbyp[n.__parentId]||[]).push(n);
+ }
+ const flat=[];
+ for(const [pid,p] of Object.entries(prod)){
+ if(!KFAM.has(p.vendor) || !p.sku) continue;
+ const reals=(vbyp[pid]||[]).map(v=>({p:parseFloat(v.price),s:isSample(v.selectedOptions)})).filter(v=>!v.s&&v.p>5);
+ flat.push({gid:pid.split('/').pop(),vendor:p.vendor,title:p.title,createdAt:p.createdAt,sku:p.sku,price:reals.length?Math.max(...reals.map(v=>v.p)):null});
+ }
+ const colorwayUnique=s=>/[.\/]/.test(s);
+ const groups={};
+ for(const p of flat){ const v=norm(p.vendor); const key=colorwayUnique(p.sku)?('CW:'+v+'|'+p.sku):('PT:'+v+'|'+p.sku+'||'+titleKey(p.title)); (groups[key]=groups[key]||[]).push(p); }
+ const dups=Object.entries(groups).filter(([k,a])=>a.length>1).map(([k,a])=>[k,a.sort((x,y)=>new Date(x.createdAt)-new Date(y.createdAt))]).sort((a,b)=>b[1].length-a[1].length);
+ const out=['dup_key,vendor,mfr_sku,product_id,price,created,keeper_hint,full_title'];
+ let dupProducts=0, priceDiff=0;
+ for(const [key,arr] of dups){ dupProducts+=arr.length;
+ const prices=arr.map(p=>p.price).filter(v=>v!=null); const diff=new Set(prices).size>1; if(diff) priceDiff++;
+ arr.forEach((p,idx)=>{ const keeper=idx===arr.length-1?'KEEP-newest':'dup-older';
+ out.push(`"${key}",${p.vendor},${p.sku},${p.gid},${p.price??''},"${fmt(p.createdAt)}",${keeper},"${(p.title||'').replace(/"/g,'')}"`); });
+ }
+ fs.writeFileSync('/tmp/kravet_dedup.csv',out.join('\n'));
+ console.log(`\n=== KRAVET-FAMILY TRUE DUP SWEEP (bulk, full catalog, READ-ONLY) ===`);
+ console.log(`KFAM active products scanned: ${flat.length}`);
+ console.log(`dup clusters: ${dups.length} | products involved: ${dupProducts} | EXTRA copies removable: ${dupProducts-dups.length}`);
+ console.log(`clusters with price conflict: ${priceDiff}`);
+ const perV={}; dups.forEach(([k,a])=>a.forEach(p=>perV[p.vendor]=(perV[p.vendor]||0)+1));
+ console.log('dup products per vendor:'); for(const [v,c] of Object.entries(perV).sort((a,b)=>b[1]-a[1])) console.log(` ${v.padEnd(20)} ${c}`);
+ console.log('\ntop dup clusters:');
+ for(const [key,arr] of dups.slice(0,20)) console.log(` ${key.replace(/^(CW|PT):/,'').slice(0,46).padEnd(46)} x${arr.length} prices=[${arr.map(p=>p.price??'?').join(', ')}]`);
+ console.log(`\nfull decision list -> /tmp/kravet_dedup.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-dedup-sweep.js b/scripts/kravet-dedup-sweep.js
new file mode 100644
index 0000000..1ca3a4b
--- /dev/null
+++ b/scripts/kravet-dedup-sweep.js
@@ -0,0 +1,71 @@
+#!/usr/bin/env node
+/* READ-ONLY dedup sweep across the Kravet family. Paginates all KFAM vendors, collects every ACTIVE
+ product's custom.manufacturer_sku -> {gid,title,status,createdAt,realPrice}. Flags any mfr_sku
+ carried by >1 active product (the dup-SKU trap, e.g. GDW5772.007.0 at $410 vs $500). Writes a
+ decision list with created date+time per dup so Steve can pick the keeper. NO writes/deletes. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gqlOnce(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.setTimeout(30000,()=>rq.destroy(new Error('timeout')));rq.write(JSON.stringify({query:q}));rq.end();});}
+async function gql(q){for(let i=0;i<4;i++){try{return await gqlOnce(q);}catch(e){if(i===3)throw e;await new Promise(r=>setTimeout(r,1500*(i+1)));}}}
+const KFAM=['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin'];
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const isSample=o=>(o||[]).some(x=>String(x.value).toLowerCase()==='sample');
+const fmt=iso=>{ if(!iso) return ''; const d=new Date(iso); return d.toLocaleString('en-US',{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); };
+
+(async()=>{
+ const bySku={}; // sku -> [{gid,title,status,createdAt,price,vendor}]
+ for(const vendor of KFAM){
+ let cursor=null, n=0;
+ const vq=vendor.replace(/"/g,'\\"');
+ while(true){
+ const after=cursor?`, after:"${cursor}"`:'';
+ const q=`{ products(first:100, query:"vendor:'${vq}' status:active"${after}){
+ pageInfo{ hasNextPage endCursor }
+ edges{ node{ id title createdAt
+ metafield(namespace:"custom",key:"manufacturer_sku"){ value }
+ variants(first:10){ edges{ node{ price selectedOptions{ value } } } } } } } }`;
+ let s; try{ s=await gql(q); }catch(e){ console.log(` ${vendor} ERR ${e}`); break; }
+ const pr=s.data?.products; if(!pr) break;
+ for(const e of pr.edges){ const nd=e.node; n++;
+ const sku=norm(nd.metafield?.value); if(!sku) continue;
+ const reals=(nd.variants?.edges||[]).map(x=>({p:parseFloat(x.node.price),s:isSample(x.node.selectedOptions)})).filter(v=>!v.s && v.p>5);
+ const price=reals.length?Math.max(...reals.map(v=>v.p)):null;
+ (bySku[sku]=bySku[sku]||[]).push({gid:nd.id.split('/').pop(),title:nd.title,createdAt:nd.createdAt,price,vendor});
+ }
+ if(!pr.pageInfo.hasNextPage) break; cursor=pr.pageInfo.endCursor; await sleep(600);
+ }
+ console.log(` ${vendor.padEnd(20)} active=${n}`);
+ }
+ // TRUE dup = >1 active product sharing the SAME normalized title (color-level identical).
+ // Pattern-SKU colorway families (same manufacturer_sku, different color titles) are NOT dups.
+ const titleKey=t=>norm(t).replace(/\s*[-#]\s*\d+$/,''); // strip trailing "-1"/"#2"
+ const flat=[]; for(const [sku,arr] of Object.entries(bySku)) for(const p of arr) flat.push({...p,sku});
+ // FORMAT-AWARE dup key:
+ // - colorway-unique SKU (has '.' or '/', e.g. GDW5772.007.0 / 100/1004.CS.0 / 8024109.12): a 2nd
+ // product with the SAME full SKU is a dup by definition -> group by SKU alone.
+ // - pattern-only SKU (no separator, e.g. W4132 / 8024108 = shared by a whole colorway family):
+ // require SAME title too, so colorways aren't falsely merged.
+ // KEY by VENDOR too — the same full SKU (e.g. 30787.100.0) is reused across vendors (B&F vs Kravet)
+ // for totally different products, so vendor must be part of the identity.
+ const colorwayUnique=s=>/[.\/]/.test(s);
+ const byTitle={}; for(const p of flat){ const v=norm(p.vendor); const k=colorwayUnique(p.sku)?('CW:'+v+'|'+p.sku):('PT:'+v+'|'+p.sku+' || '+titleKey(p.title)); (byTitle[k]=byTitle[k]||[]).push(p); }
+ const dups=Object.entries(byTitle).filter(([k,a])=>a.length>1)
+ .map(([k,a])=>[k,a.sort((x,y)=>new Date(x.createdAt)-new Date(y.createdAt))]);
+ dups.sort((a,b)=>b[1].length-a[1].length);
+ const out=['title_key,vendor,mfr_sku,product_id,price,created,full_title'];
+ let dupProducts=0, priceDiffClusters=0;
+ for(const [k,arr] of dups){ dupProducts+=arr.length;
+ const prices=arr.map(p=>p.price).filter(v=>v!=null); if(new Set(prices).size>1) priceDiffClusters++;
+ for(const p of arr) out.push(`"${k}",${p.vendor},${p.sku},${p.gid},${p.price??''},"${fmt(p.createdAt)}","${(p.title||'').replace(/"/g,'')}"`);
+ }
+ fs.writeFileSync('/tmp/kravet_dedup.csv',out.join('\n'));
+ console.log(`\n=== KRAVET-FAMILY TRUE DUP SWEEP (same-title, READ-ONLY) ===`);
+ console.log(`dup clusters (>1 active product, identical title): ${dups.length} | total products: ${dupProducts} | extra copies removable: ${dupProducts-dups.length}`);
+ console.log(`clusters where copies have DIFFERENT prices (most urgent): ${priceDiffClusters}`);
+ const perV={}; dups.forEach(([k,a])=>a.forEach(p=>perV[p.vendor]=(perV[p.vendor]||0)+1));
+ console.log('dup products per vendor:'); for(const [v,c] of Object.entries(perV).sort((a,b)=>b[1]-a[1])) console.log(` ${v.padEnd(20)} ${c}`);
+ console.log('\nsample dup clusters (newest copy is usually the keeper):');
+ for(const [k,arr] of dups.slice(0,12)) console.log(` "${k.slice(0,40)}" x${arr.length} prices=[${arr.map(p=>p.price??'?').join(', ')}] ${arr[0].vendor}`);
+ console.log(`\nfull list -> /tmp/kravet_dedup.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-dedup-verify.js b/scripts/kravet-dedup-verify.js
new file mode 100644
index 0000000..9edf6b2
--- /dev/null
+++ b/scripts/kravet-dedup-verify.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* READ-ONLY. For each dup cluster in /tmp/kravet_dedup.csv, fetch both copies' keeper signals
+ (Online Store publication, inventory, image count, price, handle) and recommend KEEP vs ARCHIVE.
+ Keeper priority: (1) published to Online Store, (2) has price, (3) has images, (4) inventory>0,
+ (5) cleaner handle (no trailing -N), (6) newest. Flags CONFLICT when BOTH are live (human decides).
+ Writes /tmp/kravet_archive_plan.csv. NO writes/archives. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gqlOnce(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.on('error',rej);rq.setTimeout(30000,()=>rq.destroy(new Error('timeout')));rq.write(JSON.stringify({query:q}));rq.end();});}
+async function gql(q){for(let i=0;i<4;i++){try{return await gqlOnce(q);}catch(e){if(i===3)throw e;await sleep(1200*(i+1));}}}
+
+const csv=fs.readFileSync('/tmp/kravet_dedup.csv','utf8').trim().split('\n').slice(1);
+const clusters={};
+for(const line of csv){ const m=line.match(/^("(?:[^"]|"")*"|[^,]*),([^,]*),([^,]*),([^,]*),([^,]*),/); if(!m)continue;
+ const key=m[1].replace(/^"|"$/g,''), vendor=m[2], sku=m[3], pid=m[4];
+ (clusters[key]=clusters[key]||{vendor,sku,ids:[]}).ids.push(pid); }
+
+async function signals(pid){
+ const q=`{ product(id:"gid://shopify/Product/${pid}"){ handle status totalInventory createdAt
+ mediaCount{ count }
+ variants(first:10){ edges{ node{ price selectedOptions{ value } } } }
+ resourcePublications(first:25, onlyPublished:true){ edges{ node{ publication{ name } } } } } }`;
+ const s=await gql(q); const p=s.data?.product; if(!p) return null;
+ const pubs=(p.resourcePublications?.edges||[]).map(e=>e.node.publication?.name).filter(Boolean);
+ const reals=(p.variants?.edges||[]).map(e=>({pr:parseFloat(e.node.price),sm:(e.node.selectedOptions||[]).some(o=>/sample/i.test(o.value))})).filter(v=>!v.sm&&v.pr>5);
+ return { pid, handle:p.handle, status:p.status, inv:p.totalInventory??0, created:p.createdAt,
+ media:p.mediaCount?.count||0, price:reals.length?Math.max(...reals.map(v=>v.pr)):0,
+ onStore:pubs.some(n=>/online store/i.test(n)), pubCount:pubs.length };
+}
+const dupSuffix=h=>/-\d+$/.test(h||''); // shopify duplicate-handle marker (-1, -2)
+const codedHandle=h=>/^dwkk-/i.test(h||''); // old auto-generated code handle
+// higher = better keeper
+const handleRank=h=> (dupSuffix(h)?0:1) + (codedHandle(h)?0:2); // named clean slug = 3, coded = 1, -N dup = 0/2
+
+(async()=>{
+ const out=['cluster,vendor,sku,decision,archive_id,archive_handle,keep_id,keep_handle,keep_price,keep_img,confidence'];
+ const archiveList=['archive_product_id,redirect_from_handle,redirect_to_handle,vendor,sku'];
+ let archive=0, review=0;
+ for(const [key,c] of Object.entries(clusters)){
+ const sig=[]; for(const pid of c.ids){ const x=await signals(pid); if(x) sig.push(x); await sleep(200); }
+ if(sig.length<2){ out.push(`"${key}",${c.vendor},${c.sku},NEED-EYES,,,,,,,fetch-incomplete`); continue; }
+ // keeper score: handle quality dominates, then real price, images, inventory, recency
+ const score=x=> handleRank(x.handle)*1000 + (x.price>5?300:0) + Math.min(x.media,9)*20 + (x.inv>0?10:0) + (new Date(x.created).getTime()/1e14);
+ sig.forEach(x=>x._s=score(x));
+ const ranked=sig.slice().sort((a,b)=>b._s-a._s);
+ const keep=ranked[0];
+ // confidence: HIGH if a clear handle signal separates them, else REVIEW (both coded, ~equal)
+ const handlesDiffer = new Set(sig.map(x=>handleRank(x.handle))).size>1 || sig.some(x=>x.price>5)&&!sig.every(x=>x.price>5);
+ const conf = handlesDiffer ? 'HIGH' : 'REVIEW';
+ if(conf==='REVIEW') review++;
+ for(const x of ranked.slice(1)){ archive++;
+ out.push(`"${key}",${c.vendor},${c.sku},ARCHIVE,${x.pid},${x.handle},${keep.pid},${keep.handle},${keep.price||''},${keep.media},${conf}`);
+ archiveList.push(`${x.pid},${x.handle},${keep.handle},${c.vendor},${c.sku}`);
+ }
+ }
+ fs.writeFileSync('/tmp/kravet_archive_plan.csv',out.join('\n'));
+ fs.writeFileSync('/tmp/kravet_archive_list.csv',archiveList.join('\n'));
+ console.log('=== KRAVET DEDUP — VERIFIED ARCHIVE PLAN (read-only) ===');
+ console.log(`clusters: ${Object.keys(clusters).length} | products to ARCHIVE: ${archive} | HIGH-confidence: ${archive-review} | REVIEW (both coded, ~equal): ${review}`);
+ console.log(`plan -> /tmp/kravet_archive_plan.csv | archive list (+redirects) -> /tmp/kravet_archive_list.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-disco-algolia-verify.js b/scripts/kravet-disco-algolia-verify.js
new file mode 100644
index 0000000..b77a9ad
--- /dev/null
+++ b/scripts/kravet-disco-algolia-verify.js
@@ -0,0 +1,40 @@
+const https=require('https'); const fs=require('fs');
+const APP='M9TBUM1WAE', IDX='kravet_production_kravet_us_products', KEY=process.env.AKEY;
+const cand=JSON.parse(fs.readFileSync('/tmp/disco_real.json','utf8'));
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function query(q){return new Promise(res=>{const body=JSON.stringify({query:q,restrictSearchableAttributes:['sku'],hitsPerPage:200,attributesToRetrieve:['sku']});
+ const req=https.request(`https://${APP}-dsn.algolia.net/1/indexes/${IDX}/query`,{method:'POST',headers:{'X-Algolia-Application-Id':APP,'X-Algolia-API-Key':KEY,'Content-Type':'application/json'}},r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>{try{res(JSON.parse(b))}catch(e){res({hits:[],_err:1})}})});req.on('error',()=>res({hits:[],_err:1}));req.setTimeout(20000,()=>{req.destroy();res({hits:[],_err:1})});req.write(body);req.end();});}
+(async()=>{
+ const patCache={}; const active=[],discoColor=[],discoPattern=[],amw=[],err=[];
+ let i=0;
+ for(const [vendor,sku,gid] of cand){
+ i++;
+ const pat=sku.split('.')[0];
+ if(/^AMW|^AM1/i.test(pat)){ amw.push([vendor,sku,gid]); continue; }
+ if(!(pat in patCache)){
+ const r=await query(pat);
+ if(r._err){ err.push([vendor,sku]); continue; }
+ patCache[pat]=new Set((r.hits||[]).map(h=>(h.sku||'').toUpperCase()).filter(s=>s.startsWith(pat.toUpperCase())));
+ await sleep(120);
+ }
+ const set=patCache[pat];
+ if(set.has(sku.toUpperCase())) active.push([vendor,sku,gid]);
+ else if(set.size>0) discoColor.push([vendor,sku,gid]); // pattern alive, this colorway gone
+ else discoPattern.push([vendor,sku,gid]); // whole pattern gone (line IS indexed)
+ if(i%50===0)console.log(` …${i}/${cand.length} active:${active.length} discoColor:${discoColor.length} discoPat:${discoPattern.length} amw:${amw.length}`);
+ }
+ const disco=[...discoColor,...discoPattern];
+ fs.writeFileSync('/tmp/disco_algolia_confirmed.csv','vendor,mfr_sku,product_gid,reason\n'+
+ discoColor.map(d=>d.concat('colorway-discontinued').join(',')).join('\n')+'\n'+
+ discoPattern.map(d=>d.concat('pattern-discontinued').join(',')).join('\n'));
+ console.log('\n=== RIGOROUS DISCO (Kravet Algolia index, exact-sku) ===');
+ console.log('checked:',cand.length);
+ console.log('ACTIVE (exact sku in index):',active.length);
+ console.log('DISCO — colorway gone (pattern still active):',discoColor.length);
+ console.log('DISCO — whole pattern gone (line indexed):',discoPattern.length);
+ console.log('AMW/Andrew Martin (EXCLUDED — not in this index):',amw.length);
+ console.log('errors:',err.length);
+ const byv={}; disco.forEach(d=>byv[d[0]]=(byv[d[0]]||0)+1);
+ console.log('confirmed-disco by vendor:',JSON.stringify(byv));
+ console.log('sample disco:',disco.slice(0,6).map(d=>d[1]).join(', '));
+})();
diff --git a/scripts/kravet-disco-archive.js b/scripts/kravet-disco-archive.js
new file mode 100644
index 0000000..c2b9071
--- /dev/null
+++ b/scripts/kravet-disco-archive.js
@@ -0,0 +1,22 @@
+const https=require('https'); const fs=require('fs');
+const TOKEN=process.env.T, STORE='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,v){return new Promise(r=>{const rq=https.request("https://"+STORE+"/admin/api/2024-10/graphql.json",{method:"POST",headers:{"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"}},x=>{let b="";x.on("data",d=>b+=d);x.on("end",()=>{try{r(JSON.parse(b))}catch(e){r({errors:b})}})});rq.write(JSON.stringify({query:q,variables:v||{}}));rq.end();});}
+const rows=fs.readFileSync('/tmp/disco_algolia_confirmed.csv','utf8').trim().split('\n').slice(1).map(l=>l.split(','));
+(async()=>{
+ const log=['archived_at,vendor,mfr_sku,reason,old_status,title']; let ok=0,fail=0,skip=0;
+ for(const [vendor,sku,gid,reason] of rows){
+ try{
+ const c=await gql("query($id:ID!){product(id:$id){title status}}",{id:gid});
+ const p=c.data?.product; if(!p){fail++;continue;}
+ if(p.status==='ARCHIVED'){ skip++; log.push(['(already)',vendor,sku,reason,p.status,JSON.stringify(p.title)].join(',')); continue; }
+ const m=await gql("mutation($id:ID!){productUpdate(input:{id:$id,status:ARCHIVED}){product{status} userErrors{message}}}",{id:gid});
+ const e=m.data?.productUpdate?.userErrors;
+ if(e&&e.length){ fail++; }
+ else { ok++; log.push([new Date().toISOString?'':'',vendor,sku,reason,p.status,JSON.stringify(p.title)].join(',')); if(ok%25===0)console.log(` …${ok}`); }
+ }catch(e){ fail++; }
+ await sleep(120);
+ }
+ fs.writeFileSync('/tmp/disco_archived_log.csv', log.join('\n'));
+ console.log(`\nDONE — archived ${ok}, already-archived ${skip}, failed ${fail}. Log: /tmp/disco_archived_log.csv`);
+})();
diff --git a/scripts/kravet-master-2026/add_roll_variants.mjs b/scripts/kravet-master-2026/add_roll_variants.mjs
new file mode 100644
index 0000000..21f8c38
--- /dev/null
+++ b/scripts/kravet-master-2026/add_roll_variants.mjs
@@ -0,0 +1,117 @@
+#!/usr/bin/env node
+/* Add the missing "Sold Per Roll" variant @ 2026 MAP to sample-only Kravet-family
+ WALLCOVERING products (DTD verdict A 3/3, Steve "go 305" 2026-06-16).
+ - Reads /tmp/kravet_roll_dryrun.csv (SAMPLE_ONLY rows) + Kamatera new_map.
+ - Per product: derive roll sku = sample sku minus -Sample; width from custom.width
+ metafield; option "Size" value = "Sold Per Roll - {W}In Wide".
+ - IDEMPOTENT: skips any product that already has a Sold-Per-Roll variant.
+ - Mirrors the store template: inventoryPolicy CONTINUE, qty 2026 @ the one location.
+ Flags: --apply (default dry-run, no writes) | --limit N (canary).
+ Token: SHOPIFY_ADMIN_TOKEN. */
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+import { execSync } from 'child_process';
+// Inputs are committed next to this script (reproducible across reboots since
+// /tmp is ephemeral); fall back to the original /tmp paths for legacy runs.
+const __dir=path.dirname(fileURLToPath(import.meta.url));
+const resolveInput=(name,legacy)=>{ const repo=path.join(__dir,'inputs',name); return fs.existsSync(repo)?repo:legacy; };
+const SRC_FILE=resolveInput('kravet_305_source.txt','/tmp/kravet_305_source.txt');
+const CSV_FILE=resolveInput('kravet_roll_dryrun.csv','/tmp/kravet_roll_dryrun.csv');
+const STORE='designer-laboratory-sandbox.myshopify.com';
+const TOKEN=process.env.SHOPIFY_ADMIN_TOKEN;
+const LOCATION='gid://shopify/Location/5795643504';
+const APPLY=process.argv.includes('--apply');
+const li=process.argv.indexOf('--limit'); const LIMIT=li>=0?parseInt(process.argv[li+1]):Infinity;
+if(!TOKEN){ console.error('no SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const log=s=>{ console.log(s); fs.appendFileSync('/tmp/add_roll_variants.log',s+'\n'); };
+
+// new_map + unit per gid from Kamatera (source file built earlier)
+// cols: gid | vendor | sku | new_map | unit_of_measure | ... | product_type
+const nm={}, unitOf={};
+for(const line of fs.readFileSync(SRC_FILE,'utf8').trim().split('\n')){
+ const c=line.split('|'); if(c.length>=5){ nm[c[0]]=parseFloat(c[3]); unitOf[c[0]]=(c[4]||'').trim().toUpperCase(); }
+}
+// the 305 sample-only gids
+// PRICE FLOOR: a ROLL MAP below this is almost certainly a sample/per-yard/garbage
+// value (the $4.25 sample-as-price trap). Reject + log rather than write it live.
+const MIN_ROLL_PRICE=10;
+const rawTargets=fs.readFileSync(CSV_FILE,'utf8').trim().split('\n')
+ .filter(l=>l.includes('SAMPLE_ONLY_NEEDS_PRICE')).map(l=>{const c=l.split(','); return {gid:c[0],vendor:c[1],sku:c[2],new_map:nm[c[0]],unit:unitOf[c[0]]};});
+// UNIT GUARD (standing rule kravet-map-table-mixes-yard-and-roll-units): only
+// write per-roll MAP onto these per-roll products. A per-yard MAP here would be
+// ~3x underpriced — drop + log anything not explicitly ROLL.
+const unitDropped=rawTargets.filter(t=>t.unit!=='ROLL');
+const priceDropped=rawTargets.filter(t=>t.unit==='ROLL' && (!(t.new_map>=MIN_ROLL_PRICE) || t.new_map===4.25));
+const targets=rawTargets.filter(t=>t.unit==='ROLL' && t.new_map>=MIN_ROLL_PRICE && t.new_map!==4.25);
+
+async function gql(query,variables){
+ for(let a=0;a<4;a++){
+ const r=await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',
+ headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query,variables})});
+ const j=await r.json();
+ if(j.errors && JSON.stringify(j.errors).includes('Throttled')){ await sleep(2000); continue; }
+ return j;
+ }
+ throw new Error('throttled out');
+}
+const READ=`query($id:ID!){ product(id:$id){ id title options{ name }
+ width:metafield(namespace:"custom",key:"width"){ value }
+ variants(first:30){ edges{ node{ title sku } } } } }`;
+const CREATE=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$variants){
+ productVariants{ id title sku price selectedOptions{ name value } }
+ userErrors{ field message } } }`;
+
+let added=0,skipped=0,failed=0,n=0;
+log(`\n=== add_roll_variants ${APPLY?'APPLY':'DRY-RUN'} limit=${LIMIT} targets=${targets.length} (dropped: non-ROLL ${unitDropped.length}, below-floor ${priceDropped.length}) @ ${new Date().toISOString?.()||'now'} ===`);
+for(const d of unitDropped) log(`DROP non-ROLL-unit ${d.vendor} ${d.sku} unit=${d.unit||'∅'} new_map=${d.new_map}`);
+for(const d of priceDropped) log(`DROP below-floor ${d.vendor} ${d.sku} new_map=${d.new_map}`);
+for(const t of targets){
+ if(n>=LIMIT) break; n++;
+ let p;
+ try{ const d=await gql(READ,{id:t.gid}); p=d.data?.product; }catch(e){ failed++; log(`FAIL read ${t.gid} ${e.message}`); continue; }
+ if(!p){ failed++; log(`FAIL no-product ${t.gid}`); continue; }
+ const vs=p.variants.edges.map(e=>e.node);
+ // TIGHTENED 2026-07-04: "sample-only" means ONLY the Sample variant exists. The stale
+ // dw_unified mirror (price IS NULL) false-flags products that already have a live sellable
+ // roll variant under a DIFFERENT label ("Single Roll") — the old /Sold Per Roll/ check missed
+ // those and minted a DUPLICATE below-MAP variant. Skip if ANY non-Sample sellable variant exists.
+ const sellable=vs.filter(v=>!/-sample$/i.test(v.sku||'') && !/^sample$/i.test((v.title||'').trim()));
+ if(sellable.length){ skipped++; log(`SKIP has-sellable ${p.title} :: ${sellable.map(v=>v.title).join('|')}`); continue; }
+ // require a real "-Sample" variant: the roll SKU is derived from it. With no
+ // -Sample match the old `|| vs[0]` fallback minted a roll variant sharing the
+ // sample's SKU — skip + log instead so it's surfaced, not silently mislabeled.
+ const sample=vs.find(v=>/-sample$/i.test(v.sku||''));
+ if(!sample){ skipped++; log(`SKIP no-sample-sku ${p.title} (skus: ${vs.map(v=>v.sku||'∅').join(',')})`); continue; }
+ const rollSku=(sample.sku||'').replace(/-Sample$/i,'');
+ const rawW=(p.width?.value||'');
+ const wm=rawW.match(/[\d.]+/); // leading numeric part only ("20 in (50.8 cm)" -> "20")
+ let w=wm?wm[0]:'';
+ // cm-only recovery: European mills (Brunschwig, Cole & Son, Lee Jofa) whose vendor page
+ // listed only cm get "custom.width" stored cm-first (e.g. "140 cm" = 55"). The old parse
+ // grabbed 140, failed the 12..60 inch guard, and dropped the width label. If the metafield
+ // has a cm token and NO inch token, convert to inches so the width survives. Inch and
+ // unit-less values are left byte-for-byte unchanged (bare numbers stay treated as inches).
+ if(w && !/\b(?:in|inch)\b|"/i.test(rawW) && /\bcm\b/i.test(rawW)){ w=String(Math.round(parseFloat(w)/2.54)); }
+ const wn=parseFloat(w);
+ const label=(wn>=12 && wn<=60) ? `Sold Per Roll - ${w}In Wide` : `Sold Per Roll`;
+ const price=t.new_map.toFixed(2);
+ const variant={ price,
+ optionValues:[{ optionName:(p.options[0]?.name||'Size'), name:label }],
+ inventoryItem:{ sku:rollSku, tracked:true },
+ inventoryPolicy:'CONTINUE',
+ inventoryQuantities:[{ locationId:LOCATION, availableQuantity:2026 }] };
+ if(!APPLY){ log(`DRY ${p.title} | +${label} @ $${price} sku=${rollSku}`); added++; continue; }
+ try{
+ const d=await gql(CREATE,{pid:t.gid,variants:[variant]});
+ const ue=d.data?.productVariantsBulkCreate?.userErrors||[];
+ if(ue.length){ failed++; log(`FAIL ${p.title} :: ${JSON.stringify(ue)}`); }
+ else { added++; const nv=d.data.productVariantsBulkCreate.productVariants[0];
+ log(`OK ${p.title} | ${nv.title} $${nv.price} sku=${nv.sku}`); }
+ }catch(e){ failed++; log(`FAIL create ${p.title} ${e.message}`); }
+ await sleep(700);
+ if(n%25===0) log(`-- progress ${n}/${Math.min(LIMIT,targets.length)} added=${added} skip=${skipped} fail=${failed}`);
+}
+log(`\n=== DONE ${APPLY?'APPLY':'DRY'} added=${added} skipped=${skipped} failed=${failed} of ${n} processed ===`);
diff --git a/scripts/kravet-master-2026/add_yard_variants.mjs b/scripts/kravet-master-2026/add_yard_variants.mjs
new file mode 100644
index 0000000..3524105
--- /dev/null
+++ b/scripts/kravet-master-2026/add_yard_variants.mjs
@@ -0,0 +1,122 @@
+#!/usr/bin/env node
+/* Add the missing "Sold Per Yard" variant @ 2026 MAP to sample-only Kravet-family
+ FABRIC (unit=YARD) products. Yard sibling of add_roll_variants.mjs — same tested
+ structure + tightened idempotency guard, changed only for the yard path.
+ - Reads inputs/kravet_yard_source.txt (gid|vendor|mfr_sku|new_map|YARD|FABRIC|type|width)
+ + inputs/kravet_yard_dryrun.csv (SAMPLE_ONLY_NEEDS_PRICE rows).
+ - Per product: roll->yard SKU = sample sku minus -Sample; width from the SOURCE FILE
+ (kravet_catalog width, authoritative, rounded); option value "Sold Per Yard - {W}In Wide".
+ - UNIT GUARD: only YARD rows (a per-roll MAP on a yard product would be wrong).
+ - IDEMPOTENT (tightened 2026-07-05): skip any product that already has ANY non-Sample
+ sellable variant (not just a "Sold Per Yard" label) — the stale mirror false-flags
+ products already sellable under a different label.
+ Flags: --apply (default dry) | --limit N (canary). Token: SHOPIFY_ADMIN_TOKEN. */
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+const __dir=path.dirname(fileURLToPath(import.meta.url));
+const SRC_FILE=path.join(__dir,'inputs/kravet_yard_source.txt');
+const CSV_FILE=path.join(__dir,'inputs/kravet_yard_dryrun.csv');
+const STORE='designer-laboratory-sandbox.myshopify.com';
+const TOKEN=process.env.SHOPIFY_ADMIN_TOKEN;
+const LOCATION='gid://shopify/Location/5795643504';
+const APPLY=process.argv.includes('--apply');
+const li=process.argv.indexOf('--limit'); const LIMIT=li>=0?parseInt(process.argv[li+1]):Infinity;
+if(!TOKEN){ console.error('no SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const log=s=>{ console.log(s); fs.appendFileSync('/tmp/add_yard_variants.log',s+'\n'); };
+
+// new_map + unit + width per gid from source
+const nm={}, unitOf={}, widthOf={};
+for(const line of fs.readFileSync(SRC_FILE,'utf8').trim().split('\n')){
+ const c=line.split('|'); if(c.length>=5){ nm[c[0]]=parseFloat(c[3]); unitOf[c[0]]=(c[4]||'').trim().toUpperCase(); widthOf[c[0]]=(c[7]||'').trim(); }
+}
+const MIN_YARD_PRICE=10; // below this a "yard MAP" is a sample/garbage value
+const rawTargets=fs.readFileSync(CSV_FILE,'utf8').trim().split('\n')
+ .filter(l=>l.includes('SAMPLE_ONLY_NEEDS_PRICE')).map(l=>{const c=l.split(','); return {gid:c[0],vendor:c[1],sku:c[2],new_map:nm[c[0]],unit:unitOf[c[0]],width:widthOf[c[0]]};});
+const unitDropped=rawTargets.filter(t=>t.unit!=='YARD');
+const priceDropped=rawTargets.filter(t=>t.unit==='YARD' && (!(t.new_map>=MIN_YARD_PRICE) || t.new_map===4.25));
+const targets=rawTargets.filter(t=>t.unit==='YARD' && t.new_map>=MIN_YARD_PRICE && t.new_map!==4.25);
+
+async function gql(query,variables){
+ for(let a=0;a<4;a++){
+ const r=await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',
+ headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query,variables})});
+ const j=await r.json();
+ if(j.errors && JSON.stringify(j.errors).includes('Throttled')){ await sleep(2000); continue; }
+ return j;
+ }
+ throw new Error('throttled out');
+}
+// Resolve a width in INCHES from a custom.width metafield value.
+// The metafield is authored inches-first — "54 in (137 cm)" — and the source-file
+// widths are already bare inches, so both normally parse fine. The gap this closes:
+// a MINORITY of metafields — mostly European Kravet-family mills (Brunschwig & Fils,
+// Cole & Son, Lee Jofa) — are stored CM-ONLY ("140 cm") because the vendor page only
+// listed cm (see kravet-spec-backfill.py: the `(?:in|cm)` fallback). The old fallback
+// did `.match(/[\d.]+/)` and treated that 140 as INCHES, so a 140 cm width (really 55")
+// slid through the 12..140 guard and got mislabeled "140In Wide". Here we read the UNIT
+// token and convert cm→in. A unit-LESS bare number is left as inches (unchanged): some
+// genuine wide-width sheers really are 110"+, so we do NOT guess cm on a bare number.
+function metafieldWidthInches(raw){
+ const s=(raw==null?'':String(raw)).trim();
+ if(!s) return null;
+ let m=s.match(/(\d[\d.]*)\s*(?:in\b|inch|")/i); // explicit inches (covers "54 in (137 cm)")
+ if(m) return parseFloat(m[1]);
+ m=s.match(/(\d[\d.]*)\s*cm\b/i); // cm-only → convert to inches
+ if(m) return parseFloat(m[1])/2.54;
+ m=s.match(/(\d[\d.]*)/); // unit-less → trust as inches (unchanged)
+ return m?parseFloat(m[1]):null;
+}
+
+const READ=`query($id:ID!){ product(id:$id){ id title options{ name }
+ width:metafield(namespace:"custom",key:"width"){ value }
+ variants(first:30){ edges{ node{ title sku } } } } }`;
+const CREATE=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$variants){
+ productVariants{ id title sku price selectedOptions{ name value } }
+ userErrors{ field message } } }`;
+
+let added=0,skipped=0,failed=0,n=0;
+log(`\n=== add_yard_variants ${APPLY?'APPLY':'DRY-RUN'} limit=${LIMIT} targets=${targets.length} (dropped: non-YARD ${unitDropped.length}, below-floor ${priceDropped.length}) ===`);
+// Surface each dropped row (parity with add_roll_variants) so the unit/price
+// exclusions are auditable instead of hidden behind a summary count.
+for(const d of unitDropped) log(`DROP non-YARD-unit ${d.vendor} ${d.sku} unit=${d.unit||'∅'} new_map=${d.new_map}`);
+for(const d of priceDropped) log(`DROP below-floor ${d.vendor} ${d.sku} new_map=${d.new_map}`);
+for(const t of targets){
+ if(n>=LIMIT) break; n++;
+ let p;
+ try{ const d=await gql(READ,{id:t.gid}); p=d.data?.product; }catch(e){ failed++; log(`FAIL read ${t.gid} ${e.message}`); continue; }
+ if(!p){ failed++; log(`FAIL no-product ${t.gid}`); continue; }
+ const vs=p.variants.edges.map(e=>e.node);
+ // tightened idempotency: any non-Sample sellable variant → already sellable, skip
+ const sellable=vs.filter(v=>!/-sample$/i.test(v.sku||'') && !/^sample$/i.test((v.title||'').trim()));
+ if(sellable.length){ skipped++; log(`SKIP has-sellable ${p.title} :: ${sellable.map(v=>v.title).join('|')}`); continue; }
+ const sample=vs.find(v=>/-sample$/i.test(v.sku||''));
+ if(!sample){ skipped++; log(`SKIP no-sample-sku ${p.title} (skus: ${vs.map(v=>v.sku||'∅').join(',')})`); continue; }
+ const yardSku=(sample.sku||'').replace(/-Sample$/i,'');
+ // width: prefer the authoritative catalog width from the SOURCE file (bare inches);
+ // else fall back to the product's custom.width metafield. The metafield fallback is
+ // unit-aware (see metafieldWidthInches) so a cm-only value is converted to inches
+ // rather than mislabeled; else no width in the label.
+ let wn=Math.round(parseFloat(t.width));
+ if(!(wn>0)){ const mi=metafieldWidthInches(p.width?.value); wn=(mi>0)?Math.round(mi):NaN; }
+ const label=(wn>=12 && wn<=140) ? `Sold Per Yard - ${wn}In Wide` : `Sold Per Yard`;
+ const price=t.new_map.toFixed(2);
+ const variant={ price,
+ optionValues:[{ optionName:(p.options[0]?.name||'Size'), name:label }],
+ inventoryItem:{ sku:yardSku, tracked:true },
+ inventoryPolicy:'CONTINUE',
+ inventoryQuantities:[{ locationId:LOCATION, availableQuantity:2026 }] };
+ if(!APPLY){ log(`DRY ${p.title} | +${label} @ $${price} sku=${yardSku}`); added++; continue; }
+ try{
+ const d=await gql(CREATE,{pid:t.gid,variants:[variant]});
+ const ue=d.data?.productVariantsBulkCreate?.userErrors||[];
+ if(ue.length){ failed++; log(`FAIL ${p.title} :: ${JSON.stringify(ue)}`); }
+ else { added++; const nv=d.data.productVariantsBulkCreate.productVariants[0];
+ log(`OK ${p.title} | ${nv.title} $${nv.price} sku=${nv.sku}`); }
+ }catch(e){ failed++; log(`FAIL create ${p.title} ${e.message}`); }
+ await sleep(700);
+ if(n%25===0) log(`-- progress ${n}/${Math.min(LIMIT,targets.length)} added=${added} skip=${skipped} fail=${failed}`);
+}
+log(`\n=== DONE ${APPLY?'APPLY':'DRY'} added=${added} skipped=${skipped} failed=${failed} of ${n} processed ===`);
diff --git a/scripts/kravet-master-2026/build_csv.py b/scripts/kravet-master-2026/build_csv.py
new file mode 100644
index 0000000..c07e96b
--- /dev/null
+++ b/scripts/kravet-master-2026/build_csv.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+"""Build /tmp/kravet_master_2026.csv from the GDrive 'Kravet Price list 1-20-26.xlsx'.
+Authoritative Jan-2026 Kravet-family MAP master (8,191 rows; NEW MAP = NEW WHLS x 1.5).
+Columns: Item | Brand | CURRENT WHLS | CURRENT MAP | Unit of measure | Collection |
+ Use | NEW Wholesale (Incl Tariff) | NEW MAP (Incl Tariff) | effective date | Tariff%.
+Rows can be ragged (short tuples) -> pad-guarded. Then run load.sh to push into dw_unified.
+Fetch the xlsx first: rclone copy 'gdrive:Kravet Price list 1-20-26.xlsx' /tmp/
+"""
+import openpyxl, csv, datetime, sys
+
+SRC = sys.argv[1] if len(sys.argv) > 1 else "/tmp/Kravet Price list 1-20-26.xlsx"
+OUT = sys.argv[2] if len(sys.argv) > 2 else "/tmp/kravet_master_2026.csv"
+
+wb = openpyxl.load_workbook(SRC, read_only=True, data_only=True)
+ws = wb["Sheet1"]
+rows = [r for r in ws.iter_rows(min_row=2, values_only=True) if r and r[0]]
+
+def g(r, i): return r[i] if i < len(r) else None
+def num(x):
+ try: return float(str(x).strip())
+ except Exception: return ""
+def dt(x):
+ if x is None: return ""
+ if isinstance(x, (datetime.datetime, datetime.date)): return x.strftime("%Y-%m-%d")
+ s = str(x).strip(); return s.split(" ")[0] if s else ""
+def s(x): return str(x).strip() if x is not None else ""
+
+with open(OUT, "w", newline="") as f:
+ w = csv.writer(f)
+ w.writerow(["item","brand","cur_whls","cur_map","uom","collection",
+ "use_category","new_whls","new_map","effective_date","tariff_pct"])
+ for r in rows:
+ w.writerow([s(g(r,0)), s(g(r,1)), num(g(r,2)), num(g(r,3)), s(g(r,4)).upper(),
+ s(g(r,5)), s(g(r,6)).upper(), num(g(r,7)), num(g(r,8)), dt(g(r,9)), num(g(r,10))])
+print(f"wrote {OUT} — {len(rows)} rows")
diff --git a/scripts/kravet-master-2026/dryrun_roll_reprice.mjs b/scripts/kravet-master-2026/dryrun_roll_reprice.mjs
new file mode 100644
index 0000000..79dd281
--- /dev/null
+++ b/scripts/kravet-master-2026/dryrun_roll_reprice.mjs
@@ -0,0 +1,76 @@
+#!/usr/bin/env node
+/* DRY-RUN (read-only): Kravet-family ROLL wallcovering reprice to Jan/Apr-2026 NEW MAP.
+ Reads VARIANT-level data from Shopify Admin (NOT the sample-contaminated mirror),
+ finds the sellable (non-sample) Price-Per-Roll variant, compares its price to new_map.
+ Input : /tmp/kravet_roll_targets.csv (shopify_gid,vendor,mfr_sku,new_map)
+ Output: /tmp/kravet_roll_dryrun.csv + console summary. NO WRITES.
+ Token : SHOPIFY_ADMIN_TOKEN (sourced from secrets-manager/.env). */
+import fs from 'fs';
+const STORE='designer-laboratory-sandbox.myshopify.com';
+const TOKEN=process.env.SHOPIFY_ADMIN_TOKEN;
+if(!TOKEN){ console.error('no SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+
+const rows=fs.readFileSync('/tmp/kravet_roll_targets.csv','utf8').trim().split('\n')
+ .map(l=>{const c=l.split(','); return {gid:c[0],vendor:c[1],sku:c[2],new_map:parseFloat(c[3])};})
+ .filter(r=>r.gid && r.gid.startsWith('gid://'));
+
+async function gql(q,vars){
+ const r=await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`,{
+ method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},
+ body:JSON.stringify({query:q,variables:vars})});
+ const j=await r.json();
+ if(j.errors){ throw new Error(JSON.stringify(j.errors).slice(0,300)); }
+ return j.data;
+}
+const Q=`query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product{ id vendor status
+ variants(first:20){ edges{ node{ id title price sku selectedOptions{ name value } } } } } } }`;
+
+const isSample=v=>{
+ const t=(v.title||'').toLowerCase(), s=(v.sku||'').toLowerCase();
+ if(t.includes('sample')||t.includes('memo')||t.includes('swatch')) return true;
+ if(s.includes('sample')) return true;
+ if(v.selectedOptions?.some(o=>/sample|memo|swatch/i.test(o.value))) return true;
+ const p=parseFloat(v.price); if(p>=4&&p<=4.5) return true; // $4.25 sample trap
+ return false;
+};
+
+const out=[['gid','vendor','mfr_sku','new_map','sellable_variant_id','cur_price','delta','n_variants','has_sample','has_sellable','category']];
+const cats={};
+const batch=40;
+for(let i=0;i<rows.length;i+=batch){
+ const slice=rows.slice(i,i+batch);
+ let data;
+ try{ data=await gql(Q,{ids:slice.map(r=>r.gid)}); }
+ catch(e){ console.error('batch',i,'err',e.message); await sleep(2000); i-=batch; continue; }
+ const byId={}; for(const n of (data.nodes||[])) if(n&&n.id) byId[n.id]=n;
+ for(const r of slice){
+ const p=byId[r.gid];
+ if(!p){ push(r,null,null,0,false,false,'PRODUCT_MISSING'); continue; }
+ const vs=(p.variants?.edges||[]).map(e=>e.node);
+ const samples=vs.filter(isSample), sellables=vs.filter(v=>!isSample(v));
+ const has_sample=samples.length>0, has_sellable=sellables.length>0;
+ if(!has_sellable){ push(r,null,null,vs.length,has_sample,false,'SAMPLE_ONLY_NEEDS_PRICE'); continue; }
+ // pick the highest-priced sellable variant (the real roll)
+ const sv=sellables.sort((a,b)=>parseFloat(b.price)-parseFloat(a.price))[0];
+ const cur=parseFloat(sv.price), delta=+(r.new_map-cur).toFixed(2);
+ let cat;
+ if(Math.abs(delta)<=0.50) cat='AT_MAP';
+ else if(cur<r.new_map) cat='BELOW_MAP';
+ else cat='ABOVE_MAP';
+ push(r,sv.id.split('/').pop(),cur,vs.length,has_sample,true,cat,delta);
+ }
+ process.stdout.write(`\r${Math.min(i+batch,rows.length)}/${rows.length}`);
+ await sleep(600);
+}
+function push(r,vid,cur,nv,hs,hsell,cat,delta){
+ cats[cat]=(cats[cat]||0)+1;
+ out.push([r.gid,r.vendor,r.sku,r.new_map,vid??'',cur??'',delta??'',nv,hs,hsell,cat]);
+}
+fs.writeFileSync('/tmp/kravet_roll_dryrun.csv',out.map(r=>r.join(',')).join('\n'));
+console.log('\n\n=== DRY-RUN SUMMARY (no writes) ===');
+for(const [k,v] of Object.entries(cats).sort((a,b)=>b[1]-a[1])) console.log(` ${k.padEnd(26)} ${v}`);
+const below=out.slice(1).filter(r=>r[10]==='BELOW_MAP');
+const totalUplift=below.reduce((s,r)=>s+parseFloat(r[6]||0),0);
+console.log(`\n BELOW_MAP reprice candidates: ${below.length}, total uplift if applied: $${totalUplift.toFixed(2)}`);
+console.log(' detail -> /tmp/kravet_roll_dryrun.csv');
diff --git a/scripts/kravet-master-2026/gen_reprice_143.mjs b/scripts/kravet-master-2026/gen_reprice_143.mjs
new file mode 100644
index 0000000..d9ff6ba
--- /dev/null
+++ b/scripts/kravet-master-2026/gen_reprice_143.mjs
@@ -0,0 +1,34 @@
+#!/usr/bin/env node
+/* READ-ONLY: build reprice-apply input for the 143 plausible under-MAP Kravet-family
+ products. Input /tmp/kravet_143_plausible.txt (product_gid|map|vendor|dw_base).
+ Per product: live-read variants, pick the non-sample sellable variant, and emit a
+ row ONLY when it is STILL below MAP AND the gap is plausible (MAP/cur <= 1.7, a
+ safety re-check so no unit-artifact slips in). Output /tmp/kravet_reprice_dryrun.csv
+ (vendor,sku,unit,vid,cur,map). No writes to Shopify. */
+import fs from 'fs';
+const STORE='designer-laboratory-sandbox.myshopify.com';
+const TOKEN=process.env.SHOPIFY_ADMIN_TOKEN;
+if(!TOKEN){console.error('no SHOPIFY_ADMIN_TOKEN');process.exit(1);}
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const RATIO_MAX=1.7, TOL=0.01;
+async function gql(q,v){for(let a=0;a<4;a++){const r=await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2000);continue;}return j;}throw new Error('throttled');}
+const READ=`query($id:ID!){ product(id:$id){ id variants(first:30){ edges{ node{ id title sku price selectedOptions{ value } } } } } }`;
+const isSample=v=>/-sample$/i.test(v.sku||'')||/sample/i.test(v.title||'');
+
+const rows=fs.readFileSync('/tmp/kravet_143_plausible.txt','utf8').trim().split('\n').map(l=>{const c=l.split('|');return{gid:c[0],map:parseFloat(c[1]),vendor:c[2]};});
+const out=['vendor,sku,unit,vid,cur,map']; let emit=0,skipAtMap=0,skipRatio=0,fail=0,n=0;
+for(const t of rows){ n++;
+ let p; try{p=(await gql(READ,{id:t.gid})).data?.product;}catch(e){fail++;continue;}
+ if(!p){fail++;continue;}
+ const real=p.variants.edges.map(e=>e.node).filter(v=>!isSample(v));
+ if(!real.length){fail++;continue;}
+ const v=real.sort((a,b)=>b.price-a.price)[0];
+ const cur=parseFloat(v.price);
+ if(!(cur<t.map-TOL)){skipAtMap++;continue;} // already at/above MAP now
+ if(t.map/cur>RATIO_MAX){skipRatio++;continue;} // suspicious gap → drop
+ out.push(`${t.vendor},${(v.sku||'').replace(/-Sample$/i,'')},ROLL,${(v.id||'').split('/').pop()},${cur.toFixed(2)},${t.map.toFixed(2)}`);
+ emit++;
+}
+fs.writeFileSync('/tmp/kravet_reprice_dryrun.csv',out.join('\n')+'\n');
+console.error(`processed=${n} EMIT=${emit} skip-at-map=${skipAtMap} skip-ratio=${skipRatio} fail=${fail}`);
+console.error(`wrote /tmp/kravet_reprice_dryrun.csv (${emit} targets)`);
diff --git a/scripts/kravet-master-2026/gen_reprice_dryrun.mjs b/scripts/kravet-master-2026/gen_reprice_dryrun.mjs
new file mode 100644
index 0000000..edbec9e
--- /dev/null
+++ b/scripts/kravet-master-2026/gen_reprice_dryrun.mjs
@@ -0,0 +1,57 @@
+#!/usr/bin/env node
+/* READ-ONLY generator for the reprice dryrun CSV consumed by kravet-reprice-apply.js.
+ Scope: the bounded 1,092 ROLL-unit Kravet-family set in inputs/kravet_305_source.txt
+ (gid|vendor|mfr_sku|new_map|ROLL|...). For each product, read LIVE variants, take the
+ non-sample ROLL-unit sellable variant, and emit a row ONLY when its price is BELOW MAP
+ (below-MAP = active MAP-compliance breach). Unit-safe: only ROLL variants, only vs the
+ ROLL MAP. Output: /tmp/kravet_reprice_dryrun.csv (vendor,sku,unit,vid,cur,map). No writes. */
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const STORE = 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+if (!TOKEN) { console.error('no SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const TOL = 0.01; // treat within 1c of MAP as already-compliant
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables) {
+ for (let a = 0; a < 4; a++) {
+ const r = await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('Throttled')) { await sleep(2000); continue; }
+ return j;
+ }
+ throw new Error('throttled out');
+}
+const READ = `query($id:ID!){ product(id:$id){ id title
+ variants(first:30){ edges{ node{ id title sku price selectedOptions{ name value } } } } } }`;
+const isRoll = t => /roll|bolt/i.test(t) && !/sample/i.test(t);
+
+const rows = fs.readFileSync(path.join(__dir, 'inputs/kravet_305_source.txt'), 'utf8').trim().split('\n')
+ .map(l => { const c = l.split('|'); return { gid: c[0], vendor: c[1], sku: c[2], map: parseFloat(c[3]) }; });
+
+const out = ['vendor,sku,unit,vid,cur,map'];
+let below = 0, atmap = 0, noroll = 0, fail = 0, n = 0;
+for (const t of rows) {
+ n++;
+ let p;
+ try { const d = await gql(READ, { id: t.gid }); p = d.data?.product; }
+ catch (e) { fail++; continue; }
+ if (!p) { fail++; continue; }
+ const vs = p.variants.edges.map(e => e.node);
+ // roll variant = option value or title mentions roll/bolt, not sample
+ const roll = vs.find(v => isRoll(v.title) || (v.selectedOptions || []).some(o => isRoll(o.value)));
+ if (!roll) { noroll++; continue; }
+ const cur = parseFloat(roll.price);
+ if (!(cur < t.map - TOL)) { atmap++; continue; } // at/above MAP → compliant, skip
+ const vid = (roll.id || '').split('/').pop();
+ out.push(`${t.vendor},${t.sku},ROLL,${vid},${cur.toFixed(2)},${t.map.toFixed(2)}`);
+ below++;
+ if (n % 100 === 0) console.error(` ${n}/${rows.length} below=${below} atmap=${atmap} noroll=${noroll} fail=${fail}`);
+}
+fs.writeFileSync('/tmp/kravet_reprice_dryrun.csv', out.join('\n') + '\n');
+console.error(`\nDONE processed=${n} BELOW-MAP=${below} at-or-above=${atmap} no-roll-variant=${noroll} fail=${fail}`);
+console.error(`wrote /tmp/kravet_reprice_dryrun.csv (${below} reprice targets)`);
diff --git a/scripts/kravet-master-2026/load.sh b/scripts/kravet-master-2026/load.sh
new file mode 100755
index 0000000..a85c1b2
--- /dev/null
+++ b/scripts/kravet-master-2026/load.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+# Load the authoritative Jan-2026 Kravet price list into dw_unified (Kamatera canonical)
+# as kravet_master_price_2026, keyed by Item SKU. Additive reference table, re-runnable.
+# Source: GDrive "Kravet Price list 1-20-26.xlsx" (8,191 rows; NEW MAP = NEW WHLS x 1.5 verified).
+# Build the CSV first via build_csv.py, then run this. Read-only w.r.t. the storefront.
+set -euo pipefail
+CSV="${1:-/tmp/kravet_master_2026.csv}"
+REMOTE_CSV="/tmp/kravet_master_2026.csv"
+SSH="my-server"
+PSQL="psql -U dw_admin -d dw_unified -h 127.0.0.1"
+
+[ -f "$CSV" ] || { echo "missing $CSV — run build_csv.py first"; exit 1; }
+echo "scp $CSV -> $SSH:$REMOTE_CSV"
+scp -q "$CSV" "$SSH:$REMOTE_CSV"
+
+ssh "$SSH" "$PSQL -v ON_ERROR_STOP=1 <<'SQL'
+DROP TABLE IF EXISTS kravet_master_price_2026;
+CREATE TABLE kravet_master_price_2026 (
+ item text PRIMARY KEY,
+ brand text,
+ cur_whls numeric,
+ cur_map numeric,
+ uom text,
+ collection text,
+ use_category text,
+ new_whls numeric,
+ new_map numeric,
+ effective_date date,
+ tariff_pct numeric,
+ loaded_at timestamptz DEFAULT now(),
+ source_file text DEFAULT 'Kravet Price list 1-20-26.xlsx'
+);
+\copy kravet_master_price_2026 (item,brand,cur_whls,cur_map,uom,collection,use_category,new_whls,new_map,effective_date,tariff_pct) FROM '$REMOTE_CSV' WITH (FORMAT csv, HEADER true)
+CREATE INDEX idx_kmp26_item_upper ON kravet_master_price_2026 (upper(item));
+CREATE INDEX idx_kmp26_brand ON kravet_master_price_2026 (upper(brand));
+CREATE INDEX idx_kmp26_uom ON kravet_master_price_2026 (uom);
+ANALYZE kravet_master_price_2026;
+SQL"
+echo "== verify =="
+ssh "$SSH" "$PSQL -tA -F'|' -c \"select count(*) rows, count(distinct item) items, count(*) filter (where uom='ROLL') roll, count(*) filter (where new_map>0) has_newmap from kravet_master_price_2026;\""
diff --git a/scripts/kravet-master-2026/offmap_full_scan.mjs b/scripts/kravet-master-2026/offmap_full_scan.mjs
new file mode 100644
index 0000000..a168a18
--- /dev/null
+++ b/scripts/kravet-master-2026/offmap_full_scan.mjs
@@ -0,0 +1,73 @@
+#!/usr/bin/env node
+/* READ-ONLY full off-MAP diagnosis for ALL active Kravet-family products.
+ Polls the running Shopify bulk export, downloads JSONL (products + variants),
+ and for each product's non-sample sellable variant compares LIVE price to MAP
+ from /tmp/kravet_dwsku_map.txt (dwbase|map|unit|vendor). Unit-aware: when the
+ variant's unit is known, compare only vs the MAP (roll-vs-yard safe); flag unknowns.
+ Buckets: AT-MAP | UNDER (breach) | OVER | sample-only | no-MAP | unit-unknown.
+ Writes /tmp/kravet_offmap_full.csv. NO writes to Shopify. */
+import fs from 'fs';
+const STORE='designer-laboratory-sandbox.myshopify.com';
+const TOKEN=process.env.SHOPIFY_ADMIN_TOKEN;
+if(!TOKEN){console.error('no SHOPIFY_ADMIN_TOKEN');process.exit(1);}
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const gql=async q=>{const r=await fetch(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q})});return r.json();};
+
+// MAP+unit lookup keyed by dw_sku base (uppercased, minus -Sample)
+const MAP={},UNIT={};
+for(const l of fs.readFileSync('/tmp/kravet_dwsku_map.txt','utf8').trim().split('\n')){
+ const [dw,m,u]=l.split('|'); if(dw){ MAP[dw.toUpperCase()]=parseFloat(m); UNIT[dw.toUpperCase()]=(u||'?').toUpperCase(); } }
+
+const unitOf=v=>{const o=(v||'').toLowerCase();
+ if(/sample/.test(o))return 'SAMPLE'; if(/yard/.test(o))return 'YARD';
+ if(/roll|bolt|single roll/.test(o))return 'ROLL'; if(/sq|square|foot/.test(o))return 'SQUARE FOOT';
+ if(/panel|mural/.test(o))return 'PANEL'; if(/each|tile|set/.test(o))return 'EACH'; return 'OTHER';};
+const baseOf=sku=>(sku||'').replace(/-Sample$/i,'').toUpperCase();
+
+(async()=>{
+ let url=null;
+ for(let i=0;i<240;i++){
+ const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`);
+ const op=s.data?.currentBulkOperation;
+ if(i%4===0)console.error(` poll ${i}: ${op?.status} obj=${op?.objectCount||0}`);
+ if(op?.status==='COMPLETED'){url=op.url;break;}
+ if(op?.status==='FAILED'){console.error('bulk FAILED',op.errorCode);process.exit(1);}
+ await sleep(5000);
+ }
+ if(!url){console.error('no url (empty result or timeout)');process.exit(1);}
+ console.error('downloading JSONL...');
+ const data=await (await fetch(url)).text();
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ const prod={},vmap={};
+ for(const n of lines){
+ if(n.id&&n.id.includes('/Product/')&&!n.__parentId){ prod[n.id]={vendor:n.vendor,status:n.status}; }
+ else if(n.__parentId&&n.price!==undefined){ (vmap[n.__parentId]=vmap[n.__parentId]||[]).push({sku:n.sku,p:parseFloat(n.price),u:unitOf((n.selectedOptions||[]).map(o=>o.value).join(' '))}); }
+ }
+ const out=['vendor,dw_base,unit,cur,map,delta,bucket,product_gid'];
+ let atMap=0,under=0,over=0,sampleOnly=0,noMap=0,unitUnknown=0,underAmt=0,overAmt=0; const per={};
+ for(const [pid,p] of Object.entries(prod)){
+ if(p.status!=='ACTIVE')continue;
+ const vs=vmap[pid]||[]; const real=vs.filter(v=>v.u!=='SAMPLE');
+ if(!real.length){sampleOnly++;continue;}
+ // choose the sellable variant + its dw base
+ const v=real.sort((a,b)=>b.p-a.p)[0];
+ const base=baseOf(v.sku);
+ const map=MAP[base]; if(!map){noMap++;continue;}
+ const knownUnit=UNIT[base]&&UNIT[base]!=='?';
+ // unit-safety: if we know the MAP unit and the variant unit and they differ, skip (suspect)
+ if(knownUnit && v.u!=='OTHER' && v.u!==UNIT[base]){ // mismatch — don't compare
+ per[p.vendor]=per[p.vendor]||{at:0,under:0,over:0,mm:0}; per[p.vendor].mm=(per[p.vendor].mm||0)+1; continue; }
+ if(!knownUnit)unitUnknown++;
+ const d=v.p-map; per[p.vendor]=per[p.vendor]||{at:0,under:0,over:0};
+ if(Math.abs(d)<=0.5){atMap++;per[p.vendor].at++;}
+ else if(d<0){under++;per[p.vendor].under++;underAmt+=(map-v.p);out.push(`${p.vendor},${base},${v.u}${knownUnit?'':'(u?)'},${v.p},${map},${d.toFixed(2)},UNDER,${pid}`);}
+ else{over++;per[p.vendor].over++;overAmt+=(v.p-map);out.push(`${p.vendor},${base},${v.u}${knownUnit?'':'(u?)'},${v.p},${map},${d.toFixed(2)},OVER,${pid}`);}
+ }
+ fs.writeFileSync('/tmp/kravet_offmap_full.csv',out.join('\n')+'\n');
+ console.error(`\n=== FULL off-MAP (active Kravet-family, live prices) ===`);
+ console.error(`products: ${Object.keys(prod).length} | sample-only: ${sampleOnly} | no-MAP: ${noMap} | unit-unknown (compared,flagged): ${unitUnknown}`);
+ console.error(`COMPARED → AT-MAP ${atMap} | UNDER ${under} (breach, +$${underAmt.toFixed(0)} to recover) | OVER ${over} (-$${overAmt.toFixed(0)})`);
+ for(const [ven,s] of Object.entries(per).sort((a,b)=>(b[1].under+b[1].over)-(a[1].under+a[1].over)))
+ console.error(` ${ven.padEnd(20)} at:${s.at} under:${s.under} over:${s.over} mismatch:${s.mm||0}`);
+ console.error(`\noff-MAP list → /tmp/kravet_offmap_full.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-master-2026/sync_authoritative_mac2_to_kamatera.sh b/scripts/kravet-master-2026/sync_authoritative_mac2_to_kamatera.sh
new file mode 100755
index 0000000..a9b0f8c
--- /dev/null
+++ b/scripts/kravet-master-2026/sync_authoritative_mac2_to_kamatera.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+# Split-brain fix: the broad Kravet MAP master (kravet_authoritative_pricing, 44,734 SKUs,
+# Mar+Apr 2026 sheets) was built on Mac2's LOCAL dw_unified but never existed on Kamatera
+# (canonical) — which is where the shopify_api_queue write-path runs. This copies it over,
+# additively (CREATE IF NOT EXISTS, no DROP). Keyed by mfr_sku -> joins live shopify_products.
+# Pair with kravet_master_price_2026 (Jan-2026, carries unit_of_measure) for the ROLL-only guard.
+set -euo pipefail
+CSV=/tmp/kravet_auth_pricing.csv
+PGHOST=/tmp psql -d dw_unified -c "\copy (select mfr_sku,old_whls,old_map,new_whls,new_map,source,loaded_at from kravet_authoritative_pricing) to '$CSV' with (format csv, header true)"
+scp -q "$CSV" my-server:"$CSV"
+ssh my-server "psql -U dw_admin -d dw_unified -h 127.0.0.1 -v ON_ERROR_STOP=1 <<'SQL'
+CREATE TABLE IF NOT EXISTS kravet_authoritative_pricing (
+ mfr_sku text PRIMARY KEY, old_whls numeric, old_map numeric,
+ new_whls numeric, new_map numeric, source text, loaded_at timestamptz
+);
+\copy kravet_authoritative_pricing FROM '$CSV' WITH (FORMAT csv, HEADER true)
+CREATE INDEX IF NOT EXISTS idx_kap_mfr_upper ON kravet_authoritative_pricing (upper(mfr_sku));
+ANALYZE kravet_authoritative_pricing;
+SQL"
+ssh my-server "psql -U dw_admin -d dw_unified -h 127.0.0.1 -tA -c \"select count(*) from kravet_authoritative_pricing;\""
diff --git a/scripts/kravet-offmap-paginated.js b/scripts/kravet-offmap-paginated.js
new file mode 100644
index 0000000..8f3e7cc
--- /dev/null
+++ b/scripts/kravet-offmap-paginated.js
@@ -0,0 +1,73 @@
+#!/usr/bin/env node
+/* READ-ONLY off-MAP measurement WITHOUT a bulk op (avoids collision w/ scheduled catalog op).
+ Paginates products per Kravet-family vendor via GraphQL, joins live price to 2026 MAP via the
+ custom.manufacturer_sku metafield (== MAP-file key), unit-aware where /tmp/sku_unit.json knows it,
+ sample-trap guarded ($4.25 / option=Sample excluded). Writes /tmp/kravet_offmap_paginated.csv.
+ MAP source = /tmp/all_sku_newmap.txt (Jun-13 dump of auth_pricing.new_map). No writes anywhere. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,300))}})});rq.write(JSON.stringify({query:q}));rq.end();});}
+
+const MAP={}; fs.readFileSync('/tmp/all_sku_newmap.txt','utf8').trim().split('\n').forEach(l=>{const[s,m]=l.split('|');if(s)MAP[s.trim().toUpperCase()]=parseFloat(m);});
+const UNIT=JSON.parse(fs.readFileSync('/tmp/sku_unit.json','utf8'));
+const KFAM=['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin'];
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+function unitOf(opt){const o=(opt||'').toLowerCase();
+ if(/sample/.test(o))return 'SAMPLE';
+ if(/yard/.test(o))return 'YARD';
+ if(/roll|bolt/.test(o))return 'ROLL';
+ if(/sq|square|foot|sf\b/.test(o))return 'SQUARE FOOT';
+ if(/panel|mural/.test(o))return 'PANEL';
+ if(/each|tile|set/.test(o))return 'EACH';
+ return 'OTHER';}
+
+(async()=>{
+ const out=['vendor,mfr_sku,unit,cur,map,delta,product_gid'];
+ let sampleOnly=0,noMap=0,unitMismatch=0,unitUnknown=0,atMap=0,under=0,over=0,underAmt=0,overAmt=0,seen=0;
+ const per={};
+ for(const vendor of KFAM){
+ let cursor=null, vendorCount=0, page=0;
+ const vq=vendor.replace(/"/g,'\\"');
+ while(true){
+ page++;
+ const after=cursor?`, after:"${cursor}"`:'';
+ const q=`{ products(first:100, query:"vendor:'${vq}' status:active"${after}){
+ pageInfo{ hasNextPage endCursor }
+ edges{ node{ id status
+ metafield(namespace:"custom",key:"manufacturer_sku"){ value }
+ variants(first:10){ edges{ node{ price selectedOptions{ value } } } } } } } }`;
+ let s; try{ s=await gql(q); }catch(e){ console.log(` ${vendor} p${page} ERR ${e}`); break; }
+ const pr=s.data?.products; if(!pr){ console.log(` ${vendor} no data: ${JSON.stringify(s).slice(0,160)}`); break; }
+ for(const e of pr.edges){
+ const n=e.node; seen++; vendorCount++;
+ const sku=norm(n.metafield?.value);
+ const vs=(n.variants?.edges||[]).map(x=>({p:parseFloat(x.node.price),u:unitOf((x.node.selectedOptions||[]).map(o=>o.value).join(' '))}));
+ const real=vs.filter(v=>v.u!=='SAMPLE' && v.p>5);
+ if(!real.length){ sampleOnly++; continue; }
+ const map=MAP[sku]; if(!map){ noMap++; continue; }
+ const mapUnit=UNIT[sku];
+ let v = mapUnit ? real.find(x=>x.u===mapUnit) : null;
+ if(!v){ if(mapUnit){ const top=real.sort((a,b)=>b.p-a.p)[0]; if(top.u!=='OTHER'){ unitMismatch++; continue; } v=top; }
+ else { v=real.sort((a,b)=>b.p-a.p)[0]; unitUnknown++; } }
+ per[vendor]=per[vendor]||{at:0,under:0,over:0};
+ const d=v.p-map;
+ if(Math.abs(d)<=0.5){ atMap++; per[vendor].at++; }
+ else { if(d<0){under++;per[vendor].under++;underAmt+=(map-v.p);}else{over++;per[vendor].over++;overAmt+=(v.p-map);}
+ out.push(`${vendor},${sku},${v.u},${v.p},${map},${d.toFixed(2)},${n.id}`); }
+ }
+ if(!pr.pageInfo.hasNextPage) break;
+ cursor=pr.pageInfo.endCursor; await sleep(350);
+ }
+ console.log(` ${vendor.padEnd(20)} active=${vendorCount}`);
+ }
+ fs.writeFileSync('/tmp/kravet_offmap_paginated.csv',out.join('\n'));
+ console.log('\n=== KRAVET-FAMILY off-MAP (READ-ONLY, vs Jun-13 auth_pricing.new_map snapshot) ===');
+ console.log(`active scanned: ${seen}`);
+ console.log(`sample-only(skip): ${sampleOnly} | no-MAP(skip): ${noMap} | unit-mismatch(skip): ${unitMismatch} | unit-unknown(compared): ${unitUnknown}`);
+ console.log(`COMPARED: AT-MAP ${atMap} | UNDER ${under} (+$${underAmt.toFixed(0)} to recover) | OVER ${over} (-$${overAmt.toFixed(0)})`);
+ console.log('per-vendor (compared only):');
+ for(const [v,s] of Object.entries(per).sort((a,b)=>(b[1].under+b[1].over)-(a[1].under+a[1].over)))
+ console.log(` ${v.padEnd(20)} at:${s.at} under:${s.under} over:${s.over}`);
+ console.log(`\noff-MAP rows → /tmp/kravet_offmap_paginated.csv (${out.length-1})`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-offmap-unitaware.js b/scripts/kravet-offmap-unitaware.js
new file mode 100644
index 0000000..b8aac1e
--- /dev/null
+++ b/scripts/kravet-offmap-unitaware.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* UNIT-AWARE off-MAP: poll bulk op → for each Kravet ACTIVE product, take the REAL (non-sample)
+ variant, derive its unit from the option name (Yard/Roll/Bolt/SqFt/Each/Panel), and compare its
+ price to the 2026 MAP ONLY when the variant's unit == the MAP's unit (from the Jan sheet).
+ Buckets: unit-matched off-MAP (TRUSTWORTHY) | unit-mismatch (suspect) | unit-unknown | sample-only.
+ READ-ONLY. Writes /tmp/kravet_offmap_trusted.csv (vendor,sku,unit,cur,map,delta,gid). */
+const https=require('https'); const fs=require('fs');
+const TOKEN=process.env.T, STORE='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise(r=>{const rq=https.request(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>r(JSON.parse(b)))});rq.write(JSON.stringify({query:q}));rq.end();});}
+function download(url){return new Promise((res,rej)=>{https.get(url,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+
+const MAP={}; fs.readFileSync('/tmp/all_sku_newmap.txt','utf8').trim().split('\n').forEach(l=>{const[s,m]=l.split('|');if(s)MAP[s.trim().toUpperCase()]=parseFloat(m);});
+const UNIT=JSON.parse(fs.readFileSync('/tmp/sku_unit.json','utf8')); // sku → YARD/ROLL/SQUARE FOOT/EACH
+const KFAM=new Set(['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin']);
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+function unitOf(opt){const o=(opt||'').toLowerCase();
+ if(/sample/.test(o))return 'SAMPLE';
+ if(/yard/.test(o))return 'YARD';
+ if(/roll|bolt/.test(o))return 'ROLL';
+ if(/sq|square|foot|sf\b/.test(o))return 'SQUARE FOOT';
+ if(/panel|mural/.test(o))return 'PANEL';
+ if(/each|tile|set/.test(o))return 'EACH';
+ return 'OTHER';}
+
+(async()=>{
+ let url=null;
+ for(let i=0;i<180;i++){const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`);const op=s.data?.currentBulkOperation;
+ if(i%4===0)console.log(` poll ${i}: ${op?.status} obj=${op?.objectCount||0}`);
+ if(op?.status==='COMPLETED'){url=op.url;break;} if(op?.status==='FAILED'){console.log('FAILED',op.errorCode);process.exit(1);} await sleep(5000);}
+ if(!url){console.log('no url');process.exit(1);}
+ console.log('downloading...');const data=await download(url);
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ const prod={}, vmap={};
+ for(const n of lines){ if(n.id&&n.id.includes('/Product/'))prod[n.id]={vendor:n.vendor,status:n.status,sku:norm(n.metafield?.value)};
+ else if(n.__parentId&&n.price!==undefined){(vmap[n.__parentId]=vmap[n.__parentId]||[]).push({p:parseFloat(n.price),u:unitOf((n.selectedOptions||[]).map(o=>o.value).join(' '))});} }
+ const out=['vendor,mfr_sku,unit,cur,map,delta,product_gid'];
+ let sampleOnly=0, noMap=0, unitUnknown=0, unitMismatch=0, atMap=0, under=0, over=0; const per={};
+ let underAmt=0, overAmt=0;
+ for(const [pid,p] of Object.entries(prod)){
+ if(!KFAM.has(p.vendor)||p.status!=='ACTIVE')continue;
+ const vs=vmap[pid]||[]; const real=vs.filter(v=>v.u!=='SAMPLE');
+ if(!real.length){sampleOnly++;continue;}
+ const map=MAP[p.sku]; if(!map){noMap++;continue;}
+ const mapUnit=UNIT[p.sku]; // may be undefined
+ // pick the real variant whose unit matches the MAP unit (if we know it); else the highest real
+ let v = mapUnit ? real.find(x=>x.u===mapUnit) : null;
+ if(!v){ if(mapUnit){ // map unit known but no matching variant unit → mismatch
+ const top=real.sort((a,b)=>b.p-a.p)[0]; if(top.u!=='OTHER'){unitMismatch++;continue;} v=top; }
+ else { v=real.sort((a,b)=>b.p-a.p)[0]; unitUnknown++; /* still compare, but flag */ } }
+ const d=v.p-map; per[p.vendor]=per[p.vendor]||{at:0,under:0,over:0};
+ if(Math.abs(d)<=0.5){atMap++;per[p.vendor].at++;}
+ else { if(d<0){under++;per[p.vendor].under++;underAmt+=(map-v.p);}else{over++;per[p.vendor].over++;overAmt+=(v.p-map);}
+ out.push(`${p.vendor},${p.sku},${v.u}${mapUnit?'':'(unit?)'} ,${v.p},${map},${d.toFixed(2)},${pid}`); }
+ }
+ fs.writeFileSync('/tmp/kravet_offmap_trusted.csv',out.join('\n'));
+ console.log('\n=== UNIT-AWARE off-MAP (real variant, unit-matched where possible) ===');
+ console.log(`sample-only (skip): ${sampleOnly} | no MAP: ${noMap} | unit-mismatch (skip, suspect): ${unitMismatch} | unit-unknown (compared, flagged): ${unitUnknown}`);
+ console.log(`compared: AT MAP ${atMap} | UNDER ${under} (+$${underAmt.toFixed(0)}) | OVER ${over} (-$${overAmt.toFixed(0)})`);
+ for(const [v,s] of Object.entries(per).sort((a,b)=>(b[1].under+b[1].over)-(a[1].under+a[1].over))) console.log(` ${v.padEnd(20)} at:${s.at} under:${s.under} over:${s.over}`);
+ console.log(`\ntrusted off-MAP list → /tmp/kravet_offmap_trusted.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-price-vs-map.js b/scripts/kravet-price-vs-map.js
new file mode 100644
index 0000000..a8cd374
--- /dev/null
+++ b/scripts/kravet-price-vs-map.js
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+/* Poll bulk op (products+variants+mfr_sku) → for each Kravet-family ACTIVE product, compare the
+ live YARD-variant price to the current 2026 MAP (auth_pricing.new_map). Reports per-vendor how
+ many are AT MAP vs OFF (under/over) — i.e. is the Cole & Son stale-price problem fleet-wide.
+ READ-ONLY. Writes /tmp/kravet_offmap.csv (vendor,mfr_sku,cur,map,delta,product_gid). */
+const https=require('https'); const fs=require('fs');
+const TOKEN=process.env.T, STORE='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise(r=>{const rq=https.request(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>r(JSON.parse(b)))});rq.write(JSON.stringify({query:q}));rq.end();});}
+function download(url){return new Promise((res,rej)=>{https.get(url,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+
+const MAP={}; fs.readFileSync('/tmp/all_sku_newmap.txt','utf8').trim().split('\n').forEach(l=>{const[s,m]=l.split('|');if(s)MAP[s.trim().toUpperCase()]=parseFloat(m);});
+const KFAM=new Set(['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin']);
+const norm=s=>(s||'').toUpperCase().replace(/\s+/g,' ').trim();
+const isSampleOpt=o=>(o||[]).some(x=>String(x.value).toLowerCase()==='sample');
+
+(async()=>{
+ let url=null;
+ for(let i=0;i<180;i++){ const s=await gql(`{ currentBulkOperation{ status objectCount url errorCode } }`); const op=s.data?.currentBulkOperation;
+ if(i%4===0)console.log(` poll ${i}: ${op?.status} obj=${op?.objectCount||0}`);
+ if(op?.status==='COMPLETED'){url=op.url;break;} if(op?.status==='FAILED'){console.log('FAILED',op.errorCode);process.exit(1);} await sleep(5000); }
+ if(!url){console.log('no url');process.exit(1);}
+ console.log('downloading...'); const data=await download(url);
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ // assemble: products carry vendor/status/metafield; variants carry __parentId + sku/price/options
+ const prod={}, variants={};
+ for(const n of lines){
+ if(n.id && n.id.includes('/Product/')){ prod[n.id]={vendor:n.vendor,status:n.status,sku:norm(n.metafield?.value),vars:[]}; }
+ else if(n.__parentId && n.price!==undefined){ (variants[n.__parentId]=variants[n.__parentId]||[]).push(n); }
+ }
+ const per={}; const off=['vendor,mfr_sku,cur,map,delta,product_gid'];
+ let total=0,atmap=0,under=0,over=0,nomap=0;
+ for(const [pid,p] of Object.entries(prod)){
+ if(!KFAM.has(p.vendor)||p.status!=='ACTIVE') continue;
+ const map=MAP[p.sku]; if(!map){ nomap++; continue; }
+ const vs=variants[pid]||[]; const nonSample=vs.filter(v=>!isSampleOpt(v.selectedOptions)&&!/-sample$/i.test(v.sku||''));
+ const yard=nonSample.sort((a,b)=>parseFloat(b.price)-parseFloat(a.price))[0]||vs[0]; if(!yard)continue;
+ const cur=parseFloat(yard.price); total++;
+ per[p.vendor]=per[p.vendor]||{t:0,at:0,under:0,over:0};
+ per[p.vendor].t++;
+ const d=cur-map;
+ if(Math.abs(d)<=0.5){ atmap++; per[p.vendor].at++; }
+ else { if(d<0){under++;per[p.vendor].under++;} else {over++;per[p.vendor].over++;}
+ off.push(`${p.vendor},${p.sku},${cur},${map},${d.toFixed(2)},${pid}`); }
+ }
+ fs.writeFileSync('/tmp/kravet_offmap.csv', off.join('\n'));
+ console.log('\n=== LIVE PRICE vs 2026 MAP (covered items only) ===');
+ for(const [v,s] of Object.entries(per).sort((a,b)=>b[1].t-a[1].t)) console.log(` ${v.padEnd(20)} ${s.t} | AT MAP:${s.at} (${(100*s.at/s.t).toFixed(0)}%) | UNDER:${s.under} | OVER:${s.over}`);
+ console.log(`\nTOTAL covered: ${total} | AT MAP: ${atmap} (${(100*atmap/total).toFixed(1)}%) | UNDER(below MAP, urgent): ${under} | OVER: ${over}`);
+ console.log(`off-MAP list → /tmp/kravet_offmap.csv (${off.length-1} rows)`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-reprice-apply.js b/scripts/kravet-reprice-apply.js
new file mode 100644
index 0000000..45c8e5e
--- /dev/null
+++ b/scripts/kravet-reprice-apply.js
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+/* APPLY the 73 under-MAP Kravet reprices -> MAP via Shopify Admin productVariantsBulkUpdate.
+ Reads /tmp/kravet_reprice_dryrun.csv (variant_id,current,new) + /tmp/kravet_offmap_paginated.csv
+ (sku->product gid). Grouped by product. PER-VARIANT GUARD: re-fetch live price first; only write
+ when live==expected-current (within 1c). Skip if already at MAP (idempotent) or drifted (logged).
+ Requires APPLY=1 to write; otherwise prints what it WOULD do. Logs every row + reads back. */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com', APPLY=process.env.APPLY==='1';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,vars){return new Promise((res,rej)=>{const body=JSON.stringify({query:q,variables:vars||{}});const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,300))}})});rq.write(body);rq.end();});}
+
+// dryrun targets (variant-centric — resolve the parent product PER VARIANT to dodge dup-SKU collisions)
+const targets=fs.readFileSync('/tmp/kravet_reprice_dryrun.csv','utf8').trim().split('\n').slice(1).map(l=>{
+ const c=l.split(',');return{vendor:c[0],sku:c[1],unit:c[2],vid:c[3],cur:+c[4],map:+c[5]};});
+
+const MUT=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid,variants:$variants){ productVariants{ id price } userErrors{ field message } } }`;
+
+(async()=>{
+ let wrote=0, already=0, drift=0, err=0; const log=['vendor,sku,vid,product_id,from,to,result'];
+ console.log(`MODE: ${APPLY?'APPLY (writing live)':'DRY (no writes — set APPLY=1)'} | variants: ${targets.length}\n`);
+ // Step 1: resolve each variant's parent product + live price directly (collision-proof)
+ const byProd={};
+ for(const t of targets){
+ const vgid=`gid://shopify/ProductVariant/${t.vid}`;
+ let s; try{ s=await gql(`{ productVariant(id:"${vgid}"){ id price product{ id status } } }`); }
+ catch(e){ console.log(` ${t.sku} FETCH-ERR ${e}`); err++; continue; }
+ const v=s.data?.productVariant;
+ if(!v){ console.log(` ${t.sku} v${t.vid} MISSING`); log.push(`${t.vendor},${t.sku},${t.vid},,,,MISSING`); err++; continue; }
+ if(v.product.status!=='ACTIVE'){ console.log(` ${t.sku} not-active skip`); log.push(`${t.vendor},${t.sku},${t.vid},${v.product.id.split('/').pop()},,,SKIP-not-active`); continue; }
+ const lp=parseFloat(v.price);
+ if(Math.abs(lp-t.map)<=0.01){ already++; log.push(`${t.vendor},${t.sku},${t.vid},${v.product.id.split('/').pop()},${lp},${t.map},ALREADY-AT-MAP`); continue; }
+ if(Math.abs(lp-t.cur)>0.01){ drift++; console.log(` ${t.sku} DRIFT live=$${lp} expected=$${t.cur} — SKIP`); log.push(`${t.vendor},${t.sku},${t.vid},${v.product.id.split('/').pop()},${lp},${t.map},DRIFT-SKIP`); continue; }
+ (byProd[v.product.id]=byProd[v.product.id]||[]).push({...t,vgid,lp});
+ await sleep(120);
+ }
+ // Step 2: bulk-update per resolved product
+ for(const [pid,ups] of Object.entries(byProd)){
+ if(!APPLY){ ups.forEach(u=>{console.log(` WOULD set ${u.sku} $${u.cur}->$${u.map} (prod ${pid.split('/').pop()})`);log.push(`${u.vendor},${u.sku},${u.vid},${pid.split('/').pop()},${u.cur},${u.map},WOULD-WRITE`);}); continue; }
+ const r=await gql(MUT,{pid,variants:ups.map(u=>({id:u.vgid,price:String(u.map)}))});
+ const ue=r.data?.productVariantsBulkUpdate?.userErrors||[];
+ if(ue.length){ console.log(` ${ups[0].sku} ERR ${JSON.stringify(ue)}`); ups.forEach(u=>log.push(`${u.vendor},${u.sku},${u.vid},${pid.split('/').pop()},${u.cur},${u.map},ERR`)); err+=ups.length; continue; }
+ const back={}; (r.data.productVariantsBulkUpdate.productVariants||[]).forEach(v=>back[v.id]=parseFloat(v.price));
+ for(const u of ups){ const nv=back[u.vgid]; const okv=Math.abs(nv-u.map)<=0.01;
+ console.log(` ${okv?'✓':'✗'} ${u.sku} $${u.cur}->$${nv}`); wrote+=okv?1:0; if(!okv)err++;
+ log.push(`${u.vendor},${u.sku},${u.vid},${pid.split('/').pop()},${u.cur},${nv},${okv?'WROTE':'VERIFY-FAIL'}`); }
+ await sleep(300);
+ }
+ fs.writeFileSync('/tmp/kravet_reprice_applied.csv',log.join('\n'));
+ console.log(`\n=== ${APPLY?'APPLIED':'DRY'} === wrote:${wrote} already-at-MAP:${already} drift-skip:${drift} err:${err}`);
+ console.log(`log -> /tmp/kravet_reprice_applied.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-reprice-dryrun.js b/scripts/kravet-reprice-dryrun.js
new file mode 100644
index 0000000..c94b94e
--- /dev/null
+++ b/scripts/kravet-reprice-dryrun.js
@@ -0,0 +1,47 @@
+#!/usr/bin/env node
+/* DRY-RUN ONLY. For the 73 under-MAP Kravet-family products (from /tmp/kravet_offmap_paginated.csv),
+ re-fetch variants, pinpoint the exact REAL variant to reprice (non-sample, price==measured cur),
+ and emit the proposed price change cur->MAP. Writes /tmp/kravet_reprice_dryrun.csv. NO WRITES.
+ Guards: sample variants ($4.25 / option Sample) are NEVER the target; unit was already matched
+ upstream; only UNDER-MAP rows (delta<0) are repriced UP to MAP (MAP is a floor). */
+const https=require('https'), fs=require('fs');
+const T=process.env.T, S='designer-laboratory-sandbox.myshopify.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q){return new Promise((res,rej)=>{const rq=https.request(`https://${S}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>{try{res(JSON.parse(b))}catch(e){rej(b.slice(0,200))}})});rq.write(JSON.stringify({query:q}));rq.end();});}
+const isSample=opts=>(opts||[]).some(o=>String(o.value).toLowerCase()==='sample');
+
+const rows=fs.readFileSync('/tmp/kravet_offmap_paginated.csv','utf8').trim().split('\n').slice(1)
+ .map(l=>{const[vendor,sku,unit,cur,map,delta,gid]=l.split(',');return{vendor,sku,unit,cur:+cur,map:+map,delta:+delta,gid};})
+ .filter(r=>r.delta<0); // UNDER-MAP only
+
+(async()=>{
+ const out=['vendor,mfr_sku,unit,variant_id,current_price,new_price_MAP,uplift,product_title'];
+ let ok=0, ambiguous=0, totalUplift=0;
+ const warn=[];
+ for(const r of rows){
+ const q=`{ product(id:"${r.gid}"){ title status
+ variants(first:25){ edges{ node{ id title price selectedOptions{ value } } } } } }`;
+ let s; try{ s=await gql(q); }catch(e){ warn.push(`${r.sku} FETCH-ERR ${e}`); continue; }
+ const p=s.data?.product; if(!p){ warn.push(`${r.sku} no-product`); continue; }
+ if(p.status!=='ACTIVE'){ warn.push(`${r.sku} not-active(${p.status})-SKIP`); continue; }
+ const vs=p.variants.edges.map(e=>e.node).filter(v=>!isSample(v.selectedOptions) && parseFloat(v.price)>5);
+ // target = the real variant whose price matches the measured 'cur' (the under-MAP one)
+ const cand=vs.filter(v=>Math.abs(parseFloat(v.price)-r.cur)<=0.01);
+ if(cand.length!==1){ ambiguous++; warn.push(`${r.sku} AMBIGUOUS (${cand.length} variants @ $${r.cur}) — SKIP, needs eyes`); continue; }
+ const v=cand[0];
+ const uplift=+(r.map-parseFloat(v.price)).toFixed(2);
+ totalUplift+=uplift; ok++;
+ out.push(`${r.vendor},${r.sku},${r.unit},${v.id.split('/').pop()},${v.price},${r.map},${uplift.toFixed(2)},"${p.title.replace(/"/g,'')}"`);
+ await sleep(250);
+ }
+ fs.writeFileSync('/tmp/kravet_reprice_dryrun.csv',out.join('\n'));
+ console.log('=== KRAVET UNDER-MAP REPRICE — DRY RUN (no writes) ===');
+ console.log(`under-MAP candidates: ${rows.length}`);
+ console.log(`clean (1 unambiguous real variant): ${ok} | ambiguous/skipped: ${ambiguous}`);
+ console.log(`total uplift to bring to MAP: +$${totalUplift.toFixed(2)}`);
+ // per-vendor summary
+ const per={}; out.slice(1).forEach(l=>{const c=l.split(','); per[c[0]]=(per[c[0]]||0)+1;});
+ console.log('per-vendor:'); for(const [v,n] of Object.entries(per)) console.log(` ${v.padEnd(20)} ${n}`);
+ if(warn.length){ console.log('\nWARNINGS / skipped:'); warn.forEach(w=>console.log(' '+w)); }
+ console.log(`\nfull proposed diff → /tmp/kravet_reprice_dryrun.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/kravet-sibling-map-verify/kravet-sibling-map-verify.mjs b/scripts/kravet-sibling-map-verify/kravet-sibling-map-verify.mjs
new file mode 100644
index 0000000..b698377
--- /dev/null
+++ b/scripts/kravet-sibling-map-verify/kravet-sibling-map-verify.mjs
@@ -0,0 +1,63 @@
+// kravet-sibling-map-verify — READ-ONLY, $0. Cycle 73 (DTD-picked B).
+// c72 proved Cole & Son 352 are at Kravet MAP (mislabel only). The c72 officer asked to
+// verify the SIBLING c68 mislabel sets. BASIS DECODE FIRST (the c72 lesson): of the four
+// (O&L 90, Thibaut 56, Fentucci 21, Kravet 13), only KRAVET is Kravet-family/MAP —
+// - Osborne & Little: NOT Kravet-family (standalone brand, RRP-based; barcode=None) → defer
+// - Thibaut: retail x0.45, not Kravet MAP → defer
+// - Fentucci: basis unknown → defer
+// So this cycle verifies ONLY the Kravet set with the proven method, and CRITICALLY applies
+// the per-SKU UNIT GUARD (Kravet product_map mixes Sold Per Roll / Panel / YARD — unlike
+// Cole & Son which was Roll/Panel only). A per-yard MAP compared to a per-roll product
+// underprices ~3x; here we read each SKU's product_map.map_unit and only compare same-unit.
+// NEGATIVE CONTROL: reproduce a known Kravet MAP value. EXCLUDES Phillip Jeffries.
+import fs from 'fs'; import { execSync } from 'child_process';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql'; const DB='postgresql:///dw_unified?host=/tmp';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+const q=s=>"'"+String(s).replace(/'/g,"''")+"'";
+
+// 1) capture the Kravet single-variant "Sample"-at-abnormal-price set
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active vendor:'Kravet'"){ pageInfo{hasNextPage endCursor} edges{node{handle variants(first:5){edges{node{title price sku barcode}}}}} } }`;
+let cursor=null, pages=0, total=0; const abn=[];
+while(pages<40){ const j=await gql(Q,{cursor}); if(!j?.data){console.log('fail',JSON.stringify(j?.errors||'').slice(0,200));break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++; const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(vs.length!==1) continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isSample(v.title) && !isNaN(p) && p!==0 && p!==4.25){ abn.push({h:n.handle,price:p,sku:v.sku,barcode:v.barcode||''}); } }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(180); }
+console.log(`=== kravet-sibling-map-verify (READ-ONLY, $0) ===\nKravet active scanned: ${total} | single-variant Sample-at-abnormal-price: ${abn.length}\n`);
+if(abn.length===0){ console.log('no Kravet abnormal-sample found in scan.'); }
+
+// 2) per-SKU: MAP via barcode->kravet_authoritative_pricing.new_map; UNIT via product_map by stripped dw_sku
+function strip(sku){ return (sku||'').replace(/-Sample$/i,''); }
+const bcs=[...new Set(abn.map(a=>a.barcode).filter(Boolean))];
+const skusStripped=[...new Set(abn.map(a=>strip(a.sku)).filter(Boolean))];
+const mapByBc={}, unitBySku={};
+if(bcs.length){ try{ execSync(`${PSQL} "${DB}" -tAc "SELECT mfr_sku,new_map FROM kravet_authoritative_pricing WHERE mfr_sku IN (${bcs.map(q).join(',')})"`,{encoding:'utf8'}).trim().split('\n').filter(Boolean).forEach(l=>{const[k,m]=l.split('|');mapByBc[k]=parseFloat(m);}); }catch(e){console.log('kap err',e.message.slice(0,100));} }
+if(skusStripped.length){ try{ execSync(`${PSQL} "${DB}" -tAc "SELECT dw_sku,map_unit,map_price FROM product_map WHERE dw_sku IN (${skusStripped.map(q).join(',')})"`,{encoding:'utf8'}).trim().split('\n').filter(Boolean).forEach(l=>{const[k,u,p]=l.split('|');unitBySku[k]={unit:u,price:parseFloat(p)};}); }catch(e){console.log('pm err',e.message.slice(0,100));} }
+
+let atAbove=0, below=0, noMap=0, noUnit=0; const belowList=[], unitMix={};
+for(const a of abn){
+ const map=mapByBc[a.barcode]; const u=unitBySku[strip(a.sku)];
+ if(map==null||isNaN(map)){ noMap++; continue; }
+ if(!u){ noUnit++; } else unitMix[u.unit]=(unitMix[u.unit]||0)+1;
+ if(a.price >= map - Math.max(1, map*0.01)) atAbove++;
+ else { below++; if(belowList.length<15) belowList.push({h:a.h,shop:a.price,map,unit:u?.unit||'(no product_map unit)',pct:((a.price/map-1)*100).toFixed(0)}); }
+}
+console.log(`-- Kravet MAP join (barcode->kravet_authoritative_pricing): matched ${abn.length-noMap}/${abn.length} --`);
+console.log(` AT/ABOVE MAP: ${atAbove} | BELOW MAP: ${below} | no-MAP-data: ${noMap}`);
+console.log(` per-SKU unit (product_map) distribution: ${JSON.stringify(unitMix)} | no-unit: ${noUnit}`);
+if(belowList.length){ console.log('\n below-MAP (CHECK unit — Kravet mixes yard/roll!):'); belowList.forEach(b=>console.log(` ${b.h.slice(0,40)} shop=$${b.shop} map=$${b.map} unit=${b.unit} ${b.pct}%`)); }
+// 1:1 join assertion
+try{ const dup=execSync(`${PSQL} "${DB}" -tAc "SELECT count(*) FROM (SELECT mfr_sku FROM kravet_authoritative_pricing WHERE mfr_sku IN (${(bcs.length?bcs:['x']).map(q).join(',')}) GROUP BY mfr_sku HAVING count(*)>1) t"`,{encoding:'utf8'}).trim();
+ console.log(`\n 1:1-join assertion: ${dup==='0'?'PASS (no dup mfr_sku keys)':'FAIL ('+dup+' dup keys)'}`); }catch(e){}
+// negative control
+try{ const nc=execSync(`${PSQL} "${DB}" -tAc "SELECT dw_sku,map_price,map_unit FROM product_map WHERE vendor='Kravet' AND map_price>0 ORDER BY dw_sku LIMIT 1"`,{encoding:'utf8'}).trim();
+ console.log(` NEGATIVE CONTROL (reads a real Kravet MAP row): ${nc}`); }catch(e){}
+
+fs.writeFileSync('/tmp/kravet-sibling-map-verify.json',JSON.stringify({ts:new Date().toISOString(),kravetScanned:total,abn:abn.length,atAbove,below,noMap,noUnit,unitMix,belowList},null,2));
+console.log('\nNOTE: O&L (RRP, not Kravet-family, barcode=None), Thibaut (retail x0.45), Fentucci (unknown) are NOT Kravet-MAP → deferred to a dedicated cycle.');
+console.log('wrote /tmp/kravet-sibling-map-verify.json');
diff --git a/scripts/kravet-spec-backfill.py b/scripts/kravet-spec-backfill.py
new file mode 100644
index 0000000..d0fc5cc
--- /dev/null
+++ b/scripts/kravet-spec-backfill.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python3
+"""
+Recurring Kravet-family spec backfill for NEW/incomplete products.
+For every ACTIVE Kravet-family product missing custom.width/material/pattern_repeat
+whose custom.manufacturer_sku resolves on kravet.com, scrape the authoritative
+specs and fill the blank metafields (never overwrites). Naturally only touches
+"new"/incomplete products because it skips any that already have all three.
+
+Scope: VENDORS env (pipe list) — default = the Kravet umbrella brands.
+Bound: PATTERNS_PER_VENDOR env (default 10) — each run processes only the first
+ 10 still-incomplete PATTERNS per vendor (all colorways of each), then
+ stops; subsequent daily runs advance through the line until every
+ pattern is filled (the skip-complete logic guarantees forward progress).
+Writes: Shopify metafields ONLY (customer-facing fix). The Kamatera-canonical
+ dw_unified (kravet_catalog) sync is GATED — this job appends scraped rows
+ to the ledger; run scripts/stage-clarke-specs-load.py + the gated load to
+ sync dw_unified (never auto-written by the scheduled job, per the
+ autonomous-canonical-writes-are-gated rule).
+$0 (local curl + Shopify Admin API).
+"""
+import os,sys,json,re,time,subprocess,urllib.request
+
+SHOP="designer-laboratory-sandbox.myshopify.com"
+PATTERNS_PER_VENDOR=int(os.environ.get("PATTERNS_PER_VENDOR","10"))
+
+def pattern_base(sku):
+ # W0143/02.CAC.0 -> W0143 ; F0063/10.CAC.0 -> F0063 ; W4143.106.0 -> W4143
+ return re.split(r'[/.]', sku.strip(), 1)[0].upper()
+DEFAULT_VENDORS=["Clarke And Clarke","Cole & Son","GP & J Baker","Lee Jofa","Brunschwig & Fils",
+ "Groundworks","Mulberry","Threads","Baker Lifestyle","Kravet","Kravet Couture"]
+VENDORS=[v.strip() for v in os.environ.get("VENDORS","|".join(DEFAULT_VENDORS)).split("|") if v.strip()]
+HERE=os.path.dirname(os.path.abspath(__file__))
+LEDGER=os.path.join(HERE,"kravet-spec-backfill-ledger.jsonl")
+UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36"
+
+def _token():
+ for p in (os.path.join(HERE,"..",".env"), os.path.expanduser("~/Projects/secrets-manager/.env")):
+ try:
+ for ln in open(p):
+ if ln.startswith("SHOPIFY_ADMIN_TOKEN="): return ln.split("=",1)[1].strip()
+ except FileNotFoundError: pass
+ sys.exit("no SHOPIFY_ADMIN_TOKEN")
+TOKEN=_token()
+URL=f"https://{SHOP}/admin/api/2024-10/graphql.json"
+
+def gql(q,v=None):
+ req=urllib.request.Request(URL,data=json.dumps({"query":q,"variables":v or {}}).encode(),
+ headers={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"})
+ return json.load(urllib.request.urlopen(req,timeout=40))
+
+def sku_to_url(sku):
+ s=re.sub(r'\.0$','',sku.strip().lower()); s=re.sub(r'[^a-z0-9]+','-',s).strip('-')
+ return f"https://www.kravet.com/{s}"
+
+def scrape(url):
+ try:
+ h=subprocess.run(["curl","-s","-m","25","-A",UA,url],capture_output=True,text=True,timeout=30).stdout
+ if len(h)<5000: return None
+ def window(label):
+ m=re.search(re.escape(label),h)
+ return re.sub(r'\s+',' ',re.sub('<[^>]+>',' ',h[m.start():m.start()+200])).strip() if m else ""
+ def dim(label):
+ seg=window(label); m=re.search(r'(\d[\d.]*\s*in\s*\(\s*[\d.]+\s*cm\s*\))',seg) or re.search(r'(\d[\d.]*\s*(?:in|cm))',seg)
+ return m.group(1).strip() if m else None
+ width=dim('>Width<') or dim('Width'); vrep=dim('Vertical Repeat') or dim('Repeat')
+ cseg=window('Composition')[len('Composition'):].strip(); comp=None
+ if cseg:
+ cm=re.match(r'([A-Za-z][A-Za-z /&%.\-0-9]{2,40}?(?:%|[A-Za-z]))(?:\s+[A-Z][a-z])',cseg+' Zz')
+ cand=(cm.group(1).strip() if cm else cseg[:40].strip())
+ if '%' in cand or any(w in cand.lower() for w in ('oven','vinyl','paper','silk','grass','cloth','cotton','poly','linen','wool')):
+ comp=cand
+ return {"width":width,"pattern_repeat":vrep,"material":comp}
+ except Exception:
+ return None
+
+def targets():
+ """Per vendor: gather all active products MISSING a spec, group by pattern base,
+ keep only the first PATTERNS_PER_VENDOR incomplete patterns (all their colorways)."""
+ out=[]
+ for vendor in VENDORS:
+ Q='''query($c:String,$q:String){ products(first:100, after:$c, query:$q){
+ pageInfo{hasNextPage endCursor}
+ nodes{ id handle
+ msku:metafield(namespace:"custom",key:"manufacturer_sku"){value}
+ w:metafield(namespace:"custom",key:"width"){value}
+ mat:metafield(namespace:"custom",key:"material"){value}
+ pr:metafield(namespace:"custom",key:"pattern_repeat"){value} } } }'''
+ cur=None; incomplete=[]
+ q=f"vendor:'{vendor}' status:active"
+ while True:
+ try: p=gql(Q,{"c":cur,"q":q})["data"]["products"]
+ except Exception: break
+ for n in p["nodes"]:
+ msku=(n.get("msku") or {}).get("value")
+ if not msku: continue
+ ex={"width":(n.get("w") or {}).get("value"),"material":(n.get("mat") or {}).get("value"),
+ "pattern_repeat":(n.get("pr") or {}).get("value")}
+ # complete = width AND material (pattern_repeat optional; plain weaves have none)
+ if ex["width"] and ex["material"]: continue
+ incomplete.append((n["id"],n["handle"],vendor,msku,ex))
+ if not p["pageInfo"]["hasNextPage"]: break
+ cur=p["pageInfo"]["endCursor"]; time.sleep(0.2)
+ # keep only the first N still-incomplete patterns (all colorways of each)
+ chosen=[]; seen=[]
+ for row in incomplete:
+ base=pattern_base(row[3])
+ if base not in seen:
+ if len(seen)>=PATTERNS_PER_VENDOR: continue
+ seen.append(base)
+ chosen.append(row)
+ if chosen: print(f" {vendor}: {len(seen)} patterns / {len(chosen)} colorways this run (of {len(incomplete)} incomplete)",flush=True)
+ out.extend(chosen)
+ return out
+
+def write_mf(gid,specs,existing):
+ typ={"width":"single_line_text_field","material":"multi_line_text_field","pattern_repeat":"single_line_text_field"}
+ mfs=[{"ownerId":gid,"namespace":"custom","key":k,"type":typ[k],"value":v}
+ for k,v in specs.items() if v and not existing.get(k)]
+ if not mfs: return 0
+ M='mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ metafields{key} userErrors{message} } }'
+ return len((gql(M,{"m":mfs}).get("data",{}).get("metafieldsSet",{}).get("metafields") or []))
+
+def main():
+ t=targets()
+ print(f"[{time.strftime('%F %T')}] vendors={len(VENDORS)} targets={len(t)} ({PATTERNS_PER_VENDOR} patterns/vendor)",flush=True)
+ led=open(LEDGER,"a"); wrote=ok=0
+ for gid,handle,vendor,msku,ex in t:
+ s=scrape(sku_to_url(msku))
+ if not s or not any(s.values()):
+ led.write(json.dumps({"t":time.strftime('%F %T'),"vendor":vendor,"handle":handle,"msku":msku,"status":"no_data"})+"\n"); led.flush()
+ time.sleep(0.3); continue
+ ok+=1; n=write_mf(gid,s,ex); wrote+=n
+ led.write(json.dumps({"t":time.strftime('%F %T'),"vendor":vendor,"handle":handle,"msku":msku,"status":"ok","specs":s,"wrote":n})+"\n"); led.flush()
+ time.sleep(0.35)
+ print(f"[{time.strftime('%F %T')}] DONE targets={len(t)} scraped_ok={ok} mf_written={wrote}",flush=True)
+
+if __name__=="__main__": main()
diff --git a/scripts/kravet-true-coverage.js b/scripts/kravet-true-coverage.js
new file mode 100644
index 0000000..c02758c
--- /dev/null
+++ b/scripts/kravet-true-coverage.js
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+/* Poll the GraphQL bulk op → download JSONL → compute TRUE 2026-price coverage per Kravet vendor
+ using the RELIABLE GraphQL manufacturer_sku (REST GET /metafields.json is broken on this store).
+ Writes /tmp/kravet_true_gaps.csv (vendor,mfr_sku,product_gid) for items with no 2026 price. */
+const https = require('https'); const fs = require('fs');
+const TOKEN = process.env.T, STORE = 'designer-laboratory-sandbox.myshopify.com';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+function gql(q){return new Promise(r=>{const rq=https.request(`https://${STORE}/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'}},x=>{let b='';x.on('data',d=>b+=d);x.on('end',()=>r(JSON.parse(b)))});rq.write(JSON.stringify({query:q}));rq.end();});}
+function download(url){return new Promise((res,rej)=>{https.get(url,r=>{let b='';r.on('data',d=>b+=d);r.on('end',()=>res(b));}).on('error',rej);});}
+
+const SET = new Set(fs.readFileSync('/tmp/auth2026_skus.txt','utf8').trim().split('\n').map(s=>s.trim().toUpperCase()));
+const KFAM = new Set(['Kravet','Kravet Couture','Kravet Design','Lee Jofa','Lee Jofa Modern','Brunschwig & Fils','Cole & Son','GP & J Baker','Clarke And Clarke','Mulberry','Threads','Baker Lifestyle','Gaston y Daniela','Andrew Martin']);
+const norm = s => (s||'').toUpperCase().replace(/\s+/g,' ').trim();
+
+(async()=>{
+ // poll
+ let url=null;
+ for(let i=0;i<120;i++){
+ const s=await gql(`{ currentBulkOperation{ id status objectCount url errorCode } }`);
+ const op=s.data?.currentBulkOperation;
+ if(i%4===0) console.log(` poll ${i}: ${op?.status} objects=${op?.objectCount||0}`);
+ if(op?.status==='COMPLETED'){ url=op.url; break; }
+ if(op?.status==='FAILED'){ console.log('bulk FAILED',op.errorCode); process.exit(1); }
+ await sleep(5000);
+ }
+ if(!url){ console.log('no url (still running or empty)'); process.exit(1); }
+ console.log('downloading JSONL...');
+ const data=await download(url);
+ const lines=data.trim().split('\n').filter(Boolean).map(l=>JSON.parse(l));
+ console.log('product nodes:',lines.length);
+ // each line: { id, vendor, status, metafield: {value} | null }
+ const per={}; const gaps=['vendor,mfr_sku,product_gid'];
+ let total=0,have=0,nosku=0;
+ for(const n of lines){
+ if(!n.vendor || !KFAM.has(n.vendor)) continue;
+ if(n.status && n.status!=='ACTIVE') continue;
+ total++;
+ per[n.vendor]=per[n.vendor]||{t:0,have:0,nosku:0,miss:0};
+ per[n.vendor].t++;
+ const sku=norm(n.metafield?.value);
+ if(!sku){ per[n.vendor].nosku++; nosku++; gaps.push(`${n.vendor},(no mfr_sku),${n.id}`); continue; }
+ if(SET.has(sku)){ per[n.vendor].have++; have++; }
+ else { per[n.vendor].miss++; gaps.push(`${n.vendor},${sku},${n.id}`); }
+ }
+ fs.writeFileSync('/tmp/kravet_true_gaps.csv', gaps.join('\n'));
+ console.log('\n=== TRUE 2026 COVERAGE (GraphQL) ===');
+ for(const [v,s] of Object.entries(per).sort((a,b)=>b[1].t-a[1].t)){
+ console.log(` ${v.padEnd(20)} ${s.t} total | 2026:${s.have} (${(100*s.have/s.t).toFixed(1)}%) | missing-price:${s.miss} | no-sku:${s.nosku}`);
+ }
+ console.log(`\nTOTAL: ${total} live Kravet items | have 2026 price: ${have} (${(100*have/total).toFixed(1)}%) | no-sku:${nosku} | gap CSV: /tmp/kravet_true_gaps.csv`);
+})().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/launchd-audit/audit.sh b/scripts/launchd-audit/audit.sh
new file mode 100755
index 0000000..4549042
--- /dev/null
+++ b/scripts/launchd-audit/audit.sh
@@ -0,0 +1,51 @@
+#!/bin/zsh
+# launchd-audit — honest health of com.steve.* jobs.
+# Keys off LastExitStatus (PRIMARY) + newest mtime across MULTIPLE candidate log
+# locations (plist stdout/stderr + /tmp + ~/Library/Logs + ~/.local/log + the
+# script's own data/ dir). Jobs that exit 0 with no fresh stdout are 'quiet-OK',
+# NOT 'stale' — the stdout-age heuristic that made /activity cry wolf.
+set -u
+setopt null_glob 2>/dev/null
+NOW=$(date +%s)
+LA=~/Library/LaunchAgents
+print -r -- "$(printf '%-34s %-6s %-13s %-7s %s' JOB EXIT LAST_SEEN STATE WHY)"
+printf '%.0s-' {1..96}; print
+for f in $LA/com.steve.*.plist; do
+ [ -f "$f" ] || continue
+ label=${${f:t}:r}; short=${label#com.steve.}
+ j=$(plutil -convert json -o - "$f" 2>/dev/null)
+ out=$(print -r -- "$j" | python3 -c "import sys,json;d=json.load(sys.stdin);print(d.get('StandardOutPath') or '')")
+ err=$(print -r -- "$j" | python3 -c "import sys,json;d=json.load(sys.stdin);print(d.get('StandardErrorPath') or '')")
+ args=$(print -r -- "$j" | python3 -c "import sys,json;print(' '.join(json.load(sys.stdin).get('ProgramArguments',[])))")
+ disabled=$(print -r -- "$j" | python3 -c "import sys,json;print(d.get('Disabled') if (d:=json.load(sys.stdin)).get('Disabled') is not None else '')")
+ # exit status + loaded
+ line=$(launchctl list "$label" 2>/dev/null)
+ exitst=$(print -r -- "$line" | grep LastExitStatus | grep -oE '[0-9]+' | head -1)
+ loaded=$([ -n "$line" ] && echo 1 || echo 0)
+ # newest mtime across candidate locations
+ newest=0
+ cand=("$out" "$err")
+ # derive script dir + common log homes
+ scr=$(print -r -- "$args" | grep -oE '/[^ ]+\.(sh|js|py)' | head -1)
+ [ -n "$scr" ] && cand+=("${scr:h}/data"(/N) "${scr:h}/logs"(/N))
+ cand+=(/tmp/${short}*.log /tmp/${short}*.err ~/Library/Logs/${short}*.log ~/.local/log/${short}*.log)
+ for L in $cand; do
+ if [ -e "$L" ]; then
+ if [ -d "$L" ]; then m=$(find "$L" -type f -exec stat -f %m {} + 2>/dev/null | sort -rn | head -1)
+ else m=$(stat -f %m "$L" 2>/dev/null); fi
+ [ -n "$m" ] && [ "$m" -gt "$newest" ] && newest=$m
+ fi
+ done
+ if [ "$newest" -gt 0 ]; then age=$(( (NOW-newest)/86400 )); seen=$(date -r "$newest" '+%b %d %H:%M'); else age=999; seen='never'; fi
+ # classify
+ if [ -n "$disabled" ] && [ "$disabled" = "True" ]; then state=PAUSED; why='disabled in plist'
+ elif [ "$loaded" = 0 ]; then state=UNLOADED; why='not in launchctl'
+ elif [ -z "$exitst" ]; then state='?'; why='no exit status'
+ elif [ "$exitst" = 0 ]; then
+ if [ "$age" -le 2 ]; then state=OK; why="ran ${age}d ago"
+ else state='OK?quiet'; why="exit0 but no fresh log ${age}d — verify by artifact"; fi
+ elif [ "$exitst" = 256 ]; then state=EXIT1; why='exit 1 (often a health-check reporting unhealthy — may be intended)'
+ elif [ "$exitst" = 32768 ] || [ "$exitst" = 15 ] || [ "$exitst" = 9 ]; then state=KILLED; why="signal (raw $exitst)"
+ else state=FAIL; why="exit raw $exitst"; fi
+ print -r -- "$(printf '%-34s %-6s %-13s %-7s %s' "$short" "${exitst:-?}" "$seen" "$state" "$why")"
+done
diff --git a/scripts/launchd-audit/launchd-lint.sh b/scripts/launchd-audit/launchd-lint.sh
new file mode 100755
index 0000000..a76217a
--- /dev/null
+++ b/scripts/launchd-audit/launchd-lint.sh
@@ -0,0 +1,83 @@
+#!/bin/bash
+# ─────────────────────────────────────────────────────────────────────────────
+# launchd-lint — STATIC preflight linter for the "Osborne bug" class.
+# Flags any LaunchAgent that spawns a bare interpreter which won't resolve under
+# launchd's minimal PATH, UNLESS it is mitigated by one of:
+# (a) routed through the canonical wrapper /Users/macstudio3/bin/launchd-run.sh
+# (b) plist sets EnvironmentVariables:PATH
+# (c) the wrapped .sh exports PATH / sources a profile/.env
+# Interpreters that DO resolve under launchd PATH (jq, python3 → /usr/bin) are not flagged.
+#
+# Complements audit.sh (runtime health). This one catches breakage BEFORE it fires.
+# Exit 0 = clean · Exit 1 = one or more jobs flagged (usable as a CI/preflight gate).
+# Usage: bash launchd-lint.sh (human report)
+# bash launchd-lint.sh --quiet (only failures + exit code)
+# ─────────────────────────────────────────────────────────────────────────────
+set -u
+LA="$HOME/Library/LaunchAgents"
+WRAPPER_BASENAME="launchd-run.sh"
+QUIET=0; [ "${1:-}" = "--quiet" ] && QUIET=1
+
+# interpreters that are NOT on launchd's minimal PATH (/usr/bin:/bin:/usr/sbin:/sbin)
+NOTRESOLVE='node|psql|pg_dump|pg_restore|npm|npx|pnpm|yarn|bun|deno|rclone'
+LD="/usr/bin:/bin:/usr/sbin:/sbin"
+
+flagged=0; scanned=0
+[ "$QUIET" -eq 0 ] && printf '%-40s %-10s %s\n' "JOB" "VERDICT" "DETAIL" && printf '%.0s-' {1..90} && echo
+
+for f in "$LA"/*.plist; do
+ [ -f "$f" ] || continue
+ scanned=$((scanned+1))
+ label=$(basename "$f" .plist)
+ prog0=$(/usr/libexec/PlistBuddy -c "Print :ProgramArguments:0" "$f" 2>/dev/null)
+ argsall=$(/usr/libexec/PlistBuddy -c "Print :ProgramArguments" "$f" 2>/dev/null | tr '\n' ' ')
+
+ # (a) routed through the canonical wrapper → mitigated, skip
+ if [ "$(basename "$prog0" 2>/dev/null)" = "$WRAPPER_BASENAME" ]; then continue; fi
+
+ # gather interpreter call sites: arg0, inline -c command, and any referenced .sh
+ bad=""
+ # arg0 bare interpreter
+ case "$prog0" in
+ */*|"") : ;;
+ *) echo "$prog0" | grep -qE "^($NOTRESOLVE)$" && bad="$bad arg0:$prog0" ;;
+ esac
+ # bare interpreter inside an inline `-c` string
+ if echo "$argsall" | grep -qE '(zsh|bash|sh) +-l?c'; then
+ cmd=$(/usr/libexec/PlistBuddy -c "Print :ProgramArguments" "$f" 2>/dev/null | grep -vE '/(zsh|bash|sh)\b|^ *Array|^ *\}|^ *-')
+ for t in $(echo "$cmd" | grep -oE "(^|[^/[:alnum:]_.])($NOTRESOLVE)([[:space:]])" | grep -oE "($NOTRESOLVE)" | sort -u); do
+ # a login/interactive shell (-lc/-ic) sources profile → assume PATH ok
+ echo "$argsall" | grep -qE '\-lc|\-ic' || bad="$bad inline:$t"
+ done
+ fi
+ # bare interpreter inside a referenced .sh wrapper, with no PATH setup in plist or script
+ script=$(echo "$argsall" | grep -oE '/[^" ]+\.sh' | grep -vE "$WRAPPER_BASENAME" | head -1)
+ if [ -n "$script" ] && [ -f "$script" ]; then
+ envpath=$(/usr/libexec/PlistBuddy -c "Print :EnvironmentVariables:PATH" "$f" 2>/dev/null)
+ script_sets_path=0
+ grep -qE 'export PATH|PATH=.*bin|source .*(zshrc|bash_profile|profile|\.env)|/opt/homebrew|/usr/local/bin' "$script" && script_sets_path=1
+ if [ -z "$envpath" ] && [ "$script_sets_path" -eq 0 ]; then
+ for t in $(grep -nE "(^|[^/[:alnum:]_.])($NOTRESOLVE)([[:space:]])" "$script" 2>/dev/null \
+ | grep -vE '#|/usr/|/opt/|/bin/|command -v|which ' \
+ | grep -oE "($NOTRESOLVE)" | sort -u); do
+ bad="$bad script:$t"
+ done
+ fi
+ fi
+
+ if [ -n "$bad" ]; then
+ flagged=$((flagged+1))
+ printf '%-40s %-10s %s\n' "$label" "❌ FRAGILE" "bare$bad — no wrapper / plist-PATH / script-PATH"
+ fi
+done
+
+echo
+echo "Scanned $scanned plists · flagged $flagged"
+if [ "$flagged" -gt 0 ]; then
+ echo "Fix: route through the wrapper —"
+ echo " ProgramArguments = [ /Users/macstudio3/bin/launchd-run.sh , <real-script> , <args…> ]"
+ echo " then: launchctl bootout gui/\$(id -u)/<label> && launchctl bootstrap gui/\$(id -u) <plist>"
+ exit 1
+fi
+echo "✅ no Osborne-class fragility"
+exit 0
diff --git a/scripts/launchd-audit/launchd-run.sh b/scripts/launchd-audit/launchd-run.sh
new file mode 100755
index 0000000..ee977b3
--- /dev/null
+++ b/scripts/launchd-audit/launchd-run.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# ─────────────────────────────────────────────────────────────────────────────
+# Canonical launchd wrapper. CANONICAL SOURCE — installed copy lives at
+# /Users/macstudio3/bin/launchd-run.sh (install with: make install / cp).
+#
+# WHY: launchd spawns jobs with a minimal PATH (/usr/bin:/bin:/usr/sbin:/sbin).
+# node (/usr/local/bin), psql + pg_dump (/opt/homebrew/opt/postgresql@14/bin) and
+# the rest of homebrew live OUTSIDE that PATH — so any plist that calls a bare
+# `node`/`psql`/`pg_dump` silently dies at spawn ("command not found"). This is the
+# recurring "Osborne bug" class. Route every plist through this wrapper and the
+# whole class disappears in one place.
+#
+# USAGE in a plist (note: launchd does NOT expand ~ — use the ABSOLUTE wrapper path):
+# <key>ProgramArguments</key>
+# <array>
+# <string>/Users/macstudio3/bin/launchd-run.sh</string>
+# <string>/Users/macstudio3/path/to/real-script.sh</string>
+# <string>--any</string><string>--args</string>
+# </array>
+#
+# Works whether the target is a shell script, or a bare interpreter + file
+# (e.g. wrapper + "node /abs/x.js" or "python3 /abs/y.py").
+# ─────────────────────────────────────────────────────────────────────────────
+set -u
+
+# Comprehensive PATH: homebrew (Apple-silicon + Intel), /usr/local, postgres@14,
+# then the launchd minimal PATH. Existing $PATH appended last so nothing is lost.
+export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin:/usr/sbin:/sbin:${PATH:-}"
+
+# Optional shared env (keeps secrets/vars out of plists). Sourced only if present.
+if [ -f "$HOME/.config/launchd/env" ]; then
+ set -a; . "$HOME/.config/launchd/env"; set +a
+fi
+
+if [ "$#" -eq 0 ]; then
+ echo "launchd-run.sh: no command given" >&2
+ exit 64
+fi
+
+exec "$@"
diff --git a/scripts/live-price-canary/live-price-canary.mjs b/scripts/live-price-canary/live-price-canary.mjs
new file mode 100644
index 0000000..dd314b7
--- /dev/null
+++ b/scripts/live-price-canary/live-price-canary.mjs
@@ -0,0 +1,39 @@
+// live-price-canary (c45) — hardened, promotable version of the c38 pilot.
+// READ-ONLY storefront crawl: the Mac2 mirror price col is unreliable (c37), so
+// measure TRUE customer-visible price live. Adds retry/backoff (the c38 pilot had
+// ~20% UNKNOWN from throttling) + writes data/latest.json (c34 heartbeat shape).
+// Classes per product: HAS_REAL (variant > $4.25) / SAMPLE_ONLY (only $4.25) /
+// NO_PRICE (blank|all 0). FAIL if NO_PRICE rate spikes (a real blank-price
+// regression the mirror can't catch). $0.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+const N=parseInt(process.argv[2]||'250',10);
+const NOPRICE_WARN=parseFloat(process.argv[3]||'3'); // % NO_PRICE → WARN
+const NOPRICE_FAIL=parseFloat(process.argv[4]||'8'); // % NO_PRICE → FAIL
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql', DB='postgresql:///dw_unified?host=/tmp';
+const DIR=`${process.env.HOME}/Projects/designerwallcoverings/scripts/live-price-canary/data`;
+const Q=`${process.env.HOME}/.claude/yolo-queue`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+const rows=execFileSync(PSQL,[DB,'-At','-F','\t','-c',
+ `select handle, vendor from shopify_products where status='ACTIVE' and handle is not null and handle<>'' order by random() limit ${N}`],{encoding:'utf8'}).trim().split('\n').filter(Boolean).map(l=>l.split('\t'));
+async function getj(h){ for(let a=0;a<5;a++){ try{ const r=await fetch(`https://www.designerwallcoverings.com/products/${encodeURIComponent(h)}.json`,{signal:AbortSignal.timeout(12000)}); if(r.status===200) return await r.json(); if(r.status===404) return {__404:true}; if(r.status===429){await sleep(1500*(a+1));continue;} }catch(e){ await sleep(1200*(a+1)); } } return null; }
+const b={HAS_REAL:0,SAMPLE_ONLY:0,NO_PRICE:0,PDP_404:0,UNKNOWN:0}; const noprice=[]; let decided=0;
+for(const [h,v] of rows){
+ const j=await getj(h);
+ if(j===null){b.UNKNOWN++; await sleep(140); continue;}
+ if(j.__404){b.PDP_404++; await sleep(140); continue;}
+ const prices=(j.product?.variants||[]).map(x=>parseFloat(x.price)).filter(n=>!isNaN(n));
+ let cls; if(!prices.length||prices.every(p=>p===0)){cls='NO_PRICE'; if(noprice.length<10)noprice.push(`${h} [${v}]`);}
+ else if(prices.every(p=>p<=4.25)) cls='SAMPLE_ONLY'; else cls='HAS_REAL';
+ b[cls]++; decided++; await sleep(140);
+}
+const pct=x=>decided?Math.round(1000*x/decided)/10:0;
+const noPricePct=pct(b.NO_PRICE);
+const verdict = noPricePct>=NOPRICE_FAIL?'FAIL':noPricePct>=NOPRICE_WARN?'WARN':'PASS';
+const out={generated_at:new Date().toISOString(), status:verdict, headline:`NO_PRICE ${noPricePct}% · SAMPLE_ONLY ${pct(b.SAMPLE_ONLY)}% · HAS_REAL ${pct(b.HAS_REAL)}% (n=${decided})`,
+ sampled:rows.length, decided, buckets:b, pct:{HAS_REAL:pct(b.HAS_REAL),SAMPLE_ONLY:pct(b.SAMPLE_ONLY),NO_PRICE:noPricePct}, noprice_examples:noprice, thresholds:{warn:NOPRICE_WARN,fail:NOPRICE_FAIL}};
+fs.writeFileSync(`${DIR}/latest.json`, JSON.stringify(out,null,2));
+fs.writeFileSync(`${Q}/live-price-canary-2026-06-16.json`, JSON.stringify(out,null,2));
+console.log(`[live-price-canary] ${verdict} · sampled=${rows.length} decided=${decided} UNKNOWN=${b.UNKNOWN} | ${out.headline}`);
+console.log(` latest.json: ${DIR}/latest.json`);
+process.exit(verdict==='FAIL'?2:0);
diff --git a/scripts/live-price-canary/live-price-pilot.mjs b/scripts/live-price-canary/live-price-pilot.mjs
new file mode 100644
index 0000000..61d1b6e
--- /dev/null
+++ b/scripts/live-price-canary/live-price-pilot.mjs
@@ -0,0 +1,57 @@
+// live-price-pilot (c38) — READ-ONLY storefront crawl. The Mac2 mirror price
+// column is unreliable (c37, ~30% synced), so measure TRUE customer-visible
+// pricing by sampling ACTIVE handles and reading live /products/<handle>.json.
+// Classifies each: NO_PRICE (blank/all 0), SAMPLE_ONLY (only $4.25, no real roll),
+// HAS_REAL (a variant > $4.25). Sizes whether a standing live-price canary is
+// warranted. $0 (storefront GETs only). Handles sampled from mirror (status lag
+// OK — we verify live + drop 404s).
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+const N = parseInt(process.argv[2]||'150',10);
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql', DB='postgresql:///dw_unified?host=/tmp';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/live-price-pilot-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/live-price-pilot-2026-06-16.md`;
+const rows = execFileSync(PSQL,[DB,'-At','-F','\t','-c',
+ `select handle, vendor from shopify_products where status='ACTIVE' and handle is not null and handle<>'' order by random() limit ${N}`],{encoding:'utf8'})
+ .trim().split('\n').filter(Boolean).map(l=>l.split('\t'));
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function getJSON(h){
+ const ctrl=new AbortController(); const t=setTimeout(()=>ctrl.abort(),12000);
+ try{ const r=await fetch(`https://www.designerwallcoverings.com/products/${encodeURIComponent(h)}.json`,{signal:ctrl.signal});
+ if(r.status!==200) return {status:r.status};
+ const j=await r.json(); return {status:200, product:j.product}; }
+ catch(e){ return {status:0, err:String(e.message).slice(0,30)}; }
+ finally{ clearTimeout(t); }
+}
+const buckets={NO_PRICE:0, SAMPLE_ONLY:0, HAS_REAL:0, STALE_404:0, UNKNOWN:0};
+const byVendor={}; const examples={NO_PRICE:[],SAMPLE_ONLY:[]};
+let decided=0;
+for(const [h,v] of rows){
+ const r=await getJSON(h);
+ if(r.status===404){buckets.STALE_404++; continue;}
+ if(r.status!==200||!r.product){buckets.UNKNOWN++; continue;}
+ const prices=(r.product.variants||[]).map(x=>parseFloat(x.price)).filter(n=>!isNaN(n));
+ let cls;
+ if(!prices.length || prices.every(p=>p===0)) cls='NO_PRICE';
+ else if(prices.every(p=>p<=4.25)) cls='SAMPLE_ONLY';
+ else cls='HAS_REAL';
+ buckets[cls]++; decided++;
+ byVendor[v]=byVendor[v]||{NO_PRICE:0,SAMPLE_ONLY:0,HAS_REAL:0}; byVendor[v][cls]++;
+ if((cls==='NO_PRICE'||cls==='SAMPLE_ONLY') && examples[cls].length<5) examples[cls].push(`${h} [${v}] (${prices.join(',')||'none'})`);
+ await sleep(120);
+}
+const pct=x=>decided?Math.round(1000*x/decided)/10:0;
+const report={generated_at:new Date().toISOString(), sampled:rows.length, decided, buckets,
+ pct:{NO_PRICE:pct(buckets.NO_PRICE),SAMPLE_ONLY:pct(buckets.SAMPLE_ONLY),HAS_REAL:pct(buckets.HAS_REAL)}, examples, byVendor};
+fs.writeFileSync(OUT,JSON.stringify(report,null,2));
+let md=`# Live-price pilot (storefront crawl) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY (live /products/<handle>.json GETs), \$0.** Sampled ${rows.length} ACTIVE handles, ${decided} decided (live 200s). Mirror price column is unreliable (c37) — this measures TRUE displayed price.\n\n`;
+md+=`| Live price class | count | % of decided |\n|---|--:|--:|\n`;
+md+=`| HAS_REAL (a variant > \$4.25) | ${buckets.HAS_REAL} | ${report.pct.HAS_REAL}% |\n`;
+md+=`| SAMPLE_ONLY (only \$4.25, no real roll) | ${buckets.SAMPLE_ONLY} | ${report.pct.SAMPLE_ONLY}% |\n`;
+md+=`| NO_PRICE (blank / all 0) | ${buckets.NO_PRICE} | ${report.pct.NO_PRICE}% |\n`;
+md+=`\n_STALE_404=${buckets.STALE_404} (mirror-ACTIVE but 404 live) · UNKNOWN=${buckets.UNKNOWN}._\n\n`;
+if(examples.NO_PRICE.length){md+=`**NO_PRICE examples:**\n`; for(const e of examples.NO_PRICE) md+=`- ${e}\n`;}
+fs.writeFileSync(MD,md);
+console.log(`[live-price-pilot] sampled=${rows.length} decided=${decided} | HAS_REAL ${report.pct.HAS_REAL}% · SAMPLE_ONLY ${report.pct.SAMPLE_ONLY}% · NO_PRICE ${report.pct.NO_PRICE}% · 404=${buckets.STALE_404}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/metafield-coverage/metafield-coverage-audit.mjs b/scripts/metafield-coverage/metafield-coverage-audit.mjs
new file mode 100644
index 0000000..f9d91de
--- /dev/null
+++ b/scripts/metafield-coverage/metafield-coverage-audit.mjs
@@ -0,0 +1,170 @@
+// metafield-coverage-audit — read-only Shopify GraphQL audit of enrichment
+// metafield coverage per vendor, for the standing rule "discover price+specs+
+// images per SKU and ALWAYS write to Shopify metafields" (repped vendors).
+//
+// For every ACTIVE product it records, per vendor:
+// • images: has >=1 image, has >=3 images (the "ALL images" half of the rule)
+// • specs: has custom.material AND custom.width (the core spec metafields)
+// • color: has custom.color_hex OR custom.color_details (the AI color-enrichment)
+// • pattern: has custom.pattern_name
+// Price coverage is intentionally NOT re-pulled here — the GMC dry-run already
+// maps which products are sample-only ($4.25) vs have a real roll; pulling 60
+// variants/product would blow the GraphQL cost cap. This audit is specs+images.
+//
+// Vendors are tagged from dw_unified.vendor_registry: repped = is_active AND
+// NOT is_private_label AND discount_confirmed (the confirmed trade lines DW reps).
+//
+// node metafield-coverage-audit.mjs [--min 60] [--page 50]
+// READ-ONLY (GraphQL queries + metafield reads only, no mutations). $0.
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+
+const args = process.argv.slice(2);
+const MIN = parseInt(args.find((_,i,a)=>a[i-1]==='--min')||'60',10)||60; // WARN threshold % per axis
+const PAGE = parseInt(args.find((_,i,a)=>a[i-1]==='--page')||'50',10)||50;
+const SHOP='designer-laboratory-sandbox.myshopify.com', VERSION='2024-10';
+const ENV=fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env','utf8');
+const TOKEN=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+if(!TOKEN){console.error('no SHOPIFY_ADMIN_TOKEN');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VERSION}/graphql.json`;
+const OUT=`${process.env.HOME}/.claude/yolo-queue/metafield-coverage-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/metafield-coverage-2026-06-16.md`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+
+// --- repped tags from vendor_registry (case-insensitive vendor_name map) ---
+function reppedTags(){
+ const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql';
+ const DB='postgresql:///dw_unified?host=/tmp';
+ let rows=[];
+ try{
+ const out=execFileSync(PSQL,[DB,'-At','-F','\t','-c',
+ "select lower(vendor_name), is_active, is_private_label, coalesce(discount_confirmed,false) from vendor_registry;"],{encoding:'utf8'});
+ rows=out.trim().split('\n').filter(Boolean).map(l=>l.split('\t'));
+ }catch(e){ console.error('warn: vendor_registry read failed ('+e.message.slice(0,40)+') — tags will be blank'); }
+ const m=new Map();
+ for(const [name,act,pl,disc] of rows){
+ const repped = act==='t' && pl!=='t' && disc==='t';
+ m.set(name,{is_active:act==='t',private_label:pl==='t',discount_confirmed:disc==='t',repped});
+ }
+ return m;
+}
+
+async function gql(q,v){
+ for(let a=0;a<8;a++){
+ let res;
+ try{ res=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})}); }
+ catch(e){ await sleep(2000*(a+1)); continue; }
+ if(res.status===429){ await sleep(2000*(a+1)); continue; }
+ const j=await res.json();
+ if(j.errors){ if(JSON.stringify(j.errors).match(/THROTTLED|exceeded/i)){ await sleep(2500*(a+1)); continue;} throw new Error(JSON.stringify(j.errors).slice(0,200)); }
+ const avail=j.extensions?.cost?.throttleStatus?.currentlyAvailable??2000;
+ if(avail<300) await sleep(1500);
+ return j.data;
+ }
+ throw new Error('exhausted retries');
+}
+
+const QUERY=`query($cursor:String){
+ products(first:${PAGE}, after:$cursor, query:"status:active"){
+ pageInfo{ hasNextPage endCursor }
+ nodes{
+ vendor
+ images(first:3){ nodes{ id } }
+ material: metafield(namespace:"custom", key:"material"){ value }
+ width: metafield(namespace:"custom", key:"width"){ value }
+ colorHex: metafield(namespace:"custom", key:"color_hex"){ value }
+ colorDetails: metafield(namespace:"custom", key:"color_details"){ value }
+ patternName: metafield(namespace:"custom", key:"pattern_name"){ value }
+ wGlobal: metafield(namespace:"global", key:"width"){ value }
+ wPillow: metafield(namespace:"pillow", key:"width_inches"){ value }
+ dimPillow: metafield(namespace:"pillow", key:"dimensions"){ value }
+ mContents: metafield(namespace:"global", key:"Contents"){ value }
+ mPillow: metafield(namespace:"pillow", key:"face_content"){ value }
+ }
+ }
+}`;
+
+// has SOME width signal across known namespaces
+const hasWidth = p => !!(p.width?.value || p.wGlobal?.value || p.wPillow?.value || p.dimPillow?.value);
+// has SOME material/content signal across known namespaces
+const hasMaterial = p => !!(p.material?.value || p.mContents?.value || p.mPillow?.value);
+
+function blank(){return {n:0, img1:0, img3:0, specs:0, specsStrict:0, color:0, pattern:0};}
+
+(async()=>{
+ const tags=reppedTags();
+ const byVendor=new Map();
+ let cursor=null, total=0, pages=0; const t0=Date.now();
+ while(true){
+ const d=await gql(QUERY,{cursor});
+ const c=d.products;
+ for(const p of c.nodes){
+ total++;
+ const v=p.vendor||'(none)';
+ if(!byVendor.has(v)) byVendor.set(v,blank());
+ const s=byVendor.get(v); s.n++;
+ const imgs=p.images.nodes.length;
+ if(imgs>=1) s.img1++;
+ if(imgs>=3) s.img3++;
+ if(p.material?.value && p.width?.value) s.specsStrict++; // c26 definition (custom.* only)
+ if(hasMaterial(p) && hasWidth(p)) s.specs++; // c28 hardened (any namespace)
+ if(p.colorHex?.value || p.colorDetails?.value) s.color++;
+ if(p.patternName?.value) s.pattern++;
+ }
+ pages++;
+ if(pages%50===0) process.stderr.write(` ...${pages} pages, ${total} products, ${byVendor.size} vendors\n`);
+ if(!c.pageInfo.hasNextPage) break;
+ cursor=c.pageInfo.endCursor;
+ }
+ const elapsed=((Date.now()-t0)/1000).toFixed(1);
+ const pct=(x,n)=>n?Math.round(1000*x/n)/10:0;
+
+ const vendors=[...byVendor.entries()].map(([vendor,s])=>{
+ const t=tags.get(vendor.toLowerCase())||null;
+ return { vendor, repped: t?.repped??null, private_label: t?.private_label??null,
+ active_products:s.n,
+ img1_pct:pct(s.img1,s.n), img3_pct:pct(s.img3,s.n),
+ specs_pct:pct(s.specs,s.n), specs_strict_pct:pct(s.specsStrict,s.n),
+ color_pct:pct(s.color,s.n), pattern_pct:pct(s.pattern,s.n) };
+ }).sort((a,b)=>b.active_products-a.active_products);
+
+ // repped vendors below MIN on any axis = the gap list
+ const reppedV = vendors.filter(v=>v.repped===true);
+ const gaps = reppedV.filter(v=>v.active_products>=50 &&
+ (v.img1_pct<MIN || v.specs_pct<MIN || v.color_pct<MIN));
+
+ const report={ generated_at:new Date().toISOString(), scanned_active:total, pages, elapsed_s:+elapsed,
+ warn_below_pct:MIN, vendor_count:vendors.length,
+ repped_vendor_count:reppedV.length, repped_gap_count:gaps.length,
+ repped_gaps:gaps, vendors };
+ fs.writeFileSync(OUT, JSON.stringify(report,null,2));
+
+ // overall coverage (repped only, weighted by product count)
+ const sum=(arr,k)=>arr.reduce((a,v)=>a+v[k]*v.active_products,0);
+ const totR=reppedV.reduce((a,v)=>a+v.active_products,0)||1;
+ const wimg1=Math.round(10*sum(reppedV,'img1_pct')/totR)/10;
+ const wspecs=Math.round(10*sum(reppedV,'specs_pct')/totR)/10;
+ const wspecsStrict=Math.round(10*sum(reppedV,'specs_strict_pct')/totR)/10;
+ const wcolor=Math.round(10*sum(reppedV,'color_pct')/totR)/10;
+
+ let md=`# Shopify metafield-coverage audit (repped vendors) — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md+=`**READ-ONLY (GraphQL metafield reads, no writes), \$0.** Scanned **${total}** ACTIVE products in ${elapsed}s (${pages} pages). `;
+ md+=`Standing rule: repped vendors must have price+specs+images discovered → written to Shopify metafields. Price coverage tracked separately (GMC \$4.25 scan); this audit = **specs + images + color-enrichment** metafields.\n\n`;
+ md+=`Repped = vendor_registry is_active AND NOT private_label AND discount_confirmed. Repped vendors: **${reppedV.length}** (${totR} active products).\n\n`;
+ md+=`**c28 hardening:** \"specs\" now accepts width from custom.width / global.width / pillow.width_inches / pillow.dimensions AND material from custom.material / global.Contents / pillow.face_content (was custom-only in c26 → caused Scalamandre pillow false-0%). \"specs-strict\" = the old custom-only number, shown alongside so the namespace-artifact delta is visible.\n\n`;
+ md+=`## Weighted repped coverage\n`;
+ md+=`| Axis | Coverage |\n|---|---:|\n| ≥1 image | ${wimg1}% |\n| **specs (any namespace)** | **${wspecs}%** |\n| specs-strict (custom.* only, c26) | ${wspecsStrict}% |\n| color-enrichment (hex/details) | ${wcolor}% |\n\n`;
+ md+=`## 🔴 Repped vendors below ${MIN}% on image / specs / color (≥50 active products) — ${gaps.length}\n`;
+ md+=`| Vendor | Active | ≥1img% | ≥3img% | specs% | specs-strict% | color% | pattern% |\n|---|---:|---:|---:|---:|---:|---:|---:|\n`;
+ for(const v of gaps) md+=`| ${v.vendor} | ${v.active_products} | ${v.img1_pct} | ${v.img3_pct} | **${v.specs_pct}** | ${v.specs_strict_pct} | ${v.color_pct} | ${v.pattern_pct} |\n`;
+ md+=`\n## All vendors (top 50 by active count)\n`;
+ md+=`| Vendor | Repped | Active | ≥1img% | ≥3img% | specs% | specs-strict% | color% | pattern% |\n|---|:--:|---:|---:|---:|---:|---:|---:|---:|\n`;
+ for(const v of vendors.slice(0,50)) md+=`| ${v.vendor} | ${v.repped===true?'✓':v.repped===false?'·':'?'} | ${v.active_products} | ${v.img1_pct} | ${v.img3_pct} | ${v.specs_pct} | ${v.specs_strict_pct} | ${v.color_pct} | ${v.pattern_pct} |\n`;
+ md+=`\n_Repped ✓ = confirmed trade line · · = active non-repped · ? = not matched in vendor_registry. \"specs\" = (any width namespace) AND (any material namespace). A vendor where specs >> specs-strict was a namespace artifact, not a true gap._\n`;
+ fs.writeFileSync(MD,md);
+
+ console.log(`[metafield-coverage] scanned=${total} vendors=${vendors.length} repped=${reppedV.length} gaps=${gaps.length}`);
+ console.log(` weighted repped: img>=1 ${wimg1}% · specs ${wspecs}% (strict ${wspecsStrict}%) · color ${wcolor}%`);
+ console.log(`Report: ${MD}`);
+ process.exit(0);
+})().catch(e=>{console.error('FATAL',e.message);process.exit(1);});
diff --git a/scripts/multivariant-zero-sweep/multivariant-zero-sweep.mjs b/scripts/multivariant-zero-sweep/multivariant-zero-sweep.mjs
new file mode 100644
index 0000000..134fec3
--- /dev/null
+++ b/scripts/multivariant-zero-sweep/multivariant-zero-sweep.mjs
@@ -0,0 +1,91 @@
+// multivariant-zero-sweep — READ-ONLY, $0. Cycle 69 (DTD-picked A, unanimous).
+// c67/c68 bounded the SINGLE-variant $0-"Sample" free-checkout bug to 111 RL. The officer
+// named the uncovered population: MULTI-variant products whose DEFAULT/position-1 variant
+// is $0 — would render $0 in cart-add defaults + per-variant feed offers but never matched
+// the single-variant signature. Swept via READ-ONLY Shopify Admin products GraphQL
+// (cursor pagination = full active catalog, NO page-100 cap → also closes c68's 6% orphan
+// gap). For every ACTIVE product reads each variant's price/position/inventoryPolicy.
+// Classify:
+// DEFAULT-ZERO — position-1 variant price == 0 (renders $0 by default = real exposure)
+// SINGLE-ZERO — single variant price == 0 (the c67/c68 RL set — COVERAGE GATE positive)
+// NONDEFAULT-ZERO— some variant $0 but position-1 priced (lower: only if shopper selects it)
+// healthy — otherwise
+// COVERAGE GATE (negative control): SINGLE-ZERO must reproduce ~111 Ralph Lauren; if not,
+// coverage incomplete → totals are lower bounds.
+// ONLY a read query is ever sent — never a mutation. EXCLUDES Phillip Jeffries.
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+if(!TOK){ console.error('no token'); process.exit(1); }
+
+async function gql(query,variables){
+ for(let a=0;a<6;a++){
+ const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query,variables})});
+ if(r.status===429){ await sleep(2000*(a+1)); continue; }
+ const j=await r.json();
+ if(j.errors && JSON.stringify(j.errors).includes('Throttled')){ await sleep(2500*(a+1)); continue; }
+ return j;
+ }
+ return null;
+}
+
+const Q=`query($cursor:String){
+ products(first:100, after:$cursor, query:"status:active"){
+ pageInfo{ hasNextPage endCursor }
+ edges{ node{ handle vendor
+ variants(first:15){ edges{ node{ price position inventoryPolicy } } } } }
+ }
+}`;
+
+console.log('=== multivariant-zero-sweep (READ-ONLY Admin GraphQL, $0) ===\nscanning ACTIVE products, cursor-paginated (no page-100 cap)\n');
+let cursor=null, scanned=0, pages=0, pjSkip=0;
+let defaultZero=0, singleZero=0, nondefaultZero=0, healthy=0;
+const vendDefault={}, vendSingle={}, defaultExamples=[], singleExamples=[];
+while(true){
+ const j=await gql(Q,{cursor});
+ if(!j||!j.data){ console.log('query failed at page',pages, JSON.stringify(j?.errors||'').slice(0,200)); break; }
+ const conn=j.data.products;
+ for(const e of conn.edges){
+ const n=e.node;
+ if(PJ.test(n.vendor||'')){ pjSkip++; continue; }
+ scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>({price:parseFloat(x.node.price),pos:x.node.position,ip:x.node.inventoryPolicy})).filter(v=>!isNaN(v.price));
+ if(vs.length===0){ healthy++; continue; }
+ const p1=vs.find(v=>v.pos===1)||vs.slice().sort((a,b)=>a.pos-b.pos)[0];
+ const anyZero=vs.some(v=>v.price===0);
+ if(vs.length===1){
+ if(vs[0].price===0){ singleZero++; vendSingle[n.vendor]=(vendSingle[n.vendor]||0)+1; if(singleExamples.length<5) singleExamples.push({h:n.handle,vendor:n.vendor}); }
+ else healthy++;
+ } else { // multi-variant
+ if(p1 && p1.price===0){ defaultZero++; vendDefault[n.vendor]=(vendDefault[n.vendor]||0)+1; if(defaultExamples.length<10) defaultExamples.push({h:n.handle,vendor:n.vendor,ip:p1.ip,nVar:vs.length}); }
+ else if(anyZero){ nondefaultZero++; }
+ else healthy++;
+ }
+ }
+ pages++; scanned;
+ const cost=j.extensions?.cost?.throttleStatus;
+ if(pages%20===0) console.log(` page ${pages} scanned=${scanned} default-zero=${defaultZero} single-zero=${singleZero} nondefault-zero=${nondefaultZero} (bucket ${cost?Math.round(cost.currentlyAvailable):'?'})`);
+ if(!conn.pageInfo.hasNextPage) break;
+ cursor=conn.pageInfo.endCursor;
+ // throttle: if bucket low, pause for restore
+ if(cost && cost.currentlyAvailable<800) await sleep(2000); else await sleep(250);
+}
+
+console.log(`\n=== RESULTS (ACTIVE products scanned: ${scanned}; pages: ${pages}; PJ-skip: ${pjSkip}) ===`);
+console.log(` *** DEFAULT-ZERO (multi-variant, position-1 = $0 → renders $0 by default): ${defaultZero} ***`);
+console.log(` SINGLE-ZERO (single $0 variant — c67/c68 set, COVERAGE GATE): ${singleZero}`);
+console.log(` NONDEFAULT-ZERO (multi, $0 only on a non-default variant): ${nondefaultZero}`);
+console.log(` healthy: ${healthy}`);
+console.log(`\n vendors with DEFAULT-ZERO (multi-variant $0 default):`);
+Object.entries(vendDefault).sort((a,b)=>b[1]-a[1]).slice(0,15).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+if(defaultExamples.length){ console.log(` default-zero examples:`); defaultExamples.forEach(x=>console.log(` ${x.h.slice(0,44)} [${x.vendor}] variants=${x.nVar} pos1.invPolicy=${x.ip}`)); }
+const rlSingle=Object.entries(vendSingle).filter(([v])=>/ralph/i.test(v)).reduce((s,[,n])=>s+n,0);
+console.log(`\n-- COVERAGE GATE (negative control) --`);
+console.log(` single-zero Ralph Lauren reproduced: ${rlSingle} (c68 found 111) → ${rlSingle>=100?'COVERAGE OK':rlSingle>0?'PARTIAL (lower bound)':'FAILED'}`);
+console.log(` single-zero by vendor:`); Object.entries(vendSingle).sort((a,b)=>b[1]-a[1]).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+
+fs.writeFileSync('/tmp/multivariant-zero-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,pages,defaultZero,singleZero,nondefaultZero,healthy,vendDefault,vendSingle,defaultExamples,singleExamples,rlSingle},null,2));
+console.log('\nwrote /tmp/multivariant-zero-sweep.json');
diff --git a/scripts/mural-pdp/fix-complete-mural-prices.mjs b/scripts/mural-pdp/fix-complete-mural-prices.mjs
new file mode 100644
index 0000000..6c94f44
--- /dev/null
+++ b/scripts/mural-pdp/fix-complete-mural-prices.mjs
@@ -0,0 +1,72 @@
+'use strict';
+/**
+ * Fix mispriced Rebel Walls "Complete Mural" (fixed-size) variants. The fixed-size tier follows
+ * price = $133.38 base + $52.50/m² × area, where area comes from the title size ("200cm x 280cm").
+ * The ~10 "200×280 = $46.38" rows are a data bug (should be $427.38). This scans EVERY Complete
+ * Mural variant, recomputes the expected price from its title size, and flags/fixes any that differ
+ * by more than $1. Variant PRICE UPDATES are NOT subject to Shopify's variant-creation cap.
+ * Env: DRY_RUN=1 (default off). Idempotent.
+ */
+import fs from 'fs';
+const ENV = fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8');
+const TOKEN = (ENV.match(/^SHOPIFY_DRAFT_TOKEN=(.+)$/m) || ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const BASE = 133.38, RATE = 52.50, TOL = 1.00;
+const DRY = process.env.DRY_RUN === '1';
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function g(q, v) {
+ for (let i = 0; i < 6; i++) {
+ let r; try { r = await fetch(EP, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }); }
+ catch (e) { await sleep(1500 * (i + 1)); continue; }
+ if (r.status === 429 || r.status >= 500) { await sleep(2000 * (i + 1)); continue; }
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).includes('THROTTLED')) { await sleep(2000 * (i + 1)); continue; }
+ return j;
+ }
+ throw new Error('exhausted retries');
+}
+const LIST = `query($q:String!,$after:String){products(first:50,query:$q,after:$after){pageInfo{hasNextPage endCursor} nodes{id title variants(first:5){nodes{id sku price selectedOptions{value}}}}}}`;
+const UPD = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkUpdate(productId:$pid,variants:$variants){userErrors{message}}}`;
+
+function expected(title) {
+ const m = title.match(/(\d+)\s*cm\s*x\s*(\d+)\s*cm/i);
+ if (!m) return null;
+ const area = (+m[1] / 100) * (+m[2] / 100);
+ return { area: +area.toFixed(2), price: +(BASE + RATE * area).toFixed(2), dims: `${m[1]}×${m[2]}` };
+}
+
+(async () => {
+ console.log(`[fix Complete Mural prices] ${DRY ? 'DRY-RUN' : 'LIVE'} | formula $${BASE}+$${RATE}/m²`);
+ let after = null, scanned = 0, fixed = 0, ok = 0, noSize = 0;
+ const bad = [];
+ while (true) {
+ const lk = await g(LIST, { q: `vendor:"Rebel Walls" status:active`, after });
+ const conn = lk.data && lk.data.products;
+ if (!conn) { console.log('error', JSON.stringify(lk.errors || {})); break; }
+ for (const p of conn.nodes) {
+ const cm = p.variants.nodes.find(v => /Complete Mural/i.test(v.selectedOptions[0]?.value || ''));
+ if (!cm) continue;
+ scanned++;
+ const exp = expected(p.title);
+ if (!exp) { noSize++; continue; }
+ const cur = parseFloat(cm.price);
+ if (Math.abs(cur - exp.price) <= TOL) { ok++; continue; }
+ bad.push({ pid: p.id, vid: cm.id, sku: cm.sku, title: p.title.slice(0, 34), dims: exp.dims, area: exp.area, cur, exp: exp.price });
+ }
+ if (!conn.pageInfo.hasNextPage) break;
+ after = conn.pageInfo.endCursor;
+ }
+ console.log(`scanned ${scanned} Complete Mural variants | on-formula ${ok} | no-size ${noSize} | MISPRICED ${bad.length}`);
+ for (const b of bad) console.log(` ${b.sku} "${b.title}" ${b.dims} (${b.area}m²) $${b.cur} → $${b.exp}`);
+ if (DRY || !bad.length) { console.log(DRY ? '\n(dry-run, no writes)' : '\nnothing to fix'); return; }
+ console.log('\napplying fixes...');
+ for (const b of bad) {
+ const r = await g(UPD, { pid: b.pid, variants: [{ id: b.vid, price: String(b.exp) }] });
+ const ue = r.data?.productVariantsBulkUpdate?.userErrors || [];
+ if (ue.length) console.log(` ERR ${b.sku}: ${JSON.stringify(ue)}`);
+ else { fixed++; console.log(` ✓ ${b.sku} $${b.cur} → $${b.exp}`); }
+ await sleep(250);
+ }
+ console.log(`\ndone: ${fixed}/${bad.length} fixed.`);
+})();
diff --git a/scripts/mural-pdp/server.js b/scripts/mural-pdp/server.js
new file mode 100644
index 0000000..716be06
--- /dev/null
+++ b/scripts/mural-pdp/server.js
@@ -0,0 +1,220 @@
+'use strict';
+/**
+ * Mural PDP server — serves the custom-size Rebel Walls mural page, feeds it the COMPLETE
+ * product (all images, full description, every real spec), and turns a chosen wall size into a
+ * real Shopify checkout via the Draft Orders API.
+ *
+ * Pricing: Rebel Walls custom murals sell at a flat $83.38/m² — verified UNIFORM across all 978
+ * live "Sold Per Square Meter" variants (2026-06-18). No base. price = RATE_SQM * area_m².
+ *
+ * SECURITY: browser never sees the Admin token and never sets the price. /api/mural-cart
+ * RECOMPUTES price server-side from dims (clamped) so tampering is impossible. Customer-facing
+ * specs are denylist-filtered so upstream-vendor / internal fields (manufacturer_sku,
+ * supplier_name, real_vendor, cost, internal analysis) NEVER reach the page.
+ *
+ * Token: SHOPIFY_DRAFT_TOKEN (needs write_draft_orders) for checkout; SHOPIFY_ADMIN_TOKEN for reads.
+ * Run: node scripts/mural-pdp/server.js (PORT env, default 9942)
+ */
+const http = require('http');
+const fs = require('fs');
+const path = require('path');
+
+// Portable secret loading: process.env first (pm2/systemd), then any available .env
+// (Mac2 secrets master, a co-located .env, or /root/.env on Kamatera).
+const ENV_PATHS = [
+ process.env.MURAL_ENV_FILE,
+ path.join(__dirname, '.env'),
+ '/Users/macstudio3/Projects/secrets-manager/.env',
+ process.env.HOME ? path.join(process.env.HOME, '.env') : null,
+ '/root/.env',
+].filter(Boolean);
+let ENV = '';
+for (const p of ENV_PATHS) { try { ENV = fs.readFileSync(p, 'utf8'); break; } catch (e) {} }
+const get = k => process.env[k] || (ENV.match(new RegExp('^' + k + '=(.+)$', 'm')) || [])[1];
+const READ_TOKEN = get('SHOPIFY_ADMIN_TOKEN');
+const DRAFT_TOKEN = get('SHOPIFY_DRAFT_TOKEN') || READ_TOKEN;
+const SHOP = 'https://designer-laboratory-sandbox.myshopify.com';
+const EP = SHOP + '/admin/api/2024-10/graphql.json';
+const PORT = process.env.PORT || 9942;
+
+const RATE_SQM = 83.38, SAMPLE = 4.25, CM_PER_IN = 2.54;
+const MIN_CM = 50, MAX_CM = 1200;
+// format inches → feet-then-inches, e.g. 157 → 13′ 1″ (no cm anywhere)
+function ftIn(inch) { let f = Math.floor(inch / 12), i = Math.round(inch - f * 12); if (i === 12) { f++; i = 0; } return `${f}′ ${i}″`; }
+const clamp = (n, lo, hi) => Math.max(lo, Math.min(hi, n));
+
+// Curated, customer-safe spec map: label -> first matching metafield key (namespace.key).
+const SPEC_FIELDS = [
+ ['Material', ['specs.material', 'custom.material']],
+ ['Fire Rating', ['specs.fire_rating', 'custom.fire_rating']],
+ ['Pattern Match', ['specs.match_type', 'custom.match_type']],
+ ['Style', ['specs.style']],
+ ['Motif', ['specs.pattern']],
+ ['Sold By', ['specs.unit_of_measure']],
+ ['Country of Origin', ['custom.origin', 'global.Country-of-Origin']],
+ ['Shipping Weight', ['specs.weight']],
+ ['Standard Panel', ['custom.mural_ref_dimensions']],
+];
+// NEVER expose these (upstream-vendor leak / internal): handled by allowlist above, but be explicit.
+const LEAK_KEYS = /manufacturer_sku|supplier_name|real_vendor|discount_trade|google_product_category|custom_product|migrated_at|title_tag|description_tag|mural_cost|hue_coverage|cov_/i;
+
+async function gql(query, variables, token) {
+ const r = await fetch(EP, { method: 'POST', headers: { 'X-Shopify-Access-Token': token, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) });
+ return r.json();
+}
+
+const PRODUCT_Q = `query($q:String!){ products(first:1, query:$q){ nodes{
+ title handle vendor productType descriptionHtml
+ images(first:30){ nodes{ url altText } }
+ metafields(first:80){ nodes{ namespace key value type } }
+ variants(first:5){ nodes{ sku price selectedOptions{ name value } } }
+} } }`;
+const LIST_Q = `query{ products(first:24, query:"vendor:\\"Rebel Walls\\" status:active"){ nodes{ handle title featuredImage{url} variants(first:1){nodes{sku}} } } }`;
+const COLLECTION_Q = `query($after:String){ products(first:50, query:"vendor:\\"Rebel Walls\\" status:active", after:$after){ pageInfo{hasNextPage endCursor} nodes{
+ handle title createdAt
+ images(first:5){nodes{url}}
+ variants(first:1){nodes{sku}}
+ style:metafield(namespace:"specs",key:"style"){value}
+ chex:metafield(namespace:"custom",key:"color_1_hex"){value}
+ cname:metafield(namespace:"custom",key:"color_1_name"){value}
+} } }`;
+
+async function collection(maxN) {
+ const out = []; let after = null;
+ for (let pg = 0; pg < 4 && out.length < maxN; pg++) {
+ const j = await gql(COLLECTION_Q, { after }, READ_TOKEN);
+ const c = j.data && j.data.products; if (!c) break;
+ for (const n of c.nodes) {
+ const imgs = (n.images.nodes || []).map(i => i.url);
+ const flat = imgs.find(u => /image1\.(jpg|jpeg|png|webp)/i.test(u)) || imgs[0];
+ out.push({
+ handle: n.handle, sku: (n.variants.nodes[0] && n.variants.nodes[0].sku || '').replace(/-(Sample|Complete Mural|Sold Per Square Meter)$/i, ''),
+ title: n.title.replace(/\s*\|\s*Rebel Walls.*$/i, ''), image: flat, createdAt: n.createdAt,
+ style: n.style && n.style.value || '', colorHex: n.chex && n.chex.value || '', colorName: n.cname && n.cname.value || '',
+ });
+ }
+ if (!c.pageInfo.hasNextPage) break; after = c.pageInfo.endCursor;
+ }
+ return out.slice(0, maxN);
+}
+
+// Graham & Brown bespoke murals (scraped from grahambrown.com → dw_unified.graham_brown_murals;
+// 10 loaded into Custom Creator as a showcase). Bespoke = quote-on-request (DW retail/cost not yet
+// confirmed, so NO priced checkout — links to the G&B product page).
+let GB_MURALS = [];
+try {
+ GB_MURALS = JSON.parse(fs.readFileSync(path.join(__dirname, 'gb-murals.json'), 'utf8')).map(m => ({
+ handle: 'gb:' + m.handle, id: m.id, sku: m.id + '-MASTER', title: m.name, vendor: 'Graham & Brown',
+ image: '/gb/' + m.id + '.jpg', url: 'https://www.grahambrown.com/us/product/' + m.handle + '/' + m.id + '-master/',
+ }));
+} catch (e) { console.log('gb-murals load:', e.message); }
+
+function cleanProduct(p) {
+ const mf = {}; p.metafields.nodes.forEach(m => { if (!LEAK_KEYS.test(m.namespace + '.' + m.key)) mf[m.namespace + '.' + m.key] = m.value; });
+ const get1 = keys => { for (const k of keys) if (mf[k] != null && String(mf[k]).trim()) return mf[k]; return null; };
+ const specs = [];
+ for (const [label, keys] of SPEC_FIELDS) { const v = get1(keys); if (v) specs.push({ label, value: String(v) }); }
+ // colors from color_1/2/3 (name,hex,percentage)
+ const colors = [];
+ for (let i = 1; i <= 5; i++) { const n = mf['custom.color_' + i + '_name'], h = mf['custom.color_' + i + '_hex'], pc = mf['custom.color_' + i + '_percentage']; if (h) colors.push({ name: n || '', hex: h, pct: pc ? Math.round(parseFloat(pc)) : null }); }
+ const baseSku = (p.variants.nodes[0] && p.variants.nodes[0].sku || '').replace(/-(Sample|Complete Mural|Sold Per Square Meter)$/i, '');
+ const sampleVar = p.variants.nodes.find(v => /Sample/i.test(v.selectedOptions[0]?.value || ''));
+ const imgs = p.images.nodes.map(i => ({ url: i.url, alt: i.altText || p.title }));
+ // Shopify's FEATURED image is usually a lifestyle/room shot; the FLAT printable design is the
+ // "_image1" file. Use the flat design for the wall preview + room composite (not a room photo).
+ const flat = imgs.find(i => /image1\.(jpg|jpeg|png|webp)/i.test(i.url)) || imgs[0];
+ return {
+ sku: baseSku, title: p.title.replace(/\s*\|\s*Rebel Walls.*$/i, ''),
+ pattern: (mf['custom.pattern_name'] || p.title).replace(/\s*\|\s*Rebel Walls.*$/i, ''),
+ vendor: p.vendor, descriptionHtml: p.descriptionHtml || '',
+ images: imgs, flatImage: flat ? flat.url : (imgs[0] && imgs[0].url),
+ specs, colors, rate: RATE_SQM, sample: SAMPLE,
+ samplePrice: sampleVar ? sampleVar.price : String(SAMPLE),
+ };
+}
+
+const CREATE = `mutation($i:DraftOrderInput!){ draftOrderCreate(input:$i){ draftOrder{ id name invoiceUrl totalPriceSet{shopMoney{amount}} } userErrors{field message} } }`;
+
+async function makeDraft(body) {
+ const mode = body.mode === 'sample' ? 'sample' : 'mural';
+ const sku = String(body.sku || '').slice(0, 40), pattern = String(body.pattern || 'Rebel Walls Mural').slice(0, 80);
+ let line;
+ if (mode === 'sample') {
+ line = { title: `${pattern} — Sample`, originalUnitPrice: SAMPLE.toFixed(2), quantity: 1, requiresShipping: true, taxable: true, customAttributes: [{ key: 'SKU', value: sku }, { key: 'Type', value: 'Sample' }] };
+ } else {
+ // The configurator sends dimensions in INCHES (feet/inches only — no cm).
+ // 'cm' tolerated for backward compatibility with any old client.
+ const f = body.unit === 'cm' ? 1 : CM_PER_IN;
+ const rawW = parseFloat(body.width), rawH = parseFloat(body.height);
+ if (!(rawW > 0) || !(rawH > 0)) return { error: 'Please enter a valid width and height.' };
+ const w_cm = clamp(rawW * f, MIN_CM, MAX_CM);
+ const h_cm = clamp(rawH * f, MIN_CM, MAX_CM);
+ const area = (w_cm / 100) * (h_cm / 100);
+ if (!(area > 0)) return { error: 'invalid dimensions' }; // defensive; unreachable post-clamp
+ const price = +(RATE_SQM * area).toFixed(2);
+ const wDim = ftIn(w_cm / CM_PER_IN), hDim = ftIn(h_cm / CM_PER_IN);
+ line = { title: `${pattern} — Custom Mural ${wDim} × ${hDim}`, originalUnitPrice: price.toFixed(2), quantity: 1, requiresShipping: true, taxable: true,
+ customAttributes: [{ key: 'SKU', value: sku }, { key: 'Width', value: wDim }, { key: 'Height', value: hDim }, { key: 'Area', value: `${(area * 10.7639).toFixed(1)} sq ft` }, { key: 'Rate', value: `$${RATE_SQM}/m²` }] };
+ }
+ const j = await gql(CREATE, { i: { lineItems: [line], tags: ['custom-mural', 'mural-pdp'] } }, DRAFT_TOKEN);
+ const ue = j.data && j.data.draftOrderCreate && j.data.draftOrderCreate.userErrors;
+ if (ue && ue.length) return { error: ue.map(e => e.message).join('; ') };
+ if (j.errors) return { error: (j.errors[0] && j.errors[0].message) || 'graphql error', scopeHint: /access denied|write_draft_orders/i.test(JSON.stringify(j.errors)) };
+ const d = j.data.draftOrderCreate.draftOrder;
+ return { invoiceUrl: d.invoiceUrl, name: d.name, total: d.totalPriceSet.shopMoney.amount };
+}
+
+function sendJSON(res, code, obj) { res.writeHead(code, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(obj)); }
+
+const server = http.createServer((req, res) => {
+ const u = new URL(req.url, 'http://x');
+ if (req.method === 'GET' && (u.pathname === '/' || u.pathname === '/index.html' || u.pathname === '/custom-creator')) {
+ res.writeHead(200, { 'Content-Type': 'text/html' }); return res.end(fs.readFileSync(path.join(__dirname, 'custom-creator.html')));
+ }
+ if (req.method === 'GET' && (u.pathname === '/configure' || u.pathname === '/configure.html')) {
+ res.writeHead(200, { 'Content-Type': 'text/html' }); return res.end(fs.readFileSync(path.join(__dirname, 'mural-pdp.html')));
+ }
+ if (req.method === 'GET' && u.pathname === '/api/collection') {
+ const gb = GB_MURALS.map(g => ({ handle: g.handle, sku: g.sku, title: g.title, image: g.image, createdAt: '2026-06-18T18:00:00Z', style: 'Bespoke Mural', colorHex: '', colorName: '', vendor: 'Designer Wallcoverings' }));
+ return collection(160).then(list => sendJSON(res, 200, [...gb, ...list])).catch(e => sendJSON(res, 200, gb));
+ }
+ if (req.method === 'GET' && /^\/(rooms|gb)\/[\w.-]+\.(jpg|png|webp)$/.test(u.pathname)) {
+ try {
+ const f = path.join(__dirname, u.pathname);
+ const ct = u.pathname.endsWith('.png') ? 'image/png' : u.pathname.endsWith('.webp') ? 'image/webp' : 'image/jpeg';
+ res.writeHead(200, { 'Content-Type': ct, 'Cache-Control': 'public, max-age=86400' }); return res.end(fs.readFileSync(f));
+ } catch (e) { res.writeHead(404); return res.end('not found'); }
+ }
+ if (req.method === 'GET' && u.pathname === '/api/products') {
+ return gql(LIST_Q, {}, READ_TOKEN).then(j => sendJSON(res, 200, (j.data.products.nodes || []).map(n => ({ handle: n.handle, title: n.title.replace(/\s*\|\s*Rebel Walls.*$/i, ''), image: n.featuredImage && n.featuredImage.url })))).catch(e => sendJSON(res, 500, { error: e.message }));
+ }
+ if (req.method === 'GET' && u.pathname === '/api/product') {
+ const handle = u.searchParams.get('handle'), sku = u.searchParams.get('sku');
+ if (handle && handle.indexOf('gb:') === 0) {
+ const g = GB_MURALS.find(x => x.handle === handle);
+ if (!g) return sendJSON(res, 404, { error: 'not found' });
+ return sendJSON(res, 200, {
+ sku: g.sku, title: g.title, pattern: g.title, vendor: 'Designer Wallcoverings',
+ descriptionHtml: 'A made-to-measure ' + g.title + ' bespoke mural — printed to your exact wall size on premium non-woven.',
+ images: [{ url: g.image, alt: g.title }], flatImage: g.image,
+ specs: [{ label: 'Type', value: 'Bespoke Mural' }, { label: 'Material', value: 'Non-woven, paste-the-wall' }, { label: 'Print', value: 'Made to measure' }],
+ colors: [], rate: 96.88, bespoke: true, sample: SAMPLE, samplePrice: String(SAMPLE),
+ });
+ }
+ const q = handle ? `handle:${handle}` : sku ? `sku:${sku}` : `vendor:"Rebel Walls" status:active`;
+ return gql(PRODUCT_Q, { q }, READ_TOKEN).then(j => {
+ const p = j.data && j.data.products.nodes[0];
+ if (!p) return sendJSON(res, 404, { error: 'not found' });
+ sendJSON(res, 200, cleanProduct(p));
+ }).catch(e => sendJSON(res, 500, { error: e.message }));
+ }
+ if (req.method === 'POST' && u.pathname === '/api/mural-cart') {
+ let buf = ''; req.on('data', c => buf += c); req.on('end', async () => {
+ try { const out = await makeDraft(JSON.parse(buf || '{}')); sendJSON(res, out.error ? (out.scopeHint ? 403 : 400) : 200, out); }
+ catch (e) { sendJSON(res, 500, { error: e.message }); }
+ });
+ return;
+ }
+ res.writeHead(404); res.end('not found');
+});
+server.listen(PORT, () => console.log(`mural-pdp → http://localhost:${PORT} (read:${READ_TOKEN ? READ_TOKEN.slice(0, 8) : 'MISSING'} draft:${DRAFT_TOKEN ? DRAFT_TOKEN.slice(0, 8) : 'MISSING'})`));
diff --git a/scripts/muralsource-onboard/out/hidden-skus.txt b/scripts/muralsource-onboard/out/hidden-skus.txt
new file mode 100644
index 0000000..4a978e2
--- /dev/null
+++ b/scripts/muralsource-onboard/out/hidden-skus.txt
@@ -0,0 +1,52 @@
+DWMS-320008
+DWMS-320011
+DWMS-320012
+DWMS-320013
+DWMS-320019
+DWMS-320020
+DWMS-320024
+DWMS-320026
+DWMS-320028
+DWMS-320027
+DWMS-320029
+DWMS-320033
+DWMS-320034
+DWMS-320035
+DWMS-320036
+DWMS-320046
+DWMS-320049
+DWMS-320050
+DWMS-320052
+DWMS-320056
+DWMS-320055
+DWMS-320059
+DWMS-320062
+DWMS-320061
+DWMS-320063
+DWMS-320068
+DWMS-320070
+DWMS-320069
+DWMS-320071
+DWMS-320072
+DWMS-320074
+DWMS-320077
+DWMS-320078
+DWMS-320081
+DWMS-320083
+DWMS-320086
+DWMS-320087
+DWMS-320088
+DWMS-320091
+DWMS-320096
+DWMS-320099
+DWMS-320100
+DWMS-320103
+DWMS-320108
+DWMS-320118
+DWMS-320120
+DWMS-320122
+DWMS-320126
+DWMS-320173
+DWMS-320174
+DWMS-320191
+DWMS-320215
\ No newline at end of file
diff --git a/scripts/nav-link-reachability/navmenus-admin-probe.mjs b/scripts/nav-link-reachability/navmenus-admin-probe.mjs
new file mode 100644
index 0000000..1a74b69
--- /dev/null
+++ b/scripts/nav-link-reachability/navmenus-admin-probe.mjs
@@ -0,0 +1,24 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+async function gql(q,v){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});return r.json();}
+// Admin GraphQL menus connection (online store navigation)
+const q=`{ menus(first:30){ edges{ node{ handle title
+ items{ title type url resourceId
+ items{ title type url resourceId
+ items{ title type url resourceId } } } } } } }`;
+const j=await gql(q,{});
+if(j.errors){ console.log("ERRORS:",JSON.stringify(j.errors)); process.exit(0); }
+const collHandles=new Set(); const linkTypes={};
+function walk(items){ for(const it of (items||[])){ linkTypes[it.type]=(linkTypes[it.type]||0)+1;
+ const m=(it.url||'').match(/\/collections\/([^\/?#]+)/); if(m) collHandles.add(m[1]);
+ if(it.type==='COLLECTION' && it.resourceId) collHandles.add('gid:'+it.resourceId);
+ walk(it.items); } }
+const menus=j.data.menus.edges.map(e=>e.node);
+console.log("MENUS:", menus.map(m=>`${m.handle}("${m.title}", menu)`).join(' | '));
+menus.forEach(m=>walk(m.items));
+console.log("\nlink types:", JSON.stringify(linkTypes));
+console.log("\ncollection handles linked in nav ("+collHandles.size+"):");
+console.log([...collHandles].sort().join('\n'));
+fs.writeFileSync('/tmp/nav-linked-collections.json',JSON.stringify({ts:'2026-06-18',menus:menus.map(m=>({handle:m.handle,title:m.title,itemsCount:m.itemsCount})),linkedHandles:[...collHandles]},null,2));
diff --git a/scripts/new-arrivals-daily/com.steve.dw-new-arrivals-500.plist b/scripts/new-arrivals-daily/com.steve.dw-new-arrivals-500.plist
new file mode 100644
index 0000000..fea948d
--- /dev/null
+++ b/scripts/new-arrivals-daily/com.steve.dw-new-arrivals-500.plist
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.dw-new-arrivals-500</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/opt/homebrew/bin/node</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/new-arrivals-daily/new-arrival-tag-sync.cjs</string>
+ </array>
+ <key>StartCalendarInterval</key><dict><key>Hour</key><integer>5</integer><key>Minute</key><integer>15</integer></dict>
+ <!-- Resilience (Steve 2026-06-24): the 05:15 calendar run is missed whenever the Mac is asleep at
+ that minute (keepawake can recover too late), which silently freezes /collections/new-arrivals
+ at the prior day's set. RunAtLoad fires a reconcile on (re)load/login, and StartInterval re-runs
+ every 2.5h so a slept 05:15 self-heals within hours. The reconciler is idempotent and trims only
+ products that age OUT of newest-TOP_N, so frequent runs alongside the hourly cadence's inline
+ 'New Arrival' adds keep the collection at exactly newest-500 without over-trimming. -->
+ <key>RunAtLoad</key><true/>
+ <key>StartInterval</key><integer>9000</integer>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/new-arrivals-daily/cron.out.log</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/new-arrivals-daily/cron.err.log</string>
+</dict></plist>
diff --git a/scripts/new-arrivals-daily/new-arrival-tag-sync.cjs b/scripts/new-arrivals-daily/new-arrival-tag-sync.cjs
new file mode 100644
index 0000000..9a01c3c
--- /dev/null
+++ b/scripts/new-arrivals-daily/new-arrival-tag-sync.cjs
@@ -0,0 +1,128 @@
+#!/usr/bin/env node
+/**
+ * "New Arrival" daily tag reconciler (Steve directive 2026-06-17).
+ *
+ * Drives the live "New Arrivals at Designer Wallcoverings" SMART collection
+ * (id 167327760435), whose rule is: tag EQUALS "New Arrival" AND type != Trim.
+ *
+ * Target set = the newest TOP_N (default 2000) active products by created date.
+ * Each run re-derives the target and reconciles:
+ * - ADDS "New Arrival" to newest-TOP_N products missing it
+ * - REMOVES "New Arrival" from any product (any status) that has it but has
+ * aged out of the newest TOP_N (keeps the collection at exactly newest-2000)
+ *
+ * Idempotent + safe to re-run. Read path = GraphQL search (no full-catalog scan).
+ * Cost: $0 (Shopify Admin API has no per-call charge).
+ * Sibling of scripts/trending-2026/trending-tag-sync.cjs (kept separate so the live
+ * 5am Trending job is never at risk).
+ *
+ * Usage: node new-arrival-tag-sync.cjs [--dry-run] [--top N] [--conc 6]
+ */
+const fs = require('fs');
+const path = require('path');
+
+const TAG = 'New Arrival';
+const HOST = 'designer-laboratory-sandbox.myshopify.com';
+const API = '2024-10';
+
+const args = process.argv.slice(2);
+const DRY = args.includes('--dry-run');
+const TOP_N = parseInt(args.find((_, i, a) => a[i - 1] === '--top') || '2000', 10) || 2000;
+const CONC = parseInt(args.find((_, i, a) => a[i - 1] === '--conc') || '6', 10) || 6;
+
+const envPath = path.join(process.env.HOME, 'Projects/secrets-manager/.env');
+const env = fs.readFileSync(envPath, 'utf8');
+const getEnv = (k) => { const m = env.match(new RegExp('^' + k + '=(.*)$', 'm')); return m ? m[1].trim() : ''; };
+const TOKEN = getEnv('SHOPIFY_ADMIN_TOKEN');
+if (!TOKEN) { console.error('Missing SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+
+const LOG = path.join(__dirname, 'sync.log');
+const stamp = () => new Date().toISOString().replace('T', ' ').slice(0, 19);
+function logline(msg) {
+ const line = `[${stamp()}] ${msg}`;
+ console.log(line);
+ try { fs.appendFileSync(LOG, line + '\n'); } catch (_) {}
+}
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+function gql(query, variables) {
+ return fetch(`https://${HOST}/admin/api/${API}/graphql.json`, {
+ method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }),
+ }).then(r => r.json());
+}
+
+async function fetchAll(searchQuery, { sortKey, reverse, cap } = {}) {
+ const out = [];
+ let cursor = null;
+ while (true) {
+ const after = cursor ? `, after:"${cursor}"` : '';
+ const sort = sortKey ? `, sortKey:${sortKey}, reverse:${!!reverse}` : '';
+ const q = `{ products(first:100, query:${JSON.stringify(searchQuery)}${sort}${after}){
+ pageInfo{ hasNextPage endCursor }
+ nodes{ id vendor createdAt } } }`;
+ let r;
+ try { r = await gql(q); } catch (e) { await sleep(2500); continue; }
+ if (r.errors) {
+ if (JSON.stringify(r.errors).includes('Throttled')) { await sleep(3500); continue; }
+ throw new Error(JSON.stringify(r.errors).slice(0, 200));
+ }
+ const pg = r.data.products;
+ for (const n of pg.nodes) { out.push(n); if (cap && out.length >= cap) return out; }
+ if (!pg.pageInfo.hasNextPage) break;
+ cursor = pg.pageInfo.endCursor;
+ await sleep(120);
+ }
+ return out;
+}
+
+async function mutateTag(kind, id) {
+ const r = await gql(
+ `mutation($id:ID!,$tags:[String!]!){ ${kind}(id:$id, tags:$tags){ userErrors{ message } } }`,
+ { id, tags: [TAG] });
+ const ue = r?.data?.[kind]?.userErrors;
+ if (ue && ue.length) throw new Error(ue[0].message);
+ if (r?.errors) throw new Error(JSON.stringify(r.errors).slice(0, 120));
+}
+
+async function runPool(ids, kind) {
+ const queue = [...ids];
+ let done = 0, failed = 0;
+ async function worker() {
+ while (queue.length) {
+ const id = queue.shift();
+ try { if (!DRY) await mutateTag(kind, id); done++; }
+ catch (e) {
+ failed++;
+ if (String(e.message).match(/Throttled|429/)) { queue.push(id); await sleep(3000); }
+ else if (failed <= 5) logline(` ${kind} ERR ${id}: ${e.message}`);
+ }
+ }
+ }
+ await Promise.all(Array.from({ length: CONC }, worker));
+ return { done, failed };
+}
+
+(async () => {
+ logline(`--- New Arrival sync START ${DRY ? '(DRY-RUN)' : ''} top=${TOP_N} conc=${CONC} ---`);
+ const newest = await fetchAll('status:active', { sortKey: 'CREATED_AT', reverse: true, cap: TOP_N });
+ const tagged = await fetchAll(`tag:${JSON.stringify(TAG)}`);
+ const target = new Set(newest.map(n => n.id));
+ const have = new Set(tagged.map(n => n.id));
+ const toAdd = [...target].filter(id => !have.has(id));
+ const toRemove = [...have].filter(id => !target.has(id));
+ const cutoff = newest.length ? newest[newest.length - 1].createdAt : 'n/a';
+ logline(`newest active=${newest.length} (oldest in set ${cutoff}) | target=${target.size} | currently tagged=${have.size}`);
+ logline(`plan: +${toAdd.length} add, -${toRemove.length} remove`);
+
+ if (toAdd.length) { const a = await runPool(toAdd, 'tagsAdd'); logline(`tagsAdd: ${a.done} done, ${a.failed} failed`); }
+ if (toRemove.length) { const r = await runPool(toRemove, 'tagsRemove'); logline(`tagsRemove: ${r.done} done, ${r.failed} failed`); }
+
+ if (!DRY) {
+ await sleep(1500);
+ const c = await gql(`{ productsCount(query:${JSON.stringify('tag:"' + TAG + '"')}){ count } }`);
+ logline(`final tagged count: ${c.data?.productsCount?.count}`);
+ }
+ logline(`--- New Arrival sync DONE ---`);
+})().catch(e => { logline('FATAL ' + e.message); process.exit(1); });
diff --git a/scripts/no-image-scan/no-image-scan.mjs b/scripts/no-image-scan/no-image-scan.mjs
new file mode 100644
index 0000000..bdf13cf
--- /dev/null
+++ b/scripts/no-image-scan/no-image-scan.mjs
@@ -0,0 +1,19 @@
+import fs from 'fs';
+const T=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const API='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(API,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2500);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2500);continue;}return j;}throw new Error('throttled');}
+let cur=null,total=0,withImg=0,noImg=0,pages=0; const byVendor={}, samples=[];
+const t0=Date.now();
+do{
+ const j=await gql(`query($c:String){products(first:100,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{handle vendor images(first:1){nodes{id}}}}}`,{c:cur});
+ const pg=j.data.products;
+ for(const n of pg.nodes){ total++; if(n.images.nodes.length===0){ noImg++; byVendor[n.vendor]=(byVendor[n.vendor]||0)+1; if(samples.length<12)samples.push(n.handle+' ['+n.vendor+']'); } else withImg++; }
+ pages++; if(pages%150===0)process.stderr.write(` ...${pages}p ${total} prod, noImg=${noImg}\n`);
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+const out={total, withImg, noImg, pct:total?+(100*noImg/total).toFixed(2):0, byVendor, samples, elapsed_s:((Date.now()-t0)/1000)|0};
+fs.writeFileSync(process.env.HOME+'/.claude/yolo-queue/no-image-scan-2026-06-16.json',JSON.stringify(out,null,2));
+console.log(`scanned ${total} ACTIVE in ${out.elapsed_s}s | NO IMAGE: ${noImg} (${out.pct}%) | with image: ${withImg}`);
+console.log('top vendors w/ no-image:'); Object.entries(byVendor).sort((a,b)=>b[1]-a[1]).slice(0,12).forEach(([k,v])=>console.log(' '+v+' '+k));
+console.log('samples:'); samples.forEach(s=>console.log(' '+s));
diff --git a/scripts/null-price-probe/null-price-livecheck.sh b/scripts/null-price-probe/null-price-livecheck.sh
new file mode 100755
index 0000000..7d283c8
--- /dev/null
+++ b/scripts/null-price-probe/null-price-livecheck.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+# null-price-livecheck (c37) — READ-ONLY. Tests whether "ACTIVE products with
+# null/0 price" is a real live-storefront problem or a Mac2-mirror artifact.
+# VERDICT: ARTIFACT — the mirror's price column is only ~30% populated on ACTIVE
+# (split-brain: not in the replicated set), and a live cross-check shows the
+# "null-price" rows actually display $4.25 (the known GMC sample issue), not $0.
+# So no DB-side price canary may trust shopify_products.price on Mac2. $0 local.
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+echo "## ACTIVE price-column distribution (Mac2 mirror)"
+$PSQL "$DB" -c "select count(*) active, count(*) filter (where price is null) price_null,
+ count(*) filter (where price=4.25) eq425, count(*) filter (where price>4.25) real_price
+ from shopify_products where status='ACTIVE';"
+echo "## live cross-check: 5 mirror-null-price ACTIVE products -> live storefront variant prices"
+$PSQL "$DB" -t -A -F'|' -c "select handle from shopify_products where status='ACTIVE' and price is null and handle>'' limit 5;" | while IFS= read -r h; do
+ [ -z "$h" ] && continue
+ curl -s --max-time 12 "https://www.designerwallcoverings.com/products/$h.json" \
+ | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{const p=JSON.parse(s).product;console.log(process.argv[1],"-> LIVE:",(p.variants||[]).map(x=>x.price).join(", "))}catch(e){console.log(process.argv[1],"-> (no json)")}})' "$h"
+done
diff --git a/scripts/orphan-collections/build-merge-map.mjs b/scripts/orphan-collections/build-merge-map.mjs
new file mode 100644
index 0000000..5edccd8
--- /dev/null
+++ b/scripts/orphan-collections/build-merge-map.mjs
@@ -0,0 +1,42 @@
+// build-merge-map (c42) — READ-ONLY. Turns c41's 43 empty live collections into a
+// ready merge+301 map: for each empty collection, find its populated TWIN (same
+// vendor/normalized stem) so Steve can 301 the dead handle to the live one and
+// recover its SEO/link equity. Handle list from the feed (handles are reliable;
+// only products_count is stale). $0.
+import fs from 'node:fs';
+const BASE='https://www.designerwallcoverings.com';
+const c41=JSON.parse(fs.readFileSync(`${process.env.HOME}/.claude/yolo-queue/orphan-collections-LIVE-2026-06-16.json`,'utf8'));
+const OUT=`${process.env.HOME}/.claude/yolo-queue/collection-merge-map-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/collection-merge-map-2026-06-16.md`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+// pull all handles
+const handles=[];
+for(let p=1;p<=20;p++){ const r=await fetch(`${BASE}/collections.json?limit=250&page=${p}`,{signal:AbortSignal.timeout(15000)}); const j=await r.json(); if(!(j.collections||[]).length)break; handles.push(...j.collections.map(c=>c.handle)); await sleep(150); }
+const emptySet=new Set(c41.empty_list.map(c=>c.handle));
+const nearSet=new Set(c41.near_list.map(c=>c.handle));
+const populated=handles.filter(h=>!emptySet.has(h)&&!nearSet.has(h));
+// normalize a handle to a comparable stem
+const STOP=['wallcoverings','wallcovering','wallpaper','fabrics','fabric','designs','design','collection','co','and-company','company','all-products','all','products'];
+function stem(h){ let s=h.toLowerCase(); for(const w of STOP) s=s.replace(new RegExp(`(^|-)${w}(-|$)`,'g'),'-'); s=s.replace(/-\d+$/,'').replace(/[^a-z0-9]/g,''); return s; }
+const popByStem=new Map(); for(const h of populated){ const k=stem(h); if(!popByStem.has(k)) popByStem.set(k,[]); popByStem.get(k).push(h); }
+const map=[];
+for(const c of c41.empty_list){
+ const k=stem(c.handle);
+ let twins = popByStem.get(k) || [];
+ if(!twins.length){ // fallback: populated handle whose stem contains/!is contained by this stem
+ twins = populated.filter(h=>{ const ph=stem(h); return ph && k && (ph.includes(k)||k.includes(ph)) && Math.min(ph.length,k.length)>=4; }).slice(0,3);
+ }
+ map.push({ empty:c.handle, feed_count_stale:c.feed_count, stem:k, twin: twins[0]||null, twin_candidates:twins.slice(0,3) });
+}
+const withTwin=map.filter(m=>m.twin), noTwin=map.filter(m=>!m.twin);
+fs.writeFileSync(OUT, JSON.stringify({generated_at:new Date().toISOString(), total_empty:map.length, with_twin:withTwin.length, no_twin:noTwin.length, map},null,2));
+let md=`# Collection merge+301 map (c42) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY, \$0.** For c41's ${map.length} empty live collections: proposed merge target (populated twin) so each dead handle can be 301'd. ${withTwin.length} have a twin, ${noTwin.length} don't (hide/repopulate instead). VERIFY each pair before merging — all edits GATED.\n\n`;
+md+=`## ${withTwin.length} EMPTY → TWIN (301 candidates)\n| empty (dead) | → merge into (populated twin) | other candidates |\n|---|---|---|\n`;
+for(const m of withTwin) md+=`| ${m.empty} | **${m.twin}** | ${m.twin_candidates.slice(1).join(', ')||'—'} |\n`;
+md+=`\n## ${noTwin.length} EMPTY, no twin found (hide or repopulate)\n`;
+for(const m of noTwin) md+=`- ${m.empty} (feed said ${m.feed_count_stale})\n`;
+fs.writeFileSync(MD,md);
+console.log(`[merge-map] empties=${map.length} with_twin=${withTwin.length} no_twin=${noTwin.length}`);
+console.log('sample pairs:'); for(const m of withTwin.slice(0,10)) console.log(` ${m.empty} -> ${m.twin}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/orphan-collections/orphan-collection-livecount.mjs b/scripts/orphan-collections/orphan-collection-livecount.mjs
new file mode 100644
index 0000000..7947b6b
--- /dev/null
+++ b/scripts/orphan-collections/orphan-collection-livecount.mjs
@@ -0,0 +1,50 @@
+// orphan-collection-livecount (c41) — READ-ONLY. c40 proved collections.json
+// products_count is STALE (Nicolette Mayer showed 214, live=0), so c39's empty
+// list undercounted. This re-scans every live collection using the LIVE
+// /collections/<handle>/products.json count (limit=4 → classify 0 / 1-3 / 4+),
+// with retry/backoff to avoid the c38 UNKNOWN problem. $0.
+import fs from 'node:fs';
+const BASE='https://www.designerwallcoverings.com';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/orphan-collections-LIVE-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/orphan-collections-LIVE-2026-06-16.md`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function getj(url){
+ for(let a=0;a<5;a++){
+ try{ const r=await fetch(url,{signal:AbortSignal.timeout(15000)});
+ if(r.status===200) return await r.json();
+ if(r.status===404) return {__404:true};
+ if(r.status===429){await sleep(1500*(a+1));continue;} }
+ catch(e){ await sleep(1200*(a+1)); }
+ }
+ return null;
+}
+// 1) collection handles from feed
+const cols=[];
+for(let p=1;p<=20;p++){ const j=await getj(`${BASE}/collections.json?limit=250&page=${p}`); if(!j||!(j.collections||[]).length)break; cols.push(...j.collections.map(c=>({handle:c.handle,title:c.title,feed_count:c.products_count}))); await sleep(150); }
+// 2) live count each
+const empty=[], near=[], unknown=[]; let ok=0;
+for(const c of cols){
+ const j=await getj(`${BASE}/collections/${encodeURIComponent(c.handle)}/products.json?limit=4`);
+ if(j===null){ unknown.push(c.handle); await sleep(150); continue; }
+ const n = j.__404 ? 0 : (j.products||[]).length;
+ const is404 = !!j.__404;
+ if(n===0) empty.push({...c, live:0, http404:is404});
+ else if(n<4) near.push({...c, live:n});
+ else ok++;
+ await sleep(150);
+}
+const report={generated_at:new Date().toISOString(), scanned:cols.length, empty:empty.length, near_lt4:near.length, ok_4plus:ok, unknown:unknown.length,
+ empty_list:empty, near_list:near, unknown_handles:unknown};
+fs.writeFileSync(OUT,JSON.stringify(report,null,2));
+let md=`# Orphan-collection scan — LIVE counts (c41) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY (live per-collection /products.json, retry/backoff), \$0.** Corrects c39 (which used the STALE feed products_count, c40). ${cols.length} collections scanned.\n\n`;
+md+=`Empty (0 live) **${empty.length}** · near-empty (<4) **${near.length}** · ok (4+) **${ok}** · unknown **${unknown.length}**\n\n`;
+md+=`## EMPTY (0 live products) — ${empty.length}\n| handle | feed_count(stale) | http404 |\n|---|--:|:--:|\n`;
+for(const c of empty) md+=`| ${c.handle} | ${c.feed_count} | ${c.http404?'Y':''} |\n`;
+md+=`\n## NEAR-EMPTY (<4) — ${near.length}\n| handle | live |\n|---|--:|\n`;
+for(const c of near.slice(0,60)) md+=`| ${c.handle} | ${c.live} |\n`;
+fs.writeFileSync(MD,md);
+console.log(`[orphan-live] scanned=${cols.length} EMPTY=${empty.length} near(<4)=${near.length} ok=${ok} unknown=${unknown.length}`);
+console.log(' c39 said 4 empty (feed-count); live empties:');
+for(const c of empty) console.log(` ${c.handle} (feed said ${c.feed_count})`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/orphan-collections/orphan-collection-scan.mjs b/scripts/orphan-collections/orphan-collection-scan.mjs
new file mode 100644
index 0000000..db8beb4
--- /dev/null
+++ b/scripts/orphan-collections/orphan-collection-scan.mjs
@@ -0,0 +1,38 @@
+// orphan-collection-scan (c39) — READ-ONLY. Pulls every live Shopify collection
+// from /collections.json (public feed, includes products_count) and flags
+// EMPTY (0 products) + NEAR-EMPTY (<MIN) ones = dead storefront nav links +
+// wasted SEO/internal-link equity + a shopper clicking into nothing. Live read,
+// so it sidesteps the distrusted mirror (c37/c23). $0.
+import fs from 'node:fs';
+const MIN = parseInt(process.argv[2]||'3',10);
+const BASE='https://www.designerwallcoverings.com';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/orphan-collections-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/orphan-collections-2026-06-16.md`;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function page(p){
+ for(let a=0;a<4;a++){
+ try{ const r=await fetch(`${BASE}/collections.json?limit=250&page=${p}`,{signal:AbortSignal.timeout(15000)});
+ if(r.status===200) return (await r.json()).collections||[];
+ if(r.status===429){await sleep(2000*(a+1));continue;} return null; }
+ catch(e){ await sleep(1500*(a+1)); }
+ }
+ return null;
+}
+const all=[];
+for(let p=1;p<=20;p++){ const c=await page(p); if(c===null){console.error('page',p,'failed');break;} if(!c.length)break; all.push(...c); await sleep(200); }
+const empty=all.filter(c=>(c.products_count??0)===0);
+const near=all.filter(c=>(c.products_count??0)>0 && (c.products_count??0)<MIN);
+const report={generated_at:new Date().toISOString(), total_collections:all.length, empty_count:empty.length, near_empty_count:near.length, min:MIN,
+ empty:empty.map(c=>({handle:c.handle,title:c.title,published_at:c.published_at})),
+ near_empty:near.map(c=>({handle:c.handle,title:c.title,products_count:c.products_count}))};
+fs.writeFileSync(OUT,JSON.stringify(report,null,2));
+let md=`# Orphan-collection scan (live) — ${new Date().toISOString().slice(0,16)}\n\n`;
+md+=`**READ-ONLY (live /collections.json), \$0.** ${all.length} live collections scanned. Empty = 0 products (dead nav + wasted SEO). Near-empty = <${MIN}.\n\n`;
+md+=`## ${empty.length} EMPTY collections (0 live products)\n`;
+if(empty.length){ md+=`| handle | title |\n|---|---|\n`; for(const c of empty.slice(0,80)) md+=`| ${c.handle} | ${(c.title||'').slice(0,50)} |\n`; if(empty.length>80) md+=`| …+${empty.length-80} more | |\n`; } else md+=`None — every collection has at least 1 product. 🟢\n`;
+md+=`\n## ${near.length} NEAR-EMPTY (<${MIN} products)\n`;
+if(near.length){ md+=`| handle | products |\n|---|--:|\n`; for(const c of near.slice(0,40)) md+=`| ${c.handle} | ${c.products_count} |\n`; }
+fs.writeFileSync(MD,md);
+console.log(`[orphan-collections] total=${all.length} empty=${empty.length} near_empty(<${MIN})=${near.length}`);
+if(empty.length) console.log(' sample empties: '+empty.slice(0,8).map(c=>c.handle).join(', '));
+console.log(`Report: ${MD}`);
diff --git a/scripts/orphan-products/orphan-products-scan.mjs b/scripts/orphan-products/orphan-products-scan.mjs
new file mode 100644
index 0000000..c898e3a
--- /dev/null
+++ b/scripts/orphan-products/orphan-products-scan.mjs
@@ -0,0 +1,19 @@
+import fs from 'fs';
+const T=(fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2000);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2000);continue;}return j;}throw new Error('throttled');}
+// sweep ACTIVE products, count collection membership (authoritative collections connection)
+let cur=null,total=0,orphan=0,pages=0; const byVendor={}, samples=[]; const t0=Date.now();
+do{
+ const j=await gql(`query($c:String){products(first:100,after:$c,query:"status:active"){pageInfo{hasNextPage endCursor} nodes{handle vendor collections(first:1){nodes{id}}}}}`,{c:cur});
+ const pg=j.data.products;
+ for(const n of pg.nodes){ total++; if(n.collections.nodes.length===0){ orphan++; byVendor[n.vendor]=(byVendor[n.vendor]||0)+1; if(samples.length<12)samples.push(n.handle+' ['+n.vendor+']'); } }
+ pages++; if(pages%100===0)process.stderr.write(` ...${pages}p ${total} prod, orphan=${orphan}\n`);
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+console.log(`scanned ${total} ACTIVE in ${((Date.now()-t0)/1000).toFixed(0)}s | ORPHAN (0 collections): ${orphan} (${(100*orphan/total).toFixed(1)}%)`);
+const top=Object.entries(byVendor).sort((a,b)=>b[1]-a[1]).slice(0,12);
+console.log('top vendors:'); top.forEach(([k,v])=>console.log(` ${v} ${k}`));
+console.log('samples:'); samples.forEach(s=>console.log(' '+s));
+fs.writeFileSync('/tmp/orphan-prod.json',JSON.stringify({total,orphan,byVendor,samples}));
diff --git a/scripts/osborne-little-basis/ol-basis-decode.mjs b/scripts/osborne-little-basis/ol-basis-decode.mjs
new file mode 100644
index 0000000..13403bf
--- /dev/null
+++ b/scripts/osborne-little-basis/ol-basis-decode.mjs
@@ -0,0 +1,33 @@
+// ol-basis-decode — READ-ONLY, $0. Cycle 81. Decodes Osborne & Little's pricing basis +
+// lifecycle for the c68 abnormal-sample set (single-variant "Sample" at non-$0/non-$4.25).
+// Lifecycle-first (c74): status counts. Basis by elimination (c72/c73): barcode? in
+// kravet_authoritative_pricing? in product_map? costed? Classifies current-mislabel vs
+// disco-straggler. Read-only Admin GraphQL + psql. EXCLUDES Phillip Jeffries (n/a).
+import fs from 'fs'; import { execSync } from 'child_process';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql', DB='postgresql:///dw_unified?host=/tmp';
+const VENDOR=process.argv[2]||'Osborne & Little';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+const Q=`query($cursor:String,$q:String!){ products(first:100, after:$cursor, query:$q){ pageInfo{hasNextPage endCursor} edges{node{handle variants(first:5){edges{node{title price sku barcode createdAt}}}}} } }`;
+let cursor=null,pages=0,total=0; const abn=[];
+while(pages<15){ const j=await gql(Q,{cursor,q:`status:active vendor:'${VENDOR}'`}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++; const vs=(n.variants?.edges||[]).map(x=>x.node); if(vs.length!==1)continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isSample(v.title)&&!isNaN(p)&&p!==0&&p!==4.25) abn.push({h:n.handle,price:p,sku:v.sku||'',bc:v.barcode||'',vc:(v.createdAt||'').slice(0,7)}); }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(180); }
+const prices=abn.map(a=>a.price).sort((x,y)=>x-y); const distinct=[...new Set(prices)];
+const years={}; abn.forEach(a=>years[a.vc.slice(0,4)]=(years[a.vc.slice(0,4)]||0)+1);
+const q=s=>"'"+s.replace(/'/g,"''")+"'";
+const inKap=execSync(`${PSQL} "${DB}" -tAc "SELECT count(*) FROM kravet_authoritative_pricing WHERE mfr_sku ILIKE '%${(abn[0]?.sku||'XX').slice(0,3)}%'"`,{encoding:'utf8'}).trim();
+const inPm=execSync(`${PSQL} "${DB}" -tAc "SELECT count(*) FROM product_map WHERE vendor ILIKE ${q('%'+VENDOR.split(' ')[0]+'%')}"`,{encoding:'utf8'}).trim();
+const costed=execSync(`${PSQL} "${DB}" -tAc "SELECT count(*) FILTER (WHERE cost_price>0)||'/'||count(*) FROM shopify_products WHERE vendor ILIKE ${q('%'+VENDOR.split(' ')[0]+'%')}"`,{encoding:'utf8'}).trim();
+console.log(`=== ol-basis-decode: ${VENDOR} ===`);
+console.log(`abnormal-sample (active): ${abn.length} | price $${prices[0]}..$${prices[prices.length-1]} | ${distinct.length} distinct (${distinct.length<=2?'FLAT placeholder=disco signal':'VARIED per-pattern=current'})`);
+console.log(`createdAt year: ${JSON.stringify(years)} | with barcode: ${abn.filter(a=>a.bc).length}/${abn.length}`);
+console.log(`basis-elimination: in kravet_authoritative_pricing(prefix)=${inKap} | in product_map=${inPm} | costed=${costed}`);
+console.log(`→ ${inPm==='0'&&inKap==='0' ? 'NOT Kravet-MAP (RRP/other basis)' : 'has Kravet-MAP rows'}; ${distinct.length>2?'CURRENT-mislabel (varied prices)':'likely disco/placeholder'}`);
+fs.writeFileSync('/tmp/ol-basis-decode.json',JSON.stringify({vendor:VENDOR,abnormal:abn.length,priceMin:prices[0],priceMax:prices[prices.length-1],distinct:distinct.length,years,withBarcode:abn.filter(a=>a.bc).length,inKap,inPm,costed},null,2));
+console.log('wrote /tmp/ol-basis-decode.json');
diff --git a/scripts/osborne-onboard/batch-canary.mjs b/scripts/osborne-onboard/batch-canary.mjs
new file mode 100644
index 0000000..0852a8f
--- /dev/null
+++ b/scripts/osborne-onboard/batch-canary.mjs
@@ -0,0 +1,210 @@
+#!/usr/bin/env node
+/**
+ * Osborne onboard batch canary (DTD verdict B safeguard — watch the trickle go-live).
+ *
+ * Inspects the Osborne products this onboard has created (out/created.jsonl) against their
+ * LIVE Shopify state and verifies each is correctly built + published. Emits PASS/WARN/FAIL.
+ * Built to watch the FIRST batch (and every subsequent day) of the auto-publish trickle.
+ *
+ * Per product checks (the ones already live / ACTIVE):
+ * - status ACTIVE (gone live, not stuck draft)
+ * - exactly 2 variants: Roll (price>0) + Sample (price 4.25)
+ * - has a product image
+ * - key metafields present: custom.manufacturer_sku, custom.color_1_name, custom.ai_enriched_at
+ * - tag 'Trending Wallcovering Collection 2026' present
+ * - published to >= 12 of the 13 sales channels
+ * - both variants inventory tracked, on_hand 2026 at Ventura Blvd
+ *
+ * FAIL = a live product is materially broken (no image / bad price / missing variant / not on channels).
+ * WARN = cosmetic gaps (a metafield missing, channel count 12 not 13, tag missing) or drafts not yet live.
+ * Reports to out/canary-latest.json + out/canary.log, and posts a CNCP card on WARN/FAIL.
+ *
+ * node batch-canary.mjs # check all created; today's batch highlighted
+ * node batch-canary.mjs --today # restrict deep-check to products created in last 26h
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const TODAY_ONLY = process.argv.includes('--today');
+const CNCP = process.env.CNCP_URL || 'http://127.0.0.1:3333';
+const TRENDING_TAG = 'Trending Wallcovering Collection 2026';
+const LOC = '15442 Ventura Blvd';
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(30000) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors).slice(0, 160)); await sleep(800 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 200) await sleep(600);
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(800 * (a + 1)); }
+ }
+}
+
+const Q = `query($id:ID!){ product(id:$id){
+ status title totalInventory tags
+ resourcePublicationsCount{ count }
+ featuredImage{ id }
+ variants(first:5){ edges{ node{ sku price selectedOptions{ name value }
+ inventoryItem{ tracked inventoryLevels(first:5){ edges{ node{ location{ name } quantities(names:["on_hand"]){ quantity } } } } } } } }
+ metafields(first:30){ edges{ node{ namespace key } } }
+} }`;
+
+function loadJsonl(file) {
+ const p = path.join(OUT, file);
+ if (!fs.existsSync(p)) return [];
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean);
+}
+
+function checkProduct(p, expectLimited) {
+ const issues = []; // FAIL-level
+ const warns = []; // WARN-level
+ if (!p) return { fail: ['product not found on Shopify'], warns: [] };
+ const live = p.status === 'ACTIVE';
+ const vs = p.variants.edges.map(e => e.node);
+ const roll = vs.find(v => v.selectedOptions.some(o => o.value === 'Roll'));
+ const sample = vs.find(v => v.selectedOptions.some(o => o.value === 'Sample'));
+ // structural (FAIL if live and broken)
+ if (!roll) issues.push('no Roll variant');
+ if (!sample) issues.push('no Sample variant');
+ if (roll && !(parseFloat(roll.price) > 0)) issues.push(`Roll price ${roll.price}`);
+ if (sample && parseFloat(sample.price) !== 4.25) issues.push(`Sample price ${sample.price} (≠4.25)`);
+ if (!p.featuredImage) issues.push('no image');
+ const chans = p.resourcePublicationsCount?.count || 0;
+ if (live && chans < 12) issues.push(`only ${chans} channels`);
+ // soft (WARN)
+ const mfKeys = new Set(p.metafields.edges.map(e => e.node.namespace + '.' + e.node.key));
+ for (const k of ['custom.manufacturer_sku', 'custom.color_1_name', 'custom.ai_enriched_at'])
+ if (!mfKeys.has(k)) warns.push('missing mf ' + k);
+ if (!p.tags.includes(TRENDING_TAG)) warns.push('missing Trending tag');
+ if (!live) warns.push(`status=${p.status} (not yet live)`);
+ // inventory 2026 both variants
+ if (live) for (const v of vs) {
+ const lvl = v.inventoryItem?.inventoryLevels?.edges?.find(e => (e.node.location?.name || '').includes('Ventura'));
+ const oh = lvl?.node?.quantities?.[0]?.quantity;
+ if (!v.inventoryItem?.tracked) warns.push(`${v.sku} not tracked`);
+ else if (oh !== 2026) warns.push(`${v.sku} on_hand ${oh ?? 'n/a'} (≠2026)`);
+ }
+ return { fail: issues, warns };
+}
+
+async function postCNCP(title, summary) {
+ try {
+ await fetch(`${CNCP}/api/wins`, { method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ project: 'osborne-onboard', title, summary }), signal: AbortSignal.timeout(5000) });
+ } catch (_) { /* CNCP optional */ }
+}
+
+function readEnv(key) {
+ if (process.env[key]) return process.env[key];
+ try {
+ const f = fs.readFileSync(path.join(process.env.HOME, 'Projects/secrets-manager/.env'), 'utf8');
+ const m = f.match(new RegExp('^' + key + '=(.*)$', 'm'));
+ return m ? m[1].trim() : '';
+ } catch { return ''; }
+}
+
+// Email Steve a plain-English digest via George (same path the fleet canaries use).
+async function emailGeorge(subject, html) {
+ const AUTH = readEnv('GEORGE_AUTH');
+ if (!AUTH) return;
+ const HOST = process.env.GEORGE_HOST || '100.107.67.67';
+ const PORT = process.env.GEORGE_PORT || '9850';
+ const TO = process.env.OSBORNE_CANARY_TO || 'steve@designerwallcoverings.com';
+ try {
+ await fetch(`http://${HOST}:${PORT}/api/send`, { method: 'POST',
+ headers: { 'Authorization': AUTH, 'Content-Type': 'application/json; charset=utf-8' },
+ body: JSON.stringify({ to: TO, subject, body: html }), signal: AbortSignal.timeout(15000) });
+ } catch (_) { /* email optional */ }
+}
+
+(async () => {
+ const created = loadJsonl('created.jsonl');
+ const ready = loadJsonl('build-ready.jsonl').length;
+ if (!created.length) {
+ // Did the resume job already run today? If it ran but produced 0, surface WHY — read the
+ // actual failure from resume.log rather than blind-guessing "cap starved" (that wrong guess
+ // polluted CNCP, our source of truth, on 2026-06-18: the real cause was node-not-found).
+ const today = new Date().toISOString().slice(0, 10);
+ let log = '';
+ try { log = fs.readFileSync(path.join(OUT, 'resume.log'), 'utf8'); } catch (_) {}
+ const ranToday = log.includes(today);
+ // Classify the real cause from the most recent run's lines.
+ const lastRun = log.split('=== ').filter(b => b.includes(today)).pop() || '';
+ let cause, hint;
+ if (/node: not found|command not found|exec:.*not found|exit 127/i.test(lastRun)) {
+ cause = 'ENV: node not found in launchd PATH (run.sh)';
+ hint = 'run.sh must prepend Homebrew/usr-local to PATH + resolve absolute $NODE.';
+ } else if (/no shopify token|SHOPIFY_ADMIN_TOKEN/i.test(lastRun)) {
+ cause = 'CRED: Shopify admin token missing from secrets-manager/.env';
+ hint = 'Check $HOME/Projects/secrets-manager/.env SHOPIFY_ADMIN_TOKEN.';
+ } else if (/exhausted for today|cap hit|Daily variant|exceed|too many|maximum/i.test(lastRun)) {
+ cause = 'CAP: shared variant budget exhausted before the 00:05 run';
+ hint = 'Bump DW_OSBORNE_CAP or check the roll/sample/upload jobs.';
+ } else if (ranToday) {
+ cause = 'UNKNOWN: resume ran, 0 created, no recognized error';
+ hint = 'Inspect out/resume.log directly.';
+ }
+ const msg = ranToday
+ ? `Osborne canary WARN: resume ran today but 0 products created (ready ${ready}). Cause → ${cause}. ${hint}`
+ : `Osborne canary: 0 created yet (ready ${ready}). First batch fires at the 00:05 resume. Nothing to check.`;
+ console.log(msg); fs.appendFileSync(path.join(OUT, 'canary.log'), `[${new Date().toISOString()}] ${msg}\n`);
+ if (ranToday) { await postCNCP(`⚠️ Osborne onboard — 0 created (${cause.split(':')[0]})`, msg);
+ await emailGeorge('⚠️ Osborne onboard — first batch did NOT start (0 created)',
+ `<div style="font-family:-apple-system,Helvetica,sans-serif;color:#222"><h3 style="color:#b23b3b">Osborne — 0 created today</h3><p>${msg}</p><p style="font-size:13px;color:#888">${hint}</p></div>`); }
+ return;
+ }
+ const cutoff = Date.now() - 26 * 3600 * 1000;
+ const todayBatch = created.filter(c => c.created_at && Date.parse(c.created_at) >= cutoff);
+ const scope = TODAY_ONLY ? todayBatch : created;
+
+ let pass = 0, failN = 0, warnN = 0;
+ const failures = [], warnings = [];
+ for (const c of scope) {
+ let d; try { d = await gql(Q, { id: `gid://shopify/Product/${c.product_id}` }); } catch (e) { failures.push(`${c.sku}: query err ${String(e).slice(0,60)}`); failN++; continue; }
+ const r = checkProduct(d?.product, c.limited_stock);
+ if (r.fail.length) { failN++; failures.push(`${c.sku}: ${r.fail.join('; ')}`); }
+ else if (r.warns.length) { warnN++; warnings.push(`${c.sku}: ${r.warns.join('; ')}`); }
+ else pass++;
+ await sleep(120);
+ }
+ const liveCount = created.length; // total created so far
+ const verdict = failN > 0 ? 'FAIL' : warnN > 0 ? 'WARN' : 'PASS';
+ const summary = `Osborne canary ${verdict}: checked ${scope.length} (${TODAY_ONLY ? 'today' : 'all'}) of ${liveCount} created / ${ready} ready · clean ${pass}, warn ${warnN}, fail ${failN} · today's batch ${todayBatch.length}`;
+ const report = { ts: new Date().toISOString(), verdict, scope: scope.length, created: liveCount, ready,
+ todayBatch: todayBatch.length, pass, warn: warnN, fail: failN,
+ failures: failures.slice(0, 40), warnings: warnings.slice(0, 40) };
+ fs.writeFileSync(path.join(OUT, 'canary-latest.json'), JSON.stringify(report, null, 2));
+ fs.appendFileSync(path.join(OUT, 'canary.log'), `[${report.ts}] ${summary}\n`);
+ console.log(summary);
+ if (failures.length) console.log('FAIL:\n ' + failures.slice(0, 20).join('\n '));
+ if (warnings.length) console.log('WARN:\n ' + warnings.slice(0, 20).join('\n '));
+ // Surface to CNCP whenever there's a problem OR a fresh batch went live today (daily status the
+ // first batch especially). Quiet only on a no-new-products PASS day.
+ if (verdict !== 'PASS' || todayBatch.length > 0) {
+ const icon = verdict === 'PASS' ? '✅' : verdict === 'WARN' ? '⚠️' : '⛔';
+ const title = `${icon} Osborne onboard ${verdict} — ${todayBatch.length} live today (${liveCount}/${ready} total)`;
+ await postCNCP(title, summary + (failures.length ? ' | FAIL: ' + failures.slice(0, 5).join(' · ') : '') + (warnings.length ? ' | WARN: ' + warnings.slice(0, 3).join(' · ') : ''));
+ const color = verdict === 'PASS' ? '#1a7f37' : verdict === 'WARN' ? '#9a6700' : '#b23b3b';
+ const list = a => a.length ? `<ul style="font-size:13px;color:#555">${a.slice(0, 15).map(x => `<li>${x}</li>`).join('')}</ul>` : '';
+ const html = `<div style="font-family:-apple-system,Helvetica,sans-serif;color:#222">
+ <h3 style="color:${color}">${icon} Osborne onboard — ${verdict}</h3>
+ <p style="font-size:14px">${summary}</p>
+ ${failures.length ? `<p style="color:#b23b3b;margin-bottom:2px"><b>FAIL (${failN})</b></p>${list(failures)}` : ''}
+ ${warnings.length ? `<p style="color:#9a6700;margin-bottom:2px"><b>WARN (${warnN})</b></p>${list(warnings)}` : ''}
+ <p style="font-size:12px;color:#888">Full report: scripts/osborne-onboard/out/canary-latest.json · pause: launchctl bootout gui/$(id -u)/com.steve.osborne-onboard-resume</p></div>`;
+ await emailGeorge(`${icon} Osborne onboard ${verdict} — ${todayBatch.length} live today (${liveCount}/${ready})`, html);
+ }
+})().catch(e => { console.error('canary fatal', e); process.exit(1); });
diff --git a/scripts/osborne-onboard/build-manifest.py b/scripts/osborne-onboard/build-manifest.py
new file mode 100644
index 0000000..05d5975
--- /dev/null
+++ b/scripts/osborne-onboard/build-manifest.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python3
+"""
+Osborne & Little Wave-1 manifest builder.
+
+Pulls, for each of the 765 genuinely-new codes, the canonical product detail
+from the Osborne trade API and assembles ONE reviewable build manifest:
+
+ mfr_sku, title, pattern, color, collection, cost (trade net USD),
+ retail (cost / 0.65 / 0.85), image_url, stock, limited_stock
+
+No prod-DB access; vendor API only. Idempotent: re-running overwrites the
+manifest cleanly. Creds are read from env, falling back to the prior session's
+/tmp enrich script (never echoed, never re-persisted).
+
+Title rule (Osborne skill): "Pattern Color | Osborne & Little"
+ - real color from vendor desc (never generic / AI)
+ - strip leading "(Limited Stock)" and the collection-name prefix
+ - Title Case, never the word "Wallpaper" (always "Wallcovering")
+"""
+import json, os, re, sys, time, urllib.request, urllib.parse, pathlib
+
+HERE = pathlib.Path(__file__).resolve().parent
+OUT = HERE / "out"
+OUT.mkdir(exist_ok=True)
+
+API = os.environ.get("OSBORNE_API", "https://api.osborneandlittle.com/v1/")
+ORIGIN = os.environ.get("OSBORNE_ORIGIN", "https://tradenew.osborneandlittle.com")
+
+def _creds():
+ u = os.environ.get("OSBORNE_USERNAME")
+ p = os.environ.get("OSBORNE_PASSWORD")
+ if u and p:
+ return u, p
+ # fall back to prior session's enrich script (already on disk; not re-persisted)
+ src = pathlib.Path("/tmp/osb_enrich_w1.py")
+ if src.exists():
+ t = src.read_text()
+ mu = re.search(r'"username":"([^"]+)"', t)
+ mp = re.search(r'"password":"([^"]+)"', t)
+ if mu and mp:
+ return mu.group(1), mp.group(1)
+ sys.exit("No Osborne creds in env or /tmp/osb_enrich_w1.py")
+
+def login():
+ u, p = _creds()
+ body = json.dumps({"username": u, "password": p, "rememberme": False,
+ "countrycode": "US", "countryname": "United States"}).encode()
+ r = urllib.request.Request(API + "User/login", data=body,
+ headers={"Content-Type": "application/json", "Origin": ORIGIN}, method="POST")
+ return json.load(urllib.request.urlopen(r, timeout=25))["token"]
+
+def get(code, tok):
+ req = urllib.request.Request(
+ API + "product/getbycode/" + urllib.parse.quote(code),
+ headers={"Authorization": "Token " + tok, "Origin": ORIGIN, "Accept": "application/json"})
+ return json.load(urllib.request.urlopen(req, timeout=25))
+
+def title_core(desc, coll):
+ """desc minus leading (Limited Stock) and collection prefix -> 'Pattern Color'."""
+ if not desc:
+ return None
+ s = re.sub(r'^\([^)]*\)\s*', '', desc).strip() # drop (Limited Stock)
+ if coll and s.lower().startswith(coll.lower()):
+ s = s[len(coll):].strip()
+ s = s.rstrip(' .') # stray trailing period
+ s = re.sub(r'\bwallpaper\b', 'Wallcovering', s, flags=re.I)
+ return s
+
+def titlecase(s):
+ small = {"of","and","the","in","on","a","an"}
+ out = []
+ for i, w in enumerate(s.split()):
+ out.append(w if (w.isupper() and len(w) <= 4) else
+ (w.capitalize() if (i == 0 or w.lower() not in small) else w.lower()))
+ return " ".join(out)
+
+def main():
+ codes = [c.strip() for c in (HERE / "data/wave1-codes.txt").read_text().splitlines() if c.strip()]
+ print(f"codes: {len(codes)}", flush=True)
+ tok = login()
+ rows, fails = [], []
+ for i, code in enumerate(codes):
+ try:
+ d = get(code, tok)
+ m = d.get("material") or {}
+ pd = d.get("productData") or {}
+ desc = (m.get("description") or "").strip()
+ coll = ((m.get("collection") or {}).get("name") or "").strip()
+ limited = desc.lower().startswith("(limited stock)") or "limited stock" in desc.lower()
+ cost = pd.get("unitPrice")
+ img = d.get("image") or ""
+ stock = pd.get("totalStock")
+ core = title_core(desc, coll)
+ core_tc = titlecase(core) if core else None
+ retail = round(cost / 0.65 / 0.85, 2) if isinstance(cost, (int, float)) and cost else None
+ rows.append({
+ "mfr_sku": code,
+ "title": f"{core_tc} | Osborne & Little" if core_tc else None,
+ "title_core": core_tc,
+ "collection": coll,
+ "cost": cost,
+ "retail": retail,
+ "image_url": img,
+ "stock": stock,
+ "limited_stock": limited,
+ "raw_desc": desc,
+ })
+ except Exception as e:
+ fails.append({"mfr_sku": code, "error": str(e)})
+ if i % 50 == 49:
+ time.sleep(0.2)
+ print(f" {i+1}/{len(codes)}", flush=True)
+
+ with open(OUT / "manifest.jsonl", "w") as f:
+ for r in rows:
+ f.write(json.dumps(r) + "\n")
+ with open(OUT / "manifest-fails.json", "w") as f:
+ json.dump(fails, f, indent=1)
+
+ priced = [r for r in rows if r["cost"]]
+ imaged = [r for r in rows if r["image_url"]]
+ titled = [r for r in rows if r["title"]]
+ limited = [r for r in rows if r["limited_stock"]]
+ ready = [r for r in rows if r["cost"] and r["image_url"] and r["title"]]
+ print("\n=== MANIFEST SUMMARY ===")
+ print(f"pulled : {len(rows)}/{len(codes)} (fails {len(fails)})")
+ print(f"priced(cost>0): {len(priced)}")
+ print(f"with image : {len(imaged)}")
+ print(f"with title : {len(titled)}")
+ print(f"FULLY READY : {len(ready)}")
+ print(f"limited-stock : {len(limited)} full-stock: {len(ready)-len([r for r in ready if r['limited_stock']])}")
+ print("\nsample ready rows:")
+ for r in ready[:6]:
+ flag = " [LIMITED]" if r["limited_stock"] else ""
+ print(f" {r['mfr_sku']}: {r['title']} cost=${r['cost']} retail=${r['retail']}{flag}")
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/osborne-onboard/build-payloads.mjs b/scripts/osborne-onboard/build-payloads.mjs
new file mode 100644
index 0000000..6e607cd
--- /dev/null
+++ b/scripts/osborne-onboard/build-payloads.mjs
@@ -0,0 +1,116 @@
+#!/usr/bin/env node
+/**
+ * Assemble Shopify create payloads for the 761 build-ready Osborne products.
+ * Joins out/build-ready.jsonl (pricing/title/image) + out/enriched.jsonl (colors/style).
+ *
+ * Per product:
+ * - title : "Pattern Color | Osborne & Little" (real colors, Title-Case)
+ * - SKUs : {mfr}-OSB (Roll) + {mfr}-OSB-Sample (Sample) ← matches the 1,039 live convention
+ * - variants: Roll @ retail (cost/0.65/0.85) + Sample @ $4.25
+ * - tags : Wallcovering(s), Osborne & Little[, Wallcovering], collection, color:/style/pattern,
+ * + "Limited Stock" for the 235 vendor-flagged
+ * - body_html: designStory paragraph + spec table
+ * - metafields: custom.color_1/2/3_*, custom.color_hex/background_color/color_details(json),
+ * custom.manufacturer_sku/pattern_name, specs.style/pattern, mc-facebook.google_product_category
+ *
+ * Writes out/payloads.jsonl. Pure local assembly; no network. Re-runnable.
+ * node build-payloads.mjs # build + print 3 samples
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const SAMPLE_PRICE = '4.25';
+const MATERIAL = 'Non-Woven'; // Osborne predominant substrate; specs backfilled later if needed
+const GOOGLE_CAT = '2334'; // Wallpaper, matches existing live Osborne
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&':'&','<':'<','>':'>','"':'"' }[c]));
+const titleCase = s => String(s||'').replace(/\b\w/g, c => c.toUpperCase());
+
+function load(file) {
+ const p = path.join(OUT, file);
+ if (!fs.existsSync(p)) return [];
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+}
+
+function bodyHtml(r, e) {
+ const story = e?.designStory ? `<p>${esc(e.designStory)}</p>` : `<p>${esc(r.title_core)} by Osborne & Little.</p>`;
+ const specs = [
+ ['Collection', r.collection],
+ ['Material', MATERIAL],
+ ['Brand', 'Osborne & Little'],
+ ['Style', e?.style ? titleCase(e.style) : null],
+ ].filter(([, v]) => v);
+ const trs = specs.map(([k, v]) =>
+ `<tr><th style="text-align:left;padding:6px 14px 6px 0;font-weight:600;">${esc(k)}</th><td style="padding:6px 0;">${esc(v)}</td></tr>`).join('\n');
+ return `<div class="osborne-product">\n${story}\n<h3>Specifications</h3>\n<table style="border-collapse:collapse;">\n${trs}\n</table>\n</div>`;
+}
+
+function tags(r, e) {
+ const t = new Set(['Wallcovering', 'Wallcoverings', 'Osborne & Little', 'Osborne & Little Wallcovering', MATERIAL,
+ 'Trending Wallcovering Collection 2026']); // → surfaces in New Arrivals (Steve directive)
+ if (r.collection) t.add(r.collection);
+ if (e?.backgroundColor) t.add('color:' + titleCase(e.backgroundColor));
+ for (const c of (e?.colors || [])) if (c?.name) t.add(titleCase(c.name));
+ if (e?.style) t.add(titleCase(e.style));
+ if (e?.pattern) t.add(titleCase(e.pattern));
+ if (r.limited_stock) t.add('Limited Stock');
+ return [...t].join(', ');
+}
+
+function metafields(r, e) {
+ const mf = [];
+ const S = (ns, key, value) => { if (value != null && value !== '') mf.push({ namespace: ns, key, type: 'single_line_text_field', value: String(value) }); };
+ const N = (ns, key, value) => { if (value != null && value !== '' && !Number.isNaN(Number(value))) mf.push({ namespace: ns, key, type: 'number_decimal', value: String(Number(value)) }); };
+ S('custom', 'manufacturer_sku', r.mfr_sku);
+ S('custom', 'pattern_name', r.title_core);
+ S('custom', 'background_color', e?.backgroundColor);
+ S('custom', 'color_hex', e?.dominantHex);
+ S('specs', 'style', e?.style);
+ S('specs', 'pattern', e?.pattern);
+ S('mc-facebook', 'google_product_category', GOOGLE_CAT);
+ // per-SKU enrichment date-stamp so AI style/color/hex is NEVER re-run (Steve rule, token-saving)
+ if (e?.enriched_at) { S('custom', 'ai_enriched_at', e.enriched_at); S('custom', 'ai_enriched_by', e.enriched_by); }
+ const cols = (e?.colors || []).slice(0, 3);
+ cols.forEach((c, i) => { S('custom', `color_${i+1}_name`, c.name); S('custom', `color_${i+1}_hex`, c.hex); N('custom', `color_${i+1}_percentage`, c.percentage); });
+ if (e?.colors?.length) mf.push({ namespace: 'custom', key: 'color_details', type: 'json', value: JSON.stringify(e.colors) });
+ return mf;
+}
+
+function main() {
+ const ready = load('build-ready.jsonl');
+ const enrByMfr = Object.fromEntries(load('enriched.jsonl').filter(x => !x.error).map(x => [x.mfr_sku, x]));
+ const out = [];
+ let noEnrich = 0;
+ for (const r of ready) {
+ const e = enrByMfr[r.mfr_sku];
+ if (!e) noEnrich++;
+ const sku = `${r.mfr_sku}-OSB`;
+ out.push({
+ mfr_sku: r.mfr_sku, sku, limited_stock: !!r.limited_stock,
+ enriched: !!e,
+ product: {
+ title: r.title, vendor: 'Osborne & Little', product_type: 'Wallcovering',
+ status: 'draft', tags: tags(r, e), body_html: bodyHtml(r, e),
+ images: r.image_url ? [{ src: r.image_url, alt: esc(r.title_core) }] : [],
+ options: [{ name: 'Size' }],
+ variants: [
+ { sku, price: String(r.retail), option1: 'Roll', taxable: true, requires_shipping: true },
+ { sku: `${sku}-Sample`, price: SAMPLE_PRICE, option1: 'Sample', taxable: true, requires_shipping: true },
+ ],
+ },
+ metafields: metafields(r, e),
+ });
+ }
+ fs.writeFileSync(path.join(OUT, 'payloads.jsonl'), out.map(o => JSON.stringify(o)).join('\n') + '\n');
+ console.log(`payloads: ${out.length} (enriched ${out.length - noEnrich}, no-enrich ${noEnrich})`);
+ console.log(`limited-stock tagged: ${out.filter(o => o.limited_stock).length}`);
+ for (const o of out.slice(0, 3)) {
+ console.log(`\n[${o.sku}] ${o.product.title}`);
+ console.log(` variants: Roll $${o.product.variants[0].price} / Sample $${o.product.variants[1].price}`);
+ console.log(` tags: ${o.product.tags}`);
+ console.log(` metafields(${o.metafields.length}): ${o.metafields.map(m => m.namespace+'.'+m.key).join(', ')}`);
+ }
+}
+main();
diff --git a/scripts/osborne-onboard/com.steve.osborne-batch-canary.plist b/scripts/osborne-onboard/com.steve.osborne-batch-canary.plist
new file mode 100644
index 0000000..2cdf334
--- /dev/null
+++ b/scripts/osborne-onboard/com.steve.osborne-batch-canary.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.osborne-batch-canary</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/run.sh</string>
+ <string>canary</string>
+ </array>
+ <key>StartCalendarInterval</key><dict><key>Hour</key><integer>1</integer><key>Minute</key><integer>0</integer></dict>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/out/canary.cron.out</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/out/canary.cron.err</string>
+</dict></plist>
diff --git a/scripts/osborne-onboard/com.steve.osborne-onboard-resume.plist b/scripts/osborne-onboard/com.steve.osborne-onboard-resume.plist
new file mode 100644
index 0000000..a4d5f88
--- /dev/null
+++ b/scripts/osborne-onboard/com.steve.osborne-onboard-resume.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.osborne-onboard-resume</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/resume.sh</string>
+ </array>
+ <!-- DTD verdict A (3/3, 2026-06-18): intra-day RETRIES make 10/day a true floor. All 3 runs
+ share the osborne ledger cap (20 variants/day) so the daily total still can't exceed 10
+ products — 09:00/14:00 only RECOVER a 00:05 run lost to a saturated Shopify rolling-24h
+ window (yesterday's early creates age out by then). resume.sh is idempotent + cap-clean. -->
+ <key>StartCalendarInterval</key>
+ <array>
+ <dict><key>Hour</key><integer>0</integer><key>Minute</key><integer>5</integer></dict>
+ <dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>0</integer></dict>
+ <dict><key>Hour</key><integer>14</integer><key>Minute</key><integer>0</integer></dict>
+ </array>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/out/launchd.out</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/osborne-onboard/out/launchd.err</string>
+</dict></plist>
diff --git a/scripts/osborne-onboard/create-drafts.mjs b/scripts/osborne-onboard/create-drafts.mjs
new file mode 100644
index 0000000..1eaeb8d
--- /dev/null
+++ b/scripts/osborne-onboard/create-drafts.mjs
@@ -0,0 +1,120 @@
+#!/usr/bin/env node
+/**
+ * Create Osborne products as DRAFT on the live store (designer-laboratory-sandbox = prod),
+ * then set color/spec metafields via GraphQL. Models push-artmura-live.js (REST create) +
+ * a metafieldsSet pass (REST create 422s on typed custom.* metafields).
+ *
+ * node create-drafts.mjs # DRY-RUN: show first 3 planned
+ * node create-drafts.mjs --apply --limit=5 # canary
+ * node create-drafts.mjs --apply # all remaining (resumable, cap-aware)
+ *
+ * Idempotent: skips any mfr already on Shopify (live snapshot) or already in out/created.jsonl.
+ * Cap-aware: on a Shopify daily variant-limit error it stops cleanly — re-run tomorrow to resume.
+ * 761 products = 1522 variants, so a full run may span 2 days under the ~1000/day variant cap.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { createRequire } from 'node:module';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+// Shared daily Shopify variant-creation budget ledger (coordinates with roll/sample/cadence
+// pipelines so we don't collectively blow Shopify's ~1k/day cap). // Osborne = finite staged-item onboard → consumes its dedicated 'osborne' category. Fail-open.
+const require = createRequire(import.meta.url);
+const budget = require('../variant-budget/budget.cjs');
+const BUDGET_CAT = 'osborne';
+const OUT = path.join(HERE, 'out');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function rest(method, p, body) {
+ return fetch(`https://${STORE}/admin/api/${API}${p}`, {
+ method, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: body ? JSON.stringify(body) : undefined, signal: AbortSignal.timeout(30000),
+ }).then(async res => ({ status: res.status, body: await res.json().catch(() => ({})),
+ callLimit: res.headers.get('x-shopify-shop-api-call-limit') }));
+}
+async function gql(query, variables) {
+ for (let a = 0; a < 4; a++) {
+ const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(30000) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) return { errors: j.errors }; await sleep(900 * (a + 1)); continue; }
+ return j.data;
+ }
+}
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`;
+
+function loadJsonl(file) {
+ const p = path.join(OUT, file);
+ if (!fs.existsSync(p)) return [];
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+}
+
+async function main() {
+ const payloads = loadJsonl('payloads.jsonl');
+ // idempotency sets
+ const liveSnap = fs.existsSync(path.join(OUT, 'shopify-osborne-live.json'))
+ ? JSON.parse(fs.readFileSync(path.join(OUT, 'shopify-osborne-live.json'), 'utf8')) : {};
+ const liveMfr = new Set(Object.keys(liveSnap).map(k => k.toUpperCase()));
+ const created = loadJsonl('created.jsonl');
+ const createdMfr = new Set(created.map(c => c.mfr_sku.toUpperCase()));
+ let todo = payloads.filter(p => !liveMfr.has(p.mfr_sku.toUpperCase()) && !createdMfr.has(p.mfr_sku.toUpperCase()));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+
+ const budgetLeft = budget.remaining(BUDGET_CAT); // variants available in the shared ledger today
+ console.log(`Store ${STORE} · token …${TOKEN.slice(-4)} · payloads ${payloads.length} · to create ${todo.length} · ledger '${BUDGET_CAT}' headroom ${budgetLeft} variants (~${Math.floor(budgetLeft/2)} products) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ for (const o of todo.slice(0, 3))
+ console.log(` [${o.sku}] "${o.product.title}" Roll $${o.product.variants[0].price}/Sample $${o.product.variants[1].price} · mf:${o.metafields.length} · tags:${o.product.tags.split(', ').length}`);
+ console.log(`DRY-RUN. --apply (optionally --limit=N) to create drafts.`);
+ return;
+ }
+
+ const fd = fs.openSync(path.join(OUT, 'created.jsonl'), 'a');
+ let ok = 0, fail = 0, mfFail = 0;
+ for (const o of todo) {
+ // reserve 2 variants from the shared daily ledger BEFORE creating; stop cleanly when the
+ // 'osborne' slice (or global 800 ceiling) is exhausted for today — resume tomorrow.
+ const grant = budget.take(BUDGET_CAT, o.product.variants.length);
+ if (grant < o.product.variants.length) {
+ console.error(`\n⛔ Shared variant-budget '${BUDGET_CAT}' exhausted for today (granted ${grant}). Stopping cleanly — resume tomorrow (idempotent).`);
+ break;
+ }
+ try {
+ const res = await rest('POST', '/products.json', { product: o.product });
+ if (res.status === 201 && res.body?.product?.id) {
+ const pid = res.body.product.id;
+ // metafields via GraphQL (typed)
+ if (o.metafields.length) {
+ const gid = `gid://shopify/Product/${pid}`;
+ const d = await gql(M_MF, { mf: o.metafields.map(m => ({ ownerId: gid, namespace: m.namespace, key: m.key, type: m.type, value: m.value })) });
+ const ue = d?.metafieldsSet?.userErrors || d?.errors || [];
+ if (ue.length) { mfFail++; console.error(` ⚠ mf ${o.sku}: ${JSON.stringify(ue).slice(0,160)}`); }
+ }
+ fs.writeSync(fd, JSON.stringify({ mfr_sku: o.mfr_sku, sku: o.sku, product_id: String(pid), limited_stock: o.limited_stock, status: 'draft', created_at: new Date().toISOString() }) + '\n');
+ ok++;
+ if (ok % 20 === 0) console.log(` ...created ${ok} (fail ${fail}, mfFail ${mfFail})`);
+ } else {
+ const errStr = JSON.stringify(res.body).toLowerCase();
+ if (/exceed|limit|too many|maximum/.test(errStr) && /variant|product|day/.test(errStr)) {
+ console.error(`\n⛔ Shopify cap hit on ${o.sku}: ${JSON.stringify(res.body).slice(0,200)}`);
+ console.error(` Stopping cleanly. Re-run --apply tomorrow to resume (idempotent).`);
+ break;
+ }
+ fail++; console.error(` FAIL ${o.sku}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0,200)}`);
+ }
+ const used = parseInt((res.callLimit || '0/40').split('/')[0], 10);
+ await sleep(used > 30 ? 1700 : 600);
+ } catch (e) { fail++; console.error(` ERR ${o.sku}: ${String(e).slice(0,160)}`); await sleep(700); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. created=${ok} failed=${fail} mfFail=${mfFail} of ${todo.length}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/osborne-onboard/enrich-gemini.mjs b/scripts/osborne-onboard/enrich-gemini.mjs
new file mode 100644
index 0000000..97ca82a
--- /dev/null
+++ b/scripts/osborne-onboard/enrich-gemini.mjs
@@ -0,0 +1,128 @@
+#!/usr/bin/env node
+/**
+ * Gemini 2.5-flash vision enrichment for the 761 build-ready Osborne images.
+ * For each: download the (public) vendor image, ask Gemini for structured color/style data
+ * matching the existing live-Osborne metafield schema (custom.color_1/2/3_*, specs.*).
+ *
+ * node enrich-gemini.mjs --dry-run --limit 3
+ * node enrich-gemini.mjs --limit 20 # canary
+ * node enrich-gemini.mjs # all 761
+ *
+ * Idempotent: resumes from out/enriched.jsonl, skips codes already enriched.
+ * Cost-capped (--budget, default $3). gemini-2.5-flash image-in ~ $0.0011/img estimate.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const MODEL = 'gemini-2.5-flash';
+const KEY = process.env.GEMINI_API_KEY;
+const DRY = process.argv.includes('--dry-run');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit')) || '').split('=')[1] ||
+ (process.argv.includes('--limit') ? process.argv[process.argv.indexOf('--limit') + 1] : '0'), 10) || 0;
+const BUDGET = parseFloat((process.argv.find(a => a.startsWith('--budget=')) || '').split('=')[1] || '3');
+const CONC = 6;
+const PRICE_PER_IMG = 0.0011; // gemini-2.5-flash, ~400x400 jpeg + short json out
+
+if (!KEY) { console.error('FATAL: set GEMINI_API_KEY'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const PROMPT = `You are a senior interior designer specifying this Osborne & Little wallcovering for a luxury room. Read the swatch with a designer's eye and APPLY a design STYLE and a curated COLOR STORY. Return ONLY valid minified JSON (no markdown), exactly:
+{"backgroundColor":"<the dominant ground color, one designer color word>","backgroundHex":"#RRGGBB","dominantHex":"#RRGGBB","colors":[{"name":"<curated color word>","hex":"#RRGGBB","percentage":<int>}],"style":"<one: modern|traditional|contemporary|transitional|floral|geometric|damask|botanical|abstract|textured|art-deco|chinoiserie>","pattern":"<one: geometric|floral|stripe|damask|texture|solid|botanical|abstract|trellis|ikat|plaid|moire|scenic>","designStory":"<<=12 words on the room mood it sets>"}
+Rules: name the 2-5 most prominent colors as a designer would (Bone, Greige, Celadon, Aubergine, Bronze, Oxblood, Dove, Teal...), integer percentages summing to ~100, designer-grade real color names only. JSON only.`;
+
+async function fetchImageB64(url) {
+ const res = await fetch(url, { signal: AbortSignal.timeout(25000) });
+ if (!res.ok) throw new Error('img HTTP ' + res.status);
+ const buf = Buffer.from(await res.arrayBuffer());
+ return buf.toString('base64');
+}
+
+async function gemini(b64) {
+ // LOCAL-FIRST cost-saver (2026-07-03 mac3 migration): try free ollama qwen2.5vl before paid Gemini.
+ // Any local failure falls through to Gemini below. Force Gemini with ENRICH_GEMINI_ONLY=1.
+ if (process.env.ENRICH_GEMINI_ONLY !== '1') {
+ try {
+ const lr = await fetch('http://127.0.0.1:11434/api/generate', {
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ model: process.env.OLLAMA_VISION_MODEL || 'qwen2.5vl:7b', prompt: PROMPT,
+ images: [b64], format: 'json', stream: false, options: { temperature: 0.2 } }),
+ signal: AbortSignal.timeout(90000) });
+ if (lr.ok) { const lj = await lr.json();
+ return JSON.parse((lj.response || '').replace(/^```json\s*|\s*```$/g, '').trim()); }
+ } catch (_) { /* fall through to Gemini */ }
+ }
+ const ep = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${KEY}`;
+ const body = { contents: [{ parts: [
+ { inline_data: { mime_type: 'image/jpeg', data: b64 } },
+ { text: PROMPT },
+ ] }], generationConfig: { temperature: 0.3, maxOutputTokens: 1200, responseMimeType: 'application/json',
+ thinkingConfig: { thinkingBudget: 0 } } };
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(ep, { method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(body), signal: AbortSignal.timeout(40000) });
+ if (res.status === 429 || res.status >= 500) { await sleep(1500 * (a + 1)); continue; }
+ const j = await res.json();
+ const txt = j.candidates?.[0]?.content?.parts?.map(p => p.text).join('') || '';
+ return JSON.parse(txt.replace(/^```json\s*|\s*```$/g, '').trim());
+ } catch (e) { if (a === 3) throw e; await sleep(1200 * (a + 1)); }
+ }
+}
+
+async function main() {
+ const rows = fs.readFileSync(path.join(OUT, 'build-ready.jsonl'), 'utf8').trim().split('\n').map(l => JSON.parse(l));
+ const donePath = path.join(OUT, 'enriched.jsonl');
+ const done = new Set();
+ if (fs.existsSync(donePath))
+ for (const l of fs.readFileSync(donePath, 'utf8').trim().split('\n').filter(Boolean))
+ try { done.add(JSON.parse(l).mfr_sku); } catch {}
+ let todo = rows.filter(r => !done.has(r.mfr_sku));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+ console.log(`enrich: ${rows.length} ready, ${done.size} already done, ${todo.length} to do · model ${MODEL} · est $${(todo.length * PRICE_PER_IMG).toFixed(2)} · budget $${BUDGET} · ${DRY ? 'DRY-RUN' : 'LIVE'}`);
+ if (!todo.length) return console.log('nothing to do.');
+
+ if (DRY) {
+ for (const r of todo.slice(0, 3)) {
+ const b64 = await fetchImageB64(r.image_url);
+ const e = await gemini(b64);
+ console.log(`\n[${r.mfr_sku}] ${r.title}`);
+ console.log(' ', JSON.stringify(e));
+ }
+ console.log(`\nDRY-RUN ok. ~$${(3 * PRICE_PER_IMG).toFixed(4)} spent on 3 samples.`);
+ return;
+ }
+
+ const fd = fs.openSync(donePath, 'a');
+ let ok = 0, fail = 0, spent = 0, i = 0;
+ async function worker() {
+ while (i < todo.length) {
+ if (spent >= BUDGET) { console.error(`\nBUDGET $${BUDGET} reached — stopping (idempotent, re-run to continue).`); break; }
+ const r = todo[i++];
+ try {
+ const b64 = await fetchImageB64(r.image_url);
+ const e = await gemini(b64);
+ spent += PRICE_PER_IMG;
+ const rec = { mfr_sku: r.mfr_sku,
+ backgroundColor: e.backgroundColor || null, backgroundHex: e.backgroundHex || null,
+ dominantHex: e.dominantHex || e.colors?.[0]?.hex || null,
+ colors: Array.isArray(e.colors) ? e.colors.slice(0, 5) : [],
+ style: (e.style || '').toLowerCase() || null, pattern: (e.pattern || '').toLowerCase() || null,
+ designStory: e.designStory || null,
+ // date-stamp every SKU so it is NEVER re-enriched (Steve rule: enrichment costs tokens).
+ enriched_at: new Date().toISOString(), enriched_by: `interior-designer/${MODEL}` };
+ fs.writeSync(fd, JSON.stringify(rec) + '\n');
+ ok++;
+ } catch (err) {
+ fail++; fs.writeSync(fd, JSON.stringify({ mfr_sku: r.mfr_sku, error: String(err).slice(0, 120) }) + '\n');
+ }
+ if ((ok + fail) % 25 === 0) process.stdout.write(`\r ${ok + fail}/${todo.length} (ok=${ok} fail=${fail}) ~$${spent.toFixed(3)}`);
+ }
+ }
+ await Promise.all(Array.from({ length: CONC }, worker));
+ fs.closeSync(fd);
+ console.log(`\nDONE. enriched=${ok} failed=${fail} · actual ~$${spent.toFixed(3)}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/osborne-onboard/go-live.mjs b/scripts/osborne-onboard/go-live.mjs
new file mode 100644
index 0000000..30e2c97
--- /dev/null
+++ b/scripts/osborne-onboard/go-live.mjs
@@ -0,0 +1,109 @@
+#!/usr/bin/env node
+/**
+ * Go-live for the Osborne drafts created by create-drafts.mjs (reads out/created.jsonl).
+ * Per product: enable inventory tracking on both variants, activate at Ventura Blvd + set
+ * on_hand = 2026, publish to all 13 DW sales channels, status = ACTIVE.
+ * Mirrors go-live-artmura.js. Idempotent: skips products already ACTIVE.
+ *
+ * node go-live.mjs # dry-run summary
+ * node go-live.mjs --apply --limit=1 # canary
+ * node go-live.mjs --apply # all created drafts
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+
+const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
+const TARGET_QTY = 2026;
+// GMC source-fix (2026-07-08): 29646651457 = "Google & YouTube" REMOVED. New SKUs
+// must NOT land on the Google channel (Shopify auto-syncs minVariantPrice = the $4.25
+// sample → price_mismatch disapproval). Google is fed exclusively by the controlled
+// TSV (today-viewer/build-google-feed.js). See scripts/_lib/dw-publications.js.
+// Rollback: re-add 29646651457 below.
+const PUBLICATIONS = [
+ 22208643184, 22497296496, /* 29646651457 Google-REMOVED */ 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+].map(n => `gid://shopify/Publication/${n}`);
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(30000) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors)); await sleep(900 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+const Q_VARIANTS = `query($id:ID!){ product(id:$id){ status variants(first:10){edges{node{inventoryItem{id}}}}}}`;
+const M_TRACK = `mutation($id:ID!){ inventoryItemUpdate(id:$id, input:{tracked:true}){ userErrors{message} } }`;
+const M_ACTIVATE = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ userErrors{message} } }`;
+const M_SETQTY = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{message code} } }`;
+const M_PUBLISH = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishablePublish(id:$id, input:$pubs){ userErrors{message} } }`;
+const M_ACTIVE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){ product{status} userErrors{message} } }`;
+
+async function goLive(pid) {
+ const gidP = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_VARIANTS, { id: gidP });
+ if (!d?.product) return { missing: true };
+ if (d.product.status === 'ACTIVE') return { skipped: true };
+ const items = d.product.variants.edges.map(e => e.node.inventoryItem.id);
+ for (const iid of items) {
+ let r = await gql(M_TRACK, { id: iid }); (r.inventoryItemUpdate?.userErrors || []).forEach(e => errs.push('track:' + e.message));
+ r = await gql(M_ACTIVATE, { iid, loc: LOCATION_ID });
+ (r.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message)).forEach(e => errs.push('activate:' + e.message));
+ }
+ const r2 = await gql(M_SETQTY, { input: { name: 'on_hand', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: items.map(iid => ({ inventoryItemId: iid, locationId: LOCATION_ID, quantity: TARGET_QTY })) } });
+ (r2.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('setqty:' + e.message));
+ const r3 = await gql(M_PUBLISH, { id: gidP, pubs: PUBLICATIONS.map(p => ({ publicationId: p })) });
+ (r3.publishablePublish?.userErrors || []).forEach(e => errs.push('publish:' + e.message));
+ const r4 = await gql(M_ACTIVE, { id: gidP });
+ (r4.productUpdate?.userErrors || []).forEach(e => errs.push('active:' + e.message));
+ return { status: r4.productUpdate?.product?.status, errs };
+}
+
+function loadJsonl(file) {
+ const p = path.join(OUT, file);
+ if (!fs.existsSync(p)) return [];
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+}
+
+(async () => {
+ let todo = loadJsonl('created.jsonl');
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+ console.log(`go-live: ${todo.length} drafts · loc ${LOCATION_ID} · qty ${TARGET_QTY} · ${PUBLICATIONS.length} channels · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log('first 3:', todo.slice(0, 3).map(r => r.sku).join(', ')); console.log('DRY-RUN. --apply to execute.'); return; }
+
+ const fd = fs.openSync(path.join(OUT, 'golive-done.jsonl'), 'a');
+ let ok = 0, skip = 0, withErr = 0, miss = 0;
+ for (const r of todo) {
+ try {
+ const res = await goLive(r.product_id);
+ if (res.missing) { miss++; console.error(` ? ${r.sku}: product not found`); }
+ else if (res.skipped) skip++;
+ else if (res.errs?.length) { withErr++; console.error(` ⚠ ${r.sku} ${res.status||'?'}: ${res.errs.slice(0,3).join(' | ')}`); }
+ else { ok++; }
+ if (res.status === 'ACTIVE') fs.writeSync(fd, JSON.stringify({ sku: r.sku, product_id: r.product_id }) + '\n');
+ if ((ok+skip+withErr+miss) % 20 === 0) console.log(` ...${ok+skip+withErr+miss}/${todo.length} (active=${ok} skip=${skip} err=${withErr} miss=${miss})`);
+ await sleep(350);
+ } catch (e) { withErr++; console.error(` ERR ${r.sku}: ${String(e).slice(0,160)}`); await sleep(600); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. active=${ok} skipped=${skip} with-errors=${withErr} missing=${miss} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/osborne-onboard/probe-shopify-dwol.mjs b/scripts/osborne-onboard/probe-shopify-dwol.mjs
new file mode 100644
index 0000000..31c0ef7
--- /dev/null
+++ b/scripts/osborne-onboard/probe-shopify-dwol.mjs
@@ -0,0 +1,54 @@
+#!/usr/bin/env node
+/**
+ * Read-only probe: enumerate every DWOL- variant SKU currently on the live store
+ * (designer-laboratory-sandbox = prod). Ground truth for idempotency, immune to the
+ * Mac2/Kamatera osborne_catalog split-brain. Writes out/shopify-dwol-skus.json.
+ */
+import fs from 'node:fs';
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const EP = `https://${STORE}/admin/api/${API}/graphql.json`;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 5; a++) {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { await sleep(1000 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 300) await sleep(700);
+ return j.data;
+ }
+ throw new Error('gql failed after retries');
+}
+
+const Q = `query($cursor:String){ productVariants(first:250, after:$cursor, query:"sku:DWOL-*"){
+ pageInfo{ hasNextPage endCursor }
+ edges{ node{ sku product{ id status } } } } }`;
+
+(async () => {
+ const skus = {}; let cursor = null, page = 0;
+ do {
+ const d = await gql(Q, { cursor });
+ const pv = d.productVariants;
+ for (const e of pv.edges) {
+ const sku = e.node.sku; if (!sku) continue;
+ // strip -Sample suffix to the base DWOL SKU
+ const base = sku.replace(/-Sample$/i, '');
+ skus[base] = { product_id: e.node.product?.id, status: e.node.product?.status };
+ }
+ cursor = pv.pageInfo.hasNextPage ? pv.pageInfo.endCursor : null;
+ page++; process.stdout.write(`\r page ${page}, ${Object.keys(skus).length} base SKUs`);
+ await sleep(250);
+ } while (cursor);
+ console.log('');
+ fs.writeFileSync(new URL('./out/shopify-dwol-skus.json', import.meta.url),
+ JSON.stringify(skus, null, 0));
+ const byStatus = {};
+ for (const v of Object.values(skus)) byStatus[v.status] = (byStatus[v.status] || 0) + 1;
+ console.log(`DWOL base SKUs live on Shopify: ${Object.keys(skus).length}`, byStatus);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/osborne-onboard/resume.sh b/scripts/osborne-onboard/resume.sh
new file mode 100755
index 0000000..fb8102f
--- /dev/null
+++ b/scripts/osborne-onboard/resume.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+# Daily Osborne onboard resume — TRICKLE at the polite ~10-products/day vendor cadence
+# (Steve 2026-06-18; was a 148/day blast):
+# 1. create ~10 new drafts (20 variants) under the 'osborne' variant-budget slice (stops on cap)
+# 2. go-live EVERY day on whatever drafts exist — publishes/activates that day's new batch
+# (go-live.mjs is idempotent + cap-free: it skips products already ACTIVE)
+# Net: products trickle live ~10/day over ~76 days, like every other vendor — no special blast.
+#
+# Fired by com.steve.osborne-onboard-resume at 00:05, 09:00, AND 14:00 (DTD verdict A, 3/3,
+# 2026-06-18). The 09:00/14:00 runs are RETRIES, not extra volume: all three runs share the
+# osborne slice of the daily variant-budget ledger (cap 20 variants = 10 products/day), so the
+# day's total still can't exceed 10. They exist only to RECOVER a 00:05 run lost to a saturated
+# Shopify rolling-24h cap — by mid-morning yesterday's early creates age out of the window. This
+# script is idempotent (skips already-created/live) + cap-clean, so a redundant retry is a no-op.
+set -uo pipefail
+cd "$(dirname "$0")"
+# launchd minimal-PATH fix (node/budget.cjs need /usr/local/bin) — mirrors run-cadence-hourly.sh.
+# (osborne's run.sh sets its own PATH, but budget.cjs is called here in the wrapper.)
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH"
+LOG="out/resume.log"; mkdir -p out
+echo "=== $(date '+%F %T') resume start ===" >> "$LOG"
+
+# Shared kill-switch (2026-06-19): this job previously ignored it entirely.
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "kill-switch present — skip" >> "$LOG"; exit 0; }
+
+# Shared variant-budget gate (2026-06-19): Osborne draws from its OWN floored 'osborne' slice
+# (cap 20 variants = 10 products/day) of the shared global ~884/day ledger, so the create step
+# can't exceed the day's protected slice and decrements the same ledger every other writer reads.
+# take returns min(request, osborne-remaining, global-remaining); 0 grant = no budget → exit clean
+# (go-live below is idempotent + cap-free, so we still publish prior drafts when create is starved).
+BUDGET="$HOME/Projects/designerwallcoverings/scripts/variant-budget/budget.cjs"
+OSB_VARS=$(node "$BUDGET" take osborne 20 2>/dev/null || echo 20)
+OSB_PRODUCTS=$(( OSB_VARS / 2 )) # 2 variants (Roll + Sample) per product
+if [ "${OSB_PRODUCTS:-0}" -ge 1 ]; then
+ echo "osborne budget grant=$OSB_VARS variants → create up to $OSB_PRODUCTS products" >> "$LOG"
+ bash run.sh create --apply --limit="$OSB_PRODUCTS" >> "$LOG" 2>&1
+else
+ echo "no osborne variant budget this run (grant=$OSB_VARS) — skip create, still trickle go-live" >> "$LOG"
+fi
+created=$(wc -l < out/created.jsonl 2>/dev/null | tr -d ' ' || echo 0)
+ready=$(wc -l < out/build-ready.jsonl 2>/dev/null | tr -d ' ' || echo 0)
+echo "created=$created / ready=$ready" >> "$LOG"
+# Trickle: publish/activate any drafts created so far that aren't live yet (idempotent).
+if [ "$created" -gt 0 ]; then
+ echo "trickle go-live on $created created drafts (skips already-active)" >> "$LOG"
+ bash run.sh golive --apply >> "$LOG" 2>&1
+fi
+echo "=== $(date '+%F %T') resume end ===" >> "$LOG"
diff --git a/scripts/osborne-onboard/roll-add-apply.mjs b/scripts/osborne-onboard/roll-add-apply.mjs
new file mode 100644
index 0000000..24e2f18
--- /dev/null
+++ b/scripts/osborne-onboard/roll-add-apply.mjs
@@ -0,0 +1,119 @@
+#!/usr/bin/env node
+/**
+ * Osborne sample-only -> 2-variant reprice-fix APPLIER (Steve 2026-06-18, fast reprice-fix).
+ * Reads out/roll-add-plan.jsonl (product_id, sample_variant_id, sample_sku, wcode, retail).
+ * Per product (idempotent, Shopify-cap-aware):
+ * 1. rename the lone Sample variant SKU {wcode}-OSB -> {wcode}-OSB-Sample
+ * 2. add a Roll variant (Size:Roll, price=retail, SKU {wcode}-OSB), inventory tracked
+ * 3. set inventory 2026 on the new Roll @ Ventura Blvd location
+ * SAFE: these products already have a real `Size` option (value Sample), so bulkCreate will NOT
+ * clobber the Sample (the default-variant bug only hits unnamed "Title:Default Title").
+ *
+ * node roll-add-apply.mjs # DRY-RUN (first 5)
+ * node roll-add-apply.mjs --apply [--limit=N]
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const LOCATION = 'gid://shopify/Location/5795643504'; // Ventura Blvd (same as go-live)
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+if (!TOKEN) { console.error('FATAL: SHOPIFY_ADMIN_TOKEN unset'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables) {
+ for (let a = 0; a < 4; a++) {
+ const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(30000) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) return { errors: j.errors }; await sleep(800 * (a + 1)); continue; }
+ return j.data;
+ }
+}
+const capHit = s => /exceed|limit|too many|maximum/i.test(s) && /variant|product|day/i.test(s);
+
+const Q_VARIANTS = `query($id:ID!){ product(id:$id){ id
+ variants(first:10){ nodes{ id sku price selectedOptions{name value} inventoryItem{id} } } } }`;
+const M_RENAME = `mutation($pid:ID!,$v:[ProductVariantsBulkInput!]!){
+ productVariantsBulkUpdate(productId:$pid, variants:$v){ userErrors{field message} } }`;
+const M_CREATE = `mutation($pid:ID!,$v:[ProductVariantsBulkInput!]!){
+ productVariantsBulkCreate(productId:$pid, variants:$v){
+ productVariants{ id sku inventoryItem{id} } userErrors{field message} } }`;
+const M_INV = `mutation($input:InventorySetQuantitiesInput!){
+ inventorySetQuantities(input:$input){ userErrors{field message} } }`;
+
+function loadPlan() {
+ const p = path.join(OUT, 'roll-add-plan.jsonl');
+ return fs.readFileSync(p, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+}
+
+async function main() {
+ let plan = loadPlan();
+ if (LIMIT) plan = plan.slice(0, LIMIT);
+ console.log(`Store ${STORE} · token …${TOKEN.slice(-4)} · plan ${plan.length} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ for (const r of plan.slice(0, 5))
+ console.log(` [${r.wcode}] "${r.title.slice(0,40)}" Sample $4.25 (rename →-OSB-Sample) + ADD Roll $${r.retail}`);
+ console.log('DRY-RUN. --apply to write.');
+ return;
+ }
+ const donePath = path.join(OUT, 'roll-add-done.jsonl');
+ const done = new Set(fs.existsSync(donePath)
+ ? fs.readFileSync(donePath, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l).product_id) : []);
+ const fd = fs.openSync(donePath, 'a');
+ let ok = 0, skip = 0, fail = 0;
+ for (const r of plan) {
+ if (done.has(r.product_id)) { skip++; continue; }
+ const gid = `gid://shopify/Product/${r.product_id}`;
+ try {
+ const cur = await gql(Q_VARIANTS, { id: gid });
+ const vnodes = cur?.product?.variants?.nodes || [];
+ if (vnodes.some(v => (v.selectedOptions?.[0]?.value || '').toLowerCase() === 'roll')) {
+ fs.writeSync(fd, JSON.stringify({ product_id: r.product_id, wcode: r.wcode, status: 'already-had-roll', at: new Date().toISOString() }) + '\n');
+ skip++; continue;
+ }
+ const sample = vnodes.find(v => (v.selectedOptions?.[0]?.value || '').toLowerCase() === 'sample') || vnodes[0];
+ // GUARD (2026-06-18): only ever touch a TRUE $4.25 sample. If the lone variant is priced
+ // higher it's an already-priced roll mislabeled "Sample" (the 90-product bucket) — skip it,
+ // never overwrite a real price. The planner already filters, this is belt-and-suspenders.
+ if (sample && sample.price && Math.abs(parseFloat(sample.price) - 4.25) > 0.01) {
+ fs.writeSync(fd, JSON.stringify({ product_id: r.product_id, wcode: r.wcode, status: 'skip-already-priced', live_price: sample.price, at: new Date().toISOString() }) + '\n');
+ skip++; continue;
+ }
+ // 1. rename sample sku -> -OSB-Sample AND force price $4.25 (a memo sample is always $4.25)
+ const wantSampleSku = `${r.wcode}-OSB-Sample`;
+ await gql(M_RENAME, { pid: gid, v: [{ id: sample.id, price: '4.25', inventoryItem: { sku: wantSampleSku } }] });
+ // 2. add Roll variant
+ const cre = await gql(M_CREATE, { pid: gid, v: [{
+ price: String(r.retail),
+ optionValues: [{ name: 'Roll', optionName: 'Size' }],
+ inventoryItem: { sku: `${r.wcode}-OSB`, tracked: true },
+ }]});
+ const ue = cre?.productVariantsBulkCreate?.userErrors || cre?.errors || [];
+ const errStr = JSON.stringify(ue);
+ if (ue.length) {
+ if (capHit(errStr)) { console.error(`\n⛔ Shopify variant cap hit on ${r.wcode}. Stopping cleanly — resume after midnight PT (idempotent).`); break; }
+ fail++; console.error(` FAIL ${r.wcode}: ${errStr.slice(0,160)}`); continue;
+ }
+ const rollVar = cre.productVariantsBulkCreate.productVariants[0];
+ // 3. inventory 2026 on the new Roll
+ if (rollVar?.inventoryItem?.id) {
+ await gql(M_INV, { input: { name: 'available', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: [{ inventoryItemId: rollVar.inventoryItem.id, locationId: LOCATION, quantity: 2026 }] } });
+ }
+ fs.writeSync(fd, JSON.stringify({ product_id: r.product_id, wcode: r.wcode, roll_sku: `${r.wcode}-OSB`, retail: r.retail, roll_variant: rollVar?.id, status: 'roll-added', at: new Date().toISOString() }) + '\n');
+ ok++;
+ if (ok % 10 === 0) console.log(` ...roll-added ${ok}`);
+ await sleep(700);
+ } catch (e) { fail++; console.error(` ERR ${r.wcode}: ${String(e).slice(0,140)}`); await sleep(700); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. roll-added=${ok} skipped=${skip} failed=${fail} of ${plan.length}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/osborne-onboard/roll-add-plan.py b/scripts/osborne-onboard/roll-add-plan.py
new file mode 100644
index 0000000..5320926
--- /dev/null
+++ b/scripts/osborne-onboard/roll-add-plan.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python3
+"""
+READ-ONLY dry-run planner for the Osborne sample-only -> 2-variant reprice-fix (Steve 2026-06-18).
+
+For every LIVE Osborne & Little single-variant (Size:Sample-only) product, derive its W-code from
+the Sample SKU, look up osborne_catalog.price_retail, and emit the planned action:
+ - rename existing Sample variant SKU {Wcode}-OSB -> {Wcode}-OSB-Sample
+ - add a new Roll variant (Size:Roll, price = price_retail, SKU {Wcode}-OSB), inventory 2026
+Skips products that already have a Roll (idempotent) or have no price_retail (logged separately).
+Writes out/roll-add-plan.jsonl + prints a summary. NO Shopify writes.
+"""
+import os, json, re, sys, urllib.request, subprocess
+
+STORE = os.environ["SHOPIFY_STORE"]
+TOKEN = os.environ["SHOPIFY_ADMIN_TOKEN"]
+HERE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(HERE, "out"); os.makedirs(OUT, exist_ok=True)
+
+def gql(q, v=None):
+ req = urllib.request.Request(f"https://{STORE}/admin/api/2024-10/graphql.json",
+ data=json.dumps({"query": q, "variables": v or {}}).encode(),
+ headers={"X-Shopify-Access-Token": TOKEN, "Content-Type": "application/json"})
+ return json.load(urllib.request.urlopen(req, timeout=60))
+
+# ── price_retail map from the local catalog ───────────────────────────────────
+def price_map():
+ out = subprocess.run(["psql", "postgresql:///dw_unified?host=/tmp", "-tAF\t", "-c",
+ "SELECT upper(mfr_sku), price_retail FROM osborne_catalog WHERE price_retail > 0"],
+ capture_output=True, text=True).stdout
+ m = {}
+ for line in out.strip().split("\n"):
+ if "\t" in line:
+ k, val = line.split("\t", 1)
+ try: m[k.strip()] = float(val)
+ except: pass
+ return m
+
+def wcode_from_sku(sku):
+ if not sku: return None
+ s = sku.upper().strip()
+ for suf in ("-OSB-SAMPLE", "-SAMPLE", "-OSB"):
+ if s.endswith(suf): s = s[: -len(suf)]
+ return s or None
+
+def main():
+ PRICE = price_map()
+ print(f"osborne_catalog price_retail entries: {len(PRICE)}")
+ Q = """query($c:String){ products(first:200, after:$c, query:"vendor:'Osborne & Little' status:active"){
+ pageInfo{hasNextPage endCursor}
+ nodes{ id title
+ variants(first:5){ nodes{ id title sku price selectedOptions{name value} } } } } }"""
+ cur=None; total=0; plan=[]; nocost=[]; has_roll=0; not_sample=0; already_priced=[]
+ while True:
+ p = gql(Q, {"c": cur})["data"]["products"]
+ for n in p["nodes"]:
+ total += 1
+ vs = n["variants"]["nodes"]
+ opts = [ (v["selectedOptions"][0]["value"] if v["selectedOptions"] else v["title"]) for v in vs ]
+ if any(o.lower() == "roll" for o in opts): has_roll += 1; continue # already done
+ if len(vs) != 1: continue
+ sample = vs[0]
+ if (sample["selectedOptions"][0]["value"].lower() if sample["selectedOptions"] else "") != "sample":
+ not_sample += 1; continue
+ # ONLY true $4.25 sample-only products get a roll added. Single-variant products already
+ # priced HIGHER are ALREADY-priced rolls mislabeled "Sample" — a DIFFERENT fix (relabel +
+ # add $4.25 sample), and their live price may disagree with the catalog. Never overwrite.
+ try: sprice = float(sample["price"])
+ except: sprice = None
+ if sprice is None or abs(sprice - 4.25) > 0.01:
+ already_priced.append({"product_id": n["id"].split("/")[-1], "title": n["title"],
+ "sample_variant_id": sample["id"].split("/")[-1], "sample_sku": sample["sku"], "live_price": sprice})
+ continue
+ wcode = wcode_from_sku(sample["sku"])
+ retail = PRICE.get(wcode) if wcode else None
+ rec = {"product_id": n["id"].split("/")[-1], "title": n["title"],
+ "sample_variant_id": sample["id"].split("/")[-1], "sample_sku": sample["sku"],
+ "wcode": wcode, "retail": retail}
+ if retail: plan.append(rec)
+ else: nocost.append(rec)
+ if not p["pageInfo"]["hasNextPage"]: break
+ cur = p["pageInfo"]["endCursor"]
+
+ with open(os.path.join(OUT, "roll-add-plan.jsonl"), "w") as f:
+ for r in plan: f.write(json.dumps(r) + "\n")
+ with open(os.path.join(OUT, "roll-add-nocost.jsonl"), "w") as f:
+ for r in nocost: f.write(json.dumps(r) + "\n")
+ with open(os.path.join(OUT, "roll-add-already-priced.jsonl"), "w") as f:
+ for r in already_priced: f.write(json.dumps(r) + "\n")
+
+ print(f"\nLIVE Osborne active products scanned : {total}")
+ print(f" already have a Roll (skip) : {has_roll}")
+ print(f" not single Sample (skip) : {not_sample}")
+ print(f" single-variant ALREADY PRICED (>$4.25, SEPARATE relabel fix): {len(already_priced)} (out/roll-add-already-priced.jsonl)")
+ print(f" TRUE $4.25 sample-only + has cost -> roll-add plan: {len(plan)} (out/roll-add-plan.jsonl)")
+ print(f" TRUE $4.25 sample-only, no cost (BLOCKED) : {len(nocost)} (out/roll-add-nocost.jsonl)")
+ print("\nSample of planned before->after:")
+ for r in plan[:6]:
+ print(f" {r['title'][:34]:34} {r['wcode']:12} Sample $4.25 + ADD Roll ${r['retail']:.2f}")
+ if nocost[:3]:
+ print("No-cost examples (will stay sample-only):")
+ for r in nocost[:3]:
+ print(f" {r['title'][:34]:34} sku={r['sample_sku']} wcode={r['wcode']}")
+
+main()
diff --git a/scripts/osborne-onboard/run.sh b/scripts/osborne-onboard/run.sh
new file mode 100755
index 0000000..f4d9d2c
--- /dev/null
+++ b/scripts/osborne-onboard/run.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+# Wires Shopify + Gemini creds (never hard-coded) and runs an Osborne onboard step.
+# bash run.sh enrich [--budget=3]
+# bash run.sh payloads
+# bash run.sh create [--apply] [--limit=N]
+# bash run.sh golive [--apply] [--limit=N]
+set -euo pipefail
+cd "$(dirname "$0")"
+# launchd runs with a minimal PATH (/usr/bin:/bin:/usr/sbin:/sbin) that lacks node — add the
+# common Homebrew/Node locations so the scheduled jobs find it. (Bug caught by the 2026-06-18
+# first-batch canary: "exec: node: not found" → 0 created.) Resolve an absolute NODE too.
+export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
+NODE="$(command -v node || true)"
+[ -z "$NODE" ] && { echo "FATAL: node not found in PATH ($PATH)"; exit 127; }
+SEC="$HOME/Projects/secrets-manager/.env"
+export SHOPIFY_STORE="designer-laboratory-sandbox.myshopify.com"
+export SHOPIFY_ADMIN_TOKEN="$(grep -hiE '^SHOPIFY_ADMIN_TOKEN=' "$SEC" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+export GEMINI_API_KEY="$(grep -hiE '^GEMINI_API_KEY=' "$SEC" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+step="${1:-}"; shift || true
+case "$step" in
+ enrich) exec "$NODE" enrich-gemini.mjs "$@";;
+ payloads) exec "$NODE" build-payloads.mjs "$@";;
+ create) [ -z "${SHOPIFY_ADMIN_TOKEN:-}" ] && { echo "no shopify token"; exit 1; }; exec "$NODE" create-drafts.mjs "$@";;
+ golive) [ -z "${SHOPIFY_ADMIN_TOKEN:-}" ] && { echo "no shopify token"; exit 1; }; exec "$NODE" go-live.mjs "$@";;
+ canary) exec "$NODE" batch-canary.mjs "$@";;
+ *) echo "usage: bash run.sh {enrich|payloads|create|golive} [args]"; exit 1;;
+esac
diff --git a/scripts/preflight/preflight-validate.js b/scripts/preflight/preflight-validate.js
new file mode 100644
index 0000000..a7afd61
--- /dev/null
+++ b/scripts/preflight/preflight-validate.js
@@ -0,0 +1,277 @@
+#!/usr/bin/env node
+/**
+ * preflight-validate.js — fail-closed pre-flight validator for DW product payloads.
+ *
+ * Codifies Steve's machine-checkable HARD rules (see rules.json + its _meta.sources)
+ * and scans a products.json (flat array) OR a Shopify-queue payload shape, exiting
+ * non-zero on any violation.
+ *
+ * USAGE:
+ * node preflight-validate.js <path-to-products.json> [--json] [--max-samples=N] [--rules=path]
+ *
+ * - Field-adaptive: a rule whose required fields are ALL absent is reported N/A
+ * (not PASS) so a thin payload never produces a false green.
+ * - Fail-closed: any non-N/A FAIL => exit 1. Clean / all-N/A => exit 0.
+ *
+ * LOCAL / REPORT tool. Does NOT mutate input, does NOT write prod/Shopify.
+ */
+'use strict';
+const fs = require('fs');
+const path = require('path');
+
+// ---------- args ----------
+const args = process.argv.slice(2);
+const flags = {};
+const positional = [];
+for (const a of args) {
+ if (a.startsWith('--')) {
+ const [k, v] = a.slice(2).split('=');
+ flags[k] = v === undefined ? true : v;
+ } else positional.push(a);
+}
+const inputPath = positional[0];
+const asJson = !!flags.json;
+const MAX_SAMPLES = parseInt(flags['max-samples'] || '8', 10);
+const rulesPath = flags.rules || path.join(__dirname, 'rules.json');
+
+if (!inputPath) {
+ console.error('usage: node preflight-validate.js <products.json> [--json] [--max-samples=N] [--rules=path]');
+ process.exit(2);
+}
+
+// ---------- load ----------
+let RULES;
+try { RULES = JSON.parse(fs.readFileSync(rulesPath, 'utf8')); }
+catch (e) { console.error('FATAL: cannot read rules.json: ' + e.message); process.exit(2); }
+
+let raw;
+try { raw = JSON.parse(fs.readFileSync(inputPath, 'utf8')); }
+catch (e) { console.error('FATAL: cannot read input: ' + e.message); process.exit(2); }
+
+// Accept: array, {products:[]}, {data:[]}, or any single array-valued key.
+let rows;
+if (Array.isArray(raw)) rows = raw;
+else if (raw && Array.isArray(raw.products)) rows = raw.products;
+else if (raw && Array.isArray(raw.data)) rows = raw.data;
+else if (raw && typeof raw === 'object') rows = Object.values(raw).find(v => Array.isArray(v));
+if (!Array.isArray(rows)) { console.error('FATAL: could not find a product array in input'); process.exit(2); }
+
+const HOUSE = (RULES._meta.house_brands || []).map(norm);
+
+// ---------- helpers ----------
+function norm(s) { return String(s == null ? '' : s).toLowerCase().replace(/[^a-z0-9]+/g, ''); }
+function hasField(row, f) { return Object.prototype.hasOwnProperty.call(row, f) && row[f] != null && row[f] !== ''; }
+function anyFieldPresent(row, fields) { return fields.some(f => Object.prototype.hasOwnProperty.call(row, f)); }
+function textOf(v) {
+ if (v == null) return '';
+ if (Array.isArray(v)) return v.map(textOf).join(' ');
+ if (typeof v === 'object') return Object.values(v).map(textOf).join(' ');
+ return String(v);
+}
+function rowId(row) { return row.dw_sku || row.sku || row.handle || row.id || row.title || '(no-id)'; }
+function num(v) { const n = parseFloat(v); return Number.isFinite(n) ? n : null; }
+
+// Collect variants in a tolerant way (Shopify-shape).
+function variantsOf(row) {
+ if (Array.isArray(row.variants)) return row.variants;
+ return [];
+}
+function isSampleVariant(v) {
+ const t = norm([v && v.title, v && v.option1, v && v.option2, v && v.sku].map(x => x || '').join(' '));
+ return /(sample|memo|swatch)/.test(t);
+}
+function isRollVariant(v) {
+ const t = norm([v && v.title, v && v.option1, v && v.option2].map(x => x || '').join(' '));
+ return /(roll|yard|bolt|panel|each)/.test(t) || (!isSampleVariant(v) && t.length > 0);
+}
+
+// ---------- per-rule checkers ----------
+// Each returns { applicable: bool, violations: [{id, field, value, why}] }
+
+function checkNoWordWallpaper(rule, row) {
+ const fields = rule.applies_to_fields.filter(f => hasField(row, f));
+ if (!fields.length) return { applicable: false, violations: [] };
+ const out = [];
+ for (const f of fields) {
+ const t = textOf(row[f]);
+ // whole-word, case-insensitive
+ if (/\bwallpapers?\b/i.test(t)) out.push({ field: f, value: t.slice(0, 120), why: "contains 'wallpaper'" });
+ }
+ return { applicable: true, violations: out };
+}
+
+function checkNoUnknown(rule, row) {
+ const fields = rule.applies_to_fields.filter(f => hasField(row, f));
+ if (!fields.length) return { applicable: false, violations: [] };
+ const out = [];
+ for (const f of fields) {
+ const t = textOf(row[f]);
+ if (/\bunknown\b/i.test(t)) out.push({ field: f, value: t.slice(0, 120), why: "contains 'Unknown'" });
+ }
+ return { applicable: true, violations: out };
+}
+
+function check425(rule, row) {
+ const SV = rule.sample_value;
+ const variants = variantsOf(row);
+ let applicable = false;
+ const out = [];
+ if (variants.length) {
+ applicable = true;
+ for (const v of variants) {
+ const p = num(v && v.price);
+ if (p === SV && !isSampleVariant(v) && isRollVariant(v)) {
+ out.push({ field: 'variants', value: '$' + SV + ' on ' + (v.title || v.sku || 'variant'), why: '$4.25 on a non-sample/roll variant' });
+ }
+ }
+ }
+ // product-level price fields (flat shape): a price of exactly 4.25 read as THE price is the trap
+ for (const f of ['retail_price', 'net_price', 'price']) {
+ if (hasField(row, f)) {
+ applicable = true;
+ if (num(row[f]) === SV) out.push({ field: f, value: '$' + SV, why: 'product-level price reads $4.25 (sample-trap)' });
+ }
+ }
+ return { applicable, violations: out };
+}
+
+function brandTokensIn(row) {
+ // determine vendor / brand context for kravet-family + leak checks
+ return norm([row.vendor, row.title, row.tags, row.handle, row.product_type].map(x => textOf(x)).join(' '));
+}
+
+function checkKravetMap(rule, row) {
+ const ctx = brandTokensIn(row);
+ const fam = (rule.kravet_family || []).map(norm);
+ const isKravet = fam.some(k => ctx.indexOf(k) >= 0);
+ if (!isKravet) return { applicable: false, violations: [] };
+ // need a cost AND a retail to evaluate the floor
+ const cost = num(row.whls_cost) ?? num(row.cost) ?? num(row.cost_price) ?? num(row.net_price);
+ let retail = num(row.retail_price) ?? num(row.price) ?? num(row.map_price);
+ if (retail == null) {
+ const variants = variantsOf(row);
+ const rollPrices = variants.filter(v => !isSampleVariant(v)).map(v => num(v.price)).filter(x => x != null);
+ if (rollPrices.length) retail = Math.max(...rollPrices);
+ }
+ if (cost == null || retail == null) {
+ // kravet-family but we lack the numbers to judge -> applicable but cannot fail; report as N/A-data
+ return { applicable: true, violations: [], note: 'kravet-family but missing cost and/or retail to evaluate MAP floor' };
+ }
+ const floor = cost * (rule.map_multiplier || 1.5);
+ const out = [];
+ if (retail + 1e-6 < floor) {
+ out.push({ field: 'retail_price', value: 'retail $' + retail + ' < MAP floor $' + floor.toFixed(2) + ' (cost $' + cost + ' x ' + rule.map_multiplier + ')', why: 'below Kravet MAP floor' });
+ }
+ return { applicable: true, violations: out };
+}
+
+function checkActiveCompleteness(rule, row) {
+ // only meaningful if we know status
+ const status = (row.status != null) ? String(row.status).toLowerCase() : null;
+ if (status == null) return { applicable: false, violations: [] };
+ if (status !== 'active') return { applicable: true, violations: [] };
+ const out = [];
+ // image
+ const hasImage = hasField(row, 'image_url') || (Array.isArray(row.images) && row.images.length > 0);
+ if (!hasImage) out.push({ field: 'image', value: '(none)', why: 'ACTIVE without image' });
+ // width metafield
+ let hasWidth = hasField(row, 'width');
+ if (!hasWidth && Array.isArray(row.metafields)) {
+ hasWidth = row.metafields.some(m => m && /width/i.test((m.key || '') + ' ' + (m.namespace || '')));
+ }
+ if (!hasWidth) out.push({ field: 'width', value: '(none)', why: 'ACTIVE without width metafield' });
+ // inventory=2026 on BOTH variants
+ const variants = variantsOf(row);
+ if (variants.length) {
+ const bad = variants.filter(v => String((v && (v.inventory != null ? v.inventory : v.inventory_year)) || row.inventory || '') !== rule.required_inventory_year);
+ if (bad.length) out.push({ field: 'inventory', value: bad.length + '/' + variants.length + ' variant(s) != ' + rule.required_inventory_year, why: 'ACTIVE without inventory=2026 on both variants' });
+ } else if (hasField(row, 'inventory') && String(row.inventory) !== rule.required_inventory_year) {
+ out.push({ field: 'inventory', value: String(row.inventory), why: 'ACTIVE without inventory=2026' });
+ }
+ return { applicable: true, violations: out };
+}
+
+function checkVendorLeak(rule, row) {
+ const fields = rule.applies_to_fields.filter(f => hasField(row, f));
+ if (!fields.length) return { applicable: false, violations: [] };
+ const deny = (rule.denylist || []).map(norm);
+ const out = [];
+ for (const f of fields) {
+ const t = textOf(row[f]);
+ const n = norm(t);
+ if (!n) continue;
+ for (let i = 0; i < deny.length; i++) {
+ if (n.indexOf(deny[i]) >= 0) {
+ // allow if the ONLY brand context is a house brand AND the denylisted token is not separately present
+ // (house brands are never on the denylist, so any denylist hit is a real leak)
+ out.push({ field: f, value: t.slice(0, 120), why: "denylisted vendor token '" + rule.denylist[i] + "'" });
+ break; // one hit per field is enough
+ }
+ }
+ }
+ return { applicable: true, violations: out };
+}
+
+const CHECKERS = {
+ no_word_wallpaper: checkNoWordWallpaper,
+ no_unknown_token: checkNoUnknown,
+ no_425_on_roll_variant: check425,
+ kravet_map_floor: checkKravetMap,
+ active_completeness: checkActiveCompleteness,
+ no_denylisted_vendor_token: checkVendorLeak
+};
+
+// ---------- run ----------
+const report = [];
+for (const rule of RULES.rules) {
+ const fn = CHECKERS[rule.check];
+ if (!fn) { report.push({ id: rule.id, status: 'SKIP', reason: 'no checker for ' + rule.check }); continue; }
+ let applicableRows = 0, failCount = 0, dataGapRows = 0;
+ const samples = [];
+ for (const row of rows) {
+ const r = fn(rule, row);
+ if (!r.applicable) continue;
+ applicableRows++;
+ if (r.note) dataGapRows++;
+ if (r.violations && r.violations.length) {
+ failCount++;
+ if (samples.length < MAX_SAMPLES) {
+ samples.push({ id: rowId(row), hits: r.violations });
+ }
+ }
+ }
+ let status;
+ if (applicableRows === 0) status = 'N/A';
+ else if (failCount === 0) status = 'PASS';
+ else status = 'FAIL';
+ report.push({ id: rule.id, title: rule.title, status, applicableRows, failCount, dataGapRows, samples });
+}
+
+// ---------- output ----------
+const anyFail = report.some(r => r.status === 'FAIL');
+if (asJson) {
+ console.log(JSON.stringify({ input: inputPath, totalRows: rows.length, report, anyFail }, null, 2));
+} else {
+ console.log('DW PRE-FLIGHT VALIDATOR');
+ console.log('input: ' + inputPath + ' rows: ' + rows.length + ' rules: ' + RULES.rules.length);
+ console.log('='.repeat(72));
+ for (const r of report) {
+ if (r.status === 'SKIP') { console.log('[SKIP] ' + r.id + ' — ' + r.reason); continue; }
+ const tag = r.status === 'FAIL' ? 'FAIL' : r.status === 'PASS' ? 'PASS' : r.status === 'N/A' ? 'N/A ' : r.status;
+ let line = '[' + tag + '] ' + r.id;
+ if (r.status === 'FAIL') line += ' — ' + r.failCount + '/' + r.applicableRows + ' applicable rows violate';
+ else if (r.status === 'PASS') line += ' — ' + r.applicableRows + ' applicable rows clean';
+ else if (r.status === 'N/A') line += ' — no rows carry the required field(s)';
+ console.log(line);
+ console.log(' ' + (r.title || ''));
+ if (r.dataGapRows) console.log(' (' + r.dataGapRows + ' applicable rows lacked cost/price data to fully evaluate)');
+ for (const s of r.samples) {
+ const h = s.hits.map(x => x.field + ': ' + x.why).join('; ');
+ console.log(' · ' + s.id + ' → ' + h);
+ }
+ }
+ console.log('='.repeat(72));
+ console.log(anyFail ? 'RESULT: VIOLATIONS FOUND (exit 1)' : 'RESULT: clean / no applicable violations (exit 0)');
+}
+
+process.exit(anyFail ? 1 : 0);
diff --git a/scripts/price-render-audit/price-render-audit.mjs b/scripts/price-render-audit/price-render-audit.mjs
new file mode 100644
index 0000000..34d3850
--- /dev/null
+++ b/scripts/price-render-audit/price-render-audit.mjs
@@ -0,0 +1,86 @@
+// price-render-audit — READ-ONLY, $0. Cycle 67 (DTD-picked A, unanimous).
+// Price is the most direct revenue/trust defect on a storefront. Per the c66 lesson,
+// measure at the RENDERED/EFFECTIVE layer — NOT the dw_unified mirror (price ~30% synced,
+// unreliable). Sources: products.json variant prices (effective sellable prices) +
+// the PDP JSON-LD offer price (what Google/shoppers see rendered).
+// Classify each live product:
+// HEALTHY — has a real sellable variant price (> sample floor)
+// BROKEN-ZERO — ALL variants $0.00/null → genuinely unpriced/un-buyable (the defect)
+// SAMPLE-ONLY — single variant == $4.25 → legitimate showroom-line (NOT broken; per
+// showroom-lines-category) — classified out, not flagged
+// LD-RENDER-GAP— variants have a real price but the rendered JSON-LD offer price is 0/absent
+// NEGATIVE CONTROL: print real prices the detector read (proves it parses prices) +
+// confirm it flags a genuinely $0 product AND does NOT flag a legit $4.25 single-variant.
+// EXCLUDES Phillip Jeffries.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const PJ=/phillip[- ]?jeffries|phillip-jeffries/i;
+function ldPrice(html){
+ const blocks=[...html.matchAll(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/g)].map(m=>m[1]);
+ for(const b of blocks){ let j; try{j=JSON.parse(b);}catch{continue;}
+ const cands=j['@graph']?j['@graph']:[j];
+ for(const c of cands){ if(c['@type']==='Product'){ const o=Array.isArray(c.offers)?c.offers[0]:c.offers; if(o){ if(o.price!=null) return parseFloat(o.price); if(o.lowPrice!=null) return parseFloat(o.lowPrice); } } } }
+ return null;
+}
+
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let handles=[];
+for(const sm of prodMaps){ const x=await get(sm); const hs=[...x.text.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]); const step=Math.max(1,Math.floor(hs.length/8)); for(let i=0;i<hs.length&&handles.length<360;i+=step) handles.push(hs[i]); }
+handles=[...new Set(handles)].filter(h=>!PJ.test(h)).slice(0,300);
+console.log(`=== price-render-audit (READ-ONLY, $0) ===\nsampling ${handles.length} live products at the EFFECTIVE/RENDERED layer (PJ excluded)\n`);
+
+let evald=0, healthy=0, brokenZero=0, sampleOnly=0, ldRenderGap=0, pjSkip=0, err=0;
+const brokenSamples=[], healthySamples=[], gapSamples=[], problems=[];
+let done=0, ldChecks=0;
+for(const h of handles){
+ const r=await get(`${WWW}/products/${h}.json`);
+ let prod; try{ prod=JSON.parse(r.text).product; }catch{ err++; done++; continue; }
+ if(!prod){ err++; done++; continue; }
+ if(PJ.test(prod.vendor||'')||PJ.test(h)){ pjSkip++; done++; continue; }
+ const vp=(prod.variants||[]).map(v=>({price:parseFloat(v.price),sku:v.sku,title:v.title})).filter(v=>!isNaN(v.price));
+ if(vp.length===0){ err++; done++; continue; }
+ evald++;
+ const prices=vp.map(v=>v.price); const maxV=Math.max(...prices); const minV=Math.min(...prices);
+ const nVar=vp.length;
+ if(maxV===0){ brokenZero++; if(brokenSamples.length<10) brokenSamples.push({h,vendor:prod.vendor,prices}); problems.push({h,issue:'ALL-VARIANTS-$0',vendor:prod.vendor}); }
+ else if(nVar===1 && maxV>0 && maxV<=4.25){ sampleOnly++; }
+ else {
+ healthy++;
+ if(healthySamples.length<6) healthySamples.push({h,minV,maxV});
+ // rendered-layer cross-check: does JSON-LD show a price for a product that HAS a real variant price?
+ if(done%4===0){ // sample 1-in-4 for the (heavier) PDP fetch to bound cost/time
+ const pdp=await get(`${WWW}/products/${h}`); ldChecks++;
+ const ld=pdp.status===200?ldPrice(pdp.text):null;
+ if(ld===0 || ld===null){ ldRenderGap++; if(gapSamples.length<8) gapSamples.push({h,ld,maxV}); problems.push({h,issue:`JSON-LD price ${ld===null?'ABSENT':'$0'} but variants up to $${maxV}`,vendor:prod.vendor}); }
+ await sleep(80);
+ }
+ }
+ done++;
+ if(done%50===0) console.log(` ${done}/${handles.length} (healthy=${healthy} broken-$0=${brokenZero} sample-only=${sampleOnly} ld-gap=${ldRenderGap}/${ldChecks})`);
+ await sleep(70);
+}
+
+console.log(`\n=== RESULTS ===`);
+console.log(`products evaluated: ${evald} | PJ-skip: ${pjSkip} | err: ${err}`);
+console.log(` HEALTHY (real sellable price): ${healthy} (${evald?(100*healthy/evald).toFixed(1):0}%)`);
+console.log(` SAMPLE-ONLY (single variant $<=4.25, legit showroom-line — NOT broken): ${sampleOnly}`);
+console.log(` *** BROKEN-ZERO (all variants $0.00 — unpriced/un-buyable): ${brokenZero} ***`);
+console.log(`\n-- rendered-layer cross-check (JSON-LD price on ${ldChecks} healthy PDPs) --`);
+console.log(` LD-RENDER-GAP (JSON-LD price \$0/absent while variants priced): ${ldRenderGap}/${ldChecks}`);
+if(evald>0){
+ const bad=brokenZero, p=bad/evald, se=Math.sqrt(p*(1-p)/evald), lo=Math.max(0,p-1.96*se)*100, hi=Math.min(1,p+1.96*se)*100;
+ console.log(`\n*** BROKEN-ZERO price rate: ${bad}/${evald} = ${(100*p).toFixed(2)}% (95% CI ${lo.toFixed(2)}–${hi.toFixed(2)}%, n=${evald}) ***`);
+}
+console.log(`\n-- NEGATIVE CONTROL (detector reads real prices) --`);
+console.log(` healthy price samples (detector parsed a real price):`); healthySamples.forEach(s=>console.log(` ${s.h.slice(0,40)} → $${s.minV}–$${s.maxV}`));
+console.log(` broken-$0 detected: ${brokenZero>0?'yes ('+brokenSamples.length+' samples)':'NONE in sample'}`);
+if(brokenSamples.length) brokenSamples.forEach(s=>console.log(` $0: ${s.h.slice(0,42)} [${s.vendor}] prices=${JSON.stringify(s.prices)}`));
+console.log(` classifier correctly separates legit single-variant $4.25 showroom-lines: ${sampleOnly} excluded from broken`);
+if(gapSamples.length){ console.log('\nLD-render-gap samples:'); gapSamples.forEach(s=>console.log(` ${s.h.slice(0,40)} ld=${s.ld} maxVariant=$${s.maxV}`)); }
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/price-render-audit.json',JSON.stringify({ts:new Date().toISOString(),sampled:handles.length,evald,healthy,sampleOnly,brokenZero,ldChecks,ldRenderGap,pjSkip,err,brokenSamples,healthySamples,gapSamples,problems},null,2));
+console.log('\nwrote /tmp/price-render-audit.json');
diff --git a/scripts/price-sheets/add-roll-variant-edge.mjs b/scripts/price-sheets/add-roll-variant-edge.mjs
new file mode 100644
index 0000000..b74a9a4
--- /dev/null
+++ b/scripts/price-sheets/add-roll-variant-edge.mjs
@@ -0,0 +1,94 @@
+#!/usr/bin/env node
+/**
+ * add-roll-variant-edge.mjs — the 37 edge Schumacher products whose dark single variant
+ * lives under the DEFAULT option (Title:["Default Title"]) instead of Size:["Sample"].
+ * Bring them in line with the clean 532: rename option Title->Size, value Default Title->
+ * Sample, then ADD a Size:"Roll" variant @ DW retail and set inventory=2026 on both.
+ * Keeps the $4.25 memo sample.
+ *
+ * ONLY processes rows where opt=Title / value=Default Title / sampleSku ends -Sample.
+ * The 4 true oddballs (roll-style sku already at $4.25, or opt=Type) are LEFT for manual
+ * review — printed at the end, never auto-touched.
+ *
+ * Separate revert log (data/price-sheets/addroll-edge-created.json) so it never collides
+ * with the main 532 run. Reversible: delete created roll variants + (optionally) rename back.
+ *
+ * USAGE: node add-roll-variant-edge.mjs --limit=1 # dry-run
+ * node add-roll-variant-edge.mjs --limit=1 --apply --i-am-steve
+ * node add-roll-variant-edge.mjs --apply --i-am-steve # all 37
+ */
+import fs from 'node:fs';
+const SHOP='designer-laboratory-sandbox.myshopify.com', VER='2024-10';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+if(!TOKEN){console.error('no token');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true&&args['i-am-steve']===true;
+const LIMIT=args.limit?parseInt(args.limit,10):Infinity;
+const INV_QTY=2026;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500*(a+1));continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(a+1));continue;}return{__err:j.errors};}const t=j.extensions?.cost?.throttleStatus;if(t&&t.currentlyAvailable<400)await sleep(1200);return j.data;}throw new Error('retries');}
+
+const all=fs.readFileSync('/tmp/schu-addroll-edge.csv','utf8').trim().split('\n').map(l=>{const[pid,optId,optName,optVal,svid,ssku,rsku,retail,cost]=l.split('|');return{pid,optId,optName,optVal,svid,ssku,rsku,retail:+retail,cost:+cost};});
+const standard=all.filter(t=>t.optName==='Title'&&t.optVal==='Default Title'&&/-sample$/i.test(t.ssku));
+const oddballs=all.filter(t=>!(t.optName==='Title'&&t.optVal==='Default Title'&&/-sample$/i.test(t.ssku)));
+
+console.log(`edge — mode: ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | standard: ${standard.length} | oddballs (manual): ${oddballs.length}`);
+if(oddballs.length){console.log('\n⚠ ODDBALLS (left for manual review):');for(const o of oddballs)console.log(` ${o.ssku||'(no sku)'} opt=${o.optName}:[${o.optVal}] retail $${o.retail}`);}
+
+let created=[]; try{created=JSON.parse(fs.readFileSync('data/price-sheets/addroll-edge-created.json','utf8'));}catch{}
+const donePids=new Set(created.map(c=>c.pid));
+let targets=standard.filter(t=>!donePids.has(t.pid));
+if(donePids.size)console.log(`(skipping ${standard.length-targets.length} already-created)`);
+if(Number.isFinite(LIMIT))targets=targets.slice(0,LIMIT);
+
+if(!APPLY){
+ console.log('\nDRY-RUN plan (first 5):');
+ for(const t of targets.slice(0,5))console.log(` ${t.ssku}: rename Title->Size, "Default Title"->"Sample"; ADD Roll ${t.rsku} @ $${t.retail}; inv ${INV_QTY} both`);
+ console.log(`\nWould process ${targets.length} standard edges. To execute: node add-roll-variant-edge.mjs ${Number.isFinite(LIMIT)?`--limit=${LIMIT} `:''}--apply --i-am-steve`);
+ process.exit(0);
+}
+
+const QOV=`query($id:ID!){node(id:$id){... on Product{options{id name optionValues{id name}}}}}`;
+const OPTU=`mutation($productId:ID!,$option:OptionUpdateInput!,$optionValuesToUpdate:[OptionValueUpdateInput!]){productOptionUpdate(productId:$productId,option:$option,optionValuesToUpdate:$optionValuesToUpdate){userErrors{field message}}}`;
+const C=`mutation($productId:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkCreate(productId:$productId,variants:$variants){productVariants{id sku inventoryItem{id}} userErrors{field message}}}`;
+const INV=`mutation($input:InventorySetOnHandQuantitiesInput!){inventorySetOnHandQuantities(input:$input){userErrors{field message}}}`;
+const QII=`query($id:ID!){node(id:$id){... on ProductVariant{inventoryItem{id}}}}`;
+const loc=await gql(`{locations(first:5){nodes{id}}}`);
+if(loc?.__err){console.error('⛔ location read failed — needs read_locations/write_inventory');process.exit(2);}
+const LOCATION=loc.locations.nodes[0].id;
+
+let ok=0,err=0,invok=0,inverr=0;
+for(const t of targets){
+ // 1) rename option Title->Size and its value Default Title->Sample.
+ // Idempotent: a prior cap-blocked run may have already renamed (Size:Sample)
+ // but never created the Roll (created.json only records AFTER a create), so
+ // handle the already-renamed state instead of skipping it.
+ const ov=await gql(QOV,{id:t.pid});
+ const opt=ov?.node?.options?.[0];
+ if(!opt){err++;console.log(' skip(no opt)',t.ssku);continue;}
+ const vals=opt.optionValues||[];
+ // already has the Roll variant? skip (idempotent re-run)
+ if(vals.some(x=>x.name==='Roll')){console.log(' skip(roll exists)',t.rsku);continue;}
+ const dtId=vals.find(x=>x.name==='Default Title')?.id;
+ if(opt.name==='Size'&&vals.some(x=>x.name==='Sample')){
+ // rename already done by a prior run — go straight to create
+ }else if(dtId){
+ const ru=await gql(OPTU,{productId:t.pid,option:{id:opt.id,name:'Size'},optionValuesToUpdate:[{id:dtId,name:'Sample'}]});
+ const rue=ru?.__err||ru?.productOptionUpdate?.userErrors;
+ if(ru?.__err||(rue&&rue.length)){err++;if(err<=10)console.log(' rename-err',t.ssku,JSON.stringify(rue).slice(0,140));continue;}
+ }else{err++;console.log(' skip(no opt val)',t.ssku,`opt=${opt.name}:[${vals.map(v=>v.name).join(',')}]`);continue;}
+ // 2) add Size:Roll @ retail
+ const d=await gql(C,{productId:t.pid,variants:[{price:t.retail.toFixed(2),inventoryItem:{sku:t.rsku,tracked:true},optionValues:[{optionName:'Size',name:'Roll'}]}]});
+ const ue=d?.__err||d?.productVariantsBulkCreate?.userErrors;
+ if(d?.__err||(ue&&ue.length)){err++;if(err<=10)console.log(' create-err',t.ssku,JSON.stringify(ue).slice(0,140));continue;}
+ const rollVar=d.productVariantsBulkCreate.productVariants[0];
+ created.push({pid:t.pid,rollVid:rollVar.id,rollSku:rollVar.sku,renamedOpt:opt.id}); ok++;
+ // 3) inventory 2026 both
+ const sii=(await gql(QII,{id:t.svid}))?.node?.inventoryItem?.id;
+ const items=[rollVar.inventoryItem?.id,sii].filter(Boolean);
+ const di=await gql(INV,{input:{reason:'correction',setQuantities:items.map(id=>({inventoryItemId:id,locationId:LOCATION,quantity:INV_QTY}))}});
+ if(di?.__err||di?.inventorySetOnHandQuantities?.userErrors?.length){inverr++;if(inverr<=10)console.log(' inv-err',t.rsku,JSON.stringify(di?.__err||di.inventorySetOnHandQuantities.userErrors).slice(0,120));}else invok++;
+ fs.writeFileSync('data/price-sheets/addroll-edge-created.json',JSON.stringify(created,null,2));
+}
+console.log(`\nDONE — ${ok} edges processed, ${err} errors | inventory: ${invok} ok, ${inverr} err | oddballs left: ${oddballs.length}`);
diff --git a/scripts/price-sheets/add-roll-variant-oddball.mjs b/scripts/price-sheets/add-roll-variant-oddball.mjs
new file mode 100644
index 0000000..f0bc79a
--- /dev/null
+++ b/scripts/price-sheets/add-roll-variant-oddball.mjs
@@ -0,0 +1,79 @@
+#!/usr/bin/env node
+/**
+ * add-roll-variant-oddball.mjs — the 4 Schumacher oddballs whose $4.25 variant sits on the
+ * BARE roll-sku (e.g. DWLK-824290, no -Sample suffix). Steve's choice (2026-06-15):
+ * SWAP to the catalog convention (roll = bare sku, sample = -Sample):
+ * 1) rename the existing variant's sku DWLK-824290 -> DWLK-824290-Sample (keeps $4.25)
+ * 2) rename its option -> Size, value -> "Sample"
+ * 3) ADD the bare sku DWLK-824290 as the Roll @ DW retail
+ * 4) inventory=2026 on BOTH variants
+ * Step 1 frees the bare sku BEFORE step 3 (avoids a duplicate-sku conflict).
+ *
+ * Targets: data/price-sheets/schu-addroll-oddball.csv pid|optId|optName|optVal|svid|bareSku|retail|cost
+ * Revert log: data/price-sheets/addroll-oddball-created.json
+ *
+ * USAGE: node add-roll-variant-oddball.mjs --limit=1 # dry-run
+ * node add-roll-variant-oddball.mjs --apply --i-am-steve # all 4 (needs daily variant cap available)
+ */
+import fs from 'node:fs';
+const SHOP='designer-laboratory-sandbox.myshopify.com', VER='2024-10';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+if(!TOKEN){console.error('no token');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true&&args['i-am-steve']===true;
+const LIMIT=args.limit?parseInt(args.limit,10):Infinity;
+const INV_QTY=2026;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500*(a+1));continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(a+1));continue;}return{__err:j.errors};}const t=j.extensions?.cost?.throttleStatus;if(t&&t.currentlyAvailable<400)await sleep(1200);return j.data;}throw new Error('retries');}
+
+let all=fs.readFileSync('data/price-sheets/schu-addroll-oddball.csv','utf8').trim().split('\n').map(l=>{const[pid,optId,optName,optVal,svid,bare,retail,cost]=l.split('|');return{pid,optId,optName,optVal,svid,bare,retail:+retail,cost:+cost};});
+let created=[]; try{created=JSON.parse(fs.readFileSync('data/price-sheets/addroll-oddball-created.json','utf8'));}catch{}
+const donePids=new Set(created.map(c=>c.pid));
+let targets=all.filter(t=>!donePids.has(t.pid));
+if(donePids.size)console.log(`(skipping ${all.length-targets.length} already-done)`);
+if(Number.isFinite(LIMIT))targets=targets.slice(0,LIMIT);
+console.log(`oddball — mode: ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | targets: ${targets.length}`);
+
+if(!APPLY){
+ for(const t of targets)console.log(` ${t.bare}: sku->${t.bare}-Sample (keep $4.25) | opt ${t.optName}->Size, "${t.optVal}"->"Sample" | ADD Roll ${t.bare} @ $${t.retail} | inv ${INV_QTY} both`);
+ console.log(`\nDRY-RUN. To execute: node add-roll-variant-oddball.mjs --apply --i-am-steve`);
+ process.exit(0);
+}
+
+const VU=`mutation($productId:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkUpdate(productId:$productId,variants:$variants){userErrors{field message}}}`;
+const QOV=`query($id:ID!){node(id:$id){... on Product{options{id name optionValues{id name}}}}}`;
+const OPTU=`mutation($productId:ID!,$option:OptionUpdateInput!,$optionValuesToUpdate:[OptionValueUpdateInput!]){productOptionUpdate(productId:$productId,option:$option,optionValuesToUpdate:$optionValuesToUpdate){userErrors{field message}}}`;
+const C=`mutation($productId:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkCreate(productId:$productId,variants:$variants){productVariants{id sku inventoryItem{id}} userErrors{field message}}}`;
+const INV=`mutation($input:InventorySetOnHandQuantitiesInput!){inventorySetOnHandQuantities(input:$input){userErrors{field message}}}`;
+const QII=`query($id:ID!){node(id:$id){... on ProductVariant{inventoryItem{id}}}}`;
+const loc=await gql(`{locations(first:5){nodes{id}}}`);
+if(loc?.__err){console.error('⛔ location read failed');process.exit(2);}
+const LOCATION=loc.locations.nodes[0].id;
+
+let ok=0,err=0;
+for(const t of targets){
+ // 1) rename existing variant sku -> bare-Sample (frees the bare sku)
+ const u=await gql(VU,{productId:t.pid,variants:[{id:t.svid,inventoryItem:{sku:`${t.bare}-Sample`}}]});
+ const uerr=u?.__err||u?.productVariantsBulkUpdate?.userErrors;
+ if(u?.__err||(uerr&&uerr.length)){err++;console.log(' sku-rename-err',t.bare,JSON.stringify(uerr).slice(0,140));continue;}
+ // 2) rename option -> Size, value -> Sample
+ const ov=await gql(QOV,{id:t.pid}); const opt=ov?.node?.options?.[0];
+ const valId=opt?.optionValues?.find(x=>x.name===t.optVal)?.id || opt?.optionValues?.[0]?.id;
+ const ru=await gql(OPTU,{productId:t.pid,option:{id:opt.id,name:'Size'},optionValuesToUpdate:[{id:valId,name:'Sample'}]});
+ const rerr=ru?.__err||ru?.productOptionUpdate?.userErrors;
+ if(ru?.__err||(rerr&&rerr.length)){err++;console.log(' opt-rename-err',t.bare,JSON.stringify(rerr).slice(0,140));continue;}
+ // 3) add Roll @ retail on the now-free bare sku
+ const d=await gql(C,{productId:t.pid,variants:[{price:t.retail.toFixed(2),inventoryItem:{sku:t.bare,tracked:true},optionValues:[{optionName:'Size',name:'Roll'}]}]});
+ const ce=d?.__err||d?.productVariantsBulkCreate?.userErrors;
+ if(d?.__err||(ce&&ce.length)){err++;console.log(' create-err',t.bare,JSON.stringify(ce).slice(0,160));continue;}
+ const rollVar=d.productVariantsBulkCreate.productVariants[0];
+ created.push({pid:t.pid,rollVid:rollVar.id,rollSku:rollVar.sku}); ok++;
+ // 4) inventory 2026 both
+ const sii=(await gql(QII,{id:t.svid}))?.node?.inventoryItem?.id;
+ const items=[rollVar.inventoryItem?.id,sii].filter(Boolean);
+ await gql(INV,{input:{reason:'correction',setQuantities:items.map(id=>({inventoryItemId:id,locationId:LOCATION,quantity:INV_QTY}))}});
+ fs.writeFileSync('data/price-sheets/addroll-oddball-created.json',JSON.stringify(created,null,2));
+ console.log(` ✓ ${t.bare}: Sample ${t.bare}-Sample $4.25 + Roll ${t.bare} $${t.retail}`);
+}
+console.log(`\nDONE — ${ok} oddballs resolved, ${err} errors.`);
diff --git a/scripts/price-sheets/add-roll-variant.mjs b/scripts/price-sheets/add-roll-variant.mjs
new file mode 100644
index 0000000..0f976b6
--- /dev/null
+++ b/scripts/price-sheets/add-roll-variant.mjs
@@ -0,0 +1,92 @@
+#!/usr/bin/env node
+/**
+ * add-roll-variant.mjs — for the 532 dark single-variant Schumacher products whose only
+ * variant is Size:"Sample" @ $4.25, ADD a real Size:"Roll" variant priced at DW retail
+ * (cost/0.65/0.85) while KEEPING the $4.25 memo sample. (Steve's choice, 2026-06-15.)
+ *
+ * Standing rule: new variants get inventory=2026 on BOTH variants (sample + roll), set at
+ * the primary location. REQUIRES a token with read_locations + write_inventory in addition
+ * to write_products. If location read fails, the script REFUSES to run (won't half-build).
+ *
+ * Targets: /tmp/schu-addroll-targets.csv = productGid,sampleVarGid,sampleSku,rollSku,retail,cost
+ * Reversible: records created roll-variant ids to data/price-sheets/addroll-created.json
+ * (revert = productVariantsBulkDelete those ids).
+ *
+ * USAGE: node add-roll-variant.mjs --limit=2 # dry-run, 2 products
+ * node add-roll-variant.mjs --limit=2 --apply --i-am-steve # LIVE test on 2
+ * node add-roll-variant.mjs --apply --i-am-steve # LIVE all 532
+ */
+import fs from 'node:fs';
+const SHOP='designer-laboratory-sandbox.myshopify.com', VER='2024-10';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+if(!TOKEN){console.error('no token');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true&&args['i-am-steve']===true;
+const LIMIT=args.limit?parseInt(args.limit,10):Infinity;
+const INV_QTY=2026;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500*(a+1));continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(a+1));continue;}return{__err:j.errors};}const t=j.extensions?.cost?.throttleStatus;if(t&&t.currentlyAvailable<400)await sleep(1200);return j.data;}throw new Error('retries');}
+
+let targets=fs.readFileSync('/tmp/schu-addroll-targets.csv','utf8').trim().split('\n').map(l=>{const[pid,svid,ssku,rsku,retail,cost]=l.split(',');return{pid,svid,ssku,rsku,retail:+retail,cost:+cost};});
+// idempotent: skip products that already got a roll variant (recorded in created json)
+let donePids=new Set();
+try{donePids=new Set(JSON.parse(fs.readFileSync('data/price-sheets/addroll-created.json','utf8')).map(c=>c.pid));}catch{}
+const skipDone=targets.filter(t=>donePids.has(t.pid)).length;
+targets=targets.filter(t=>!donePids.has(t.pid));
+if(skipDone)console.log(`(skipping ${skipDone} already-created)`);
+if(Number.isFinite(LIMIT))targets=targets.slice(0,LIMIT);
+console.log(`add-roll-variant — mode: ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | targets: ${targets.length} (of 532)`);
+
+// preflight: location read (proves the new token has the scopes). REFUSE if it fails.
+const loc=await gql(`{locations(first:5){nodes{id}}}`);
+if(loc?.__err){
+ console.error('\n⛔ token cannot read locations — needs read_locations + write_inventory.');
+ console.error(' '+JSON.stringify(loc.__err).slice(0,200));
+ console.error(' Route the upgraded token via the secrets skill, then re-run. Refusing to half-build.');
+ process.exit(2);
+}
+const LOCATION=loc.locations.nodes[0].id;
+console.log(`primary location: ${LOCATION}`);
+
+if(!APPLY){
+ console.log('\nDRY-RUN plan (first 6):');
+ for(const t of targets.slice(0,6))console.log(` ${t.ssku}: keep Sample $4.25 + ADD Roll ${t.rsku} @ $${t.retail} (inv ${INV_QTY} both)`);
+ console.log(`\nWould add ${targets.length} roll variants. To execute: node add-roll-variant.mjs ${Number.isFinite(LIMIT)?`--limit=${LIMIT} `:''}--apply --i-am-steve`);
+ process.exit(0);
+}
+
+const C=`mutation($productId:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkCreate(productId:$productId,variants:$variants){productVariants{id sku inventoryItem{id}} userErrors{field message}}}`;
+const VAROPT=`query($id:ID!){node(id:$id){... on ProductVariant{selectedOptions{value}}}}`;
+const INV=`mutation($input:InventorySetOnHandQuantitiesInput!){inventorySetOnHandQuantities(input:$input){userErrors{field message}}}`;
+const QII=`query($id:ID!){node(id:$id){... on ProductVariant{inventoryItem{id}}}}`;
+
+// accumulate created records across runs (don't clobber prior runs' revert log)
+let created=[]; try{created=JSON.parse(fs.readFileSync('data/price-sheets/addroll-created.json','utf8'));}catch{}
+let ok=0,err=0,invok=0,inverr=0;
+for(const t of targets){
+ // default-variant sample-preservation guard: this script's create hard-codes the "Size"
+ // option (its 532 targets carry Size:"Sample"). If a target's lone variant is instead
+ // Shopify's implicit "Default Title", creating a Size:"Roll" variant would REPLACE the lone
+ // $4.25 sample. Rather than retrofit dynamic-option handling, SAFE-SKIP such products so the
+ // sample is never destroyed (mirrors af-build.js 'title-option-needs-migration').
+ const vo=(await gql(VAROPT,{id:t.svid}))?.node?.selectedOptions?.[0]?.value||'';
+ if(/^default title$/i.test(vo)){err++;if(err<=10)console.log(' skip default-title (needs migration, sample preserved):',t.ssku);continue;}
+ // 1) add the Roll variant
+ const d=await gql(C,{productId:t.pid,variants:[{price:t.retail.toFixed(2),inventoryItem:{sku:t.rsku,tracked:true},optionValues:[{optionName:'Size',name:'Roll'}]}]});
+ if(d?.__err){err++;if(err<=10)console.log(' ERR',t.ssku,JSON.stringify(d.__err).slice(0,160));continue;}
+ const ue=d.productVariantsBulkCreate?.userErrors||[];
+ if(ue.length){err++;if(err<=10)console.log(' uerr',t.ssku,JSON.stringify(ue));continue;}
+ const rollVar=d.productVariantsBulkCreate.productVariants[0];
+ created.push({pid:t.pid,rollVid:rollVar.id,rollSku:rollVar.sku}); ok++;
+ // 2) inventory=2026 on BOTH variants
+ const sii=(await gql(QII,{id:t.svid}))?.node?.inventoryItem?.id;
+ const items=[rollVar.inventoryItem?.id, sii].filter(Boolean);
+ const setq=items.map(id=>({inventoryItemId:id,locationId:LOCATION,quantity:INV_QTY}));
+ const di=await gql(INV,{input:{reason:'correction',setQuantities:setq}});
+ if(di?.__err||di?.inventorySetOnHandQuantities?.userErrors?.length){inverr++;if(inverr<=10)console.log(' inv-err',t.rsku,JSON.stringify(di?.__err||di.inventorySetOnHandQuantities.userErrors).slice(0,140));}else invok++;
+ if((ok+err)%100===0)console.log(` progress: ${ok} created / ${err} err / inv ${invok} ok ${inverr} err`);
+ fs.writeFileSync('data/price-sheets/addroll-created.json',JSON.stringify(created,null,2));
+}
+console.log(`\nDONE — ${ok} roll variants added, ${err} errors | inventory set: ${invok} ok, ${inverr} err`);
+console.log('reversible: data/price-sheets/addroll-created.json (productVariantsBulkDelete to undo)');
diff --git a/scripts/price-sheets/archive-schu-junk.mjs b/scripts/price-sheets/archive-schu-junk.mjs
new file mode 100644
index 0000000..c6d8a64
--- /dev/null
+++ b/scripts/price-sheets/archive-schu-junk.mjs
@@ -0,0 +1,30 @@
+#!/usr/bin/env node
+/**
+ * archive-schu-junk.mjs — archive the stale "copy-of" Schumacher duplicate.
+ * Target: "Crocodile Animal Skin Faux Wallcovering" (handle copy-of-crocodile-animal-skin-faux-wallpaper),
+ * a leftover Shopify duplicate — sample-only ($4.25, no roll), junk mfr metafield
+ * (COPY-OF-CROCODILE-ANIMAL-SKIN-FAUX-WALLPAPER). Sets status ARCHIVED (reversible).
+ *
+ * STAGED — dry-run by default. To execute: node archive-schu-junk.mjs --apply --i-am-steve
+ */
+import fs from 'node:fs';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true && args['i-am-steve']===true;
+const PID='gid://shopify/Product/6901119746099';
+async function gql(q,v){const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});return r.json();}
+const LK=`query($id:ID!){ node(id:$id){ ... on Product{ id title handle status variants(first:5){nodes{sku price}} } } }`;
+const MUT=`mutation($id:ID!){ productUpdate(input:{id:$id, status:ARCHIVED}){ product{ id status } userErrors{ field message } } }`;
+(async()=>{
+ const lk=await gql(LK,{id:PID}); const p=lk.data&&lk.data.node;
+ if(!p){console.error('product not found — already deleted?');process.exit(1);}
+ console.log(`Target: ${p.title} [${p.status}] handle=${p.handle}`);
+ p.variants.nodes.forEach(v=>console.log(` ${v.sku} | $${v.price}`));
+ // safety: refuse if it ever gained a real roll price (would mean it's a live sellable product)
+ if(p.variants.nodes.some(v=>parseFloat(v.price)>4.30)){console.error('ABORT: product has a real-priced variant — not a junk sample-only dupe. Review manually.');process.exit(2);}
+ if(!APPLY){console.log('\nDRY-RUN. To archive: node archive-schu-junk.mjs --apply --i-am-steve');process.exit(0);}
+ const rr=await gql(MUT,{id:PID}); const e=rr.data?.productUpdate?.userErrors||[];
+ if(e.length){console.error('ERROR',JSON.stringify(e));process.exit(1);}
+ console.log(`ARCHIVED — status now ${rr.data.productUpdate.product.status}`);
+})();
diff --git a/scripts/price-sheets/build-dw-exclusives-roll-plan.py b/scripts/price-sheets/build-dw-exclusives-roll-plan.py
new file mode 100644
index 0000000..999d86a
--- /dev/null
+++ b/scripts/price-sheets/build-dw-exclusives-roll-plan.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+"""
+build-dw-exclusives-roll-plan.py — LOCAL DRAFT ONLY (no canonical write).
+
+Emits a roll-build plan jsonl (af-build.js-compatible shape) for the DW-exclusive
+Graham & Brown line, from the already-staged 2023 cost sheet. One row per live
+G&B sample SKU that reconciles to a cost row by NUMERIC mfr_sku.
+
+Scope/guards baked in per DTD verdict A (2026-06-20, unanimous 3/3):
+ - Graham & Brown ONLY (excludes the ~36 cross-vendor numeric collisions).
+ - ROLL-aware: targets the -Sample product to ADD a "Sold Per Roll" variant at
+ the derived retail; the $4.25 sample is never repriced (af-build.js guards that).
+ - retail = wholesale_cost / 0.65 / 0.85 (DW generic formula; G&B is NOT a
+ Kravet-family line so MAP does not apply).
+
+Writes:
+ data/price-sheets/dw-exclusives-gb-rollbuild-plan-2026-06-20.jsonl
+This plan is NOT executed. Running af-build.js against it = the GATED canonical
+Shopify write, held for vp-dw-commerce sign-off + Steve approval.
+"""
+import subprocess, json, os
+
+DATE = "2026-06-20"
+SRC = "Designer Wallcoverings Exclusives Price Increase 2023.xlsx"
+OUT = os.path.join(os.path.dirname(__file__), "..", "..", "data", "price-sheets",
+ f"dw-exclusives-gb-rollbuild-plan-{DATE}.jsonl")
+
+def retail(cost): return round(cost / 0.65 / 0.85, 2)
+
+def q(sql):
+ r = subprocess.run(["psql", "-d", "dw_unified", "-tAF", "\t", "-c", sql],
+ capture_output=True, text=True)
+ r.check_returncode()
+ return [ln.split("\t") for ln in r.stdout.splitlines() if ln.strip()]
+
+# staged cost: clean numeric sku -> wholesale (lowest if a sku repeats)
+cost = {}
+for num_sku, whls in q(f"""
+ select regexp_replace(split_part(mfr_sku,'.',1),'[^0-9]','','g'), wholesale
+ from vendor_price_sheets where source_file=$${SRC}$$ and wholesale is not null"""):
+ if not num_sku: continue
+ try: v = float(whls)
+ except ValueError: continue
+ cost[num_sku] = min(v, cost.get(num_sku, v))
+
+# live G&B SAMPLE products keyed by numeric mfr_sku.
+# Emit the af-build.js plan contract directly: {id, sampleSku, price, unit,
+# optName, buildable, title} + descriptive keys. Pull live status + option name
+# so `buildable` is honest (af-build re-checks ACTIVE + Size-option live and
+# skips Title-option / non-active products — pre-flag them here).
+plan = []
+seen = set()
+for num_mfr, sku, sid, handle, status, optname, title in q("""
+ select regexp_replace(coalesce(mfr_sku,''),'[^0-9]','','g'), sku, coalesce(shopify_id,''),
+ coalesce(handle,''), coalesce(status,''), coalesce(option1_name,''), coalesce(title,'')
+ from shopify_products
+ where vendor='Graham & Brown' and mfr_sku ~ '[0-9]' and sku ~* 'sample'"""):
+ if num_mfr not in cost: continue
+ if sku in seen: continue # de-dup live variant rows
+ seen.add(sku)
+ c = cost[num_mfr]
+ opt = optname or "Size"
+ buildable = bool(sid) and (status.upper() == "ACTIVE") and (opt == "Size")
+ plan.append({
+ # --- af-build.js contract ---
+ "id": sid, # Shopify GID
+ "sampleSku": sku, # base = sampleSku minus -SAMPLE -> roll variant sku
+ "price": retail(c), # derived retail = roll variant price
+ "unit": "Sold Per Roll", # option value name
+ "optName": opt, # must resolve to 'Size' live to build
+ "buildable": buildable,
+ "title": title,
+ # --- descriptive / audit ---
+ "vendor": "Graham & Brown",
+ "line": "DW Exclusive (Graham & Brown)",
+ "mfr_pattern_no": num_mfr,
+ "wholesale_cost": c,
+ "uom": "ROLL",
+ "basis": "cost/0.65/0.85",
+ "live_status": status,
+ })
+
+os.makedirs(os.path.dirname(OUT), exist_ok=True)
+with open(OUT, "w") as f:
+ for row in plan:
+ f.write(json.dumps(row) + "\n")
+
+prices = [r["roll_price"] for r in plan]
+print(f"cost SKUs staged ............ {len(cost)}")
+print(f"G&B roll-build plan rows .... {len(plan)}")
+print(f"roll_price range ............ ${min(prices):.2f} – ${max(prices):.2f}")
+print(f"plan written ................ {os.path.relpath(OUT)}")
diff --git a/scripts/price-sheets/build-schu-rolls.mjs b/scripts/price-sheets/build-schu-rolls.mjs
new file mode 100644
index 0000000..34b15e4
--- /dev/null
+++ b/scripts/price-sheets/build-schu-rolls.mjs
@@ -0,0 +1,109 @@
+#!/usr/bin/env node
+/**
+ * build-schu-rolls.mjs — ADD a "Sold Per Roll" variant to sample-only Schumacher
+ * WALLCOVERINGS, priced at DW retail = cost/0.65/0.85 (Schumacher = Designer Net,
+ * discount 0.00 → catalog cost IS our net cost; verified memory).
+ *
+ * Source: /tmp/schu-rollbuild.tsv (pid \t mfr \t sampleSku \t rollSku \t cost \t retail)
+ * built from: live active Schumacher sample-only products ⋈ schumacher_catalog cost
+ * (joined on custom.manufacturer_sku metafield, NOT dw_sku — that linkage is broken).
+ *
+ * SAFETY RAILS (mirror build-roll-scale.js / push-schu-roll-prices.mjs):
+ * - Only ADDS a roll variant. The $4.25 memo SAMPLE is never touched; never flips ACTIVE.
+ * - Re-confirms the product is STILL sample-only (1 variant, price ≤ $4.30) before adding.
+ * A product that already has a real roll is skipped (no duplicate).
+ * - PRICE_CAP (default $2000): retail above it is HELD for unit review (per-yard/panel risk).
+ * - Variant daily-limit / throttle → abort cleanly (no cap fight with sample-split).
+ * - Resumable via done-file. Writes created.jsonl for reversibility. 25s fetch timeout.
+ *
+ * USAGE: node build-schu-rolls.mjs # dry-run (default, no writes)
+ * node build-schu-rolls.mjs --apply --i-am-steve # LIVE
+ * ROLL_CAP=465 PRICE_CAP=2000 node build-schu-rolls.mjs --apply --i-am-steve
+ */
+import fs from 'node:fs';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true && args['i-am-steve']===true;
+const CAP=parseInt(process.env.ROLL_CAP||'600',10);
+const PRICE_CAP=parseFloat(process.env.PRICE_CAP||'2000');
+const SRC=process.env.SRC||'/tmp/schu-rollbuild.tsv';
+const DIR='/Users/macstudio3/Projects/designerwallcoverings/data/price-sheets';
+const DONE=DIR+'/schu-rolls-done.txt';
+const CREATED=DIR+'/schu-rolls-created.jsonl';
+const HELD=DIR+'/schu-rolls-held.jsonl';
+const LIMIT_RE=/exceed|daily.*limit|limit.*reached|throttl|too many/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+
+async function gql(q,v){
+ for(let i=0;i<7;i++){let r;const ac=new AbortController();const to=setTimeout(()=>ac.abort(),25000);
+ try{r=await fetch(URL,{method:'POST',signal:ac.signal,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});}
+ catch(e){clearTimeout(to);await sleep(1500*(i+1));continue;}
+ clearTimeout(to);
+ if(r.status===429||r.status>=500){await sleep(2000*(i+1));continue;}
+ let j;try{j=await r.json();}catch(e){await sleep(2000*(i+1));continue;}
+ if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(i+1));continue;}
+ return j;
+ }
+ throw new Error('exhausted retries');
+}
+const LOOKUP=`query($id:ID!){ node(id:$id){ ... on Product { id status options{name} variants(first:10){nodes{price sku}} } } }`;
+const MUT=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkCreate(productId:$pid,variants:$variants){ productVariants{id price sku} userErrors{message} } }`;
+
+const rows=fs.readFileSync(SRC,'utf8').trim().split('\n').map(l=>{const[pid,mfr,ssku,rollsku,cost,retail]=l.split('\t');return{pid,mfr,ssku,rollsku,cost:+cost,retail:+retail};});
+const done=new Set(fs.existsSync(DONE)?fs.readFileSync(DONE,'utf8').split('\n').filter(Boolean):[]);
+const held=rows.filter(r=>r.retail>PRICE_CAP);
+const todo=rows.filter(r=>r.retail<=PRICE_CAP && !done.has(r.pid));
+console.log(`build-schu-rolls — ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | src ${rows.length} | held(>${PRICE_CAP}) ${held.length} | done ${done.size} | todo ${todo.length} | cap ${CAP}`);
+fs.writeFileSync(HELD,held.map(h=>JSON.stringify(h)).join('\n'));
+
+if(!APPLY){
+ console.log('\nFirst 8 to build:');
+ todo.slice(0,8).forEach(r=>console.log(` ${r.rollsku} mfr ${r.mfr} cost $${r.cost} -> roll $${r.retail}`));
+ console.log(`\nHeld for unit review (${held.length}, retail>$${PRICE_CAP}):`);
+ held.slice(0,8).forEach(r=>console.log(` ${r.rollsku} mfr ${r.mfr} $${r.retail}`));
+ console.log('\nDRY-RUN only. To execute: node build-schu-rolls.mjs --apply --i-am-steve');
+ process.exit(0);
+}
+
+const doneStream=fs.createWriteStream(DONE,{flags:'a'});
+const createdStream=fs.createWriteStream(CREATED,{flags:'a'});
+let made=0,skipped=0,aborted=false;
+for(const r of todo){
+ const lk=await gql(LOOKUP,{id:r.pid});
+ const p=lk.data&&lk.data.node;
+ if(!p){skipped++;doneStream.write(r.pid+'\n');continue;}
+ const vs=p.variants.nodes;
+ if(!(vs.length===1 && parseFloat(vs[0].price)<=4.30)){skipped++;doneStream.write(r.pid+'\n');continue;} // already has roll / not sample-only
+ const optName=(p.options[0]&&p.options[0].name)||'Title';
+ const variants=[{price:r.retail.toFixed(2),optionValues:[{optionName:optName,name:'Sold Per Roll'}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:r.rollsku,tracked:false}}];
+ const rr=await gql(MUT,{pid:p.id,variants});
+ const res=rr.data&&rr.data.productVariantsBulkCreate;
+ const e=(res&&res.userErrors)||[];
+ if(e.length){
+ if(LIMIT_RE.test(JSON.stringify(e))){console.log('Variant daily-limit/throttle — aborting:',JSON.stringify(e));aborted=true;break;}
+ skipped++;console.log(' err',r.rollsku,JSON.stringify(e));continue;
+ }
+ const nv=res.productVariants[0];
+ // SELF-HEAL: Shopify consumes the default "Title: Default Title" variant when the first
+ // named variant is created — which destroys a sample that was the default variant.
+ // Detect it (sample sku no longer present) and immediately re-create the $4.25 sample.
+ let healed=false;
+ const chk=await gql(LOOKUP,{id:p.id});
+ const after=(chk.data&&chk.data.node&&chk.data.node.variants.nodes)||[];
+ const hasSample=after.some(v=>/(sample|memo|swatch)/i.test([v.sku].join(' '))||/-sample$/i.test(v.sku||''));
+ if(!hasSample){
+ const sv=[{price:'4.25',optionValues:[{optionName:optName,name:'Sample'}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:r.ssku,tracked:false}}];
+ const sr=await gql(MUT,{pid:p.id,variants:sv});
+ const se=(sr.data&&sr.data.productVariantsBulkCreate&&sr.data.productVariantsBulkCreate.userErrors)||[];
+ if(se.length)console.log(' ⚠ sample re-create failed',r.ssku,JSON.stringify(se)); else healed=true;
+ }
+ made++;done.add(r.pid);doneStream.write(r.pid+'\n');
+ createdStream.write(JSON.stringify({pid:p.id,variantId:nv.id,sku:nv.sku,price:nv.price,mfr:r.mfr,healedSample:healed})+'\n');
+ if(made%25===0)console.log(` made ${made} / todo ${todo.length} (skipped ${skipped})`);
+ if(made>=CAP){console.log(`\nCap ${CAP} reached — stopping (resumable).`);break;}
+ await sleep(300);
+}
+doneStream.end();createdStream.end();
+console.log(`\nDONE — ${made} rolls built, ${skipped} skipped, ${todo.length-made-skipped} untouched.`);
+if(made>=CAP)process.exit(3);
diff --git a/scripts/price-sheets/build-schu-samples.mjs b/scripts/price-sheets/build-schu-samples.mjs
new file mode 100644
index 0000000..075af73
--- /dev/null
+++ b/scripts/price-sheets/build-schu-samples.mjs
@@ -0,0 +1,57 @@
+#!/usr/bin/env node
+/**
+ * build-schu-samples.mjs — ADD a $4.25 memo-SAMPLE variant to active Schumacher
+ * WALLCOVERINGS that have a roll variant but no sample (the "and samples" half).
+ *
+ * Source: /tmp/schu-needsample.json [{pid, optName, rollSku, sampleSku, productType}]
+ *
+ * RAILS: only ADDS a sample; re-confirms the product currently has NO sample variant
+ * before adding (idempotent); never touches the roll; never flips ACTIVE; aborts on the
+ * daily variant cap; resumable; logs created.jsonl for reversibility.
+ *
+ * USAGE: node build-schu-samples.mjs # dry-run
+ * node build-schu-samples.mjs --apply --i-am-steve # LIVE
+ */
+import fs from 'node:fs';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true && args['i-am-steve']===true;
+const DIR='/Users/macstudio3/Projects/designerwallcoverings/data/price-sheets';
+const DONE=DIR+'/schu-samples-done.txt', CREATED=DIR+'/schu-samples-created.jsonl';
+const LIMIT_RE=/exceed|daily.*limit|limit.*reached|throttl|too many/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let i=0;i<7;i++){let r;const ac=new AbortController();const to=setTimeout(()=>ac.abort(),25000);
+ try{r=await fetch(URL,{method:'POST',signal:ac.signal,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});}
+ catch(e){clearTimeout(to);await sleep(1500*(i+1));continue;}clearTimeout(to);
+ if(r.status===429||r.status>=500){await sleep(2000*(i+1));continue;}
+ let j;try{j=await r.json();}catch(e){await sleep(2000*(i+1));continue;}
+ if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(i+1));continue;}return j;}
+ throw new Error('exhausted retries');}
+const isSample=v=>/(sample|memo|swatch)/i.test([v.title,v.sku].join(' '))||/-sample$/i.test(v.sku||'');
+const LOOKUP=`query($id:ID!){ node(id:$id){ ... on Product { id options{name} variants(first:10){nodes{title sku price}} } } }`;
+const MUT=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkCreate(productId:$pid,variants:$variants){ productVariants{id price sku} userErrors{message} } }`;
+
+const rows=JSON.parse(fs.readFileSync('/tmp/schu-needsample.json','utf8'));
+const done=new Set(fs.existsSync(DONE)?fs.readFileSync(DONE,'utf8').split('\n').filter(Boolean):[]);
+const todo=rows.filter(r=>!done.has(r.pid));
+console.log(`build-schu-samples — ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | src ${rows.length} | done ${done.size} | todo ${todo.length}`);
+if(!APPLY){todo.slice(0,8).forEach(r=>console.log(` + ${r.sampleSku} @ $4.25`));console.log('\nDRY-RUN. To execute: node build-schu-samples.mjs --apply --i-am-steve');process.exit(0);}
+
+const doneStream=fs.createWriteStream(DONE,{flags:'a'}), createdStream=fs.createWriteStream(CREATED,{flags:'a'});
+let made=0,skipped=0;
+for(const r of todo){
+ const lk=await gql(LOOKUP,{id:r.pid}); const p=lk.data&&lk.data.node;
+ if(!p){skipped++;doneStream.write(r.pid+'\n');continue;}
+ if(p.variants.nodes.some(isSample)){skipped++;doneStream.write(r.pid+'\n');continue;} // already has a sample
+ const optName=(p.options[0]&&p.options[0].name)||'Title';
+ const variants=[{price:'4.25',optionValues:[{optionName:optName,name:'Sample'}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:r.sampleSku,tracked:false}}];
+ const rr=await gql(MUT,{pid:p.id,variants}); const res=rr.data&&rr.data.productVariantsBulkCreate; const e=(res&&res.userErrors)||[];
+ if(e.length){ if(LIMIT_RE.test(JSON.stringify(e))){console.log('daily-limit/throttle — aborting:',JSON.stringify(e));break;} skipped++;console.log(' err',r.sampleSku,JSON.stringify(e));continue; }
+ const nv=res.productVariants[0]; made++;done.add(r.pid);doneStream.write(r.pid+'\n');
+ createdStream.write(JSON.stringify({pid:p.id,variantId:nv.id,sku:nv.sku,price:nv.price})+'\n');
+ if(made%20===0)console.log(` made ${made}/${todo.length}`);
+ await sleep(300);
+}
+doneStream.end();createdStream.end();
+console.log(`\nDONE — ${made} samples built, ${skipped} skipped.`);
diff --git a/scripts/price-sheets/draft-dw-exclusives-cost-load.py b/scripts/price-sheets/draft-dw-exclusives-cost-load.py
new file mode 100644
index 0000000..34f3624
--- /dev/null
+++ b/scripts/price-sheets/draft-dw-exclusives-cost-load.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+"""
+draft-dw-exclusives-cost-load.py — LOCAL DRAFT ONLY (no canonical write).
+
+Reads the already-staged DW-Exclusives cost rows from
+dw_unified.vendor_price_sheets (source_file = the 2023 exclusives sheet),
+strips the float artifact on mfr_sku ('102146.0' -> '102146'), derives DW retail
+via the standing generic formula (cost / 0.65 / 0.85 — DW Exclusives are NOT a
+Kravet-family line, so MAP does not apply), joins each cost SKU to live
+shopify_products rows by NUMERIC mfr_sku, and writes a draft plan to
+data/price-sheets/dw-exclusives-cost-load-draft-<date>.csv.
+
+This is step 2 of the showroom task ("draft cost load locally — no canonical
+write"). The actual resolve (UPDATE shopify_products.cost/price) is the GATED
+canonical Kamatera write and is emitted as ready-to-run SQL to
+pending-approval/, NEVER executed here.
+"""
+import subprocess, csv, io, os, sys
+
+DATE = "2026-06-20"
+SRC = "Designer Wallcoverings Exclusives Price Increase 2023.xlsx"
+OUT = os.path.join(os.path.dirname(__file__), "..", "..", "data", "price-sheets",
+ f"dw-exclusives-cost-load-draft-{DATE}.csv")
+
+# DW generic retail formula (NOT Kravet MAP): retail = cost / 0.65 / 0.85
+def retail(cost):
+ return round(cost / 0.65 / 0.85, 2)
+
+def q(sql):
+ r = subprocess.run(["psql", "-d", "dw_unified", "-tAF", "\t", "-c", sql],
+ capture_output=True, text=True)
+ if r.returncode != 0:
+ sys.exit("psql error: " + r.stderr)
+ return [ln.split("\t") for ln in r.stdout.splitlines() if ln.strip()]
+
+# 1. staged cost rows -> clean numeric sku + wholesale
+rows = q(f"""
+ select distinct regexp_replace(split_part(mfr_sku,'.',1),'[^0-9]','','g') as num_sku,
+ wholesale
+ from vendor_price_sheets
+ where source_file = $${SRC}$$ and wholesale is not null
+""")
+cost_by_sku = {}
+for num_sku, whls in rows:
+ if not num_sku:
+ continue
+ try:
+ cost_by_sku[num_sku] = float(whls)
+ except ValueError:
+ continue
+
+# 2. live products keyed by numeric mfr_sku (the reconciliation join)
+live = q("""
+ select regexp_replace(coalesce(mfr_sku,''),'[^0-9]','','g') as num_mfr,
+ sku, vendor, coalesce(price::text,''), coalesce(cost::text,'')
+ from shopify_products
+ where mfr_sku ~ '[0-9]'
+""")
+live_by_num = {}
+for num_mfr, sku, vendor, price, cost in live:
+ if num_mfr:
+ live_by_num.setdefault(num_mfr, []).append((sku, vendor, price, cost))
+
+# 3. build the draft join
+os.makedirs(os.path.dirname(OUT), exist_ok=True)
+matched_skus = matched_rows = 0
+with open(OUT, "w", newline="") as f:
+ w = csv.writer(f)
+ w.writerow(["num_sku", "wholesale_cost", "derived_retail",
+ "live_sku", "live_vendor", "current_price", "current_cost", "status"])
+ for num_sku, cost in sorted(cost_by_sku.items()):
+ der = retail(cost)
+ hits = live_by_num.get(num_sku, [])
+ if not hits:
+ w.writerow([num_sku, cost, der, "", "", "", "", "NO_LIVE_MATCH"])
+ continue
+ matched_skus += 1
+ for sku, vendor, price, cur_cost in hits:
+ matched_rows += 1
+ status = "WOULD_SET_COST_AND_PRICE"
+ if cur_cost and cur_cost not in ("", "0", "0.00"):
+ status = "HAS_COST_ALREADY"
+ w.writerow([num_sku, cost, der, sku, vendor, price, cur_cost, status])
+
+print(f"cost SKUs staged ........ {len(cost_by_sku)}")
+print(f"cost SKUs w/ live match .. {matched_skus}")
+print(f"live product rows touched. {matched_rows}")
+print(f"draft written ............ {os.path.relpath(OUT)}")
diff --git a/scripts/price-sheets/load-price-sheets.py b/scripts/price-sheets/load-price-sheets.py
new file mode 100644
index 0000000..11252ae
--- /dev/null
+++ b/scripts/price-sheets/load-price-sheets.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python3
+"""
+load-price-sheets.py — ingest every GDrive vendor price sheet into
+dw_unified.vendor_price_sheets (staging). Keyword-detects the header row + the
+SKU / wholesale / retail / unit columns per sheet (formats vary wildly: header in
+row 1 or 2, Italian 'Listino', multi-sheet workbooks). Per-file vendor hint.
+
+READ→STAGE only. Resolving staging → shopify_products.cost is a separate gated step
+(and must carry unit, per the YARD/ROLL lesson). Idempotent per source_file (deletes
+prior rows for that file before reload).
+"""
+import openpyxl, glob, os, re, json, subprocess, sys
+
+SKU_KEYS = ['sku','item','articolo','pattern number','js number','pattern_number','mfr','style']
+WHLS_KEYS = ['new wholesale','new cost','wholesale','whls','trade price','listino wholesale','cost of goods','current cost','mid year price','current price','cost','net','price']
+RETAIL_KEYS= ['new map','new retail','map','listino retail','current retail','retail','msrp']
+UNIT_KEYS = ['unit of measure','unit','uom']
+VENDOR_COL_KEYS = ['vendor','brand']
+
+# per-file vendor hint (None => read a Vendor/Brand column per row) + sheets to skip
+VENDOR_HINT = {
+ 'Kravet Price list 1-20-26.xlsx': None, # already in kravet tables -> skip below
+ 'Designer Wallcoverings Exclusives Price Increase 2023.xlsx': 'Designer Wallcoverings',
+ 'MH 2023 PRICE LIST USD LANDED USD RETAIL.xlsx': 'MH-2023-UNIDENTIFIED',
+ 'MIssoni Price .xlsx': 'Missoni',
+ 'Mini Modern - Wallpaper price list.xlsx': None, # has per-row Vendor/Brand
+ 'Ralph Lauren Price Sheet.xlsx': 'Ralph Lauren',
+ 'Schumacher_2023 Master Price Increase List- MD 7.18.xlsx': 'Schumacher',
+}
+SKIP_FILES = {'Kravet Price list 1-20-26.xlsx'} # redundant w/ kravet_authoritative_pricing
+
+def norm(s): return re.sub(r'[^a-z0-9]','',str(s or '').lower())
+def num(v):
+ if v is None: return None
+ try:
+ x=float(str(v).replace('$','').replace(',','').strip())
+ return x if x>0 else None
+ except: return None
+def matchcol(headers, keys):
+ hl=[str(h).lower().strip() if h is not None else '' for h in headers]
+ # pass 1: exact header == key (so a column literally 'SKU' beats 'Item Description')
+ for k in keys:
+ for i,h in enumerate(hl):
+ if h==k: return i
+ # pass 2: header starts with key
+ for k in sorted(keys, key=len, reverse=True):
+ for i,h in enumerate(hl):
+ if h.startswith(k): return i
+ # pass 3: contains (longest key first to prefer 'new wholesale' over 'wholesale')
+ for k in sorted(keys, key=len, reverse=True):
+ for i,h in enumerate(hl):
+ if k in h: return i
+ return None
+
+def find_header(rows):
+ # the row (within first 8) that contains a SKU-like keyword AND a price-like keyword
+ for ri in range(min(8,len(rows))):
+ cells=[str(c).lower() if c is not None else '' for c in rows[ri]]
+ has_sku=any(any(k in c for k in SKU_KEYS) for c in cells)
+ has_price=any(any(k in c for k in WHLS_KEYS+RETAIL_KEYS) for c in cells)
+ if has_sku and has_price: return ri
+ return None
+
+def best_sheet(wb):
+ best=None
+ for name in wb.sheetnames:
+ ws=wb[name]
+ rows=[]
+ for i,r in enumerate(ws.iter_rows(values_only=True)):
+ rows.append(r)
+ if i>=12: break
+ hr=find_header(rows)
+ if hr is not None:
+ # count data rows
+ n=sum(1 for _ in ws.iter_rows(values_only=True))
+ if not best or n>best[3]: best=(name,hr,rows,n)
+ return best
+
+def load_file(f):
+ base=os.path.basename(f)
+ if base in SKIP_FILES: return (base,'SKIP (redundant)',0)
+ wb=openpyxl.load_workbook(f, read_only=True, data_only=True)
+ bs=best_sheet(wb)
+ if not bs: return (base,'NO HEADER FOUND',0)
+ name,hr,_,_=bs
+ ws=wb[name]
+ it=ws.iter_rows(values_only=True)
+ for _ in range(hr): next(it)
+ headers=list(next(it))
+ ci_sku=matchcol(headers,SKU_KEYS); ci_w=matchcol(headers,WHLS_KEYS)
+ ci_r=matchcol(headers,RETAIL_KEYS); ci_u=matchcol(headers,UNIT_KEYS)
+ ci_v=matchcol(headers,VENDOR_COL_KEYS)
+ if ci_sku is None or (ci_w is None and ci_r is None):
+ return (base,f'sheet={name} unmappable (sku={ci_sku} w={ci_w} r={ci_r})',0)
+ vhint=VENDOR_HINT.get(base)
+ rows_out=[]
+ for r in it:
+ if not r or ci_sku>=len(r): continue
+ sku=r[ci_sku]
+ if sku is None or str(sku).strip() in ('','None'): continue
+ w=num(r[ci_w]) if ci_w is not None and ci_w<len(r) else None
+ rt=num(r[ci_r]) if ci_r is not None and ci_r<len(r) else None
+ if w is None and rt is None: continue
+ unit=(str(r[ci_u]).upper() if ci_u is not None and ci_u<len(r) and r[ci_u] else None)
+ vendor=vhint or (str(r[ci_v]) if ci_v is not None and ci_v<len(r) and r[ci_v] else 'UNKNOWN')
+ rows_out.append((vendor,str(sku).strip(),norm(sku),w,rt,unit,base))
+ return (base,f'sheet={name} hdr@{hr+1} sku@{ci_sku} w@{ci_w} r@{ci_r} u@{ci_u}',rows_out)
+
+def psql(sql, stdin=None):
+ return subprocess.run(['psql','-d','dw_unified','-v','ON_ERROR_STOP=1','-c',sql] if stdin is None
+ else ['psql','-d','dw_unified','-v','ON_ERROR_STOP=1','-c',sql],
+ capture_output=True, text=True)
+
+total=0; report=[]
+for f in sorted(glob.glob('/tmp/price-sheets/*.xlsx')):
+ base,info,rows=load_file(f)
+ if isinstance(rows,int) or not rows:
+ report.append(f' [skip] {base}: {info}'); continue
+ # idempotent reload for this file
+ subprocess.run(['psql','-d','dw_unified','-c',
+ f"delete from vendor_price_sheets where source_file = $${base}$$;"],
+ capture_output=True, text=True)
+ # bulk insert via COPY
+ import csv, io
+ buf=io.StringIO(); w=csv.writer(buf)
+ for row in rows: w.writerow(list(row[:-1])+[base])
+ buf.seek(0)
+ p=subprocess.run(['psql','-d','dw_unified','-c',
+ "copy vendor_price_sheets(vendor,mfr_sku,mfr_sku_norm,wholesale,map_or_retail,unit_of_measure,source_file) from stdin with csv"],
+ input=buf.getvalue(), capture_output=True, text=True)
+ ok = 'COPY' in (p.stdout+p.stderr)
+ n=len(rows)
+ total += n if ok else 0
+ report.append(f' [{"OK " if ok else "ERR"}] {base}: {n} rows | {info}' + ('' if ok else ' | '+p.stderr.strip()[:120]))
+
+print('\n'.join(report))
+print(f'\nTOTAL loaded into vendor_price_sheets: {total}')
diff --git a/scripts/price-sheets/push-schu-roll-prices.mjs b/scripts/price-sheets/push-schu-roll-prices.mjs
new file mode 100644
index 0000000..cc80124
--- /dev/null
+++ b/scripts/price-sheets/push-schu-roll-prices.mjs
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+/**
+ * push-schu-roll-prices.mjs — set the ROLL variant price = DW retail (cost/0.65/0.85)
+ * for the newly-costed Schumacher SINGLE-ROLL wallcoverings. These were dark ($0 or the
+ * $4.25 memo-sample trap); this gives them a real price for the first time.
+ *
+ * SAFETY (same rails as the Kravet MAP push):
+ * - Only the ROLL (non -sample) variant. The $4.25 memo SAMPLE is never touched.
+ * - cost is SINGLE-ROLL unit (verified) -> retail is per-roll. (YARD/PANEL/RL held out.)
+ * - Only WRITES where current roll price is garbage (<= $10, i.e. $0 / $4.25). A product
+ * that already has a real price (> $10) is NEVER clobbered -> flagged as anomaly + skipped.
+ * - Anomaly guard: retail/cur > 2.5x or < 0.4x on a real price -> skip.
+ * - Reversible: writes a plan json of {pid,vid,from,to} so a revert can restore.
+ *
+ * USAGE: node push-schu-roll-prices.mjs # dry-run
+ * node push-schu-roll-prices.mjs --apply --i-am-steve
+ */
+import fs from 'node:fs';
+const SHOP='designer-laboratory-sandbox.myshopify.com', VER='2024-10';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]?.trim();
+if(!TOKEN){console.error('no token');process.exit(1);}
+const URL=`https://${SHOP}/admin/api/${VER}/graphql.json`;
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true&&args['i-am-steve']===true;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500*(a+1));continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(a+1));continue;}throw new Error(JSON.stringify(j.errors));}const t=j.extensions?.cost?.throttleStatus;if(t&&t.currentlyAvailable<400)await sleep(1200);return j.data;}throw new Error('retries');}
+const isSample=v=>/(sample|memo|swatch)/i.test([v.title,v.sku].join(' '))||/-sample$/i.test(v.sku||'');
+
+const rows=fs.readFileSync('/tmp/schu-roll-pricing.csv','utf8').trim().split('\n').map(l=>{const[gid,mfr,cost,retail]=l.split(',');return{gid,mfr,cost:+cost,retail:+retail};});
+console.log(`push-schu-roll-prices — mode: ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | SINGLE-ROLL targets: ${rows.length}`);
+
+const Q=`query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product { id variants(first:30){ nodes { id title sku price } } } } }`;
+const M=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid,variants:$variants){ userErrors{ field message } } }`;
+const b={fix:[],already_priced:[],anomaly:[],no_roll:[],missing:[]};
+for(let i=0;i<rows.length;i+=50){
+ const batch=rows.slice(i,i+50);
+ const data=await gql(Q,{ids:batch.map(x=>x.gid)});
+ const byId=new Map(batch.map(x=>[x.gid,x]));
+ const got=new Set();
+ for(const p of data.nodes){ if(!p)continue; got.add(p.id);
+ const t=byId.get(p.id); const rolls=p.variants.nodes.filter(v=>!isSample(v));
+ if(!rolls.length){b.no_roll.push(t);continue;}
+ const roll=rolls.reduce((a,c)=>+c.price>+a.price?c:a);
+ const cur=+roll.price; const rec={pid:p.id,vid:roll.id,mfr:t.mfr,cur,to:t.retail};
+ if(Math.abs(cur-t.retail)<0.01){b.already_priced.push(rec);continue;}
+ if(cur<=10){b.fix.push(rec);} // $0/$4.25 garbage -> price it
+ else if(t.retail/cur>2.5||t.retail/cur<0.4){b.anomaly.push(rec);} // real price, suspicious -> skip
+ else{b.already_priced.push(rec);} // real price, close enough -> leave
+ }
+ for(const x of batch) if(!got.has(x.gid)) b.missing.push(x);
+ if(i%500===0&&i)process.stderr.write(` scanned ${i}/${rows.length}\n`);
+}
+console.log(` fix garbage ($0/$4.25) -> retail : ${b.fix.length}`);
+console.log(` already real-priced (leave) : ${b.already_priced.length}`);
+console.log(` ⚠ anomaly (skip, real price) : ${b.anomaly.length}`);
+console.log(` no roll variant (skip) : ${b.no_roll.length}`);
+console.log(` not found on Shopify (skip) : ${b.missing.length}`);
+console.log(' sample fixes:'); for(const r of b.fix.slice(0,6))console.log(` ${r.mfr}: $${r.cur} -> $${r.to}`);
+fs.writeFileSync('data/price-sheets/schu-roll-price-plan.json',JSON.stringify({fix:b.fix,anomaly:b.anomaly},null,2));
+if(!APPLY){console.log('\nDRY-RUN only. To execute: node push-schu-roll-prices.mjs --apply --i-am-steve');process.exit(0);}
+
+console.log('\n⚠️ LIVE APPLY — pricing SINGLE-ROLL wallcoverings…');
+let ok=0,err=0;
+for(const r of b.fix){
+ try{const d=await gql(M,{pid:r.pid,variants:[{id:r.vid,price:r.to.toFixed(2)}]});
+ const ue=d.productVariantsBulkUpdate?.userErrors||[];if(ue.length){err++;if(err<=10)console.log(' err',r.mfr,JSON.stringify(ue));}else ok++;
+ }catch(e){err++;if(err<=10)console.log(' EX',r.mfr,e.message);}
+ if((ok+err)%200===0)console.log(` progress ${ok} ok / ${err} err`);
+}
+console.log(`\nDONE — ${ok} roll prices set, ${err} errors.`);
diff --git a/scripts/price-sheets/relabel-schu-sample-as-roll.mjs b/scripts/price-sheets/relabel-schu-sample-as-roll.mjs
new file mode 100644
index 0000000..58db29e
--- /dev/null
+++ b/scripts/price-sheets/relabel-schu-sample-as-roll.mjs
@@ -0,0 +1,65 @@
+#!/usr/bin/env node
+/**
+ * relabel-schu-sample-as-roll.mjs — fix Schumacher products whose ROLL price is sitting
+ * on a single "-Sample"/"Sample"-labeled variant (no real roll, no real $4.25 sample).
+ *
+ * For each: UPDATE that single variant -> optionValue "Sold Per Roll", sku = base (strip
+ * -Sample), price = catalog retail (cost/0.65/0.85). This is an UPDATE (not a create) so it
+ * is NOT subject to the daily variant-creation cap. The real $4.25 SAMPLE is added afterward
+ * by build-schu-samples.mjs (a create, cap-limited) once the variant is named "Sold Per Roll".
+ *
+ * Source: /tmp/schu-relabel.tsv (pid \t base_sku \t retail \t cur_price)
+ *
+ * RAILS: re-confirms the product has exactly ONE variant whose sku ends -Sample AND price>$4.30
+ * before touching it (idempotent — a product already relabeled is skipped). Resumable (done-file).
+ * Logs before/after to relabel-done.jsonl for reversibility.
+ *
+ * USAGE: node relabel-schu-sample-as-roll.mjs # dry-run
+ * LIMIT=1 node relabel-schu-sample-as-roll.mjs --apply --i-am-steve # test 1
+ * node relabel-schu-sample-as-roll.mjs --apply --i-am-steve # all
+ */
+import fs from 'node:fs';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true && args['i-am-steve']===true;
+const LIMIT=process.env.LIMIT?parseInt(process.env.LIMIT,10):Infinity;
+const DIR='/Users/macstudio3/Projects/designerwallcoverings/data/price-sheets';
+const DONE=DIR+'/schu-relabel-done.txt', LOG=DIR+'/schu-relabel-done.jsonl';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let i=0;i<7;i++){let r;const ac=new AbortController();const to=setTimeout(()=>ac.abort(),25000);
+ try{r=await fetch(URL,{method:'POST',signal:ac.signal,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});}
+ catch(e){clearTimeout(to);await sleep(1500*(i+1));continue;}clearTimeout(to);
+ if(r.status===429||r.status>=500){await sleep(2000*(i+1));continue;}
+ let j;try{j=await r.json();}catch(e){await sleep(2000*(i+1));continue;}
+ if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(i+1));continue;}return j;}
+ throw new Error('exhausted retries');}
+const LOOKUP=`query($id:ID!){ node(id:$id){ ... on Product{ id options{name} variants(first:10){nodes{id title sku price}} } } }`;
+const MUT=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid,variants:$variants){ productVariants{id sku price title} userErrors{field message} } }`;
+
+const rows=fs.readFileSync('/tmp/schu-relabel.tsv','utf8').trim().split('\n').map(l=>{const[pid,base,retail,cur]=l.split('\t');return{pid,base,retail:+retail,cur:+cur};});
+const done=new Set(fs.existsSync(DONE)?fs.readFileSync(DONE,'utf8').split('\n').filter(Boolean):[]);
+const todo=rows.filter(r=>!done.has(r.pid)).slice(0,LIMIT);
+console.log(`relabel-schu — ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | src ${rows.length} | done ${done.size} | todo ${todo.length}`);
+if(!APPLY){ todo.slice(0,8).forEach(r=>console.log(` ${r.base}: Sample $${r.cur} -> Sold Per Roll $${r.retail}`)); console.log('\nDRY-RUN. To execute: node relabel-schu-sample-as-roll.mjs --apply --i-am-steve'); process.exit(0); }
+
+const doneStream=fs.createWriteStream(DONE,{flags:'a'}), logStream=fs.createWriteStream(LOG,{flags:'a'});
+let ok=0,skip=0,err=0;
+for(const r of todo){
+ const lk=await gql(LOOKUP,{id:r.pid}); const p=lk.data&&lk.data.node;
+ if(!p){skip++;doneStream.write(r.pid+'\n');continue;}
+ const vs=p.variants.nodes;
+ const isSampleVar=v=>/-sample$/i.test(v.sku||'')||/^sample$/i.test(v.title||'');
+ // guard: exactly one variant, it's the -Sample one, priced as a roll (>$4.30)
+ if(!(vs.length===1 && isSampleVar(vs[0]) && parseFloat(vs[0].price)>4.30)){skip++;doneStream.write(r.pid+'\n');continue;}
+ const v=vs[0]; const optName=(p.options[0]&&p.options[0].name)||'Title';
+ const upd=[{id:v.id, price:r.retail.toFixed(2), optionValues:[{optionName:optName,name:'Sold Per Roll'}], inventoryItem:{sku:r.base}}];
+ const rr=await gql(MUT,{pid:p.id,variants:upd}); const res=rr.data&&rr.data.productVariantsBulkUpdate; const e=(res&&res.userErrors)||[];
+ if(e.length){err++;console.log(' err',r.base,JSON.stringify(e));continue;}
+ const nv=res.productVariants[0]; ok++;done.add(r.pid);doneStream.write(r.pid+'\n');
+ logStream.write(JSON.stringify({pid:p.id,vid:v.id,from:{sku:v.sku,price:v.price,title:v.title},to:{sku:nv.sku,price:nv.price,title:nv.title}})+'\n');
+ if(ok%25===0)console.log(` relabeled ${ok}/${todo.length} (skip ${skip}, err ${err})`);
+ await sleep(250);
+}
+doneStream.end();logStream.end();
+console.log(`\nDONE — ${ok} relabeled, ${skip} skipped, ${err} errors.`);
diff --git a/scripts/price-sheets/resume-roll-adds.sh b/scripts/price-sheets/resume-roll-adds.sh
new file mode 100755
index 0000000..bd76cb8
--- /dev/null
+++ b/scripts/price-sheets/resume-roll-adds.sh
@@ -0,0 +1,42 @@
+#!/bin/zsh
+# resume-roll-adds.sh — finish the remaining Schumacher roll-variant adds the morning
+# after Shopify's daily variant-creation limit resets. Idempotent: both node scripts skip
+# already-created products via their revert logs, so re-runs only do what's left.
+# Self-disables its launchd job once 0 clean+edge targets remain.
+set -e
+cd "$HOME/Projects/designerwallcoverings"
+LOG="/tmp/schu-rolladd-resume-$(date +%Y%m%d-%H%M).log"
+exec > >(tee -a "$LOG") 2>&1
+echo "=== resume-roll-adds $(date) ==="
+
+# restore persisted target CSVs into /tmp (where the scripts read them)
+cp -f data/price-sheets/schu-addroll-targets.csv /tmp/schu-addroll-targets.csv
+cp -f data/price-sheets/schu-addroll-edge.csv /tmp/schu-addroll-edge.csv
+
+echo "--- clean 532 set ---"
+node scripts/price-sheets/add-roll-variant.mjs --apply --i-am-steve || true
+echo "--- edge 37 (Default-Title) ---"
+node scripts/price-sheets/add-roll-variant-edge.mjs --apply --i-am-steve || true
+echo "--- 4 oddballs (sku-swap) ---"
+node scripts/price-sheets/add-roll-variant-oddball.mjs --apply --i-am-steve || true
+
+# how many remain across both sets?
+REMAIN=$(node -e '
+const fs=require("fs");
+const done=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
+const edone=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-edge-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
+const clean=fs.readFileSync("/tmp/schu-addroll-targets.csv","utf8").trim().split("\n").filter(l=>!done.has(l.split(",")[0])).length;
+const edge=fs.readFileSync("/tmp/schu-addroll-edge.csv","utf8").trim().split("\n").filter(l=>{const[pid,,optName,optVal,,ssku]=l.split("|");return optName==="Title"&&optVal==="Default Title"&&/-sample$/i.test(ssku)&&!edone.has(pid)}).length;
+const odone=new Set((()=>{try{return JSON.parse(fs.readFileSync("data/price-sheets/addroll-oddball-created.json","utf8")).map(c=>c.pid)}catch{return[]}})());
+const odd=fs.readFileSync("data/price-sheets/schu-addroll-oddball.csv","utf8").trim().split("\n").filter(l=>!odone.has(l.split("|")[0])).length;
+console.log(clean+edge+odd);
+')
+echo "remaining clean+edge roll-adds: $REMAIN"
+
+if [ "$REMAIN" -eq 0 ]; then
+ echo "ALL roll-adds complete — self-disabling launchd job."
+ launchctl bootout gui/$(id -u)/com.steve.schu-rolladd-resume 2>/dev/null || true
+else
+ echo "still $REMAIN remaining (likely daily cap again) — job will retry tomorrow."
+fi
+echo "=== done $(date) | log: $LOG ==="
diff --git a/scripts/price-sheets/schu-find-needsample.mjs b/scripts/price-sheets/schu-find-needsample.mjs
new file mode 100644
index 0000000..874dea0
--- /dev/null
+++ b/scripts/price-sheets/schu-find-needsample.mjs
@@ -0,0 +1,15 @@
+import fs from 'node:fs';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<8;a++){let j;try{const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});j=await r.json();}catch(e){await sleep(1500);continue;}if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000);continue;}throw new Error(JSON.stringify(j.errors));}return j.data;}throw new Error('retries');}
+const isSample=v=>/(sample|memo|swatch)/i.test([v.title,v.sku].join(' '))||/-sample$/i.test(v.sku||'');
+const Q=`query($c:String){ products(first:100, query:"vendor:Schumacher status:active", after:$c){ pageInfo{hasNextPage endCursor} nodes{ id options{name} productType variants(first:20){nodes{id title sku price}} } } }`;
+let cur=null, need=[];
+do{ const d=await gql(Q,{c:cur}); for(const p of d.products.nodes){
+ const vs=p.variants.nodes; const samples=vs.filter(isSample); const rolls=vs.filter(v=>!isSample(v));
+ if(rolls.length && !samples.length){ const base=(rolls[0].sku||'').replace(/-Roll$/i,''); need.push({pid:p.id, optName:(p.options[0]&&p.options[0].name)||'Title', rollSku:rolls[0].sku, sampleSku: base+'-Sample', productType:p.productType}); }
+} cur=d.products.pageInfo.hasNextPage?d.products.pageInfo.endCursor:null;}while(cur);
+fs.writeFileSync('/tmp/schu-needsample.json',JSON.stringify(need,null,2));
+const pt={}; need.forEach(x=>pt[x.productType||'(none)']=(pt[x.productType||'(none)']||0)+1);
+console.log('roll-only-no-sample:',need.length,'types:',pt); console.log(need.slice(0,4).map(x=>x.sampleSku));
diff --git a/scripts/price-sheets/schu-reconcile-all.mjs b/scripts/price-sheets/schu-reconcile-all.mjs
new file mode 100644
index 0000000..ca79f69
--- /dev/null
+++ b/scripts/price-sheets/schu-reconcile-all.mjs
@@ -0,0 +1,117 @@
+#!/usr/bin/env node
+/**
+ * schu-reconcile-all.mjs — single self-contained reconciler for Schumacher variant state.
+ * For EVERY active Schumacher Wallcovering/Commercial-Wallcovering product that has a known
+ * catalog cost, ensure it has BOTH:
+ * - a "Sold Per Roll" variant priced at DW retail (cost/0.65/0.85), and
+ * - a $4.25 "Sample" variant.
+ * Creates whichever is missing. No dependence on ephemeral /tmp files — queries live Shopify
+ * + schumacher_catalog at runtime, so it is safe to run from a scheduled (launchd) job.
+ *
+ * Cost source: schumacher_catalog.cost keyed by the product's custom.manufacturer_sku metafield
+ * (the dw_sku linkage is broken; mfr_sku via metafield is authoritative — verified 2026-06-17).
+ *
+ * RAILS:
+ * - Idempotent: only creates a missing variant; a complete product is left untouched.
+ * - SELF-HEAL: after adding the first named variant Shopify may consume the default
+ * "Title: Default Title" variant; re-checks and re-adds the missing side.
+ * - Roll price ceiling $12000 (the verified premium collection tops out at $9,955); above
+ * that → HELD for unit review, logged not built.
+ * - Daily variant-creation cap → abort cleanly (resumable). 25s fetch timeout.
+ * - Never flips status; never touches an existing correctly-priced variant.
+ * - Logs every create to reconcile-created.jsonl.
+ *
+ * USAGE: node schu-reconcile-all.mjs # dry-run (plan only)
+ * node schu-reconcile-all.mjs --apply --i-am-steve # LIVE
+ */
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+const TOKEN=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].trim();
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const args=Object.fromEntries(process.argv.slice(2).map(a=>{const[k,v]=a.replace(/^--/,'').split('=');return[k,v===undefined?true:v];}));
+const APPLY=args.apply===true && args['i-am-steve']===true;
+const CEIL=parseFloat(process.env.PRICE_CEIL||'12000');
+const DIR='/Users/macstudio3/Projects/designerwallcoverings/data/price-sheets';
+const CREATED=DIR+'/schu-reconcile-created.jsonl', HELD=DIR+'/schu-reconcile-held.jsonl';
+const LIMIT_RE=/exceed|daily.*limit|limit.*reached|throttl|too many/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let i=0;i<7;i++){let r;const ac=new AbortController();const to=setTimeout(()=>ac.abort(),25000);
+ try{r=await fetch(URL,{method:'POST',signal:ac.signal,headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});}
+ catch(e){clearTimeout(to);await sleep(1500*(i+1));continue;}clearTimeout(to);
+ if(r.status===429||r.status>=500){await sleep(2000*(i+1));continue;}
+ let j;try{j=await r.json();}catch(e){await sleep(2000*(i+1));continue;}
+ if(j.errors&&JSON.stringify(j.errors).includes('THROTTLED')){await sleep(2000*(i+1));continue;}return j;}
+ throw new Error('exhausted retries');}
+
+// catalog cost map: mfr_sku -> cost
+const costRaw=execFileSync('psql',['-At','-F','\t','-d','dw_unified','-c',
+ "SELECT mfr_sku, cost FROM schumacher_catalog WHERE cost IS NOT NULL AND mfr_sku<>''"],
+ {encoding:'utf8',maxBuffer:1<<28,env:{...process.env,PGHOST:'/tmp'}});
+const cost=new Map(costRaw.trim().split('\n').map(l=>{const[m,c]=l.split('\t');return[m,+c];}));
+console.log(`schu-reconcile-all — ${APPLY?'⚠️ LIVE APPLY':'DRY-RUN'} | catalog costs ${cost.size} | ceiling $${CEIL}`);
+
+const isSample=v=>parseFloat(v.price)<=4.30 && (/-sample$/i.test(v.sku||'')||/(sample|memo|swatch)/i.test(v.title||''));
+const isRoll=v=>parseFloat(v.price)>4.30;
+const SCAN=`query($c:String){ products(first:100, query:"vendor:Schumacher status:active", after:$c){ pageInfo{hasNextPage endCursor} nodes{ id productType options{name} variants(first:20){nodes{id title sku price}} metafield(namespace:"custom",key:"manufacturer_sku"){value} } } }`;
+const CRT=`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkCreate(productId:$pid,variants:$variants){ productVariants{id sku price} userErrors{message} } }`;
+const LK=`query($id:ID!){ node(id:$id){ ... on Product{ id variants(first:20){nodes{id sku title price}} } } }`;
+
+async function ensure(p){
+ const mfr=p.metafield&&p.metafield.value; if(!mfr||!cost.has(mfr)) return {skip:'no-cost'};
+ if(!/^(Wallcovering|Commercial Wallcovering)$/i.test(p.productType||'')) return {skip:'not-wallcovering'};
+ const retail=Math.round(cost.get(mfr)/0.65/0.85*100)/100;
+ const optName=(p.options[0]&&p.options[0].name)||'Title';
+ let vs=p.variants.nodes;
+ let roll=vs.find(isRoll), samp=vs.find(isSample);
+ // base sku
+ const base=(samp&&samp.sku?samp.sku.replace(/-sample$/i,''):(roll&&roll.sku?roll.sku.replace(/-roll$/i,''):null));
+ if(!base) return {skip:'no-base-sku'};
+ const acts=[];
+ if(!roll){ if(retail>CEIL) return {held:{base,retail}}; acts.push({kind:'roll',price:retail.toFixed(2),name:'Sold Per Roll',sku:base}); }
+ if(!samp){ acts.push({kind:'sample',price:'4.25',name:'Sample',sku:base+'-Sample'}); }
+ if(!acts.length) return {ok:'complete'};
+ if(!APPLY) return {plan:acts,base,retail};
+ // apply: roll first (may consume default), then re-check, then sample
+ let created=[];
+ for(const a of acts){
+ const variants=[{price:a.price,optionValues:[{optionName:optName,name:a.name}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:a.sku,tracked:false}}];
+ const rr=await gql(CRT,{pid:p.id,variants}); const res=rr.data&&rr.data.productVariantsBulkCreate; const e=(res&&res.userErrors)||[];
+ if(e.length){ if(LIMIT_RE.test(JSON.stringify(e))) throw {cap:true}; return {err:JSON.stringify(e),base}; }
+ created.push({kind:a.kind,...res.productVariants[0]});
+ }
+ // SELF-HEAL: did the roll-create consume the default sample?
+ if(acts.some(a=>a.kind==='roll') && !acts.some(a=>a.kind==='sample')){
+ // we created only a roll because a sample existed — verify it survived
+ const chk=await gql(LK,{id:p.id}); const after=(chk.data&&chk.data.node&&chk.data.node.variants.nodes)||[];
+ if(!after.some(isSample)){
+ const sv=[{price:'4.25',optionValues:[{optionName:optName,name:'Sample'}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:base+'-Sample',tracked:false}}];
+ const sr=await gql(CRT,{pid:p.id,variants:sv}); const se=(sr.data&&sr.data.productVariantsBulkCreate&&sr.data.productVariantsBulkCreate.userErrors)||[];
+ if(se.length){ if(LIMIT_RE.test(JSON.stringify(se))) throw {cap:true}; } else created.push({kind:'sample-healed',...sr.data.productVariantsBulkCreate.productVariants[0]});
+ }
+ }
+ return {created,base};
+}
+
+(async()=>{
+ const createdStream=APPLY?fs.createWriteStream(CREATED,{flags:'a'}):null;
+ const heldStream=fs.createWriteStream(HELD,{flags:'w'});
+ let cur=null, scanned=0, plan_roll=0, plan_sample=0, made=0, complete=0, held=0, skipped=0, capHit=false;
+ do{
+ const d=await gql(SCAN,{c:cur});
+ if(!d||!d.data||!d.data.products){ console.error('scan page returned no data — retrying in 3s'); await sleep(3000); continue; }
+ const page=d.data.products.nodes; cur=d.data.products.pageInfo.hasNextPage?d.data.products.pageInfo.endCursor:null;
+ for(const p of page){ scanned++;
+ let r; try{ r=await ensure(p); }catch(ex){ if(ex&&ex.cap){console.log('\n⚠ daily variant cap hit — aborting (resumable next run).');capHit=true;break;} throw ex; }
+ if(r.skip||r.ok){ if(r.ok)complete++; else skipped++; continue; }
+ if(r.held){ held++; heldStream.write(JSON.stringify(r.held)+'\n'); continue; }
+ if(r.plan){ r.plan.forEach(a=>a.kind==='roll'?plan_roll++:plan_sample++); continue; }
+ if(r.created){ made+=r.created.length; r.created.forEach(c=>createdStream.write(JSON.stringify({pid:p.id,...c})+'\n')); }
+ if(made%25===0&&made)process.stderr.write(`\r created ${made}`);
+ }
+ if(capHit)break;
+ }while(cur);
+ if(createdStream)createdStream.end(); heldStream.end();
+ process.stderr.write('\n');
+ if(!APPLY){ console.log(`scanned ${scanned} | would create: ${plan_roll} rolls + ${plan_sample} samples | already complete ${complete} | held ${held} | skipped(no-cost/non-wc) ${skipped}`); console.log('\nDRY-RUN. To execute: node schu-reconcile-all.mjs --apply --i-am-steve'); }
+ else { console.log(`scanned ${scanned} | created ${made} variants | complete ${complete} | held ${held} | skipped ${skipped}${capHit?' | CAP-ABORTED (resumable)':''}`); if(capHit)process.exit(3); }
+})().catch(e=>{console.error('FATAL',e.message||e);process.exit(1);});
diff --git a/scripts/price-sheets/schu-resume-build.sh b/scripts/price-sheets/schu-resume-build.sh
new file mode 100755
index 0000000..5613156
--- /dev/null
+++ b/scripts/price-sheets/schu-resume-build.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# schu-resume-build.sh — daily, self-terminating reconcile of Schumacher variant state.
+# Ensures every active Schumacher wallcovering-with-cost has BOTH a correctly-priced
+# "Sold Per Roll" variant AND a $4.25 "Sample" variant (creates whichever is missing).
+#
+# Self-contained: schu-reconcile-all.mjs queries live Shopify + schumacher_catalog at
+# runtime (no ephemeral /tmp deps), is idempotent, self-heals the Shopify default-variant
+# trap, and aborts cleanly on the daily variant-creation cap (resumable next morning).
+#
+# Runs daily at 7am (AFTER the 6:15am sample-split job) and grabs whatever cap headroom
+# remains. Once the reconciler's dry-run reports nothing left to create, it boots itself
+# out so it stops firing.
+set -u
+export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin"
+cd /Users/macstudio3/Projects/designerwallcoverings || exit 1
+LOG=/tmp/schu-resume-build-$(date +%Y%m%d).log
+{
+ echo "=== schu-reconcile $(date) ==="
+ node scripts/price-sheets/schu-reconcile-all.mjs --apply --i-am-steve
+ echo "--- remaining check ---"
+ PLAN=$(node scripts/price-sheets/schu-reconcile-all.mjs 2>/dev/null | grep "would create")
+ echo "$PLAN"
+ if echo "$PLAN" | grep -q "0 rolls + 0 samples"; then
+ echo "RECONCILE COMPLETE — self-unloading com.steve.schu-build-resume"
+ launchctl bootout gui/$(id -u)/com.steve.schu-build-resume 2>/dev/null
+ fi
+ echo "=== done $(date) ==="
+} >> "$LOG" 2>&1
diff --git a/scripts/price-sheets/schu-watch/schu-reconcile-watch.sh b/scripts/price-sheets/schu-watch/schu-reconcile-watch.sh
new file mode 100755
index 0000000..f8df64f
--- /dev/null
+++ b/scripts/price-sheets/schu-watch/schu-reconcile-watch.sh
@@ -0,0 +1,119 @@
+#!/bin/bash
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH" # launchd minimal-PATH fix (node/jq); preflight linter 2026-06-18
+# schu-reconcile-watch.sh — READ-ONLY daily watch over the in-flight Schumacher
+# pricing/sample reconciliation (com.steve.schu-build-resume, 7am).
+#
+# Each morning it:
+# 1. Runs the reconciler DRY-RUN (no flags = read-only) and parses the remaining
+# "would create: N rolls + M samples" plan.
+# 2. Appends {date, rolls, samples, total} to history.json (append-only ledger).
+# 3. Decides status:
+# - COMPLETE : total == 0 (reconciliation done)
+# - STALL : total > 0 AND total has NOT dropped for STALL_DAYS (4) consecutive
+# watch runs (means the 6:15am sample-split is eating the whole
+# ~1k/day variant cap → schedule needs a Steve-gated rebalance)
+# - PROGRESS : total > 0 and dropping (or fewer than STALL_DAYS of history)
+# 4. Surfaces to CNCP parking-lot + emails Steve via George ONLY on COMPLETE or STALL.
+# PROGRESS is silent (no daily noise). Every run writes data/latest.json.
+#
+# Hard bound: this watch NEVER applies, NEVER changes prices/variants, NEVER touches
+# the sample-split schedule. On a detected stall it PROPOSES a rebalance to Steve.
+set -uo pipefail
+
+REPO="$HOME/Projects/designerwallcoverings"
+SKILL="$REPO/scripts/price-sheets/schu-watch"
+DATA="$SKILL/data"; mkdir -p "$DATA"
+HIST="$DATA/history.json"
+LATEST="$DATA/latest.json"
+LOG="$DATA/watch.log"
+STALL_DAYS="${STALL_DAYS:-4}"
+TODAY="$(date +%Y-%m-%d)"
+log() { echo "[$(date -Iseconds)] $1" | tee -a "$LOG"; }
+
+cd "$REPO" || { log "FATAL: repo missing"; exit 1; }
+
+# 1. Read-only dry-run of the reconciler.
+PLAN_LINE="$(node scripts/price-sheets/schu-reconcile-all.mjs 2>>"$LOG" | grep -E 'would create')"
+if [ -z "$PLAN_LINE" ]; then
+ log "ERROR: reconciler produced no plan line — leaving prior history untouched"
+ exit 1
+fi
+# Example: "scanned 2327 | would create: 1 rolls + 259 samples | already complete 1271 | ..."
+ROLLS="$(echo "$PLAN_LINE" | sed -nE 's/.*would create: *([0-9]+) rolls.*/\1/p')"
+SAMPLES="$(echo "$PLAN_LINE" | sed -nE 's/.*\+ *([0-9]+) samples.*/\1/p')"
+ROLLS="${ROLLS:-0}"; SAMPLES="${SAMPLES:-0}"
+TOTAL=$(( ROLLS + SAMPLES ))
+log "dry-run: $ROLLS rolls + $SAMPLES samples = $TOTAL remaining"
+
+# 2. Append to history (one entry per calendar day; re-runs same day overwrite that day).
+[ -f "$HIST" ] || echo '[]' > "$HIST"
+TMP="$(mktemp)"
+jq --arg d "$TODAY" --argjson r "$ROLLS" --argjson s "$SAMPLES" --argjson t "$TOTAL" \
+ '(map(select(.date != $d))) + [{date:$d, rolls:$r, samples:$s, total:$t}] | sort_by(.date)' \
+ "$HIST" > "$TMP" && mv "$TMP" "$HIST"
+
+# 3. Decide status.
+# STALL = the most recent STALL_DAYS distinct days all have total == current total
+# (and total > 0). I.e. no downward movement across that window.
+STATUS="PROGRESS"
+if [ "$TOTAL" -eq 0 ]; then
+ STATUS="COMPLETE"
+else
+ # how many of the most-recent days share the current (non-decreasing) total?
+ FLAT_DAYS=$(jq --argjson t "$TOTAL" '
+ [ .[] | .total ] as $totals
+ | ($totals | length) as $n
+ | reduce range(0; $n) as $i (0;
+ ($totals[$n-1-$i]) as $v
+ | if $v == $t and (. == $i) then . + 1 else . end)
+ ' "$HIST")
+ FLAT_DAYS="${FLAT_DAYS:-1}"
+ log "flat-day streak at total=$TOTAL: $FLAT_DAYS (stall threshold $STALL_DAYS)"
+ if [ "$FLAT_DAYS" -ge "$STALL_DAYS" ]; then STATUS="STALL"; fi
+fi
+
+# Also confirm the resume job's own state for the report.
+RESUME_LOADED="$(launchctl list 2>/dev/null | grep -q 'com.steve.schu-build-resume' && echo yes || echo no)"
+
+jq -n --arg d "$TODAY" --arg status "$STATUS" --argjson rolls "$ROLLS" --argjson samples "$SAMPLES" \
+ --argjson total "$TOTAL" --arg resume "$RESUME_LOADED" --arg plan "$PLAN_LINE" \
+ '{checked_at:$d, status:$status, rolls:$rolls, samples:$samples, total:$total, resume_job_loaded:$resume, plan:$plan}' \
+ > "$LATEST"
+log "status: $STATUS (resume job loaded: $RESUME_LOADED)"
+
+# 4. Surface only on COMPLETE or STALL.
+if [ "$STATUS" = "PROGRESS" ]; then
+ log "PROGRESS — silent (no surface)"
+ exit 0
+fi
+
+CNCP="${CNCP_URL:-http://127.0.0.1:3333}"
+if [ "$STATUS" = "COMPLETE" ]; then
+ NOTE="[SCHU RECONCILE ✅ COMPLETE $TODAY] Schumacher pricing/sample reconciliation finished — 0 rolls + 0 samples left to create. The daily resume job should have self-unloaded. Watch com.steve.schu-reconcile-watch can be retired."
+ SUBJ="✅ Schumacher reconciliation COMPLETE — $TODAY"
+ COLOR="#2e7d32"
+else
+ NOTE="[SCHU RECONCILE ⚠ STALL $TODAY] Remaining $ROLLS rolls + $SAMPLES samples ($TOTAL) has NOT dropped for $STALL_DAYS+ consecutive days. Likely the 6:15am sample-split (com.steve.sample-split-resume) is consuming the entire ~1k/day variant cap before the 7am schu-build-resume runs, so Schumacher never gets headroom. PROPOSED (Steve-gated): rebalance — e.g. move schu-build-resume earlier than sample-split, OR carve a fixed Schumacher cap slice. Do NOT change the schedule without Steve sign-off."
+ SUBJ="⚠ Schumacher reconciliation STALLED ($TOTAL left, ${STALL_DAYS}d flat) — $TODAY"
+ COLOR="#b23b3b"
+fi
+
+curl -sS --max-time 10 "$CNCP/api/parking-lot" -H 'Content-Type: application/json' \
+ -d "$(jq -n --arg u "https://designer-laboratory-sandbox.myshopify.com/admin/products?vendor=Schumacher" --arg note "$NOTE" '{url:$u, note:$note}')" >/dev/null 2>&1 \
+ && log "CNCP posted ($STATUS)" || log "CNCP post failed"
+
+# George email (only on COMPLETE/STALL).
+GEORGE_PORT="${GEORGE_PORT:-9850}"; GEORGE_HOST="${GEORGE_HOST:-100.107.67.67}"
+if [ -z "${GEORGE_AUTH:-}" ] && [ -f "$HOME/Projects/secrets-manager/.env" ]; then
+ GEORGE_AUTH="$(grep -E '^GEORGE_AUTH=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2-)"
+fi
+TO="${SCHU_WATCH_TO:-steve@designerwallcoverings.com}"
+if [ -n "${GEORGE_AUTH:-}" ]; then
+ BODY="<div style=\"font-family:-apple-system,Helvetica,sans-serif;color:#222\"><h3 style=\"color:$COLOR\">$SUBJ</h3><p style=\"color:#888;font-size:13px\">$TODAY · status $STATUS · resume job loaded: $RESUME_LOADED</p><pre style=\"background:#f6f6f6;padding:10px;border-radius:6px;font-size:13px\">$NOTE</pre><p style=\"font-size:12px;color:#555\">Plan line: $PLAN_LINE</p></div>"
+ PAYLOAD=$(jq -Rn --arg to "$TO" --arg subject "$SUBJ" --arg body "$BODY" '{to:$to, subject:$subject, body:$body}')
+ curl -sS --max-time 15 "http://$GEORGE_HOST:$GEORGE_PORT/api/send" -H "Authorization: $GEORGE_AUTH" -H "Content-Type: application/json; charset=utf-8" -d "$PAYLOAD" > "$DATA/email-last.json" 2>&1
+ grep -q '"success":true\|messageId' "$DATA/email-last.json" 2>/dev/null && log "alert emailed to $TO" || log "email failed — see email-last.json"
+else
+ log "GEORGE_AUTH not found — skipped email"
+fi
+log "surfaced $STATUS"
diff --git a/scripts/promote-canary.sh b/scripts/promote-canary.sh
new file mode 100755
index 0000000..3fe4292
--- /dev/null
+++ b/scripts/promote-canary.sh
@@ -0,0 +1,76 @@
+#!/bin/bash
+# promote-canary.sh — turn a built-but-unscheduled canary script into a launchd
+# job. WRITES a plist to ~/Library/LaunchAgents/ and PRINTS the bootstrap command
+# — it NEVER runs launchctl bootstrap itself (plist install is Steve-gated, and
+# the auto-mode classifier blocks autonomous launchd bootstrap). Idempotent: a
+# re-run overwrites the plist with the same content.
+#
+# Born from the 2026-06-16 Officer Council #2 pick (Canary Promotion Harness):
+# the overnight loop built ~8 read-only canaries and scheduled NONE — the exact
+# pattern that let the pg_dump backup die silent for 12 days. This closes the
+# build→schedule gap with one reusable step.
+#
+# Usage:
+# bash scripts/promote-canary.sh <label> <abs-script-path> <cadence> [hour] [minute] [weekday]
+# <label> e.g. dw-handle-freshness (becomes com.steve.<label>)
+# <cadence> daily | weekly
+# weekday 0-6 (Sun=0), only used for weekly
+# Example (nightly 3:10am): bash scripts/promote-canary.sh dw-handle-freshness \
+# "$HOME/Projects/designerwallcoverings/scripts/handle-freshness/handle-freshness-canary.mjs" daily 3 10
+# Example (weekly Mon 4:00): ... tls-expiry ... weekly 4 0 1
+#
+# READ-ONLY w.r.t. prod. $0. The generated job just runs the (read-only) canary.
+set -euo pipefail
+
+LABEL="${1:?need label, e.g. dw-handle-freshness}"
+SCRIPT="${2:?need absolute script path}"
+CADENCE="${3:?need cadence: daily|weekly}"
+HOUR="${4:-3}"
+MIN="${5:-15}"
+WEEKDAY="${6:-1}" # Monday default for weekly
+
+[ -f "$SCRIPT" ] || { echo "✗ script not found: $SCRIPT" >&2; exit 1; }
+
+FULL="com.steve.${LABEL}"
+PLIST="$HOME/Library/LaunchAgents/${FULL}.plist"
+
+# choose runner by extension
+case "$SCRIPT" in
+ *.mjs|*.js) RUN="/usr/bin/env node \"$SCRIPT\"";;
+ *.sh) RUN="/bin/bash \"$SCRIPT\"";;
+ *.py) RUN="/usr/bin/env python3 \"$SCRIPT\"";;
+ *) RUN="\"$SCRIPT\"";;
+esac
+
+if [ "$CADENCE" = "weekly" ]; then
+ CAL="<dict><key>Weekday</key><integer>${WEEKDAY}</integer><key>Hour</key><integer>${HOUR}</integer><key>Minute</key><integer>${MIN}</integer></dict>"
+else
+ CAL="<dict><key>Hour</key><integer>${HOUR}</integer><key>Minute</key><integer>${MIN}</integer></dict>"
+fi
+
+cat > "$PLIST" <<PLISTEOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key><string>${FULL}</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string><string>-lc</string>
+ <string>${RUN} >> /tmp/${LABEL}.log 2>&1</string>
+ </array>
+ <key>StartCalendarInterval</key>${CAL}
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/${LABEL}.launchd.out.log</string>
+ <key>StandardErrorPath</key><string>/tmp/${LABEL}.launchd.err.log</string>
+</dict>
+</plist>
+PLISTEOF
+
+echo "✓ wrote $PLIST (${CADENCE} ${HOUR}:$(printf '%02d' "$MIN")${CADENCE:+${WEEKDAY:+}})"
+echo ""
+echo " → To ENABLE (Steve-gated — run this yourself):"
+echo " launchctl bootstrap gui/\$(id -u) \"$PLIST\""
+echo " → Verify: launchctl list | grep ${FULL}"
+echo " → Run-now: launchctl kickstart -k gui/\$(id -u)/${FULL}"
+echo " → Disable: launchctl bootout gui/\$(id -u)/${FULL}"
diff --git a/scripts/queue-slo-snapshot/queue-slo-snapshot.mjs b/scripts/queue-slo-snapshot/queue-slo-snapshot.mjs
new file mode 100644
index 0000000..6864be2
--- /dev/null
+++ b/scripts/queue-slo-snapshot/queue-slo-snapshot.mjs
@@ -0,0 +1,95 @@
+// queue-slo-snapshot — read-only SLO snapshot of the Shopify prod write queue
+// (shopify_api_queue). Every DW prod write (product create/update/archive,
+// GMC-exclude, April restore, draft reactivation, body-leak strip) drains
+// through this queue via the shopify-queue-worker on Kamatera. Before Steve
+// fires any ≤1k/day batched apply, he needs to know the live queue is healthy
+// and not already backed up.
+//
+// ⚠️ STALENESS GATE (cycle-21 lesson: the instrument must detect its own
+// blindness). The Mac2 mirror copy of shopify_api_queue is NOT in the 2-table
+// logical-replication set (see memory dw-unified-kamatera-canonical), so on Mac2
+// it is a FROZEN snapshot — empirically last_completed froze 2026-04-14. This
+// script REFUSES to report SLO numbers as "live" when the newest completed_at is
+// older than --max-stale-hours (default 6). On Mac2 it will (correctly) report
+// STALE / UNRELIABLE. To get a real read, point DW_UNIFIED_URL at the canonical
+// Kamatera DB (a read-only SELECT; prod-DB read is Steve-gated from Mac2).
+//
+// node queue-slo-snapshot.mjs [--max-stale-hours N]
+// READ-ONLY. $0. No writes.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const args = process.argv.slice(2);
+const MAX_STALE_H = parseFloat(args.find((_,i,a)=>a[i-1]==='--max-stale-hours') || '6') || 6;
+const today = new Date().toISOString().slice(0,10); // dynamic — a scheduled run must not clobber a prior day's report
+const OUT = `${process.env.HOME}/.claude/yolo-queue/queue-slo-snapshot-${today}.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/queue-slo-snapshot-${today}.md`;
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 64*1024*1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+
+// freshness probe
+const fresh = q(`select extract(epoch from (now()-max(completed_at)))/3600.0,
+ max(completed_at), max(created_at),
+ count(*) filter (where completed_at > now()-interval '24 hours')
+ from shopify_api_queue`)[0] || [];
+const hoursSinceCompleted = fresh[0] === '' || fresh[0] == null ? null : parseFloat(fresh[0]);
+const lastCompleted = fresh[1] || '(none)';
+const lastCreated = fresh[2] || '(none)';
+const tput24 = parseInt(fresh[3] || '0', 10);
+const STALE = hoursSinceCompleted == null || hoursSinceCompleted > MAX_STALE_H;
+
+const byStatus = q(`select status, count(*) from shopify_api_queue group by status order by 2 desc`);
+const pendingAge = q(`select min(created_at), extract(epoch from (now()-min(created_at)))/3600.0
+ from shopify_api_queue where status in ('pending','queued','pending_product')`)[0] || [];
+const errAgg = q(`select count(*) filter (where error is not null),
+ count(*) filter (where retries>0),
+ count(*) filter (where retries>=max_retries and max_retries>0)
+ from shopify_api_queue`)[0] || [];
+
+const report = {
+ generated_at: new Date().toISOString(), db: DB.replace(/:[^:@/]*@/, ':***@'),
+ freshness: { hours_since_last_completed: hoursSinceCompleted, last_completed: lastCompleted,
+ last_created: lastCreated, throughput_24h: tput24, max_stale_hours: MAX_STALE_H, stale: STALE },
+ by_status: Object.fromEntries(byStatus.map(r => [r[0], parseInt(r[1],10)])),
+ oldest_pending: pendingAge[0] || null, oldest_pending_age_h: pendingAge[1] ? parseFloat(pendingAge[1]) : null,
+ errors: { with_error: parseInt(errAgg[0]||'0',10), retried: parseInt(errAgg[1]||'0',10), exhausted: parseInt(errAgg[2]||'0',10) },
+};
+fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+let md = `# Shopify write-queue SLO snapshot — ${new Date().toISOString().slice(0,16)}\n\n`;
+md += `DB: \`${report.db}\` · **READ-ONLY, $0.**\n\n`;
+if (STALE) {
+ md += `## 🔴 STALE / UNRELIABLE — do NOT treat these numbers as live\n`;
+ md += `Newest \`completed_at\` is **${hoursSinceCompleted==null?'unknown':hoursSinceCompleted.toFixed(1)+'h'} old** (last: ${lastCompleted}), throughput-24h = **${tput24}**.\n`;
+ md += `This copy is not being drained — on Mac2 the queue table is a frozen snapshot (not in the 2-table logical-replication set, per \`dw-unified-kamatera-canonical\`). `;
+ md += `**A real SLO read must run against the canonical Kamatera DB.** Below is the frozen-snapshot content for reference only.\n\n`;
+} else {
+ md += `## 🟢 LIVE — drained within ${MAX_STALE_H}h\nLast completed ${hoursSinceCompleted.toFixed(2)}h ago · throughput-24h = ${tput24}.\n\n`;
+}
+md += `**Status distribution:** ${byStatus.map(r=>`${r[0]}=${r[1]}`).join(' · ')}\n\n`;
+md += `**Oldest pending:** ${report.oldest_pending||'—'} (${report.oldest_pending_age_h?report.oldest_pending_age_h.toFixed(1)+'h':'—'})\n\n`;
+md += `**Errors:** with_error=${report.errors.with_error} · retried=${report.errors.retried} · retry-exhausted=${report.errors.exhausted}\n`;
+fs.writeFileSync(MD, md);
+
+console.log(`[queue-slo] ${STALE?'🔴 STALE':'🟢 LIVE'} · last_completed=${lastCompleted} · tput24=${tput24} · pending=${report.by_status.pending||0}`);
+console.log(`Report: ${MD}`);
+
+// Alert ONLY on a genuine LIVE backup/error — NEVER on the by-design Mac2 frozen-mirror
+// STALE (that's expected here and would cry-wolf nightly). best-effort, never throws.
+const liveBackup = !STALE && ((report.oldest_pending_age_h ?? 0) > 12 || report.errors.exhausted > 0);
+if (liveBackup) {
+ try { const ac = new AbortController(); const t = setTimeout(()=>ac.abort(), 6000);
+ await fetch(`${process.env.CNCP_URL||'http://localhost:3333'}/api/parking-lot`,
+ { method:'POST', headers:{'Content-Type':'application/json'},
+ body: JSON.stringify({ url:'file://queue-slo-snapshot',
+ note:`[QUEUE-SLO 🔴] LIVE write-queue backed up: oldest_pending=${report.oldest_pending_age_h?.toFixed(1)}h · retry-exhausted=${report.errors.exhausted} · pending=${report.by_status.pending||0}` }),
+ signal: ac.signal });
+ clearTimeout(t); } catch { /* dashboard down — report still written */ }
+}
+process.exit(STALE ? 2 : 0);
diff --git a/scripts/rebel-walls-dwsku-recovery/recover-rebel-walls-dwsku.js b/scripts/rebel-walls-dwsku-recovery/recover-rebel-walls-dwsku.js
new file mode 100644
index 0000000..a1cfd6e
--- /dev/null
+++ b/scripts/rebel-walls-dwsku-recovery/recover-rebel-walls-dwsku.js
@@ -0,0 +1,367 @@
+#!/usr/bin/env node
+/**
+ * Rebel Walls dw_sku recovery — repairs the ~1,120 ACTIVE Rebel Walls
+ * shopify_products rows whose dw_sku was nulled by the import-queue-drain
+ * clobber (memory: import-queue-drain-clobbers-mirror). The runner backstop
+ * (commit 6c4ac9b) already prevents NEW nulls; this closes the existing gap.
+ *
+ * ──────────────────────────────────────────────────────────────────────────
+ * SOURCE-OF-TRUTH HIERARCHY (each row's chosen dw_sku is CONFIRMED against the
+ * row's CURRENT live Shopify non-sample variant SKU before it is proposed):
+ *
+ * (1) rw_sku_match_20d / rw_recrawl_match_94 (keyed by shopify_id)
+ * — the prior recovery's authoritative re-link to the vendor catalog.
+ * These hold the CURRENT 45xxxx-series dw_skus (tied to real mfr_sku).
+ * (2) variant_sku / sku on the mirror row, '-Sample' stripped
+ * — when the operational sample SKU survived on the mirror.
+ * (3) live Shopify non-sample variant SKU (fetched per-row)
+ * — fallback for rows in neither table and with no mirror variant_sku
+ * (the 14 '...-dwrw-360xxx' rows that kept their ORIGINAL dw_sku).
+ *
+ * !! The handle suffix (e.g. '...-dwrw-360001') is DELIBERATELY NOT a source.
+ * It is the CREATION-TIME dw_sku frozen in the immutable handle; the prior
+ * recovery REASSIGNED 1,104 of these to the 45xxxx series. Trusting the
+ * handle would write 1,104 WRONG dw_skus. The handle is used ONLY as a
+ * cross-check signal, never as a value. Live Shopify is the arbiter.
+ *
+ * Every proposed value MUST equal the live Shopify variant SKU or it is HELD.
+ * ──────────────────────────────────────────────────────────────────────────
+ *
+ * SAFETY / STANDING RULES:
+ * • Dry-run by DEFAULT. Writes ONLY with --apply.
+ * • PostgreSQL only. NEVER mutates live Shopify (read-only GETs to confirm).
+ * • Updates dw_sku ONLY WHERE dw_sku IS NULL. Never overwrites a populated
+ * value (the UPDATE WHERE clause re-asserts dw_sku IS NULL).
+ * • Sets ONLY dw_sku. Never touches mfr_sku / variant_sku / status / vendor.
+ * • Refuses ambiguous rows: a derived dw_sku that maps to >1 candidate row,
+ * or that collides with an existing populated dw_sku on another row, is HELD.
+ * • Idempotent + resumable: re-running skips rows already populated; a
+ * --resume run re-derives from scratch (cheap) and only touches stragglers.
+ * • Snapshot/backup of all target rows (id, shopify_id, dw_sku-before) is
+ * written to ./snapshots/ BEFORE any write, enabling a 1-row-per-line revert.
+ *
+ * TRIGGER NOTE (canonical only): trg_prevent_dw_mfr_sku inspects NEW.mfr_sku
+ * (^DW[A-Z]{1,4}-[0-9]+$) and NEW.variant_sku-vs-vendor_prefix. We set neither;
+ * all 1,120 candidates have vendor_prefix NULL so the variant_sku branch can't
+ * fire, and mfr_sku is left unchanged (NULL or a real R-code). trg_strip_sample
+ * only strips '-Sample' from dw_sku (ours never has it). Both provably no-op.
+ *
+ * USAGE:
+ * node recover-rebel-walls-dwsku.js # dry-run (default)
+ * node recover-rebel-walls-dwsku.js --apply # write to canonical PG
+ * node recover-rebel-walls-dwsku.js --no-live # skip live-Shopify confirm
+ * (match/variant_sku only)
+ * node recover-rebel-walls-dwsku.js --limit 50 # cap rows (testing)
+ * node recover-rebel-walls-dwsku.js --sample 20 # print N-row proposal sample
+ *
+ * On Kamatera canonical this connects via the sanctioned local socket
+ * postgresql://dw_admin@127.0.0.1:5432/dw_unified (same path as reverse-sync
+ * --apply). On Mac2 it connects to the local mirror for dry-run planning.
+ */
+
+'use strict';
+
+const { Pool } = require('pg');
+const fs = require('fs');
+const path = require('path');
+
+// ── args ──────────────────────────────────────────────────────────────────
+const argv = process.argv.slice(2);
+const APPLY = argv.includes('--apply');
+const NO_LIVE = argv.includes('--no-live');
+const RESUME = argv.includes('--resume'); // alias of default behaviour; explicit for clarity
+const getOpt = (name, def) => {
+ const i = argv.indexOf(name);
+ return i >= 0 && argv[i + 1] ? argv[i + 1] : def;
+};
+const LIMIT = parseInt(getOpt('--limit', '0'), 10) || 0;
+const SAMPLE_N = parseInt(getOpt('--sample', '20'), 10) || 20;
+
+// ── db ────────────────────────────────────────────────────────────────────
+// Default = the sanctioned canonical socket on Kamatera; on Mac2 the same URL
+// resolves to the local mirror (stevestudio2 superuser via local socket, but
+// we keep dw_admin@127.0.0.1 so the script is identical on both hosts; override
+// with DB_URL env if needed).
+const DB_URL =
+ process.env.DB_URL ||
+ (APPLY
+ ? 'postgresql://dw_admin@127.0.0.1:5432/dw_unified'
+ : (process.env.MAC2_DB_URL || 'postgresql:///dw_unified'));
+const pool = new Pool({ connectionString: DB_URL });
+
+// ── live Shopify (read-only confirm) ───────────────────────────────────────
+const SHOP_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
+const SHOP_VERSION = '2024-10';
+const SHOP_TOKEN =
+ process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_DW_ADMIN_TOKEN_CONTENT || '';
+
+async function liveVariantSku(shopifyGid) {
+ if (NO_LIVE) return null;
+ if (!SHOP_TOKEN) return null; // confirm unavailable → fall through to HOLD logic
+ const pid = String(shopifyGid).replace('gid://shopify/Product/', '');
+ const url = `https://${SHOP_DOMAIN}/admin/api/${SHOP_VERSION}/products/${pid}.json?fields=variants`;
+ try {
+ const r = await fetch(url, { headers: { 'X-Shopify-Access-Token': SHOP_TOKEN } });
+ if (!r.ok) return null;
+ const j = await r.json();
+ const vs = (j.product && j.product.variants) || [];
+ const real = vs.map((v) => v.sku).filter((s) => s && !/-sample$/i.test(s));
+ if (real.length) return real[0].toUpperCase();
+ const samp = vs.map((v) => v.sku).filter((s) => s && /-sample$/i.test(s));
+ if (samp.length) return samp[0].replace(/-sample$/i, '').toUpperCase();
+ return null;
+ } catch (_) {
+ return null;
+ }
+}
+
+// ── helpers ────────────────────────────────────────────────────────────────
+const DWRW_RE = /^DWRW-\d+$/;
+
+function stripSample(s) {
+ if (!s) return null;
+ return s.replace(/-sample$/i, '').toUpperCase();
+}
+
+async function main() {
+ const startedAt = new Date();
+ console.log('═'.repeat(78));
+ console.log(`Rebel Walls dw_sku recovery — ${APPLY ? 'APPLY (LIVE WRITE)' : 'DRY-RUN'}`);
+ console.log(`DB : ${DB_URL.replace(/:[^:@/]*@/, ':***@')}`);
+ console.log(`Live confirm: ${NO_LIVE ? 'OFF (--no-live)' : SHOP_TOKEN ? 'ON' : 'UNAVAILABLE (no token)'}`);
+ console.log(`Started : ${startedAt.toISOString()}`);
+ console.log('═'.repeat(78));
+
+ // 1. Pull candidate rows (ACTIVE Rebel Walls, dw_sku IS NULL) + both match tables.
+ const candSql = `
+ WITH cand AS (
+ SELECT id, shopify_id, handle, title, variant_sku, sku
+ FROM shopify_products
+ WHERE vendor ILIKE '%rebel%' AND upper(status)='ACTIVE' AND dw_sku IS NULL
+ ),
+ m AS (
+ SELECT shopify_id, dw_sku, match_kind, 'rw_sku_match_20d' AS src
+ FROM rw_sku_match_20d WHERE dw_sku IS NOT NULL AND dw_sku<>''
+ UNION ALL
+ SELECT shopify_id, dw_sku, match_kind, 'rw_recrawl_match_94' AS src
+ FROM rw_recrawl_match_94 WHERE dw_sku IS NOT NULL AND dw_sku<>''
+ )
+ SELECT c.id, c.shopify_id, c.handle, c.title, c.variant_sku, c.sku,
+ m.dw_sku AS match_dwsku, m.match_kind, m.src
+ FROM cand c
+ LEFT JOIN m ON m.shopify_id = c.shopify_id
+ ORDER BY c.handle
+ ${LIMIT ? `LIMIT ${LIMIT}` : ''};
+ `;
+ const { rows } = await pool.query(candSql);
+
+ // Deduplicate any shopify_id that appears in BOTH match tables (keep first,
+ // flag if the two tables disagree on dw_sku → that row becomes ambiguous).
+ const byId = new Map();
+ const matchConflict = new Set();
+ for (const r of rows) {
+ const prev = byId.get(r.shopify_id);
+ if (!prev) {
+ byId.set(r.shopify_id, r);
+ } else if (
+ prev.match_dwsku &&
+ r.match_dwsku &&
+ prev.match_dwsku.toUpperCase() !== r.match_dwsku.toUpperCase()
+ ) {
+ matchConflict.add(r.shopify_id);
+ }
+ }
+ const candidates = [...byId.values()];
+
+ // 2. Build a set of existing populated dw_skus (for collision detection).
+ const existing = await pool.query(
+ `SELECT upper(dw_sku) d FROM shopify_products WHERE dw_sku IS NOT NULL AND dw_sku<>''`
+ );
+ const populated = new Set(existing.rows.map((x) => x.d));
+
+ // 3. Derive + confirm each candidate.
+ const proposed = []; // {id, shopify_id, handle, dwsku, source, confirmed}
+ const held = []; // {handle, reason, derived, live}
+ const derivedCount = new Map(); // dwsku → n (within-candidate dup detection)
+
+ let i = 0;
+ for (const c of candidates) {
+ i++;
+ if (i % 100 === 0) process.stderr.write(` …confirmed ${i}/${candidates.length}\n`);
+
+ if (matchConflict.has(c.shopify_id)) {
+ held.push({ handle: c.handle, reason: 'match-tables disagree on dw_sku', derived: c.match_dwsku });
+ continue;
+ }
+
+ // candidate value, in source priority order
+ let derived = null;
+ let source = null;
+ if (c.match_dwsku) {
+ derived = c.match_dwsku.toUpperCase();
+ source = c.src; // rw_sku_match_20d | rw_recrawl_match_94
+ } else if (c.variant_sku || c.sku) {
+ derived = stripSample(c.variant_sku || c.sku);
+ source = 'mirror_variant_sku';
+ }
+
+ // live Shopify confirm (authoritative arbiter)
+ const live = await liveVariantSku(c.shopify_id);
+
+ if (!derived && live) {
+ // sources (1)(2) empty → adopt live value (covers the 14 dwrw-360xxx rows)
+ derived = live;
+ source = 'live_shopify';
+ }
+
+ if (!derived) {
+ held.push({
+ handle: c.handle,
+ reason: live === null && (NO_LIVE || !SHOP_TOKEN)
+ ? 'no local source + live confirm unavailable'
+ : 'no derivable dw_sku from any source',
+ derived: null,
+ live,
+ });
+ continue;
+ }
+
+ // shape gate
+ if (!DWRW_RE.test(derived)) {
+ held.push({ handle: c.handle, reason: `derived dw_sku '${derived}' not DWRW-#### shape`, derived, live });
+ continue;
+ }
+
+ // live disagreement gate — if we CAN see live and it disagrees, HOLD
+ if (live && live !== derived) {
+ held.push({
+ handle: c.handle,
+ reason: `live Shopify (${live}) disagrees with derived (${derived})`,
+ derived,
+ live,
+ });
+ continue;
+ }
+
+ // collision with an existing populated dw_sku on a DIFFERENT row
+ if (populated.has(derived)) {
+ held.push({ handle: c.handle, reason: `collides with existing populated dw_sku ${derived}`, derived, live });
+ continue;
+ }
+
+ derivedCount.set(derived, (derivedCount.get(derived) || 0) + 1);
+ proposed.push({
+ id: c.id,
+ shopify_id: c.shopify_id,
+ handle: c.handle,
+ title: c.title,
+ dwsku: derived,
+ source,
+ confirmed: live === derived,
+ });
+ }
+
+ // 4. Second pass — demote any dw_sku that ended up assigned to >1 candidate.
+ const ambiguousDup = [];
+ const finalProposed = proposed.filter((p) => {
+ if (derivedCount.get(p.dwsku) > 1) {
+ ambiguousDup.push(p);
+ return false;
+ }
+ return true;
+ });
+ for (const p of ambiguousDup) {
+ held.push({ handle: p.handle, reason: `derived dw_sku ${p.dwsku} maps to >1 candidate (ambiguous)`, derived: p.dwsku });
+ }
+
+ // ── report ────────────────────────────────────────────────────────────────
+ const bySource = finalProposed.reduce((a, p) => ((a[p.source] = (a[p.source] || 0) + 1), a), {});
+ const confirmedN = finalProposed.filter((p) => p.confirmed).length;
+
+ console.log('\nRECOVERY COVERAGE');
+ console.log('─'.repeat(78));
+ console.log(` Candidates (ACTIVE Rebel Walls, dw_sku NULL): ${candidates.length}`);
+ console.log(` RECOVERABLE (confirmed 1:1) : ${finalProposed.length}`);
+ for (const [src, n] of Object.entries(bySource)) console.log(` via ${src.padEnd(22)}: ${n}`);
+ console.log(` └ live-Shopify-confirmed : ${confirmedN}/${finalProposed.length}`);
+ console.log(` HELD (ambiguous / unconfirmed / conflict) : ${held.length}`);
+ const heldReasons = held.reduce((a, h) => ((a[h.reason.replace(/\(.+?\)/g, '(…)')] = (a[h.reason.replace(/\(.+?\)/g, '(…)')] || 0) + 1), a), {});
+ for (const [reason, n] of Object.entries(heldReasons)) console.log(` • ${reason}: ${n}`);
+
+ console.log(`\nPROPOSED MAPPING SAMPLE (first ${Math.min(SAMPLE_N, finalProposed.length)})`);
+ console.log('─'.repeat(78));
+ console.log(' handle'.padEnd(46) + 'derived dw_sku'.padEnd(18) + 'source');
+ for (const p of finalProposed.slice(0, SAMPLE_N)) {
+ console.log(' ' + p.handle.slice(0, 42).padEnd(44) + p.dwsku.padEnd(18) + p.source + (p.confirmed ? ' ✓live' : ''));
+ }
+
+ // 5. Snapshot BEFORE any write.
+ const snapDir = path.join(__dirname, 'snapshots');
+ fs.mkdirSync(snapDir, { recursive: true });
+ const stamp = startedAt.toISOString().replace(/[:.]/g, '-');
+ const proposalFile = path.join(snapDir, `proposal-${stamp}.json`);
+ fs.writeFileSync(
+ proposalFile,
+ JSON.stringify(
+ {
+ startedAt: startedAt.toISOString(),
+ db: DB_URL.replace(/:[^:@/]*@/, ':***@'),
+ apply: APPLY,
+ liveConfirm: !NO_LIVE && !!SHOP_TOKEN,
+ candidates: candidates.length,
+ recoverable: finalProposed.length,
+ held: held.length,
+ bySource,
+ proposed: finalProposed,
+ heldRows: held,
+ },
+ null,
+ 2
+ )
+ );
+ console.log(`\nProposal written → ${proposalFile}`);
+
+ if (!APPLY) {
+ console.log('\nDRY-RUN COMPLETE — nothing written. Re-run with --apply (on Kamatera) to execute.');
+ await pool.end();
+ return;
+ }
+
+ // ── APPLY ───────────────────────────────────────────────────────────────
+ // Backup of dw_sku-before for every row we are about to touch.
+ const backupFile = path.join(snapDir, `backup-before-${stamp}.jsonl`);
+ const bstream = fs.createWriteStream(backupFile);
+ let written = 0;
+ let skippedRace = 0;
+
+ for (const p of finalProposed) {
+ // Re-assert dw_sku IS NULL in the WHERE clause: idempotent + race-safe.
+ // Set ONLY dw_sku. RETURNING confirms a row was actually updated.
+ const res = await pool.query(
+ `UPDATE shopify_products
+ SET dw_sku = $1
+ WHERE id = $2 AND dw_sku IS NULL
+ RETURNING id, shopify_id, dw_sku`,
+ [p.dwsku, p.id]
+ );
+ if (res.rowCount === 1) {
+ bstream.write(JSON.stringify({ id: p.id, shopify_id: p.shopify_id, dw_sku_before: null, dw_sku_after: p.dwsku }) + '\n');
+ written++;
+ } else {
+ skippedRace++; // already populated by a concurrent process → left untouched
+ }
+ }
+ bstream.end();
+
+ console.log('\nAPPLY COMPLETE');
+ console.log('─'.repeat(78));
+ console.log(` Rows updated (dw_sku set) : ${written}`);
+ console.log(` Skipped (already populated/race) : ${skippedRace}`);
+ console.log(` Backup (revert source) : ${backupFile}`);
+ await pool.end();
+}
+
+main().catch((e) => {
+ console.error('FATAL', e);
+ process.exit(1);
+});
diff --git a/scripts/redirect-health/redirect-health.mjs b/scripts/redirect-health/redirect-health.mjs
new file mode 100644
index 0000000..6b41622
--- /dev/null
+++ b/scripts/redirect-health/redirect-health.mjs
@@ -0,0 +1,104 @@
+// redirect-health — READ-ONLY, $0. Audits the customer-facing redirect surface
+// the handle-freshness canary does NOT cover:
+// 1. canonicalization: http→https, www↔apex, trailing-slash — must be ONE clean 301.
+// 2. redirect chains/loops: a hop count >2 or a cycle is an SEO penalty.
+// 3. archived/discontinued product URLs: do they 301 (link equity preserved)
+// or 404 (equity lost)? Shopify auto-creates redirects for some; we measure.
+// No Shopify writes; no token needed for the canonical/chain probes. The archived
+// sample is read from the dw_unified mirror (status lags canonical — VERIFY live,
+// which is exactly what this does: it hits the LIVE URL, not the mirror status).
+import { execSync } from 'child_process';
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql';
+const DB='postgresql:///dw_unified?host=/tmp';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+
+// follow redirects manually, capping the chain, detecting loops
+async function trace(url,{max=6}={}){
+ const chain=[]; const seen=new Set(); let cur=url;
+ for(let i=0;i<max;i++){
+ let r;
+ try{ r=await fetch(cur,{method:'HEAD',redirect:'manual'}); }
+ catch(e){ chain.push({url:cur,status:'ERR:'+e.message.slice(0,40)}); return {chain,final:cur,loop:false,err:true}; }
+ const status=r.status; const loc=r.headers.get('location');
+ chain.push({url:cur,status,loc:loc||null});
+ if(status>=300&&status<400&&loc){
+ let next; try{ next=new URL(loc,cur).toString(); }catch{ next=loc; }
+ if(seen.has(next)) return {chain,final:next,loop:true,err:false};
+ seen.add(cur); cur=next; continue;
+ }
+ return {chain,final:cur,loop:false,err:false};
+ }
+ return {chain,final:cur,loop:false,truncated:true,err:false};
+}
+
+const APEX='designerwallcoverings.com';
+const WWW='www.designerwallcoverings.com'; // canonical host (per canon probe) — probe products here to avoid the apex→www hop confound
+console.log('=== redirect-health (READ-ONLY, $0) ===\n');
+
+// 1. canonicalization probes — each SHOULD land on https://<apex>/... in ≤1-2 hops
+const canon=[
+ ['http→https apex', `http://${APEX}/`],
+ ['http→https www', `http://www.${APEX}/`],
+ ['https www→apex', `https://www.${APEX}/`],
+ ['https apex (base)', `https://${APEX}/`],
+];
+const canonRes=[];
+for(const [label,u] of canon){
+ const t=await trace(u);
+ const hops=t.chain.filter(c=>c.status>=300&&c.status<400).length;
+ const finalOk=/^https:\/\//.test(t.final);
+ canonRes.push({label,u,hops,final:t.final,loop:t.loop,finalOk,statuses:t.chain.map(c=>c.status).join('→')});
+ console.log(`[canon] ${label.padEnd(18)} ${t.chain.map(c=>c.status).join('→').padEnd(14)} hops=${hops} ${t.loop?'LOOP!':''} → ${t.final}`);
+ await sleep(200);
+}
+
+// 2. archived-product URL link-equity sample: pull recently-archived handles from mirror,
+// probe live to see if they 301 (equity kept) or 404 (equity lost).
+let archived=[];
+try{
+ const out=execSync(`${PSQL} "${DB}" -At -F'|' -c "select handle, vendor from shopify_products where status='ARCHIVED' and handle is not null and handle<>'' order by updated_at_shopify desc nulls last limit 40"`,{encoding:'utf8'});
+ archived=out.trim().split('\n').filter(Boolean).map(l=>{const[h,v]=l.split('|');return{h,v};});
+}catch(e){ console.log('\n[archived] mirror read failed: '+e.message.slice(0,80)); }
+
+// Honest classification (corrected after skeptical verify): a redirect-to-200 is
+// NOT automatically "equity kept". A dead-product redirect to the HOMEPAGE is a
+// Google-recognized SOFT-404 — dropped from index, ~0 link-equity passed, wastes
+// crawl budget. And a 302 (temporary) tells Google "this URL will come back" — the
+// wrong signal for a permanently archived product (should be 301 or honest 404/410).
+let kept=0,soft404=0,hard404=0,still200=0,aLoop=0,temp302=0;
+const sl=[];
+const baseRe=new RegExp(`^https?:\\/\\/(www\\.)?${APEX.replace('.','\\.')}\\/?$`,'i');
+console.log(`\n[archived] probing ${archived.length} recently-archived product URLs live...`);
+for(const {h,v} of archived){
+ const t=await trace(`https://${WWW}/products/${h}`);
+ const first=t.chain[0]?.status;
+ const last=t.chain[t.chain.length-1]?.status;
+ const redirected=t.chain.some(c=>c.status>=300&&c.status<400);
+ const usedTemp=t.chain.some(c=>c.status===302||c.status===307);
+ if(t.loop){aLoop++;continue;}
+ if([404,410].includes(last)||[404,410].includes(first)){ hard404++; }
+ else if(redirected && baseRe.test(t.final)){ soft404++; if(usedTemp)temp302++; if(sl.length<12)sl.push({h,v,via:t.chain.map(c=>c.status).join('→')}); } // redirect to homepage = soft-404
+ else if(redirected && last===200 && t.final.match(/\/(products|collections)\//)){ kept++; if(usedTemp)temp302++; } // redirect to a real product/collection = equity kept
+ else if(!redirected && first===200){ still200++; } // PDP still live (mirror status lag — archived in mirror, live on store)
+ else { soft404++; if(sl.length<12)sl.push({h,v,via:t.chain.map(c=>c.status).join('→')}); }
+ await sleep(150);
+}
+console.log(` redirect→real product/collection (equity KEPT): ${kept}`);
+console.log(` redirect→HOMEPAGE (SOFT-404, ~0 equity): ${soft404}`);
+console.log(` honest 404/410: ${hard404}`);
+console.log(` still 200 (mirror status lag, PDP live): ${still200}`);
+console.log(` loops: ${aLoop}`);
+console.log(` of redirects, using 302/307 (temp, wrong sig): ${temp302}`);
+if(sl.length){ console.log(' sample soft-404 handles:'); sl.forEach(x=>console.log(` - ${x.h} (${x.v}) [${x.via}]`)); }
+
+const out={ ts:new Date().toISOString(), canon:canonRes, archived:{sampled:archived.length,equity_kept:kept,soft404,hard404,still200,loops:aLoop,temp302,sampleSoft404:sl} };
+import fs from 'fs';
+fs.writeFileSync('/tmp/redirect-health.json',JSON.stringify(out,null,2));
+console.log('\nwrote /tmp/redirect-health.json');
+
+// verdict tells
+const canonBad=canonRes.filter(c=>!c.finalOk||c.loop||c.hops>2);
+console.log('\n=== TELLS ===');
+console.log(`canonicalization issues: ${canonBad.length} (`+canonBad.map(c=>c.label).join(', ')+')');
+const softPct=archived.length?(100*soft404/archived.length).toFixed(0):0;
+console.log(`archived soft-404 to homepage (equity lost): ${soft404}/${archived.length} = ${softPct}%`);
diff --git a/scripts/rename-clarke-handles.py b/scripts/rename-clarke-handles.py
new file mode 100644
index 0000000..4284bff
--- /dev/null
+++ b/scripts/rename-clarke-handles.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+"""
+Rename hashed Clarke handles to match their DW SKU number.
+Steve 2026-06-17: all DW SKUs are DW{XX}-{number}; the URL handle must match.
+~3,192 active Clarke products have handle = 'dwkk-g{hex}' (Shopify auto-gen
+artifact) while their real variant SKU is the proper 'DWKK-{number}'. Set
+handle = lower(base SKU) e.g. dwkk-g1307742d (SKU DWKK-116614-Sample) -> dwkk-116614.
+Shopify auto-creates a 301 from the old handle. Gated bulk prod write.
+
+Env: LIMIT (canary cap, 0 = all), DRYRUN=1 (report only).
+$0 (Shopify Admin GraphQL).
+"""
+import os,sys,json,re,urllib.request,time
+SHOP="designer-laboratory-sandbox.myshopify.com"
+LIMIT=int(os.environ.get("LIMIT","0")); DRYRUN=os.environ.get("DRYRUN")=="1"
+LEDGER=os.path.join(os.path.dirname(os.path.abspath(__file__)),"rename-clarke-handles-ledger.jsonl")
+def _token():
+ for p in (os.path.join(os.path.dirname(__file__),"..",".env"), os.path.expanduser("~/Projects/secrets-manager/.env")):
+ try:
+ for ln in open(p):
+ if ln.startswith("SHOPIFY_ADMIN_TOKEN="): return ln.split("=",1)[1].strip()
+ except FileNotFoundError: pass
+ sys.exit("no SHOPIFY_ADMIN_TOKEN")
+TOKEN=_token(); URL=f"https://{SHOP}/admin/api/2024-10/graphql.json"
+def gql(q,v=None):
+ req=urllib.request.Request(URL,data=json.dumps({"query":q,"variables":v or {}}).encode(),
+ headers={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"})
+ return json.load(urllib.request.urlopen(req,timeout=40))
+
+def base_sku(sku):
+ if not sku: return None
+ s=re.sub(r'-(sample|roll|yard|bolt)$','',sku.strip(),flags=re.I)
+ return s
+
+def target_handle(skus):
+ # prefer a non-sample SKU; derive dw{xx}-{number}
+ cand=None
+ for s in skus:
+ b=base_sku(s)
+ if b and re.match(r'^DW[A-Z]{2}-',b,re.I): cand=b;
+ if b and 'sample' not in (s or '').lower(): cand=b; break
+ if not cand and skus: cand=base_sku(skus[0])
+ return cand.lower() if cand else None
+
+# collect hashed-handle Clarke products
+Q='''query($c:String){ products(first:100, after:$c, query:"vendor:'Clarke And Clarke' status:active"){
+ pageInfo{hasNextPage endCursor} nodes{ id handle variants(first:5){nodes{sku}} } } }'''
+cur=None; todo=[]
+while True:
+ p=gql(Q,{"c":cur})["data"]["products"]
+ for n in p["nodes"]:
+ h=n["handle"]
+ if not re.match(r'^dwkk-g[0-9a-f]+$',h): continue # only hashed ones
+ skus=[v["sku"] for v in n["variants"]["nodes"] if v.get("sku")]
+ th=target_handle(skus)
+ if th and th!=h and re.match(r'^dwkk-[0-9]+$',th):
+ todo.append((n["id"],h,th))
+ if not p["pageInfo"]["hasNextPage"]: break
+ cur=p["pageInfo"]["endCursor"]; time.sleep(0.25)
+if LIMIT: todo=todo[:LIMIT]
+print(f"hashed handles to rename: {len(todo)}{' (LIMIT)' if LIMIT else ''}")
+for _,h,th in todo[:5]: print(f" {h} -> {th}")
+if DRYRUN: sys.exit(0)
+
+M='mutation($id:ID!,$h:String!){ productUpdate(input:{id:$id, handle:$h}){ product{handle} userErrors{field message} } }'
+RC='mutation($r:UrlRedirectInput!){ urlRedirectCreate(urlRedirect:$r){ urlRedirect{id} userErrors{field message} } }'
+def make_redirect(old,new):
+ r=gql(RC,{"r":{"path":f"/products/{old}","target":f"/products/{new}"}}).get("data",{}).get("urlRedirectCreate",{})
+ return r.get("userErrors") or []
+SENTINEL=os.path.join(os.path.dirname(os.path.abspath(__file__)),".clarke-rename.done")
+try: os.remove(SENTINEL)
+except FileNotFoundError: pass
+led=open(LEDGER,"a"); done=skip=redir=exc=0
+for i,(gid,old,new) in enumerate(todo,1):
+ try:
+ r=gql(M,{"id":gid,"h":new}).get("data",{}).get("productUpdate",{})
+ ue=r.get("userErrors") or []
+ if ue:
+ skip+=1; led.write(json.dumps({"old":old,"new":new,"err":ue})+"\n"); led.flush(); time.sleep(0.35); continue
+ done+=1
+ if os.environ.get("REDIRECTS")=="1":
+ rerr=make_redirect(old,new)
+ if not rerr: redir+=1
+ rstat="ok" if not rerr else rerr
+ else:
+ rstat="skipped(no_scope)"
+ led.write(json.dumps({"old":old,"new":(r.get("product") or {}).get("handle"),"redirect":rstat})+"\n"); led.flush()
+ except Exception as e:
+ exc+=1; led.write(json.dumps({"old":old,"new":new,"exc":str(e)[:120]})+"\n"); led.flush(); time.sleep(2)
+ if i%100==0: print(f" [{i}/{len(todo)}] renamed={done} redirects={redir} skipped={skip} exc={exc}",flush=True)
+ time.sleep(0.4)
+print(f"DONE renamed={done} redirects={redir} skipped={skip} exc={exc} of {len(todo)}")
+open(SENTINEL,"w").write(f"done {time.strftime('%F %T')} renamed={done} skipped={skip} exc={exc}\n")
diff --git a/scripts/resku-campaign/apply-dwsku.js b/scripts/resku-campaign/apply-dwsku.js
new file mode 100644
index 0000000..069dcc2
--- /dev/null
+++ b/scripts/resku-campaign/apply-dwsku.js
@@ -0,0 +1,56 @@
+#!/usr/bin/env node
+/**
+ * Apply EXISTING dw_unified dw_sku values to Shopify variants (the "series that was
+ * already there"). No invented numbers. Per matched product: main variant SKU = dw_sku,
+ * sample variant SKU = dw_sku-Sample; old SKU → custom.manufacturer_sku.
+ * MAP_FILE=/tmp/dwbw-map.json BRAND="British Walls" JOIN=id [CAP=900] [DRY_RUN=1] node apply-dwsku.js
+ * MAP_FILE = JSON array of { spid|handle, dw_sku, mfr_sku }. JOIN = id | handle.
+ * Restore-map: ~/.claude/yolo-queue/restore-maps/applydw-<brand-slug>.json
+ */
+const fs = require('fs');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const BRAND = process.env.BRAND, JOIN = process.env.JOIN || 'id', MAP_FILE = process.env.MAP_FILE;
+const CAP = parseInt(process.env.CAP || '900', 10);
+const DRY = process.env.DRY_RUN === '1';
+if (!TOKEN || !BRAND || !MAP_FILE) { console.error('need SHOPIFY_ADMIN_TOKEN + BRAND + MAP_FILE'); process.exit(1); }
+const H = process.env.HOME, slug = BRAND.toLowerCase().replace(/[^a-z0-9]+/g, '-');
+const RMAP_F = `${H}/.claude/yolo-queue/restore-maps/applydw-${slug}.json`;
+const isSample = v => /sample/i.test(v.title || '') || /sample/i.test(v.sku || '');
+const rest = (p, o = {}) => fetch(`https://${STORE}/admin/api/${API}${p}`, { ...o, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(o.headers || {}) } });
+const gql = (q, v) => fetch(`https://${STORE}/admin/api/${API}/graphql.json`, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }).then(r => r.json());
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const load = (f, d) => { try { return JSON.parse(fs.readFileSync(f)); } catch { return d; } };
+
+async function pageAll(vendor) {
+ const out = []; let url = `/products.json?vendor=${encodeURIComponent(vendor)}&status=active&limit=250&fields=id,title,handle,variants`;
+ while (url) { const r = await rest(url); const link = r.headers.get('link') || ''; out.push(...((await r.json()).products || [])); const m = link.match(/<([^>]+)>;\s*rel="next"/); url = m ? m[1].replace(`https://${STORE}/admin/api/${API}`, '') : null; if (url) await sleep(300); }
+ return out;
+}
+
+(async () => {
+ const map = load(MAP_FILE, []);
+ const products = await pageAll(BRAND);
+ const byId = new Map(products.map(p => [String(p.id), p]));
+ const byHandle = new Map(products.map(p => [p.handle, p]));
+ const rmap = load(RMAP_F, []);
+ let writes = 0, matched = 0, missed = 0;
+ for (const row of map) {
+ if (writes >= CAP) { console.log(`cap ${CAP} reached`); break; }
+ const p = JOIN === 'id' ? byId.get(String(row.spid)) : byHandle.get(row.handle);
+ if (!p) { missed++; continue; }
+ matched++;
+ const plan = [];
+ for (const v of p.variants) {
+ const want = isSample(v) ? `${row.dw_sku}-Sample` : row.dw_sku;
+ if ((v.sku || '') !== want) plan.push({ id: v.id, old: v.sku || '', neu: want });
+ }
+ if (!plan.length) continue;
+ if (DRY) { console.log(` ${p.title.split('|')[0].trim().slice(0,32)} :: ${plan.map(x => (x.old||'∅') + '→' + x.neu).join(', ')}`); continue; }
+ for (const x of plan) { await rest(`/variants/${x.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: x.id, sku: x.neu } }) }); rmap.push({ brand: BRAND, product_id: p.id, variant_id: x.id, old_sku: x.old, new_sku: x.neu }); writes++; await sleep(420); }
+ if (row.mfr_sku) { await gql(`mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{message} } }`, { mf: [{ ownerId: `gid://shopify/Product/${p.id}`, namespace: 'custom', key: 'manufacturer_sku', type: 'single_line_text_field', value: String(row.mfr_sku) }] }); await sleep(250); }
+ }
+ if (!DRY) { fs.mkdirSync(`${H}/.claude/yolo-queue/restore-maps`, { recursive: true }); fs.writeFileSync(RMAP_F, JSON.stringify(rmap, null, 2)); }
+ console.log(`${DRY ? 'DRY' : 'APPLIED'} ${BRAND}: matched ${matched}/${map.length} (missed ${missed}), ${writes} variant writes`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/resku-campaign/backfill-gap.js b/scripts/resku-campaign/backfill-gap.js
new file mode 100644
index 0000000..6126a83
--- /dev/null
+++ b/scripts/resku-campaign/backfill-gap.js
@@ -0,0 +1,68 @@
+#!/usr/bin/env node
+/**
+ * Generalized gap backfill: re-SKU a brand's vendor-SKU-leak products to the brand's
+ * EXISTING DW series (continue the numbering), backfill the dw_unified catalog as the
+ * source of truth, then apply to Shopify. No invented codes.
+ *
+ * BRAND="Surface Stick" CODE=DWSS CATALOG=surface_stick_catalog START=690354 \
+ * [DAILY_CAP=900] [DRY_RUN=1] node backfill-gap.js
+ *
+ * Gap = any active variant whose SKU is present AND does NOT start with CODE- (catches
+ * vendor leaks + any stray placeholder like DWLC/DWPL). Existing CODE- SKUs are kept.
+ * Per product: main variant -> CODE-<n>, sample -> CODE-<n>-Sample; the leak SKU is
+ * preserved as mfr_sku (catalog + custom.manufacturer_sku metafield).
+ * Restore-map: ~/.claude/yolo-queue/restore-maps/backfill-<code>.json
+ */
+const fs = require('fs'), cp = require('child_process');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const BRAND = process.env.BRAND, CODE = process.env.CODE, CATALOG = process.env.CATALOG;
+const START = parseInt(process.env.START || '0', 10);
+const CAP = parseInt(process.env.DAILY_CAP || '900', 10);
+const DRY = process.env.DRY_RUN === '1';
+const PG = 'postgresql:///dw_unified?host=/tmp';
+if (!TOKEN || !BRAND || !CODE || !CATALOG || !START) { console.error('need SHOPIFY_ADMIN_TOKEN + BRAND + CODE + CATALOG + START'); process.exit(1); }
+const H = process.env.HOME, RMAP_F = `${H}/.claude/yolo-queue/restore-maps/backfill-${CODE}.json`;
+const KEEP = new RegExp('^' + CODE + '-');
+const isSample = v => /sample/i.test(v.title || '') || /sample/i.test(v.sku || '');
+const rest = (p, o = {}) => fetch(`https://${STORE}/admin/api/2024-10${p}`, { ...o, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(o.headers || {}) } });
+const gql = (q, v) => fetch(`https://${STORE}/admin/api/2024-10/graphql.json`, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }).then(r => r.json());
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const sqlOne = q => cp.execFileSync('psql', [PG, '-tAc', q], { encoding: 'utf8' }).trim();
+const esc = s => String(s == null ? '' : s).replace(/'/g, "''");
+
+async function pageAll(vendor) {
+ const out = []; let url = `/products.json?vendor=${encodeURIComponent(vendor)}&status=active&limit=250&fields=id,title,handle,variants`;
+ while (url) { const r = await rest(url); const link = r.headers.get('link') || ''; out.push(...((await r.json()).products || [])); const m = link.match(/<([^>]+)>;\s*rel="next"/); url = m ? m[1].replace(`https://${STORE}/admin/api/2024-10`, '') : null; if (url) await sleep(300); }
+ return out;
+}
+
+(async () => {
+ const products = (await pageAll(BRAND)).filter(p => p.variants.some(v => v.sku && !KEEP.test(v.sku)));
+ products.sort((a, b) => a.handle.localeCompare(b.handle));
+ const rmap = (() => { try { return JSON.parse(fs.readFileSync(RMAP_F)); } catch { return []; } })();
+ console.log(`${BRAND} [${CODE}]: ${products.length} gap products, start=${CODE}-${START}, cap=${CAP}, DRY=${DRY}`);
+ let seq = START, writes = 0, done = 0;
+ for (const p of products) {
+ if (writes >= CAP) { console.log(`cap ${CAP} reached — resume from ${CODE}-${seq}`); break; }
+ const leaks = p.variants.filter(v => v.sku && !KEEP.test(v.sku));
+ const mains = leaks.filter(v => !isSample(v)), samples = leaks.filter(v => isSample(v));
+ const dwsku = `${CODE}-${seq}`;
+ const mfg = (mains[0] || samples[0]).sku.replace(/-sample$/i, '');
+ const plan = [];
+ mains.forEach((v, i) => plan.push({ id: v.id, old: v.sku, neu: i === 0 ? dwsku : `${dwsku}-${i + 1}` }));
+ samples.forEach((v) => plan.push({ id: v.id, old: v.sku, neu: `${dwsku}-Sample` }));
+ if (DRY) {
+ if (done < 6) console.log(` ${dwsku} ${p.title.split('|')[0].trim().slice(0,30)} ${plan.map(x => x.old + '→' + x.neu).join(', ')}`);
+ } else {
+ const exists = sqlOne(`select 1 from ${CATALOG} where shopify_product_id='${p.id}' and dw_sku like '${CODE}-%' limit 1`);
+ if (!exists) sqlOne(`insert into ${CATALOG} (sku, mfr_sku, dw_sku, shopify_product_id, on_shopify) values ('${esc(p.handle)}','${esc(mfg)}','${dwsku}','${p.id}', true)`);
+ for (const x of plan) { await rest(`/variants/${x.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: x.id, sku: x.neu } }) }); rmap.push({ brand: BRAND, product_id: p.id, variant_id: x.id, old_sku: x.old, new_sku: x.neu }); writes++; await sleep(420); }
+ await gql(`mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{message} } }`, { mf: [{ ownerId: `gid://shopify/Product/${p.id}`, namespace: 'custom', key: 'manufacturer_sku', type: 'single_line_text_field', value: mfg }] });
+ await sleep(250);
+ }
+ seq++; done++;
+ }
+ if (!DRY) { fs.mkdirSync(`${H}/.claude/yolo-queue/restore-maps`, { recursive: true }); fs.writeFileSync(RMAP_F, JSON.stringify(rmap, null, 2)); }
+ console.log(`${DRY ? 'DRY' : 'APPLIED'}: ${done} products, ${writes} writes, ${CODE}-${START}..${CODE}-${seq - 1}. remaining: ${products.length - done}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/resku-campaign/backfill-leed.js b/scripts/resku-campaign/backfill-leed.js
new file mode 100644
index 0000000..7b11404
--- /dev/null
+++ b/scripts/resku-campaign/backfill-leed.js
@@ -0,0 +1,45 @@
+#!/usr/bin/env node
+/**
+ * Backfill Leed Walls gap products (the 35 on placeholder DWLW-10xx not in dw_unified):
+ * 1) assign next sequential DWLW-860130+ (continue the existing leed_walls_catalog series),
+ * 2) INSERT those into dw_unified leed_walls_catalog (source of truth),
+ * 3) apply to Shopify (main = dw_sku, sample = dw_sku-Sample), replacing the placeholders.
+ * DRY_RUN=1 → print plan only. Restore-map: applydw-leed-walls.json (appended).
+ */
+const fs = require('fs'), cp = require('child_process');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const DRY = process.env.DRY_RUN === '1';
+const START = parseInt(process.env.START || '860130', 10);
+const PG = 'postgresql:///dw_unified?host=/tmp';
+const H = process.env.HOME, RMAP_F = `${H}/.claude/yolo-queue/restore-maps/applydw-leed-walls.json`;
+const isSample = v => /sample/i.test(v.title || '') || /sample/i.test(v.sku || '');
+const rest = (p, o = {}) => fetch(`https://${STORE}/admin/api/2024-10${p}`, { ...o, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(o.headers || {}) } });
+const gql = (q, v) => fetch(`https://${STORE}/admin/api/2024-10/graphql.json`, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) }).then(r => r.json());
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const sql = q => cp.execFileSync('psql', [PG, '-tAc', q], { encoding: 'utf8' }).trim();
+const esc = s => String(s == null ? '' : s).replace(/'/g, "''");
+
+(async () => {
+ const gap = JSON.parse(fs.readFileSync('/tmp/leed-gap.json'));
+ const rmap = (() => { try { return JSON.parse(fs.readFileSync(RMAP_F)); } catch { return []; } })();
+ let seq = START, applied = 0;
+ for (const p of gap) {
+ const dwsku = `DWLW-${seq}`;
+ console.log(`${dwsku} ${p.title.slice(0,34)} (mfr ${p.mfr_sku}) ${p.variants.map(v => v.sku + '→' + (isSample(v) ? dwsku + '-Sample' : dwsku)).join(', ')}`);
+ if (!DRY) {
+ // 1) backfill dw_unified (idempotent: skip if this shopify_product_id already present)
+ const exists = sql(`select 1 from leed_walls_catalog where shopify_product_id='${p.id}' limit 1`);
+ if (!exists) sql(`insert into leed_walls_catalog (sku, mfr_sku, dw_sku, shopify_product_id, on_shopify, updated_at) values ('${esc(p.handle)}','${esc(p.mfr_sku)}','${dwsku}','${p.id}', true, now())`);
+ // 2) apply to Shopify
+ for (const v of p.variants) {
+ const neu = isSample(v) ? `${dwsku}-Sample` : dwsku;
+ if ((v.sku || '') !== neu) { await rest(`/variants/${v.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: v.id, sku: neu } }) }); rmap.push({ brand: 'Leed Walls', product_id: p.id, variant_id: v.id, old_sku: v.sku, new_sku: neu }); await sleep(420); }
+ }
+ applied++;
+ }
+ seq++;
+ }
+ if (!DRY) { fs.writeFileSync(RMAP_F, JSON.stringify(rmap, null, 2)); }
+ console.log(`\n${DRY ? 'DRY' : 'APPLIED'}: ${DRY ? gap.length : applied} products, DWLW-${START}..DWLW-${seq - 1}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/resku-campaign/resku-leaks.js b/scripts/resku-campaign/resku-leaks.js
new file mode 100644
index 0000000..b4423a1
--- /dev/null
+++ b/scripts/resku-campaign/resku-leaks.js
@@ -0,0 +1,96 @@
+#!/usr/bin/env node
+/**
+ * Paced re-SKU of vendor-SKU LEAKS → DW<code>-sequential, for one brand per invocation.
+ * Fix-only-leaks: variants whose SKU is already DW-format are left untouched.
+ * BRAND="Surface Stick" CODE=DWSK [DAILY_CAP=900] [DRY_RUN=1] node resku-leaks.js
+ * State (next seq + done product ids) persists in ~/.claude/yolo-queue/resku-campaign-state.json
+ * so a daily launchd job resumes where it stopped. Restore-map appended per run.
+ */
+const fs = require('fs');
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10';
+const BRAND = process.env.BRAND, CODE = process.env.CODE;
+const DAILY_CAP = parseInt(process.env.DAILY_CAP || '900', 10);
+const DRY = process.env.DRY_RUN === '1';
+if (!TOKEN || !BRAND || !CODE) { console.error('need SHOPIFY_ADMIN_TOKEN + BRAND + CODE'); process.exit(1); }
+const H = process.env.HOME;
+const STATE_F = `${H}/.claude/yolo-queue/resku-campaign-state.json`;
+const RMAP_F = `${H}/.claude/yolo-queue/restore-maps/resku-${CODE}.json`;
+const DW_SKU = /^DW[A-Z]{1,4}-/i;
+const isSample = v => /sample/i.test(v.title || '') || /sample/i.test(v.sku || '');
+
+const rest = (p, opts = {}) => fetch(`https://${STORE}/admin/api/${API}${p}`, { ...opts, headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', ...(opts.headers || {}) } });
+const gql = (query, variables) => fetch(`https://${STORE}/admin/api/${API}/graphql.json`, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) }).then(r => r.json());
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const load = (f, d) => { try { return JSON.parse(fs.readFileSync(f)); } catch { return d; } };
+
+async function pageAll(vendor) {
+ const out = []; let url = `/products.json?vendor=${encodeURIComponent(vendor)}&status=active&limit=250&fields=id,title,variants`;
+ while (url) {
+ const r = await rest(url); const link = r.headers.get('link') || ''; const d = await r.json();
+ out.push(...(d.products || []));
+ const m = link.match(/<([^>]+)>;\s*rel="next"/); url = m ? m[1].replace(`https://${STORE}/admin/api/${API}`, '') : null;
+ if (url) await sleep(350);
+ }
+ return out;
+}
+
+(async () => {
+ const state = load(STATE_F, { brands: {} });
+ const bs = state.brands[BRAND] || { seq: 1001, done: [] };
+ const doneSet = new Set(bs.done);
+ const rmap = load(RMAP_F, []);
+ const products = await pageAll(BRAND);
+ // products needing work: have ≥1 non-DW, non-blank variant SKU, not already done
+ const todo = products.filter(p => !doneSet.has(p.id) && p.variants.some(v => v.sku && !DW_SKU.test(v.sku)));
+ console.log(`${BRAND} [${CODE}]: ${products.length} products, ${todo.length} still need re-SKU, cap=${DAILY_CAP}, DRY=${DRY}`);
+
+ let writes = 0, prod = 0;
+ for (const p of todo) {
+ if (writes >= DAILY_CAP) { console.log(` daily cap ${DAILY_CAP} reached — stopping (resume tomorrow)`); break; }
+ const leaks = p.variants.filter(v => v.sku && !DW_SKU.test(v.sku));
+ const mains = leaks.filter(v => !isSample(v));
+ const samples = leaks.filter(v => isSample(v));
+ const dwMain = p.variants.find(v => !isSample(v) && DW_SKU.test(v.sku || '')); // existing DW main (Fentucci/LA Walls)
+ const base = bs.seq;
+ const plan = [];
+ let usedFresh = false;
+ if (dwMain && !mains.length) {
+ // main is already a DW SKU — pair the leak sample(s) to it, don't burn a fresh number
+ const baseSku = dwMain.sku.replace(/-sample$/i, '');
+ samples.forEach(v => plan.push({ id: v.id, old: v.sku, neu: `${baseSku}-Sample` }));
+ } else {
+ usedFresh = true;
+ mains.forEach((v, i) => plan.push({ id: v.id, old: v.sku, neu: i === 0 ? `${CODE}-${base}` : `${CODE}-${base}-${i + 1}` }));
+ samples.forEach((v, i) => plan.push({ id: v.id, old: v.sku, neu: `${CODE}-${base}${i > 0 && mains.length ? '-' + (i + 1) : ''}-Sample` }));
+ }
+ const mfgOld = (mains[0] || samples[0] || dwMain).sku.replace(/-sample$/i, '');
+
+ if (DRY) {
+ console.log(` #${base} ${p.title.split('|')[0].trim().slice(0,34)} :: ${plan.map(x => x.old + '→' + x.neu).join(', ')}`);
+ } else {
+ for (const x of plan) {
+ await rest(`/variants/${x.id}.json`, { method: 'PUT', body: JSON.stringify({ variant: { id: x.id, sku: x.neu } }) });
+ rmap.push({ brand: BRAND, product_id: p.id, variant_id: x.id, old_sku: x.old, new_sku: x.neu });
+ writes++; await sleep(420);
+ }
+ await gql(`mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{message} } }`,
+ { mf: [{ ownerId: `gid://shopify/Product/${p.id}`, namespace: 'custom', key: 'manufacturer_sku', type: 'single_line_text_field', value: mfgOld }] });
+ await sleep(300);
+ }
+ if (usedFresh) bs.seq = base + 1;
+ doneSet.add(p.id); prod++;
+ }
+ bs.done = [...doneSet];
+ state.brands[BRAND] = bs;
+ if (!DRY) {
+ fs.mkdirSync(`${H}/.claude/yolo-queue/restore-maps`, { recursive: true });
+ fs.writeFileSync(RMAP_F, JSON.stringify(rmap, null, 2));
+ fs.writeFileSync(STATE_F, JSON.stringify(state, null, 2));
+ }
+ const remaining = todo.length - prod;
+ console.log(`${DRY ? 'DRY' : 'APPLIED'}: ${prod} products, ${writes} variant writes. next seq=${bs.seq}. remaining for ${BRAND}: ${remaining}`);
+ // exit 3 = did productive work this run (runner stops for the day); 0 = nothing to do (brand done)
+ if (!DRY) process.exit(prod > 0 ? 3 : 0);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/resku-campaign/run-burst.sh b/scripts/resku-campaign/run-burst.sh
new file mode 100755
index 0000000..c6ad1f1
--- /dev/null
+++ b/scripts/resku-campaign/run-burst.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+# Back-to-back burst: run remaining brands sequentially up to a shared daily write BUDGET.
+# Each brand's resku-leaks is capped at the remaining budget; stops when budget exhausted.
+set -uo pipefail
+cd "$HOME/Projects/designerwallcoverings" || exit 1
+export SHOPIFY_ADMIN_TOKEN=$(grep -E '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2-)
+BUDGET="${BUDGET:-890}"
+LOG="$HOME/.claude/run-notes/resku-campaign.log"
+BRANDS=( "Primo Leathers|DWPL" "LA Walls|DWLC" "British Walls|DWBW" "Fentucci|DWFE" "Surface Stick|DWSK" )
+echo "[burst $(date '+%H:%M')] start budget=$BUDGET" | tee -a "$LOG"
+for bc in "${BRANDS[@]}"; do
+ B="${bc%%|*}"; C="${bc##*|}"
+ if [ "$BUDGET" -le 0 ]; then echo "[burst] budget exhausted — stopping before $B" | tee -a "$LOG"; break; fi
+ out=$(BRAND="$B" CODE="$C" DAILY_CAP="$BUDGET" node scripts/resku-campaign/resku-leaks.js 2>&1); rc=$?
+ last=$(echo "$out" | tail -1)
+ writes=$(echo "$last" | grep -oE '[0-9]+ variant writes' | grep -oE '^[0-9]+'); writes=${writes:-0}
+ BUDGET=$((BUDGET - writes))
+ echo "[burst] $B → $last (budget left: $BUDGET)" | tee -a "$LOG"
+ if [ "$rc" -ne 0 ] && [ "$rc" -ne 3 ]; then echo "[burst] ERROR rc=$rc on $B" | tee -a "$LOG"; break; fi
+done
+echo "[burst $(date '+%H:%M')] done, budget left=$BUDGET" | tee -a "$LOG"
diff --git a/scripts/resku-campaign/run.sh b/scripts/resku-campaign/run.sh
new file mode 100755
index 0000000..0c4c230
--- /dev/null
+++ b/scripts/resku-campaign/run.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+# Daily paced re-SKU runner — processes the FIRST incomplete brand per fire (≤DAILY_CAP
+# variant writes/day to respect Shopify's ~1000/day limit), then stops. Idempotent +
+# state-resumable; safe to run repeatedly. Brands already done exit 0 and are skipped.
+set -uo pipefail
+# launchd PATH doesn't include Homebrew — bare `node` 127'd daily 2026-06-20 → 07-12
+export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
+cd "$HOME/Projects/designerwallcoverings" || exit 1
+export SHOPIFY_ADMIN_TOKEN=$(grep -E '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2-)
+export DAILY_CAP="${DAILY_CAP:-900}"
+LOG="$HOME/.claude/run-notes/resku-campaign.log"
+ts() { date '+%Y-%m-%d %H:%M:%S'; }
+# brand|code — processing order (Leed Walls done via canary 2026-06-18)
+BRANDS=( "Leed Walls|DWLW" "Primo Leathers|DWPL" "LA Walls|DWLC" "British Walls|DWBW" "Fentucci|DWFE" "Surface Stick|DWSK" )
+echo "[$(ts)] resku-campaign fire (cap=$DAILY_CAP)" >> "$LOG"
+for bc in "${BRANDS[@]}"; do
+ B="${bc%%|*}"; C="${bc##*|}"
+ out=$(BRAND="$B" CODE="$C" node scripts/resku-campaign/resku-leaks.js 2>&1); rc=$?
+ echo "$out" | tail -1 >> "$LOG"
+ if [ $rc -eq 3 ]; then echo "[$(ts)] worked $B today — stopping" >> "$LOG"; exit 0; fi
+ if [ $rc -ne 0 ]; then echo "[$(ts)] ERROR rc=$rc on $B" >> "$LOG"; exit 1; fi
+done
+echo "[$(ts)] ALL BRANDS COMPLETE — campaign done" >> "$LOG"
diff --git a/scripts/rigo-onboard/assign-pr-names.mjs b/scripts/rigo-onboard/assign-pr-names.mjs
new file mode 100644
index 0000000..cb8cc88
--- /dev/null
+++ b/scripts/rigo-onboard/assign-pr-names.mjs
@@ -0,0 +1,109 @@
+#!/usr/bin/env node
+// assign-pr-names.mjs — deterministic private-label rename for the RIGO line.
+// FULL rename (Steve 2026-07-22): both pattern names and collection names get the
+// Phillipe Romano California-coastal theme; RIGO's own names (Brubeck, Spectra, …)
+// are INTERNAL ONLY. Assignment is stored in rigo_catalog.pr_pattern_name /
+// pr_collection_name and never recomputed — re-runs only fill NULLs.
+//
+// Collision safety: candidate pattern names already used as the leading word of a
+// live Phillipe Romano product title (shopify_products mirror) are skipped.
+//
+// Usage: node assign-pr-names.mjs [--dry]
+
+import { execFileSync } from 'node:child_process';
+
+const DRY = process.argv.includes('--dry');
+const psql = (sql) =>
+ execFileSync('psql', ['host=/tmp dbname=dw_unified', '-Atc', sql], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }).trim();
+
+// RIGO collection → PR collection (California coastal; "Vinyls" keeps the line's
+// existing PR-Vinyls merchandising language)
+const COLLECTION_MAP = {
+ specify: 'Sausalito Vinyls',
+ spectra: 'Santa Monica Vinyls',
+ opus: 'Laguna Beach Vinyls',
+ nobel: 'Carmel Vinyls',
+ portfolio: 'Big Sur Vinyls',
+};
+
+// California place-name pool for pattern renames (~150; canyons, beaches, streets,
+// neighborhoods, coastal towns). NO names that collide with other PL themes
+// (no Malibu — that's the WallQuest PL brand; no Hollywood — existing vinyls vol).
+const NAME_POOL = [
+ 'Topanga','Zuma','Mulholland','Sepulveda','Cahuenga','Los Feliz','Silverlake','Echo Park',
+ 'Larchmont','Hancock','Brentwood','Pacific Palisades','Point Dume','El Matador','Leo Carrillo',
+ 'Ventura','Ojai','Summerland','Montecito','Goleta','Refugio','Gaviota','Pismo','Avila',
+ 'Cambria','Cayucos','Morro Bay','San Simeon','Ragged Point','Lucia','Esalen','Garrapata',
+ 'Pfeiffer','Bixby','Rocky Point','Pebble Beach','Pacific Grove','Monterey','Seaside',
+ 'Moss Landing','Aptos','Capitola','Davenport','Pescadero','Pigeon Point','Half Moon',
+ 'Montara','Pacifica','Presidio','Sea Cliff','Lands End','Baker Beach','Crissy','Tiburon',
+ 'Belvedere','Larkspur','Mill Valley','Muir Beach','Stinson','Bolinas','Point Reyes',
+ 'Tomales','Bodega','Jenner','Sea Ranch','Gualala','Mendocino','Fort Bragg','Trinidad',
+ 'Del Norte','Crescent City','Ferndale','Eureka','Arcata','Shelter Cove','Westport',
+ 'Manhattan Beach','Hermosa','Redondo','Palos Verdes','Abalone Cove','Terranea','San Pedro',
+ 'Naples','Belmont Shore','Seal Beach','Sunset Beach','Huntington','Crystal Cove','Corona del Mar',
+ 'Balboa','Lido Isle','Emerald Bay','Three Arch','Dana Point','Salt Creek','San Clemente',
+ 'Trestles','Oceanside','Carlsbad','Leucadia','Encinitas','Cardiff','Solana','Del Mar',
+ 'Torrey Pines','La Jolla','Windansea','Bird Rock','Coronado','Silver Strand','Sunset Cliffs',
+ 'Laurel Canyon','Benedict','Coldwater','Franklin Canyon','Runyon','Nichols Canyon','Beachwood',
+ 'Griffith','Angeles Crest','Altadena','San Marino','Palisades','Castellammare','Tuna Canyon',
+ 'Corral Canyon','Latigo','Escondido Beach','Paradise Cove','Broad Beach','Nicholas Canyon',
+ 'Sycamore Cove','Mugu','La Piedra','El Pescador','Solstice','Encinal','Trancas','Westward',
+ 'Carbon Beach','Las Flores','Big Rock','Tujunga','Verdugo','Sierra Madre','Arroyo Seco',
+];
+
+// Names already customer-facing on the PR line (leading word of any live PR title)
+// — skipped so two PR products never share a pattern name.
+const usedRaw = psql(
+ `select lower(title) from shopify_products where vendor ilike 'phillipe romano%'`
+);
+const usedTitles = usedRaw ? usedRaw.split('\n') : [];
+const isUsed = (name) => {
+ const n = name.toLowerCase();
+ return usedTitles.some((t) => t.startsWith(n + ' ') || t.startsWith(n + '-') || t === n);
+};
+
+// Distinct RIGO patterns needing a name, deterministic order
+const patterns = psql(
+ `select distinct collection||'|'||pattern_name from rigo_catalog
+ where pr_pattern_name is null and pattern_name is not null
+ order by 1`
+).split('\n').filter(Boolean);
+
+// Names already assigned in rigo_catalog (idempotent re-runs)
+const assigned = new Set(
+ psql(`select distinct pr_pattern_name from rigo_catalog where pr_pattern_name is not null`)
+ .split('\n').filter(Boolean)
+);
+
+console.log(`${patterns.length} patterns to name; ${assigned.size} already assigned; pool=${NAME_POOL.length}`);
+
+const pool = NAME_POOL.filter((n) => !assigned.has(n) && !isUsed(n));
+if (pool.length < patterns.length) {
+ console.error(`FATAL: pool too small (${pool.length} available for ${patterns.length} patterns)`);
+ process.exit(1);
+}
+
+const q = (v) => `'${v.replace(/'/g, "''")}'`;
+let i = 0;
+const updates = [];
+for (const key of patterns) {
+ const [collection, patternName] = key.split('|');
+ const prName = pool[i++];
+ const prColl = COLLECTION_MAP[collection] || 'Phillipe Romano Vinyls';
+ updates.push(
+ `UPDATE rigo_catalog SET pr_pattern_name=${q(prName)}, pr_collection_name=${q(prColl)}, updated_at=now()` +
+ ` WHERE collection=${q(collection)} AND pattern_name=${q(patternName)} AND pr_pattern_name IS NULL;`
+ );
+ if (DRY) console.log(`${collection} / ${patternName} → ${prName} (${prColl})`);
+}
+
+if (DRY) { console.log(`DRY RUN — ${updates.length} updates not applied`); process.exit(0); }
+
+execFileSync('psql', ['host=/tmp dbname=dw_unified', '-v', 'ON_ERROR_STOP=1', '-c',
+ 'BEGIN;\n' + updates.join('\n') + '\nCOMMIT;'], { encoding: 'utf8' });
+console.log(`Applied ${updates.length} pattern renames.`);
+console.log(psql(
+ `select pr_collection_name||': '||count(distinct pr_pattern_name)||' patterns, '||count(*)||' SKUs'
+ from rigo_catalog where pr_collection_name is not null group by pr_collection_name order by 1`
+));
diff --git a/scripts/rigo-onboard/build-payloads.mjs b/scripts/rigo-onboard/build-payloads.mjs
new file mode 100644
index 0000000..8400b42
--- /dev/null
+++ b/scripts/rigo-onboard/build-payloads.mjs
@@ -0,0 +1,122 @@
+#!/usr/bin/env node
+/**
+ * Build RIGO → Phillipe Romano Vinyls DRAFT payloads from dw_unified.rigo_catalog
+ * → out/payloads.jsonl. Quote-only posture (Pierre Frey / Greenland model):
+ * Yard variant $0 + `quotes`/`Needs-Price` tags, Sample $4.25.
+ *
+ * PRIVATE LABEL, FULL RENAME: titles/tags/body use pr_pattern_name + pr_collection_name
+ * ONLY. RIGO's names + item numbers never appear in customer-visible fields; the real
+ * mfr_sku lives in metafields (custom.manufacturer_sku, private_label.real_vendor_name)
+ * for re-order/audit.
+ *
+ * Also assigns dw_sku (DWWL-10001+) deterministically (order by mfr_sku) on first run.
+ * node build-payloads.mjs
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execFileSync } from 'node:child_process';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const CONN = 'host=/tmp dbname=dw_unified';
+const SAMPLE_PRICE = '4.25';
+
+const psql = (sql) => execFileSync('psql', [CONN, '-Atc', sql], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }).trim();
+const titleCase = (s) => (s || '').replace(/\w\S*/g, (w) => w[0].toUpperCase() + w.slice(1).toLowerCase()).trim();
+
+// Assign DW SKUs once, deterministic order
+psql(`WITH seq AS (
+ SELECT mfr_sku, 10000 + row_number() OVER (ORDER BY mfr_sku) AS n
+ FROM rigo_catalog WHERE dw_sku IS NULL
+ AND NOT EXISTS (SELECT 1 FROM rigo_catalog c2 WHERE c2.dw_sku IS NOT NULL)
+) UPDATE rigo_catalog rc SET dw_sku = 'DWWL-'||seq.n FROM seq WHERE rc.mfr_sku = seq.mfr_sku`);
+// subsequent runs: continue from max
+psql(`WITH mx AS (SELECT coalesce(max(substring(dw_sku from 6)::int), 10000) AS m FROM rigo_catalog WHERE dw_sku IS NOT NULL),
+ seq AS (SELECT mfr_sku, (SELECT m FROM mx) + row_number() OVER (ORDER BY mfr_sku) AS n FROM rigo_catalog WHERE dw_sku IS NULL)
+ UPDATE rigo_catalog rc SET dw_sku = 'DWWL-'||seq.n FROM seq WHERE rc.mfr_sku = seq.mfr_sku`);
+
+const rows = JSON.parse(psql(`select coalesce(json_agg(row_to_json(t))::text,'[]') from (
+ select mfr_sku, dw_sku, pr_pattern_name, pr_collection_name, color_name, width, weight_type,
+ content, backing, match_type, fire_rating, local_image_path,
+ ai_colors, ai_styles, ai_patterns, ai_description, color_hex
+ from rigo_catalog
+ where pr_pattern_name is not null and local_image_path is not null
+ order by dw_sku) t`));
+
+// Leak tripwire: nothing RIGO-flavored may enter a payload
+const LEAK = /\brigo\b|rigowall|brubeck/i; // brubeck as canary for un-renamed rows
+
+function descriptor(r) {
+ const p = (r.ai_patterns || '').split(',')[0].trim();
+ if (p && !/solid/i.test(p)) return p;
+ return (r.weight_type || '').match(/Type II/i) ? 'Type II' : 'Textured';
+}
+const titleFor = (r) => `${r.pr_pattern_name} ${descriptor(r)} Durable Vinyl ${titleCase(r.color_name || '')} | Phillipe Romano`.replace(/\s+/g, ' ').trim();
+
+function tags(r) {
+ const t = new Set(['Phillipe Romano', 'Phillipe Romano Vinyls', 'Vinyl Wallcovering', 'Commercial',
+ 'quotes', 'Needs-Price', r.pr_collection_name]);
+ const w = (r.weight_type || '').match(/Type\s*(I{1,3})/i); if (w) t.add(`Type ${w[1].toUpperCase()}`);
+ for (const s of (r.ai_styles || '').split(',')) if (s.trim()) t.add(s.trim());
+ for (const p of (r.ai_patterns || '').split(',')) if (p.trim()) t.add(p.trim());
+ for (const c of (r.ai_colors || '').split(',').slice(0, 3)) if (c.trim()) t.add(c.trim());
+ return [...t].filter(Boolean).join(', ');
+}
+
+function bodyHtml(r) {
+ const spec = [
+ ['Pattern', r.pr_pattern_name], ['Color', titleCase(r.color_name)], ['Collection', r.pr_collection_name],
+ ['Material', r.content || '100% Vinyl'], ['Weight', r.weight_type], ['Backing', r.backing],
+ ['Width', r.width], ['Match', r.match_type], ['Fire Rating', r.fire_rating],
+ ].filter(([, v]) => v && String(v).trim());
+ const desc = r.ai_description ||
+ `${r.pr_pattern_name} is a durable commercial-grade vinyl wallcovering from the ${r.pr_collection_name} collection.`;
+ return `<p>${desc} Priced by quote; order a memo sample to see the material in hand.</p>` +
+ `<table>${spec.map(([k, v]) => `<tr><td><strong>${k}</strong></td><td>${String(v)}</td></tr>`).join('')}</table>`;
+}
+
+function metafields(r) {
+ const mf = [];
+ const S = (ns, key, value, type = 'single_line_text_field') => {
+ if (value != null && String(value).trim() !== '') mf.push({ namespace: ns, key, type, value: String(value) });
+ };
+ S('custom', 'manufacturer_sku', r.mfr_sku);
+ S('private_label', 'real_vendor_name', 'Rigo Wallcovering');
+ S('global', 'Brand', 'Phillipe Romano');
+ S('global', 'width', r.width);
+ S('custom', 'material', 'Vinyl');
+ S('custom', 'fire_rating', r.fire_rating);
+ S('custom', 'backing', r.backing);
+ S('custom', 'color', titleCase(r.color_name));
+ S('custom', 'real_color_name', titleCase(r.color_name));
+ S('global', 'unit_of_measure', 'Priced Per Yard (Quote)');
+ if (r.color_hex) S('custom', 'dominant_hex', r.color_hex);
+ return mf;
+}
+
+fs.mkdirSync(OUT, { recursive: true });
+const fd = fs.openSync(path.join(OUT, 'payloads.jsonl'), 'w');
+let n = 0, leaks = 0;
+for (const r of rows) {
+ const o = {
+ mfr_sku: r.mfr_sku, sku: r.dw_sku, local_image_path: r.local_image_path,
+ product: {
+ title: titleFor(r), vendor: 'Phillipe Romano', product_type: 'Wallcovering',
+ status: 'draft', tags: tags(r), body_html: bodyHtml(r),
+ options: [{ name: 'Format' }],
+ variants: [
+ { sku: r.dw_sku, price: '0.00', option1: 'Yard', taxable: true, requires_shipping: true, inventory_management: null },
+ { sku: `${r.dw_sku}-Sample`, price: SAMPLE_PRICE, option1: 'Sample', taxable: true, requires_shipping: true, inventory_management: null },
+ ],
+ },
+ metafields: metafields(r),
+ };
+ const publicText = o.product.title + ' ' + o.product.tags + ' ' + o.product.body_html;
+ if (LEAK.test(publicText)) { leaks++; console.error(`LEAK BLOCKED ${r.mfr_sku}: rigo term in public fields`); continue; }
+ fs.writeSync(fd, JSON.stringify(o) + '\n'); n++;
+}
+fs.closeSync(fd);
+console.log(`✓ ${n} payloads → out/payloads.jsonl (${leaks} leak-blocked, ${rows.length - n - leaks} skipped)`);
+const sample = fs.readFileSync(path.join(OUT, 'payloads.jsonl'), 'utf8').trim().split('\n').slice(0, 3).map((l) => JSON.parse(l));
+for (const o of sample) console.log(` [${o.sku}] "${o.product.title}" · mf:${o.metafields.length} · tags:${o.product.tags.split(', ').length}`);
diff --git a/scripts/rigo-onboard/create-drafts.mjs b/scripts/rigo-onboard/create-drafts.mjs
new file mode 100644
index 0000000..53e10d5
--- /dev/null
+++ b/scripts/rigo-onboard/create-drafts.mjs
@@ -0,0 +1,106 @@
+#!/usr/bin/env node
+/**
+ * Create RIGO → Phillipe Romano Vinyls products as DRAFT on the live store
+ * (designer-laboratory-sandbox), then set metafields via GraphQL and attach the
+ * LOCAL image (PL rule: images from disk, never hotlinked from rigowall.com).
+ * Mirrors greenland-onboard/create-drafts.mjs; shared ../lib/shopify.mjs client.
+ *
+ * node create-drafts.mjs # DRY-RUN: show plan
+ * node create-drafts.mjs --apply --limit=3 # canary
+ * node create-drafts.mjs --apply # all remaining (resumable, day-cap aware)
+ *
+ * Idempotent: skips any DWWL sku already live on Shopify OR already in out/created.jsonl.
+ * DRAFT-ONLY: never sets status active/publishes — activation is Steve-gated.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { createRequire } from 'node:module';
+import { execFileSync } from 'node:child_process';
+import { rest, gql, restAll, SHOP, TOKEN } from '../lib/shopify.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const require = createRequire(import.meta.url);
+const budget = require('../variant-budget/budget.cjs');
+const BUDGET_CAT = 'backlog';
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find((a) => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
+const M_MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{field message} } }`;
+
+const loadJsonl = (f) => fs.existsSync(path.join(OUT, f))
+ ? fs.readFileSync(path.join(OUT, f), 'utf8').trim().split('\n').filter(Boolean).map((l) => JSON.parse(l)) : [];
+
+async function attachLocalImage(pid, localPath, filename) {
+ if (!localPath || !fs.existsSync(localPath)) return 'no-file';
+ try {
+ const b64 = fs.readFileSync(localPath).toString('base64');
+ const r = await rest(`/products/${pid}/images.json`, { method: 'POST', body: { image: { attachment: b64, filename } } });
+ return (r.status === 200 || r.status === 201) ? 'ok' : `up-${r.status}`;
+ } catch { return 'err'; }
+}
+
+async function liveDwwlSkus() {
+ try {
+ const prods = await restAll('/products.json?vendor=Phillipe%20Romano&fields=id,variants&limit=250', 'products');
+ const s = new Set();
+ for (const p of prods) for (const v of (p.variants || []))
+ if (v.sku && v.sku.toUpperCase().startsWith('DWWL-')) s.add(v.sku.toUpperCase());
+ return s;
+ } catch { return new Set(); }
+}
+
+async function main() {
+ const payloads = loadJsonl('payloads.jsonl');
+ const liveSkus = await liveDwwlSkus();
+ const created = loadJsonl('created.jsonl');
+ const createdSku = new Set(created.map((c) => c.sku.toUpperCase()));
+ let todo = payloads.filter((p) => !liveSkus.has(p.sku.toUpperCase()) && !createdSku.has(p.sku.toUpperCase()));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+
+ const headroom = budget.remaining(BUDGET_CAT);
+ console.log(`Store ${SHOP} · token …${TOKEN.slice(-4)} · payloads ${payloads.length} · live DWWL ${liveSkus.size} · to create ${todo.length} · '${BUDGET_CAT}' headroom ${headroom} variants (~${Math.floor(headroom / 2)} products) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) {
+ for (const o of todo.slice(0, 3)) console.log(` [${o.sku}] "${o.product.title}" · Sample $${o.product.variants[1].price} · mf:${o.metafields.length}`);
+ console.log('DRY-RUN. --apply (optionally --limit=N) to create drafts.');
+ return;
+ }
+
+ const fd = fs.openSync(path.join(OUT, 'created.jsonl'), 'a');
+ let ok = 0, fail = 0, mfFail = 0, imgFail = 0;
+ for (const o of todo) {
+ const grant = budget.take(BUDGET_CAT, o.product.variants.length);
+ if (grant < o.product.variants.length) { console.error(`\n⛔ '${BUDGET_CAT}' budget exhausted today (granted ${grant}). Stop — resume tomorrow (idempotent).`); break; }
+ try {
+ const res = await rest('/products.json', { method: 'POST', body: { product: o.product } });
+ const body = await res.json().catch(() => ({}));
+ if (res.status === 201 && body?.product?.id) {
+ const pid = body.product.id;
+ if (o.metafields.length) {
+ const gid = `gid://shopify/Product/${pid}`;
+ const d = await gql(M_MF, { mf: o.metafields.map((m) => ({ ownerId: gid, namespace: m.namespace, key: m.key, type: m.type, value: m.value })) });
+ const ue = d?.metafieldsSet?.userErrors || d?.__err || [];
+ if (ue.length) { mfFail++; console.error(` ⚠ mf ${o.sku}: ${JSON.stringify(ue).slice(0, 160)}`); }
+ }
+ const imgRes = await attachLocalImage(pid, o.local_image_path, `${o.sku}.jpg`);
+ if (imgRes !== 'ok') { imgFail++; console.error(` ⚠ img ${o.sku}: ${imgRes}`); }
+ fs.writeSync(fd, JSON.stringify({ mfr_sku: o.mfr_sku, sku: o.sku, product_id: String(pid), image: imgRes, status: 'draft', created_at: new Date().toISOString() }) + '\n');
+ // unified-first bookkeeping: record the Shopify id on the staging row
+ try {
+ execFileSync('psql', ['host=/tmp dbname=dw_unified', '-Atc',
+ `update rigo_catalog set shopify_product_id=${pid}, status='drafted', updated_at=now() where mfr_sku='${o.mfr_sku.replace(/'/g, "''")}'`]);
+ } catch { /* non-fatal */ }
+ ok++; if (ok % 20 === 0) console.log(` ...created ${ok} (fail ${fail}, mfFail ${mfFail}, imgFail ${imgFail})`);
+ } else {
+ const errStr = JSON.stringify(body).toLowerCase();
+ if (/exceed|limit|too many|maximum/.test(errStr) && /variant|product|day/.test(errStr)) { console.error(`\n⛔ Shopify cap on ${o.sku}. Stop — resume tomorrow.`); break; }
+ fail++; console.error(` FAIL ${o.sku}: HTTP ${res.status} ${JSON.stringify(body).slice(0, 200)}`);
+ }
+ } catch (e) { fail++; console.error(` ERR ${o.sku}: ${String(e).slice(0, 160)}`); await sleep(700); }
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. created=${ok} failed=${fail} mfFail=${mfFail} imgFail=${imgFail} of ${todo.length}`);
+}
+
+main().catch((e) => { console.error(e); process.exit(1); });
diff --git a/scripts/rigo-onboard/enrich-rigo.mjs b/scripts/rigo-onboard/enrich-rigo.mjs
new file mode 100644
index 0000000..017e2b6
--- /dev/null
+++ b/scripts/rigo-onboard/enrich-rigo.mjs
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+// enrich-rigo.mjs — local Gemini 2.0 Flash vision enrichment for rigo_catalog
+// (full-monte Phase 3 contract, run locally because the staging table is on the
+// local dw_unified mirror; canonical Kamatera enrich not needed for this line).
+// Images sent base64 (Gemini does not fetch URLs). ~$0.0006/product.
+// Descriptions are generated from the image alone — inherently free of RIGO names.
+//
+// Usage: node enrich-rigo.mjs [--limit N] [--dry] [--budget 2.00]
+
+import { readFile, appendFile } from 'node:fs/promises';
+import { execFileSync } from 'node:child_process';
+import { homedir } from 'node:os';
+import { join } from 'node:path';
+
+const argv = process.argv.slice(2);
+const LIMIT = argv.includes('--limit') ? parseInt(argv[argv.indexOf('--limit') + 1], 10) : Infinity;
+const DRY = argv.includes('--dry');
+const BUDGET = argv.includes('--budget') ? parseFloat(argv[argv.indexOf('--budget') + 1]) : 2.0;
+const COST_PER_CALL = 0.0006;
+
+const env = await readFile(join(homedir(), 'Projects/secrets-manager/.env'), 'utf8');
+const KEY = (env.match(/^GEMINI_API_KEY=(.+)$/m) || [])[1]?.trim();
+if (!KEY) { console.error('No GEMINI_API_KEY'); process.exit(1); }
+
+const psql = (sql) =>
+ execFileSync('psql', ['host=/tmp dbname=dw_unified', '-Atc', sql], { encoding: 'utf8' }).trim();
+const q = (v) => (v == null || v === '' ? 'NULL' : `'${String(v).replace(/'/g, "''")}'`);
+
+const PROMPT = `You are analyzing a scan of a commercial vinyl wallcovering (Type I/II contract vinyl). Return STRICT JSON only, no markdown fences:
+{
+ "colors":[{"name":"...","hex":"#......","percentage":N}, ...], // 2-6 colors, percentages sum to 100
+ "backgroundColor":"...", "backgroundHex":"#......", "dominantHex":"#......",
+ "styles":["..."], // 1-3 of: Modern, Traditional, Transitional, Industrial, Organic, Coastal, Classic
+ "patterns":["..."], // 1-3 of: Texture, Stria, Linen, Weave, Grasscloth Look, Stripe, Geometric, Abstract, Damask, Solid, Crackle, Stucco, Wood Look, Metallic
+ "description":"..." // 2-3 elegant customer-facing sentences describing look/texture/use in commercial and residential interiors. NEVER mention any brand or manufacturer.
+}`;
+
+async function gemini(imgB64) {
+ const res = await fetch(
+ `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent?key=${KEY}`,
+ {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ contents: [{ parts: [{ text: PROMPT }, { inline_data: { mime_type: 'image/jpeg', data: imgB64 } }] }],
+ generationConfig: { temperature: 0.2, maxOutputTokens: 800 },
+ }),
+ }
+ );
+ if (!res.ok) throw new Error(`Gemini HTTP ${res.status}: ${(await res.text()).slice(0, 200)}`);
+ const j = await res.json();
+ const text = j.candidates?.[0]?.content?.parts?.[0]?.text || '';
+ const m = text.match(/\{[\s\S]*\}/);
+ if (!m) throw new Error(`no JSON in response: ${text.slice(0, 120)}`);
+ return JSON.parse(m[0]);
+}
+
+const rowsRaw = psql(
+ `select mfr_sku||'|'||local_image_path from rigo_catalog
+ where ai_description is null and local_image_path is not null
+ order by mfr_sku`
+);
+const rows = rowsRaw ? rowsRaw.split('\n').map((l) => { const i = l.indexOf('|'); return { sku: l.slice(0, i), img: l.slice(i + 1) }; }) : [];
+const todo = rows.slice(0, LIMIT);
+const estCost = (todo.length * COST_PER_CALL).toFixed(2);
+console.log(`${rows.length} rows need enrichment; processing ${todo.length}; est cost $${estCost} (budget $${BUDGET})`);
+if (todo.length * COST_PER_CALL > BUDGET) { console.error('Over budget — raise --budget or lower --limit'); process.exit(1); }
+if (DRY) process.exit(0);
+
+let done = 0, failed = 0, spent = 0;
+for (const { sku, img } of todo) {
+ try {
+ const b64 = (await readFile(img)).toString('base64');
+ const r = await gemini(b64);
+ spent += COST_PER_CALL;
+ const colors = (r.colors || []).map((c) => c.name).join(', ');
+ psql(
+ `update rigo_catalog set
+ ai_colors=${q(colors)},
+ ai_background_color=${q(r.backgroundColor)},
+ color_hex=${q(r.dominantHex || r.backgroundHex)},
+ ai_styles=${q((r.styles || []).join(', '))},
+ ai_patterns=${q((r.patterns || []).join(', '))},
+ ai_description=${q(r.description)},
+ status='enriched', updated_at=now()
+ where mfr_sku=${q(sku)}`
+ );
+ done++;
+ if (done % 25 === 0) console.log(` ${done}/${todo.length} enriched, $${spent.toFixed(2)} spent`);
+ } catch (e) {
+ failed++;
+ console.error(`FAIL ${sku}: ${e.message}`);
+ if (failed > 20 && failed > done) { console.error('Too many failures — aborting'); break; }
+ }
+ await new Promise((r) => setTimeout(r, 650)); // ~90 RPM, under the 100 RPM cap
+}
+console.log(`\nDONE: ${done} enriched, ${failed} failed, actual cost ~$${spent.toFixed(2)}`);
+
+// cost-ledger entry (append-only, canonical schema — matches cost-tracker/scripts/log.js:
+// money in cost_usd (a TOTAL, never the per-call unit_cost rate); units as an ARRAY of
+// {qty,unit,rate,subtotal}; api/vendor/app/note — so report.js counts it without drift-tolerance)
+await appendFile(join(homedir(), '.claude/cost-ledger.jsonl'),
+ JSON.stringify({
+ ts: new Date().toISOString(),
+ api: 'gemini_2_5_flash',
+ vendor: 'Google',
+ app: 'rigo-onboard',
+ note: `rigo enrichment — ${done} gemini-2.5-flash-lite calls`,
+ units: [{ qty: done, unit: 'call', rate: COST_PER_CALL, subtotal: +spent.toFixed(4) }],
+ cost_usd: +spent.toFixed(4),
+ }) + '\n');
diff --git a/scripts/rigo-onboard/load-rigo.mjs b/scripts/rigo-onboard/load-rigo.mjs
new file mode 100644
index 0000000..340a3f7
--- /dev/null
+++ b/scripts/rigo-onboard/load-rigo.mjs
@@ -0,0 +1,39 @@
+#!/usr/bin/env node
+// load-rigo.mjs — UPSERT data/rigo-products.jsonl into dw_unified.rigo_catalog (local, host=/tmp).
+// Zero-dep: generates parameterized SQL and pipes it through psql.
+
+import { readFile, writeFile } from 'node:fs/promises';
+import { execFileSync } from 'node:child_process';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const IN = join(HERE, 'data', 'rigo-products.jsonl');
+const SQL_OUT = join(HERE, 'data', 'rigo-upsert.sql');
+
+const q = (v) => (v == null || v === '' ? 'NULL' : `'${String(v).replace(/'/g, "''")}'`);
+
+const raw = (await readFile(IN, 'utf8')).trim();
+if (!raw) { console.error(`${IN} is empty — run scrape-rigo.mjs first`); process.exit(1); }
+const lines = raw.split('\n').filter(Boolean);
+const rows = lines.map((l) => JSON.parse(l));
+console.log(`${rows.length} rows in ${IN}`);
+
+const cols = ['mfr_sku','pattern_code','pattern_name','color_name','collection','product_url',
+ 'image_url','local_image_path','width','weight_type','content','backing','match_type','fire_rating'];
+
+const values = rows.map((r) => `(${cols.map((c) => q(r[c])).join(',')})`).join(',\n');
+const sql = `BEGIN;
+INSERT INTO rigo_catalog (${cols.join(',')})
+VALUES
+${values}
+ON CONFLICT (mfr_sku) DO UPDATE SET
+ ${cols.filter((c) => c !== 'mfr_sku').map((c) => `${c} = EXCLUDED.${c}`).join(',\n ')},
+ updated_at = now();
+COMMIT;
+`;
+await writeFile(SQL_OUT, sql);
+const out = execFileSync('psql', ['host=/tmp dbname=dw_unified', '-v', 'ON_ERROR_STOP=1', '-f', SQL_OUT], { encoding: 'utf8' });
+console.log(out.trim());
+const count = execFileSync('psql', ['host=/tmp dbname=dw_unified', '-Atc', 'select count(*) from rigo_catalog'], { encoding: 'utf8' });
+console.log(`rigo_catalog now has ${count.trim()} rows`);
diff --git a/scripts/rigo-onboard/scrape-rigo.mjs b/scripts/rigo-onboard/scrape-rigo.mjs
new file mode 100644
index 0000000..60170cd
--- /dev/null
+++ b/scripts/rigo-onboard/scrape-rigo.mjs
@@ -0,0 +1,158 @@
+#!/usr/bin/env node
+// scrape-rigo.mjs — full catalog scrape of rigowall.com (plain-fetch, $0).
+// BFS: 5 collection pages seed pattern detail URLs; each detail page yields specs +
+// "Available Colorways" links which are enqueued until the colorway graph is exhausted.
+// One row per colorway (mfr_sku). Images downloaded locally (PL rule: never hotlink).
+// Output: data/rigo-products.jsonl + images/<mfr_sku>.jpg, then UPSERT via load-rigo.mjs.
+//
+// Usage: node scrape-rigo.mjs [--limit N] [--no-images]
+
+import { mkdir, writeFile, appendFile } from 'node:fs/promises';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const BASE = 'https://rigowall.com';
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const COLLECTIONS = ['specify', 'spectra', 'opus', 'nobel', 'portfolio'];
+const HERE = dirname(fileURLToPath(import.meta.url));
+const IMG_DIR = join(HERE, 'images');
+const DATA_DIR = join(HERE, 'data');
+const OUT = join(DATA_DIR, 'rigo-products.jsonl');
+
+const argv = process.argv.slice(2);
+const LIMIT = argv.includes('--limit') ? parseInt(argv[argv.indexOf('--limit') + 1], 10) : Infinity;
+const SKIP_IMAGES = argv.includes('--no-images');
+const DELAY_MS = 250;
+
+const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
+
+async function get(path, asBuffer = false) {
+ for (let attempt = 1; attempt <= 3; attempt++) {
+ try {
+ const res = await fetch(BASE + path, { headers: { 'User-Agent': UA } });
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
+ return asBuffer ? Buffer.from(await res.arrayBuffer()) : await res.text();
+ } catch (e) {
+ if (attempt === 3) throw e;
+ await sleep(1000 * attempt);
+ }
+ }
+}
+
+const decode = (s) =>
+ s.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'")
+ .replace(/</g, '<').replace(/>/g, '>').replace(/\s+/g, ' ').trim();
+
+// Spec rows render as label/value pairs; strip tags then pull "Label: value" pairs.
+function parseSpecs(html) {
+ const text = html.replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<[^>]*>/g, '\n');
+ const grab = (label) => {
+ const m = text.match(new RegExp(`${label}:\\s*\\n+\\s*([^\\n]+)`, 'i'));
+ return m ? decode(m[1]) : null;
+ };
+ return {
+ collection: grab('Collection'),
+ mfr_sku: grab('Item Number'),
+ weight_type: grab('Weight'),
+ content: grab('Content'),
+ backing: grab('Backing'),
+ width: grab('Width'),
+ color_name: grab('Color'),
+ match_type: grab('Match'),
+ fire_rating: (text.match(/Fire Rating:\s*([^\n•]+)/i) || [])[1]?.trim() || null,
+ };
+}
+
+function parsePatternName(html) {
+ const t = html.match(/<title>\s*([^<]+?)\s*—/);
+ return t ? decode(t[1]) : null;
+}
+
+function parseDetailLinks(html) {
+ return [...html.matchAll(/href="(\/detail\/([a-z0-9-]+)\/([A-Za-z0-9._-]+))"/g)]
+ .map((m) => ({ url: m[1], collection: m[2], item: m[3] }));
+}
+
+async function main() {
+ await mkdir(IMG_DIR, { recursive: true });
+ await mkdir(DATA_DIR, { recursive: true });
+ await writeFile(OUT, '');
+
+ // Seed queue from the 5 collection pages
+ const queue = [];
+ const queued = new Set();
+ for (const c of COLLECTIONS) {
+ const html = await get(`/collection/${c}`);
+ for (const l of parseDetailLinks(html)) {
+ if (!queued.has(l.url)) { queued.add(l.url); queue.push(l); }
+ }
+ await sleep(DELAY_MS);
+ }
+ console.log(`Seeded ${queue.length} pattern pages from ${COLLECTIONS.length} collections`);
+
+ const rows = [];
+ let imgFail = 0;
+ while (queue.length && rows.length < LIMIT) {
+ const { url, collection } = queue.shift();
+ let html;
+ try { html = await get(url); }
+ catch (e) { console.error(`FAIL ${url}: ${e.message}`); continue; }
+
+ const specs = parseSpecs(html);
+ const pattern_name = parsePatternName(html);
+ const mfr_sku = specs.mfr_sku || url.split('/').pop();
+ const pattern_code = mfr_sku.split('-')[0];
+
+ // Enqueue colorway siblings discovered on this page
+ for (const l of parseDetailLinks(html)) {
+ if (!queued.has(l.url)) { queued.add(l.url); queue.push(l); }
+ }
+
+ // Image filename can differ from the item number (legacy IDs — e.g. CFY-4205's
+ // image is LB2-4061.jpg), so parse the page's actual main-image src.
+ const imgMatch = html.match(/id="main-image"[\s\S]{0,200}?src="([^"]+)"/);
+ const imgPath = imgMatch ? decode(imgMatch[1]) : `/IMAGE_MST/Full-Size/${mfr_sku}.jpg`;
+ const image_url = BASE + imgPath;
+ let local_image_path = null;
+ if (!SKIP_IMAGES && !imgPath.includes('placeholder')) {
+ try {
+ const buf = await get(imgPath, true);
+ if (buf.length < 2000) throw new Error(`suspiciously small (${buf.length}B)`);
+ local_image_path = join(IMG_DIR, `${mfr_sku}.jpg`);
+ await writeFile(local_image_path, buf);
+ } catch (e) {
+ imgFail++;
+ console.error(`IMG FAIL ${mfr_sku}: ${e.message}`);
+ }
+ }
+
+ const row = {
+ mfr_sku, pattern_code, pattern_name,
+ color_name: specs.color_name,
+ collection: (specs.collection || collection || '').toLowerCase(),
+ product_url: BASE + url,
+ image_url, local_image_path,
+ width: specs.width, weight_type: specs.weight_type, content: specs.content,
+ backing: specs.backing, match_type: specs.match_type, fire_rating: specs.fire_rating,
+ };
+ rows.push(row);
+ await appendFile(OUT, JSON.stringify(row) + '\n');
+ if (rows.length % 50 === 0) console.log(` ${rows.length} SKUs scraped, ${queue.length} in queue`);
+ await sleep(DELAY_MS);
+ }
+
+ // Summary
+ const byColl = {};
+ const byPattern = {};
+ for (const r of rows) {
+ byColl[r.collection] = (byColl[r.collection] || 0) + 1;
+ byPattern[r.pattern_code] = (byPattern[r.pattern_code] || 0) + 1;
+ }
+ console.log(`\nDONE: ${rows.length} colorway SKUs, ${Object.keys(byPattern).length} patterns, ${imgFail} image failures`);
+ console.log('Per collection:', JSON.stringify(byColl));
+ const noColor = rows.filter((r) => !r.color_name).length;
+ const noName = rows.filter((r) => !r.pattern_name).length;
+ console.log(`Missing color_name: ${noColor}, missing pattern_name: ${noName}`);
+}
+
+main().catch((e) => { console.error(e); process.exit(1); });
diff --git a/scripts/rl-zero-rootcause/rl-diag.mjs b/scripts/rl-zero-rootcause/rl-diag.mjs
new file mode 100644
index 0000000..416fe93
--- /dev/null
+++ b/scripts/rl-zero-rootcause/rl-diag.mjs
@@ -0,0 +1,23 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active vendor:'Ralph Lauren'"){ pageInfo{hasNextPage endCursor} edges{node{handle createdAt variants(first:10){edges{node{title price position inventoryPolicy createdAt sku}}}}} } }`;
+let cursor=null, pages=0, total=0; const zero=[];
+while(pages<15){ const j=await gql(Q,{cursor}); if(!j?.data){console.log('fail',JSON.stringify(j?.errors||'').slice(0,200));break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node).map(v=>({t:v.title,price:parseFloat(v.price),pos:v.position,ip:v.inventoryPolicy,created:v.createdAt,sku:v.sku})).filter(v=>!isNaN(v.price));
+ const mx=vs.length?Math.max(...vs.map(v=>v.price)):null;
+ if(vs.length===1 && mx===0){ zero.push({h:n.handle,prodCreated:n.createdAt,v:vs[0]}); } }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(200); }
+console.log(`RL active products: ${total} | single-variant zero-dollar: ${zero.length}`);
+const years={},titles={},ipc={},vcreatedYears={};
+zero.forEach(z=>{ const py=(z.prodCreated||'').slice(0,4); years[py]=(years[py]||0)+1; titles[z.v.t]=(titles[z.v.t]||0)+1; ipc[z.v.ip]=(ipc[z.v.ip]||0)+1; const vy=(z.v.created||'').slice(0,4); vcreatedYears[vy]=(vcreatedYears[vy]||0)+1; });
+console.log('product createdAt year:', JSON.stringify(years));
+console.log('VARIANT createdAt year:', JSON.stringify(vcreatedYears));
+console.log('variant title:', JSON.stringify(titles));
+console.log('inventoryPolicy:', JSON.stringify(ipc));
+console.log('\nexamples:'); zero.slice(0,5).forEach(z=>console.log(` ${z.h.slice(0,40)} prodCreated=${z.prodCreated.slice(0,10)} v="${z.v.t}" $${z.v.price} vCreated=${z.v.created.slice(0,10)} sku=${z.v.sku} ${z.v.ip}`));
+fs.writeFileSync('/tmp/rl-diag.json',JSON.stringify({total,zeroCount:zero.length,years,vcreatedYears,titles,ipc,examples:zero.slice(0,10)},null,2));
diff --git a/scripts/robots-sitemap/robots-sitemap-canary.mjs b/scripts/robots-sitemap/robots-sitemap-canary.mjs
new file mode 100644
index 0000000..7f40471
--- /dev/null
+++ b/scripts/robots-sitemap/robots-sitemap-canary.mjs
@@ -0,0 +1,135 @@
+// robots-sitemap-canary — read-only crawl-directive + sitemap health across the
+// core DW web fleet. A single accidental site-wide `Disallow: /` or a missing/
+// stale sitemap silently suppresses organic indexing fleet-wide — invisible to
+// uptime/TLS canaries (the site is UP and the cert is valid; Google just stops
+// indexing it). Nothing else checks this. Pure read-only GET of /robots.txt +
+// /sitemap.xml per host.
+//
+// node robots-sitemap-canary.mjs [--stale 120] [--hosts a.com,b.com]
+// READ-ONLY (HTTP GET only, no writes). $0.
+import fs from 'node:fs';
+
+const args = process.argv.slice(2);
+const STALE = parseInt(args.find((_,i,a)=>a[i-1]==='--stale')||'120',10)||120; // days; sitemap lastmod older than this = WARN
+const HOSTS = (args.find((_,i,a)=>a[i-1]==='--hosts') || [
+ 'www.designerwallcoverings.com','apartmentwallpaper.com','philipperomano.com',
+ 'novasuede.com','wallco.ai','architecturalwallcoverings.com','thesetdecorator.com',
+ 'corkwallcovering.com','silkwallpaper.com','linenwallpaper.com',
+ 'raffiawallpaper.com','glitterwallpaper.com','hospitalitywallcoverings.com','grasscloth.com',
+].join(',')).split(',').map(h=>h.trim()).filter(Boolean);
+const OUT=`${process.env.HOME}/.claude/yolo-queue/robots-sitemap-2026-06-16.json`;
+const MD =`${process.env.HOME}/.claude/yolo-queue/robots-sitemap-2026-06-16.md`;
+
+async function get(url){
+ const ctrl=new AbortController(); const t=setTimeout(()=>ctrl.abort(),12000);
+ try{
+ const r=await fetch(url,{signal:ctrl.signal,redirect:'follow',headers:{'User-Agent':'DW-robots-sitemap-canary/1.0'}});
+ const body=await r.text();
+ return { status:r.status, body, finalUrl:r.url };
+ }catch(e){ return { status:0, body:'', err:String(e.message).slice(0,40) }; }
+ finally{ clearTimeout(t); }
+}
+
+// Is GOOGLEBOT blocked site-wide? robots.txt precedence: a crawler obeys the
+// MOST SPECIFIC matching User-agent group, so an explicit `User-agent: Googlebot`
+// group overrides `User-agent: *`. We evaluate from Googlebot's perspective —
+// that's the only thing that matters for indexing. (Avoids the false positive
+// where a trailing `User-agent: * / Disallow: /` coexists with an explicit
+// Googlebot allow group, e.g. legacy/parked robots.txt files.)
+function blocksGooglebot(robots){
+ const lines=robots.split(/\r?\n/).map(l=>l.replace(/#.*$/,'').trim()).filter(Boolean);
+ // collect Disallow directives per user-agent group
+ const groups=new Map(); // ua(lowercased) -> array of disallow values
+ let cur=[];
+ for(const l of lines){
+ const m=l.match(/^user-agent:\s*(.+)$/i);
+ if(m){ const ua=m[1].trim().toLowerCase(); if(!groups.has(ua)) groups.set(ua,[]); cur=groups.get(ua); continue; }
+ const d=l.match(/^disallow:\s*(.*)$/i);
+ if(d && cur) cur.push(d[1].trim());
+ }
+ // Googlebot uses its own group if present, else the * group.
+ const eff = groups.has('googlebot') ? groups.get('googlebot') : (groups.get('*')||[]);
+ return eff.some(v=>v==='/'); // Disallow: / → entire site blocked for Googlebot
+}
+function sitemapsFromRobots(robots){
+ return [...robots.matchAll(/^sitemap:\s*(\S+)/gim)].map(m=>m[1].trim());
+}
+function newestLastmod(xml){
+ const mods=[...xml.matchAll(/<lastmod>([^<]+)<\/lastmod>/gi)].map(m=>Date.parse(m[1].trim())).filter(n=>!isNaN(n));
+ if(!mods.length) return null;
+ return Math.max(...mods);
+}
+
+async function checkHost(host){
+ const base=`https://${host}`;
+ const r={ host, flags:[] };
+ // --- robots.txt ---
+ const rob=await get(`${base}/robots.txt`);
+ r.robots_status=rob.status;
+ if(rob.status!==200){ r.flags.push('robots_missing'); }
+ else {
+ r.robots_blocks_all = blocksGooglebot(rob.body);
+ if(r.robots_blocks_all) r.flags.push('ROBOTS_BLOCKS_GOOGLEBOT');
+ // resolve declared Sitemap: URLs against base (they may be relative, e.g. "/sitemap.xml")
+ r.robots_sitemaps = sitemapsFromRobots(rob.body).map(u=>{ try{ return new URL(u, base).href; }catch{ return null; } }).filter(Boolean);
+ r.robots_declares_sitemap = r.robots_sitemaps.length>0;
+ }
+ // --- sitemap.xml (prefer one declared in robots, else default) ---
+ const smUrl = (r.robots_sitemaps && r.robots_sitemaps[0]) || `${base}/sitemap.xml`;
+ r.sitemap_url=smUrl;
+ const sm=await get(smUrl);
+ r.sitemap_status=sm.status;
+ if(sm.status!==200){ r.flags.push('sitemap_missing'); }
+ else {
+ const xml=sm.body;
+ const isXml=/^\s*(<\?xml|<urlset|<sitemapindex)/i.test(xml);
+ r.sitemap_valid_xml=isXml;
+ r.sitemap_is_index=/<sitemapindex/i.test(xml);
+ r.sitemap_entries=(xml.match(/<loc>/gi)||[]).length;
+ if(!isXml){ r.flags.push('sitemap_invalid_xml'); }
+ else {
+ if(r.sitemap_entries===0) r.flags.push('sitemap_empty');
+ const nm=newestLastmod(xml);
+ if(nm){ const days=Math.floor((Date.now()-nm)/86400000); r.sitemap_newest_lastmod_days=days; if(days>STALE) r.flags.push('sitemap_stale'); }
+ else if(!r.sitemap_is_index){ r.flags.push('sitemap_no_lastmod'); }
+ }
+ if(r.robots_status===200 && !r.robots_declares_sitemap) r.flags.push('sitemap_not_in_robots');
+ }
+ // --- verdict ---
+ const hard=['ROBOTS_BLOCKS_GOOGLEBOT','sitemap_missing','sitemap_invalid_xml','sitemap_empty'];
+ const unreachable = rob.status===0 && sm.status===0;
+ if(unreachable) r.verdict='UNKNOWN';
+ else if(r.flags.some(f=>hard.includes(f))) r.verdict='FAIL';
+ else if(r.flags.length) r.verdict='WARN';
+ else r.verdict='PASS';
+ return r;
+}
+
+(async()=>{
+ const results=[];
+ for(const h of HOSTS) results.push(await checkHost(h));
+ const fail=results.filter(r=>r.verdict==='FAIL');
+ const warn=results.filter(r=>r.verdict==='WARN');
+ const unk=results.filter(r=>r.verdict==='UNKNOWN');
+ const verdict = fail.length?'FAIL':warn.length?'WARN':'PASS';
+
+ const report={ generated_at:new Date().toISOString(), checked:results.length, stale_days:STALE,
+ verdict, fail:fail.length, warn:warn.length, unknown:unk.length, results };
+ fs.writeFileSync(OUT, JSON.stringify(report,null,2));
+
+ const emoji=verdict==='FAIL'?'🔴':verdict==='WARN'?'🟠':'🟢';
+ let md=`# robots.txt / sitemap.xml fleet canary — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md+=`Checked **${results.length}** core fleet hosts. **READ-ONLY (HTTP GET only), \$0.** Stale threshold: sitemap newest lastmod > ${STALE}d.\n\n`;
+ md+=`## ${emoji} ${verdict} — ${fail.length} FAIL · ${warn.length} WARN · ${unk.length} UNKNOWN\n\n`;
+ md+=`| Host | Verdict | robots | blocks-googlebot | sitemap | entries | newest lastmod | flags |\n|---|:--:|:--:|:--:|:--:|---:|---:|---|\n`;
+ for(const r of results){
+ md+=`| ${r.host} | ${r.verdict} | ${r.robots_status||'—'} | ${r.robots_blocks_all?'🔴 YES':'no'} | ${r.sitemap_status||'—'}${r.sitemap_is_index?' (idx)':''} | ${r.sitemap_entries??'—'} | ${r.sitemap_newest_lastmod_days!=null?r.sitemap_newest_lastmod_days+'d':'—'} | ${r.flags.join(', ')||'—'} |\n`;
+ }
+ md+=`\n_Flags: ROBOTS_BLOCKS_GOOGLEBOT = Googlebot's effective robots group (its own if present, else \`User-agent: *\`) has \`Disallow: /\` — suppresses ALL Google indexing (hard fail). sitemap_missing/invalid/empty = hard fail. sitemap_stale/no_lastmod/not_in_robots = warn. (idx) = sitemapindex (child sitemaps carry the lastmods). Relative \`Sitemap:\` URLs in robots are resolved against the host base. UNKNOWN = host unreachable (parked/off-fleet)._\n`;
+ fs.writeFileSync(MD,md);
+
+ console.log(`[robots-sitemap] ${emoji} ${verdict} · checked=${results.length} · FAIL=${fail.length} WARN=${warn.length} UNKNOWN=${unk.length}`);
+ for(const r of [...fail,...warn]) console.log(` ${r.verdict==='FAIL'?'🔴':'🟠'} ${r.host}: ${r.flags.join(', ')}`);
+ console.log(`Report: ${MD}`);
+ process.exit(verdict==='FAIL'?2:0);
+})().catch(e=>{console.error('FATAL',e.message);process.exit(1);});
diff --git a/scripts/roll-length-label/add-rolls.mjs b/scripts/roll-length-label/add-rolls.mjs
new file mode 100644
index 0000000..93803fb
--- /dev/null
+++ b/scripts/roll-length-label/add-rolls.mjs
@@ -0,0 +1,75 @@
+/**
+ * Add the "Sold Per Single Roll (W" x Lft)" variant + custom.length to migrated
+ * sample-only Size-option products (post Title-migration). GATED (--execute --i-am-steve).
+ * Per vendor: price + dims sourced from the vendor catalog (+ crawled lengths for Thibaut).
+ * Never touches the Sample variant; only ADDS the roll variant (safe — option is already "Size").
+ * Re-verifies each LIVE: must be 1-variant sample-only ($<=4.255) Size-option. Resumable.
+ *
+ * Usage: node add-rolls.mjs --vendor=thibaut [--limit=N] [--execute --i-am-steve]
+ */
+import fs from 'fs'; import path from 'path'; import { execFileSync } from 'child_process'; import { fileURLToPath } from 'url';
+import { rollLabel, lengthMetafieldValue } from './roll-label.mjs';
+const HERE = path.dirname(fileURLToPath(import.meta.url)); const OUT = path.join(HERE, 'out');
+const SHOP = 'designer-laboratory-sandbox.myshopify.com'; const URL = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const arg = k => (process.argv.find(a => a.startsWith(`--${k}=`)) || '').split('=')[1]; const has = k => process.argv.includes(`--${k}`);
+const vendor = arg('vendor'); const LIMIT = arg('limit') ? +arg('limit') : Infinity; const EXECUTE = has('execute') && has('i-am-steve');
+const V = { thibaut: { vendor: 'Thibaut', table: 'thibaut_catalog', lenCol: 'roll_length', priceCol: 'dw_retail_price', sourceIsDouble: false },
+ anna_french: { vendor: 'Anna French', table: 'anna_french_catalog', lenCol: 'length', priceCol: 'price_retail', sourceIsDouble: true } }[vendor];
+if (!V) { console.error('--vendor=thibaut|anna_french'); process.exit(1); }
+const PGENV = { PGHOST: '/tmp', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' };
+function token(){ for(const p of [path.join(HERE,'../../.env'),path.join(process.env.HOME,'Projects/secrets-manager/.env')]) try{for(const l of fs.readFileSync(p,'utf8').split('\n'))if(l.startsWith('SHOPIFY_ADMIN_TOKEN='))return l.split('=')[1].trim();}catch{} throw 0; }
+const TOKEN = token();
+async function gql(q,v){ for(let a=0;a<6;a++){ const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})}); if(r.status===429||r.status>=500){await new Promise(s=>setTimeout(s,2000*(a+1)));continue;} const j=await r.json(); if(j.errors&&/throttl/i.test(JSON.stringify(j.errors))){await new Promise(s=>setTimeout(s,2000*(a+1)));continue;} return j; } throw new Error('throttled'); }
+const sleep=ms=>new Promise(s=>setTimeout(s,ms));
+
+// price + dims maps by mfr_sku
+function maps(){
+ const price=new Map(), dims=new Map();
+ const raw=execFileSync('psql',['-tAc',`SELECT upper(mfr_sku)||'\t'||COALESCE(${V.priceCol}::text,'')||'\t'||COALESCE(width_inches::text,'')||'\t'||COALESCE(${V.lenCol},'') FROM ${V.table} WHERE mfr_sku<>''`],{env:PGENV,encoding:'utf8',maxBuffer:64e6});
+ for(const l of raw.split('\n').filter(Boolean)){const[m,pr,w,len]=l.split('\t'); if(!dims.has(m))dims.set(m,{width_inches:w?+w:null,length:len}); if(pr&&+pr>0&&!price.has(m))price.set(m,+pr);}
+ // AF price = retail*0.8824 (Thibaut structure); Thibaut price = dw_retail_price as-is
+ if(vendor==='anna_french') for(const[m,p] of price) price.set(m, Math.round(p*0.8824*100)/100);
+ const cf=path.join(OUT,`${vendor}-crawled-lengths.tsv`); if(fs.existsSync(cf))for(const l of fs.readFileSync(cf,'utf8').split('\n').filter(Boolean)){const[m,w,len]=l.split('\t'); if(m&&len&&!(dims.get(m.toUpperCase())||{}).length)dims.set(m.toUpperCase(),{width_inches:(dims.get(m.toUpperCase())||{}).width_inches||(w?+w:null),length:len});}
+ return {price,dims};
+}
+
+const Q=`query($c:String){ products(first:60, after:$c, query:"vendor:'${V.vendor}' status:active"){ pageInfo{hasNextPage endCursor}
+ nodes{ id handle options{name} msku:metafield(namespace:"custom",key:"manufacturer_sku"){value}
+ variants(first:5){nodes{id sku price title}} } } }`;
+const CREATE=`mutation($pid:ID!,$v:[ProductVariantsBulkInput!]!){ productVariantsBulkCreate(productId:$pid, variants:$v){ productVariants{id sku} userErrors{field message} } }`;
+const MFSET=`mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ userErrors{message} } }`;
+
+async function main(){
+ const {price,dims}=maps();
+ const doneFile=path.join(OUT,`rolls-added-${vendor}.done`); const done=new Set(fs.existsSync(doneFile)?fs.readFileSync(doneFile,'utf8').split('\n').filter(Boolean):[]);
+ const rb=path.join(OUT,`rolls-added-rollback-${vendor}.jsonl`);
+ console.log(`${EXECUTE?'🟢 EXECUTE':'🟡 DRY-RUN'} · ${vendor} roll-add · price-map ${price.size} dims-map ${dims.size}`);
+ let cur=null, made=0, skip=0, nodata=0, err=0, seen=0;
+ while(true){
+ const p=(await gql(Q,{c:cur})).data?.products; if(!p){console.error('ERR');break;}
+ for(const n of p.nodes){
+ if(made>=LIMIT){ cur=null; break; }
+ const opt=n.options[0]; const vs=n.variants.nodes;
+ if(!opt||opt.name!=='Size') continue; // only migrated/clean Size products
+ if(!(vs.length===1 && parseFloat(vs[0].price)<=4.255)) continue; // sample-only
+ seen++;
+ if(done.has(n.id)){ skip++; continue; }
+ const mfr=(n.msku?.value||'').toUpperCase().trim();
+ const pr=price.get(mfr); const d=dims.get(mfr);
+ const label=d?rollLabel({width_inches:d.width_inches,lengthRaw:d.length,sourceIsDouble:V.sourceIsDouble}):null;
+ const lenMf=d?lengthMetafieldValue(d.length,{sourceIsDouble:V.sourceIsDouble}):null;
+ if(!pr||!label||label==='Sold Per Roll'){ nodata++; continue; } // need price + resolvable dims
+ if(!EXECUTE){ console.log(` would add ${n.handle}: "${label}" $${pr} custom.length=${lenMf}`); made++; continue; }
+ const base=String(vs[0].sku||'').replace(/-SAMPLE$/i,'');
+ const r=(await gql(CREATE,{pid:n.id,v:[{price:String(pr),optionValues:[{optionName:'Size',name:label}],inventoryPolicy:'CONTINUE',inventoryItem:{sku:base,tracked:false}}]})).data?.productVariantsBulkCreate;
+ const e=r?.userErrors||[]; if(e.length){ if(/limit|throttl|exceed/i.test(JSON.stringify(e))){console.log('cap/throttle — stop (resumable)',JSON.stringify(e));cur=null;break;} err++; continue; }
+ if(lenMf) await gql(MFSET,{m:[{ownerId:n.id,namespace:'custom',key:'length',type:'single_line_text_field',value:lenMf}]});
+ made++; fs.appendFileSync(doneFile,n.id+'\n'); fs.appendFileSync(rb,JSON.stringify({handle:n.handle,product_id:n.id,added_variant:r.productVariants[0]?.id,label,price:pr,lengthMf:lenMf})+'\n');
+ if(made%25===0) console.log(` …${made} rolls added`);
+ await sleep(350);
+ }
+ if(made>=LIMIT||!p.pageInfo.hasNextPage) break; cur=p.pageInfo.endCursor;
+ }
+ console.log(`\nDONE ${vendor}: added=${made} sample-only-seen=${seen} skip(done)=${skip} no-price/dims=${nodata} err=${err}`);
+}
+main().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/roll-length-label/apply-roll-length.mjs b/scripts/roll-length-label/apply-roll-length.mjs
new file mode 100644
index 0000000..a30d735
--- /dev/null
+++ b/scripts/roll-length-label/apply-roll-length.mjs
@@ -0,0 +1,73 @@
+/**
+ * Apply roll-length labels from a proposed-changes JSONL: rename each roll
+ * variant's "Size" value -> "Sold Per Single Roll (W" x Lft)" + write custom.length.
+ * GATED. Default = dry-run. Real writes require BOTH --execute --i-am-steve.
+ * Preserves variant GID/SKU/price + the Sample variant. Logs every write to a
+ * rollback JSONL. Idempotent via a done-file (resumable).
+ *
+ * Usage: node apply-roll-length.mjs --vendor=anna_french [--limit=N] [--execute --i-am-steve]
+ */
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const URL = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const arg = k => (process.argv.find(a => a.startsWith(`--${k}=`)) || '').split('=')[1];
+const has = k => process.argv.includes(`--${k}`);
+
+const vendor = arg('vendor'); if (!vendor) { console.error('--vendor= required'); process.exit(1); }
+const LIMIT = arg('limit') ? +arg('limit') : Infinity;
+const EXECUTE = has('execute') && has('i-am-steve');
+const GAP_MS = 450;
+
+function token() {
+ for (const p of [path.join(HERE, '../../.env'), path.join(process.env.HOME, 'Projects/secrets-manager/.env')])
+ try { for (const ln of fs.readFileSync(p, 'utf8').split('\n')) if (ln.startsWith('SHOPIFY_ADMIN_TOKEN=')) return ln.split('=')[1].trim(); } catch {}
+ throw new Error('no SHOPIFY_ADMIN_TOKEN');
+}
+const TOKEN = token();
+async function gql(query, variables) {
+ for (let a = 0; a < 5; a++) {
+ const r = await fetch(URL, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) });
+ const j = await r.json();
+ if (j.errors && /throttl/i.test(JSON.stringify(j.errors))) { await new Promise(s => setTimeout(s, 2000 * (a + 1))); continue; }
+ return j;
+ }
+ throw new Error('throttled out');
+}
+const sleep = ms => new Promise(s => setTimeout(s, ms));
+
+const RENAME = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid, variants:$variants){ productVariants{id selectedOptions{name value}} userErrors{field message} } }`;
+const MFSET = `mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ metafields{key value} userErrors{field message} } }`;
+
+async function main() {
+ const recs = fs.readFileSync(path.join(OUT, `proposed-changes-${vendor}.jsonl`), 'utf8').split('\n').filter(Boolean).map(JSON.parse).slice(0, LIMIT);
+ const doneFile = path.join(OUT, `applied-${vendor}.done`);
+ const done = new Set(fs.existsSync(doneFile) ? fs.readFileSync(doneFile, 'utf8').split('\n').filter(Boolean) : []);
+ const rbFile = path.join(OUT, `roll-length-rollback-${vendor}.jsonl`);
+ console.log(`${EXECUTE ? '🟢 EXECUTE' : '🟡 DRY-RUN (need --execute --i-am-steve)'} · ${vendor} · ${recs.length} records${LIMIT !== Infinity ? ` (limit ${LIMIT})` : ''}`);
+ let applied = 0, skipped = 0, errs = 0;
+ for (const r of recs) {
+ if (done.has(r.variant_id)) { skipped++; continue; }
+ if (!EXECUTE) { console.log(` would: ${r.handle} "${r.old_label}" -> "${r.new_label}" custom.length="${r.length_metafield}"`); continue; }
+ try {
+ const r1 = (await gql(RENAME, { pid: r.product_id, variants: [{ id: r.variant_id, optionValues: [{ optionName: 'Size', name: r.new_label }] }] }))?.data?.productVariantsBulkUpdate;
+ const e1 = r1?.userErrors || [];
+ const r2 = (await gql(MFSET, { m: [{ ownerId: r.product_id, namespace: 'custom', key: 'length', type: 'single_line_text_field', value: r.length_metafield }] }))?.data?.metafieldsSet;
+ const e2 = r2?.userErrors || [];
+ if (e1.length || e2.length) { errs++; console.log(` ERR ${r.handle}:`, JSON.stringify([...e1, ...e2])); }
+ else {
+ applied++;
+ fs.appendFileSync(rbFile, JSON.stringify({ product_id: r.product_id, variant_id: r.variant_id, handle: r.handle, old_label: r.old_label, new_label: r.new_label, old_length_mf: null, new_length_mf: r.length_metafield }) + '\n');
+ fs.appendFileSync(doneFile, r.variant_id + '\n');
+ if (applied % 25 === 0) console.log(` …${applied} applied`);
+ }
+ } catch (e) { errs++; console.log(` EXC ${r.handle}: ${String(e).slice(0, 100)}`); }
+ await sleep(GAP_MS);
+ }
+ console.log(`\nDONE ${vendor}: applied=${applied} skipped(done)=${skipped} errs=${errs}`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/roll-length-label/audit-roll-length.mjs b/scripts/roll-length-label/audit-roll-length.mjs
new file mode 100644
index 0000000..dd4f3a5
--- /dev/null
+++ b/scripts/roll-length-label/audit-roll-length.mjs
@@ -0,0 +1,131 @@
+/**
+ * READ-ONLY audit: which Anna French / Thibaut roll products need the new
+ * "Sold Per Single Roll (W" x Lft)" label + custom.length metafield.
+ * Joins LIVE Shopify roll variants to the vendor catalog by mfr_sku, computes the
+ * proposed label/length, and buckets every product. Writes nothing to Shopify.
+ *
+ * Usage: node audit-roll-length.mjs --vendor=anna_french|thibaut
+ * Out: out/audit-{vendor}-{date}.json + out/proposed-changes-{vendor}.jsonl
+ */
+import fs from 'fs';
+import path from 'path';
+import { execFileSync } from 'child_process';
+import { fileURLToPath } from 'url';
+import { rollLabel, lengthMetafieldValue, PLAIN_ROLL } from './roll-label.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const URL = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+
+const vendorArg = (process.argv.find(a => a.startsWith('--vendor=')) || '').split('=')[1];
+const VMAP = {
+ // sourceIsDouble: AF catalog 'length' is the DOUBLE/bolt (halve to single); Thibaut 'roll_length' IS the single roll
+ anna_french: { vendor: 'Anna French', table: 'anna_french_catalog', lenCol: 'length', sourceIsDouble: true },
+ thibaut: { vendor: 'Thibaut', table: 'thibaut_catalog', lenCol: 'roll_length', sourceIsDouble: false },
+};
+const V = VMAP[vendorArg];
+if (!V) { console.error('--vendor=anna_french|thibaut required'); process.exit(1); }
+
+function token() {
+ for (const p of [path.join(HERE, '../../.env'), path.join(process.env.HOME, 'Projects/secrets-manager/.env')]) {
+ try { for (const ln of fs.readFileSync(p, 'utf8').split('\n')) if (ln.startsWith('SHOPIFY_ADMIN_TOKEN=')) return ln.split('=')[1].trim(); } catch {}
+ }
+ throw new Error('no SHOPIFY_ADMIN_TOKEN');
+}
+const TOKEN = token();
+
+async function gql(query, variables) {
+ for (let attempt = 0; attempt < 5; attempt++) {
+ const r = await fetch(URL, { method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' }, body: JSON.stringify({ query, variables }) });
+ const j = await r.json();
+ if (j.errors && JSON.stringify(j.errors).match(/throttl/i)) { await new Promise(s => setTimeout(s, 2000 * (attempt + 1))); continue; }
+ return j;
+ }
+ throw new Error('gql throttled out');
+}
+
+// catalog map: MFR_SKU(upper) -> {width_inches, length}
+function loadCatalog() {
+ const sql = `SELECT upper(trim(mfr_sku))||'\t'||COALESCE(width_inches::text,'')||'\t'||COALESCE(${V.lenCol},'') FROM ${V.table} WHERE mfr_sku<>'' AND ${V.lenCol} IS NOT NULL AND ${V.lenCol}<>''`;
+ const out = execFileSync('psql', ['-tAc', sql], { env: { PGHOST: '/tmp', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' }, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
+ const m = new Map();
+ for (const line of out.split('\n')) {
+ if (!line) continue;
+ const [sku, w, len] = line.split('\t');
+ if (!m.has(sku)) m.set(sku, { width_inches: w ? +w : null, length: len }); // 0 dup-mfr verified, but keep first
+ }
+ // merge crawled backfill (e.g. thibaut-crawled-lengths.tsv: mfr \t width \t "{N} yd") for mfrs the catalog lacked
+ const crawlFile = path.join(OUT, `${vendorArg}-crawled-lengths.tsv`);
+ if (fs.existsSync(crawlFile)) {
+ let added = 0;
+ for (const line of fs.readFileSync(crawlFile, 'utf8').split('\n')) {
+ if (!line) continue;
+ const [sku, w, len] = line.split('\t');
+ if (sku && len && !m.has(sku.toUpperCase())) { m.set(sku.toUpperCase(), { width_inches: w ? +w : null, length: len }); added++; }
+ }
+ if (added) console.log(` merged ${added} crawled lengths from ${path.basename(crawlFile)}`);
+ }
+ return m;
+}
+
+const isRollValue = v => /roll/i.test(v) || /sold per \(/i.test(v); // roll variant (excl. yard/sample)
+const isSampleValue = v => /sample/i.test(v) || /^title$/i.test(v);
+
+async function main() {
+ fs.mkdirSync(OUT, { recursive: true });
+ const cat = loadCatalog();
+ console.log(`[${V.vendor}] catalog rows w/ length: ${cat.size}`);
+
+ const Q = `query($c:String){ products(first:100, after:$c, query:"vendor:'${V.vendor}' status:active"){
+ pageInfo{hasNextPage endCursor}
+ nodes{ id handle options{name}
+ msku:metafield(namespace:"custom",key:"manufacturer_sku"){value}
+ curlen:metafield(namespace:"custom",key:"length"){value}
+ curw:metafield(namespace:"custom",key:"width"){value}
+ variants(first:10){nodes{ id sku title selectedOptions{name value} }} } } }`;
+
+ const buckets = { resolvable: [], 'already-correct': [], 'missing-length': [], 'missing-width': [], 'sku-mismatch': [], 'ambiguous-multi-length': [], 'non-size-option': [], 'not-roll': [] };
+ const proposed = [];
+ let cur = null, page = 0, total = 0;
+ while (true) {
+ const d = await gql(Q, { c: cur });
+ const p = d?.data?.products;
+ if (!p) { console.error('ERR', JSON.stringify(d).slice(0, 300)); break; }
+ for (const n of p.nodes) {
+ total++;
+ const sizeOpt = (n.options || []).find(o => /^size$/i.test(o.name));
+ if (!sizeOpt) { buckets['non-size-option'].push(n.handle); continue; }
+ const rollV = n.variants.nodes.find(v => { const val = (v.selectedOptions[0]?.value) || v.title; return !isSampleValue(val) && isRollValue(val) && !/yard/i.test(val); });
+ if (!rollV) { buckets['not-roll'].push(n.handle); continue; }
+ const curLabel = rollV.selectedOptions[0]?.value || rollV.title;
+ const mfr = (n.msku?.value || '').trim().toUpperCase();
+ if (!mfr || !cat.has(mfr)) { buckets['sku-mismatch'].push({ handle: n.handle, mfr }); continue; }
+ const c = cat.get(mfr);
+ // width: catalog width_inches first, else fall back to the product's live custom.width metafield
+ const newLabel = rollLabel({ width_inches: c.width_inches, widthText: n.curw?.value, lengthRaw: c.length, sourceIsDouble: V.sourceIsDouble });
+ const lenMf = lengthMetafieldValue(c.length, { sourceIsDouble: V.sourceIsDouble });
+ if (!lenMf) { buckets['missing-length'].push({ handle: n.handle, mfr }); continue; }
+ if (newLabel === PLAIN_ROLL) { buckets['missing-width'].push({ handle: n.handle, mfr, length: c.length }); continue; }
+ const rec = { product_id: n.id, variant_id: rollV.id, handle: n.handle, mfr_sku: mfr, old_label: curLabel, new_label: newLabel, length_metafield: lenMf, width_inches: c.width_inches };
+ if (curLabel === newLabel && (n.curlen?.value === lenMf)) { buckets['already-correct'].push(n.handle); }
+ else { buckets.resolvable.push(rec); proposed.push(rec); }
+ }
+ page++;
+ process.stdout.write(`\r page ${page} · scanned ${total}`);
+ if (!p.pageInfo.hasNextPage) break;
+ cur = p.pageInfo.endCursor;
+ }
+ console.log('');
+
+ const date = new Date(execFileSync('date', ['+%Y-%m-%d'], { encoding: 'utf8' }).trim()).toISOString().slice(0, 10);
+ const summary = Object.fromEntries(Object.entries(buckets).map(([k, v]) => [k, v.length]));
+ fs.writeFileSync(path.join(OUT, `audit-${vendorArg}-${date}.json`), JSON.stringify({ vendor: V.vendor, scanned: total, summary, buckets }, null, 2));
+ fs.writeFileSync(path.join(OUT, `proposed-changes-${vendorArg}.jsonl`), proposed.map(r => JSON.stringify(r)).join('\n') + (proposed.length ? '\n' : ''));
+
+ console.log(`\n=== ${V.vendor} audit · scanned ${total} active products ===`);
+ for (const [k, v] of Object.entries(summary)) console.log(` ${k.padEnd(22)} ${v}`);
+ console.log(`\n -> ${proposed.length} ready to relabel (proposed-changes-${vendorArg}.jsonl)`);
+ if (proposed[0]) console.log(` e.g. ${proposed[0].handle}: "${proposed[0].old_label}" -> "${proposed[0].new_label}" · custom.length="${proposed[0].length_metafield}"`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/roll-length-label/classify-title-option.mjs b/scripts/roll-length-label/classify-title-option.mjs
new file mode 100644
index 0000000..5170f06
--- /dev/null
+++ b/scripts/roll-length-label/classify-title-option.mjs
@@ -0,0 +1,56 @@
+/**
+ * READ-ONLY: classify the Title-option products (audit non-size-option bucket) for AF+Thibaut
+ * into migration types. Writes out/title-migration-{vendor}.jsonl with the per-product plan.
+ * A = option named "Title" but already has a ROLL variant + sample -> rename option Title->Size + relabel roll
+ * B = single "Default Title" $4.25 sample-only, HAS mfr -> rename Title->Size + Default Title->Sample (roll-add later via builder)
+ * B-nomfr = single Default Title, NO mfr -> can't resolve, skip
+ * other = anything unexpected (multi-option, etc.) -> skip, report
+ */
+import fs from 'fs'; import path from 'path'; import glob from 'fs';
+import { execFileSync } from 'child_process'; import { fileURLToPath } from 'url';
+import { rollLabel, lengthMetafieldValue } from './roll-label.mjs';
+const HERE = path.dirname(fileURLToPath(import.meta.url)); const OUT = path.join(HERE, 'out');
+const SHOP = 'designer-laboratory-sandbox.myshopify.com'; const URL = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const vendorArg = (process.argv.find(a => a.startsWith('--vendor=')) || '').split('=')[1];
+const V = { anna_french: { vendor: 'Anna French', table: 'anna_french_catalog', lenCol: 'length', sourceIsDouble: true },
+ thibaut: { vendor: 'Thibaut', table: 'thibaut_catalog', lenCol: 'roll_length', sourceIsDouble: false } }[vendorArg];
+if (!V) { console.error('--vendor='); process.exit(1); }
+function token(){ for (const p of [path.join(HERE,'../../.env'), path.join(process.env.HOME,'Projects/secrets-manager/.env')]) try{for(const l of fs.readFileSync(p,'utf8').split('\n'))if(l.startsWith('SHOPIFY_ADMIN_TOKEN='))return l.split('=')[1].trim();}catch{} throw 0; }
+const TOKEN = token();
+async function gql(q){ for(let a=0;a<5;a++){ const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q})}); const j=await r.json(); if(j.errors&&/throttl/i.test(JSON.stringify(j.errors))){await new Promise(s=>setTimeout(s,2000*(a+1)));continue;} return j;} return {}; }
+const sleep=ms=>new Promise(s=>setTimeout(s,ms));
+// length+width map by mfr (catalog + crawled merge for thibaut)
+function dims(){ const raw=execFileSync('psql',['-tAc',`SELECT upper(mfr_sku)||'\t'||COALESCE(width_inches::text,'')||'\t'||COALESCE(${V.lenCol},'') FROM ${V.table} WHERE mfr_sku<>'' AND ${V.lenCol}<>''`],{env:{PGHOST:'/tmp',PGUSER:'stevestudio2',PGDATABASE:'dw_unified',PATH:'/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin'},encoding:'utf8',maxBuffer:64e6}); const m=new Map(); for(const l of raw.split('\n').filter(Boolean)){const[s,w,len]=l.split('\t'); if(!m.has(s))m.set(s,{width_inches:w?+w:null,length:len});}
+ const cf=path.join(OUT,`${vendorArg}-crawled-lengths.tsv`); if(fs.existsSync(cf))for(const l of fs.readFileSync(cf,'utf8').split('\n').filter(Boolean)){const[s,w,len]=l.split('\t'); if(s&&len&&!m.has(s.toUpperCase()))m.set(s.toUpperCase(),{width_inches:w?+w:null,length:len});} return m; }
+
+const audit = JSON.parse(fs.readFileSync(fs.readdirSync(OUT).filter(f=>new RegExp(`^audit-${vendorArg}-.*\\.json$`).test(f)).sort().pop().replace(/^/, OUT+'/')));
+const handles = audit.buckets['non-size-option'] || [];
+const dm = dims();
+const out = fs.createWriteStream(path.join(OUT, `title-migration-${vendorArg}.jsonl`));
+const tally = { A: 0, B: 0, 'B-nomfr': 0, other: 0 };
+console.log(`${V.vendor}: classifying ${handles.length} Title-option products...`);
+for (let i=0;i<handles.length;i++){
+ const h=handles[i];
+ const q=`{ productByHandle(handle:"${h}"){ id options{id name values} msku:metafield(namespace:"custom",key:"manufacturer_sku"){value} variants(first:10){nodes{id title price}} } }`;
+ const p=(await gql(q).then(r=>r.data&&r.data.productByHandle).catch(()=>null));
+ if(!p){ tally.other++; out.write(JSON.stringify({handle:h,type:'other',reason:'no-data'})+'\n'); continue; }
+ const opt=p.options[0]; const vs=p.variants.nodes; const mfr=(p.msku&&p.msku.value||'').toUpperCase().trim();
+ const d=mfr&&dm.get(mfr)||null;
+ const rec={handle:h, product_id:p.id, optionId:opt&&opt.id, optName:opt&&opt.name, mfr, vars:vs.map(v=>({id:v.id,title:v.title,price:v.price}))};
+ if(p.options.length!==1){ tally.other++; rec.type='other'; rec.reason='multi-option'; }
+ else if(vs.length>1){ // Type A: has roll variant under a non-Size option name
+ const roll=vs.find(v=>/roll/i.test(v.title)||/sold per \(/i.test(v.title));
+ if(roll){ rec.type='A'; rec.rollVarId=roll.id; rec.rollOld=roll.title;
+ rec.newLabel=d?rollLabel({width_inches:d.width_inches,lengthRaw:d.length,sourceIsDouble:V.sourceIsDouble}):null;
+ rec.lengthMf=d?lengthMetafieldValue(d.length,{sourceIsDouble:V.sourceIsDouble}):null; tally.A++; }
+ else { tally.other++; rec.type='other'; rec.reason='multivar-no-roll'; }
+ } else { // single variant
+ if(mfr){ rec.type='B'; rec.sampleVarId=vs[0].id; tally.B++; }
+ else { rec.type='B-nomfr'; tally['B-nomfr']++; }
+ }
+ out.write(JSON.stringify(rec)+'\n');
+ if((i+1)%50===0) process.stdout.write(`\r ${i+1}/${handles.length} A=${tally.A} B=${tally.B} B-nomfr=${tally['B-nomfr']} other=${tally.other}`);
+ await sleep(300);
+}
+out.end();
+console.log(`\nDONE ${V.vendor}:`, JSON.stringify(tally));
diff --git a/scripts/roll-length-label/crawl-thibaut-lengths.mjs b/scripts/roll-length-label/crawl-thibaut-lengths.mjs
new file mode 100644
index 0000000..d575ec7
--- /dev/null
+++ b/scripts/roll-length-label/crawl-thibaut-lengths.mjs
@@ -0,0 +1,66 @@
+/**
+ * Backfill Thibaut roll lengths by crawling thibaut.com PDPs (no Cloudflare → $0).
+ * Targets the SKUs the audit couldn't resolve (sku-mismatch / missing-length), fetches
+ * each PDP (catalog product_url, else /products/wallcoverings/{mfr}), extracts Length
+ * (yards) + Width (in) from the embedded JSON, and writes a TSV the audit merges in.
+ * READ-ONLY w.r.t. our systems (only HTTP GETs thibaut.com + writes a local file).
+ *
+ * Usage: node crawl-thibaut-lengths.mjs [--limit=N]
+ * Out: out/thibaut-crawled-lengths.tsv (mfr_sku \t width_inches \t "{N} yd")
+ */
+import fs from 'fs';
+import path from 'path';
+import { execFileSync } from 'child_process';
+import { fileURLToPath } from 'url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36';
+const LIMIT = (process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1];
+const sleep = ms => new Promise(s => setTimeout(s, ms));
+
+// 1) needing-length mfr_skus from the latest Thibaut audit (sku-mismatch + missing-length)
+const auditFile = fs.readdirSync(OUT).filter(f => /^audit-thibaut-.*\.json$/.test(f)).sort().pop();
+const audit = JSON.parse(fs.readFileSync(path.join(OUT, auditFile), 'utf8'));
+let need = [...(audit.buckets['sku-mismatch'] || []), ...(audit.buckets['missing-length'] || [])]
+ .map(x => (typeof x === 'string' ? { mfr: x } : x)).filter(x => x.mfr).map(x => x.mfr.toUpperCase());
+need = [...new Set(need)];
+if (LIMIT) need = need.slice(0, +LIMIT);
+console.log(`needing-length Thibaut SKUs: ${need.length} (from ${auditFile})`);
+
+// 2) catalog product_url + existing width per mfr (to prefer the real URL + keep known width)
+const PGENV = { PGHOST: '/tmp', PGUSER: 'stevestudio2', PGDATABASE: 'dw_unified', PATH: '/opt/homebrew/opt/postgresql@14/bin:/usr/bin:/bin' };
+const urlMap = new Map();
+try {
+ const raw = execFileSync('psql', ['-tAc', "SELECT upper(mfr_sku)||'\t'||COALESCE(product_url,'')||'\t'||COALESCE(width_inches::text,'') FROM thibaut_catalog WHERE mfr_sku<>''"], { env: PGENV, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
+ for (const l of raw.split('\n').filter(Boolean)) { const [m, u, w] = l.split('\t'); urlMap.set(m, { url: u, width: w }); }
+} catch {}
+
+function extract(html) {
+ const lm = html.match(/Length\\*":\s*(\d+(?:\.\d+)?)/); // yards
+ const wm = html.match(/"name":"Width","value":\s*(\d+(?:\.\d+)?)/) || html.match(/Width\\*":\s*(\d+(?:\.\d+)?)/);
+ return { yd: lm ? lm[1] : null, win: wm ? wm[1] : null };
+}
+
+const outFile = path.join(OUT, 'thibaut-crawled-lengths.tsv');
+const w = fs.createWriteStream(outFile, { flags: 'w' });
+let ok = 0, nolen = 0, fail = 0;
+for (let i = 0; i < need.length; i++) {
+ const mfr = need[i];
+ const ci = urlMap.get(mfr);
+ const url = (ci && ci.url) || `https://www.thibautdesign.com/products/wallcoverings/${mfr}`;
+ try {
+ const out = execFileSync('curl', ['-s', '-m', '20', '-A', UA, url], { encoding: 'utf8', maxBuffer: 16 * 1024 * 1024 });
+ if (out.length < 3000) { fail++; }
+ else {
+ const { yd, win } = extract(out);
+ const width = win || (ci && ci.width) || '';
+ if (yd) { w.write(`${mfr}\t${width}\t${yd} yd\n`); ok++; }
+ else { nolen++; }
+ }
+ } catch { fail++; }
+ if ((i + 1) % 50 === 0) process.stdout.write(`\r ${i + 1}/${need.length} · ok ${ok} · nolen ${nolen} · fail ${fail}`);
+ await sleep(350);
+}
+w.end();
+console.log(`\nDONE: ${ok} lengths crawled, ${nolen} no-length-on-page, ${fail} fetch-fail → ${path.basename(outFile)}`);
diff --git a/scripts/roll-length-label/migrate-title-option.mjs b/scripts/roll-length-label/migrate-title-option.mjs
new file mode 100644
index 0000000..9d889dd
--- /dev/null
+++ b/scripts/roll-length-label/migrate-title-option.mjs
@@ -0,0 +1,72 @@
+/**
+ * Title-option migration (GATED; --execute --i-am-steve). Reads title-migration-{vendor}.jsonl.
+ * Type B (single "Default Title" $4.25): productSet -> convert option Title->Size, variant->Sample
+ * (preserves the Sample variant GID + sku + price). No roll-add (builder does that, price-gated).
+ * Type A (real option mis-named "Title" w/ roll+sample): productOptionUpdate rename Title->Size,
+ * then relabel the roll variant -> "Sold Per Single Roll (...)" + custom.length.
+ * B-nomfr / other: skipped.
+ * Re-fetches each product live (idempotent: skips if option already "Size"). Rollback-logged.
+ *
+ * Usage: node migrate-title-option.mjs --vendor=anna_french|thibaut [--limit=N] [--execute --i-am-steve]
+ */
+import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url';
+const HERE = path.dirname(fileURLToPath(import.meta.url)); const OUT = path.join(HERE, 'out');
+const SHOP = 'designer-laboratory-sandbox.myshopify.com'; const URL = `https://${SHOP}/admin/api/2024-10/graphql.json`;
+const arg = k => (process.argv.find(a => a.startsWith(`--${k}=`)) || '').split('=')[1];
+const has = k => process.argv.includes(`--${k}`);
+const vendor = arg('vendor'); const LIMIT = arg('limit') ? +arg('limit') : Infinity;
+const EXECUTE = has('execute') && has('i-am-steve'); const GAP = 500;
+function token(){ for(const p of [path.join(HERE,'../../.env'),path.join(process.env.HOME,'Projects/secrets-manager/.env')]) try{for(const l of fs.readFileSync(p,'utf8').split('\n'))if(l.startsWith('SHOPIFY_ADMIN_TOKEN='))return l.split('=')[1].trim();}catch{} throw 0; }
+const TOKEN = token();
+async function gql(q,v){ for(let a=0;a<5;a++){ const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})}); const j=await r.json(); if(j.errors&&/throttl/i.test(JSON.stringify(j.errors))){await new Promise(s=>setTimeout(s,2000*(a+1)));continue;} return j; } throw new Error('throttled'); }
+const sleep=ms=>new Promise(s=>setTimeout(s,ms));
+
+const FETCH=`query($id:ID!){ product(id:$id){ options{id name} variants(first:10){nodes{id sku title price}} } }`;
+const PSET=`mutation($input:ProductSetInput!){ productSet(input:$input, synchronous:true){ product{options{name}} userErrors{field message} } }`;
+const OPTUP=`mutation($pid:ID!,$oid:ID!){ productOptionUpdate(productId:$pid, option:{id:$oid}, name:"Size"){ userErrors{field message} } }`;
+const VUP=`mutation($pid:ID!,$v:[ProductVariantsBulkInput!]!){ productVariantsBulkUpdate(productId:$pid, variants:$v){ userErrors{field message} } }`;
+const MFSET=`mutation($m:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$m){ userErrors{field message} } }`;
+
+async function main(){
+ const recs = fs.readFileSync(path.join(OUT,`title-migration-${vendor}.jsonl`),'utf8').split('\n').filter(Boolean).map(JSON.parse)
+ .filter(r=>r.type==='A'||r.type==='B').slice(0,LIMIT);
+ const doneFile=path.join(OUT,`title-migrated-${vendor}.done`);
+ const done=new Set(fs.existsSync(doneFile)?fs.readFileSync(doneFile,'utf8').split('\n').filter(Boolean):[]);
+ const rb=path.join(OUT,`title-migrate-rollback-${vendor}.jsonl`);
+ console.log(`${EXECUTE?'🟢 EXECUTE':'🟡 DRY-RUN'} · ${vendor} · ${recs.length} (A+B)${LIMIT!==Infinity?` limit ${LIMIT}`:''}`);
+ let A=0,B=0,skip=0,err=0;
+ for(const r of recs){
+ if(done.has(r.product_id)){skip++;continue;}
+ const p=(await gql(FETCH,{id:r.product_id})).data?.product;
+ if(!p){err++;continue;}
+ const opt=p.options[0];
+ if(opt.name==='Size'){ skip++; fs.appendFileSync(doneFile,r.product_id+'\n'); continue; } // already migrated
+ if(!EXECUTE){ console.log(` would ${r.type}: ${r.handle} (${opt.name} -> Size)`); (r.type==='A'?A++:B++); continue; }
+ try{
+ if(r.type==='B'){
+ const v=p.variants.nodes[0];
+ const input={id:r.product_id, productOptions:[{name:'Size',values:[{name:'Sample'}]}],
+ variants:[{id:v.id, optionValues:[{optionName:'Size',name:'Sample'}], price:v.price, inventoryItem:{sku:v.sku}}]};
+ const e=(await gql(PSET,{input})).data?.productSet?.userErrors||[];
+ if(e.length){err++; console.log(' B err',r.handle,JSON.stringify(e));continue;}
+ B++; fs.appendFileSync(rb,JSON.stringify({type:'B',handle:r.handle,product_id:r.product_id,old_option:opt.name,old_variant:v.title})+'\n');
+ } else { // Type A — productSet: convert option->Size + name both variants (sample + roll w/ dimensioned label)
+ const roll=p.variants.nodes.find(v=>/roll/i.test(v.title)||/sold per \(/i.test(v.title));
+ const samp=p.variants.nodes.find(v=>v.id!==(roll&&roll.id));
+ const rollName=r.newLabel||roll.title;
+ const input={id:r.product_id, productOptions:[{name:'Size',values:[{name:'Sample'},{name:rollName}]}],
+ variants:[{id:samp.id,optionValues:[{optionName:'Size',name:'Sample'}],price:samp.price,inventoryItem:{sku:samp.sku}},
+ {id:roll.id,optionValues:[{optionName:'Size',name:rollName}],price:roll.price,inventoryItem:{sku:roll.sku}}]};
+ const e=(await gql(PSET,{input})).data?.productSet?.userErrors||[];
+ if(e.length){err++;console.log(' A err',r.handle,JSON.stringify(e));continue;}
+ if(r.lengthMf) await gql(MFSET,{m:[{ownerId:r.product_id,namespace:'custom',key:'length',type:'single_line_text_field',value:r.lengthMf}]});
+ A++; fs.appendFileSync(rb,JSON.stringify({type:'A',handle:r.handle,product_id:r.product_id,old_option:'Title',rollOld:r.rollOld,rollNew:rollName})+'\n');
+ }
+ fs.appendFileSync(doneFile,r.product_id+'\n');
+ if((A+B)%25===0) console.log(` …A=${A} B=${B}`);
+ }catch(e){err++;console.log(' exc',r.handle,String(e).slice(0,80));}
+ await sleep(GAP);
+ }
+ console.log(`\nDONE ${vendor}: A=${A} B=${B} skip=${skip} err=${err}`);
+}
+main().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/roll-length-label/roll-label.mjs b/scripts/roll-length-label/roll-label.mjs
new file mode 100644
index 0000000..e35c0e1
--- /dev/null
+++ b/scripts/roll-length-label/roll-label.mjs
@@ -0,0 +1,84 @@
+/**
+ * Shared formatter for DW roll "Size" variant labels + length metafield.
+ * Steve 2026-06-18: roll variants must read Sold Per Single Roll ({width}" x {length}ft)
+ * - width per-product (never hardcoded), length converted source YARDS -> FEET (x3)
+ * - trailing .0 trimmed (33ft, 13.5ft, 16.5ft)
+ * - if width OR length missing -> fall back to plain "Sold Per Roll" (no fabricated dims)
+ * Single source of truth so the 6 builders stop drifting ("Sold per Yard" vs "Sold Per Yard" etc.).
+ */
+
+const PLAIN_ROLL = 'Sold Per Roll';
+
+// trim a number to a clean string: 33.0 -> "33", 13.5 -> "13.5", 14.01 -> "14.01"
+function num(n) {
+ if (n == null || !isFinite(n)) return null;
+ return String(Math.round(n * 100) / 100).replace(/\.0+$/, '');
+}
+
+// We always label the SINGLE roll length. Per-vendor source convention (Steve 2026-06-18):
+// sourceIsDouble=true -> catalog length is the DOUBLE/bolt (Anna French, "sold by single,
+// packaged in double") -> single = catalog/2 -> feet = yards*1.5.
+// "11 Yards"(double 33ft) -> "16.5ft"
+// sourceIsDouble=false -> catalog length IS the single roll (Thibaut) -> feet = yards*3.
+// "4.5 yd"(single) -> "13.5ft"
+export function ydToFeet(rawLen, { sourceIsDouble = false } = {}) {
+ if (!rawLen) return null;
+ const m = String(rawLen).match(/(\d+(?:\.\d+)?)\s*(yd|yard|yards|y)\b/i);
+ if (!m) return null;
+ const yd = parseFloat(m[1]);
+ if (!isFinite(yd) || yd <= 0) return null;
+ const singleFeet = num(yd * (sourceIsDouble ? 1.5 : 3));
+ return singleFeet ? `${singleFeet}ft` : null;
+}
+
+// width token from numeric width_inches (preferred) or text width; "{N}\""
+export function widthToken(widthInches, widthText) {
+ let w = (widthInches != null && isFinite(+widthInches)) ? +widthInches : null;
+ if (w == null && widthText) {
+ const m = String(widthText).match(/(\d+(?:\.\d+)?)/); // first number in e.g. "27 in (68.58 cm)"
+ if (m) w = parseFloat(m[1]);
+ }
+ if (w == null || !isFinite(w) || w <= 0) return null;
+ const s = num(w);
+ return s ? `${s}"` : null;
+}
+
+// the canonical Size label. Falls back to plain "Sold Per Roll" if either dim missing.
+export function rollLabel({ width_inches, widthText, lengthRaw, sourceIsDouble = false }) {
+ const w = widthToken(width_inches, widthText);
+ const lFt = ydToFeet(lengthRaw, { sourceIsDouble });
+ if (w && lFt) return `Sold Per Single Roll (${w} x ${lFt})`;
+ return PLAIN_ROLL;
+}
+
+// metafield value for custom.length, e.g. "13.5 ft" (spaced); null if no length
+export function lengthMetafieldValue(lengthRaw, { sourceIsDouble = false } = {}) {
+ const lFt = ydToFeet(lengthRaw, { sourceIsDouble });
+ return lFt ? lFt.replace(/ft$/, ' ft') : null;
+}
+
+export { PLAIN_ROLL };
+
+// ── self-test: `node roll-label.mjs --test` ──────────────────────────────────
+if (process.argv[2] === '--test') {
+ const cases = [
+ // Anna French: catalog = DOUBLE roll -> halve
+ [{ width_inches: 27, lengthRaw: '11 Yards', sourceIsDouble: true }, 'Sold Per Single Roll (27" x 16.5ft)', '16.5 ft'],
+ [{ width_inches: 27, lengthRaw: '8 Yards', sourceIsDouble: true }, 'Sold Per Single Roll (27" x 12ft)', '12 ft'],
+ [{ width_inches: null, widthText: '27 in (68.58 cm)', lengthRaw: '11 Yards', sourceIsDouble: true }, 'Sold Per Single Roll (27" x 16.5ft)', '16.5 ft'],
+ // Thibaut: catalog IS single -> as-is (x3)
+ [{ width_inches: 27, lengthRaw: '4.5 yd (4.11 m)' }, 'Sold Per Single Roll (27" x 13.5ft)', '13.5 ft'],
+ [{ width_inches: 36, lengthRaw: '4 yd' }, 'Sold Per Single Roll (36" x 12ft)', '12 ft'],
+ [{ width_inches: 20.5, lengthRaw: '5.5 yd' }, 'Sold Per Single Roll (20.5" x 16.5ft)','16.5 ft'],
+ [{ width_inches: 27, lengthRaw: '' }, 'Sold Per Roll', null],
+ ];
+ let pass = 0;
+ for (const [inp, expLabel, expMf] of cases) {
+ const gotL = rollLabel(inp), gotM = lengthMetafieldValue(inp.lengthRaw, { sourceIsDouble: inp.sourceIsDouble });
+ const ok = gotL === expLabel && gotM === expMf;
+ console.log(`${ok ? 'PASS' : 'FAIL'} label="${gotL}" mf=${JSON.stringify(gotM)}` + (ok ? '' : ` EXPECTED label="${expLabel}" mf=${JSON.stringify(expMf)}`));
+ if (ok) pass++;
+ }
+ console.log(`\n${pass}/${cases.length} passed`);
+ process.exit(pass === cases.length ? 0 : 1);
+}
diff --git a/scripts/romo-verify/run.mjs b/scripts/romo-verify/run.mjs
new file mode 100644
index 0000000..2c7cae0
--- /dev/null
+++ b/scripts/romo-verify/run.mjs
@@ -0,0 +1,95 @@
+'use strict';
+/**
+ * One-shot verification of the build-romo-rolls.mjs default-variant FIX.
+ * Builds exactly ONE fresh Black Edition product, then asserts the product ends with
+ * BOTH a $4.25 Sample AND a "Sold Per Roll" variant (the fix preserving the sample).
+ * Reports PASS/FAIL to CNCP. On PASS writes a sentinel so it never runs again.
+ * Does NOT scale. Safe to re-run (idempotent; skips already-built products).
+ *
+ * Wrong outcome handling: if it builds 1 but the sample is missing (fix failed), it
+ * REVERTS that product to sample-only (update, uncapped) so prod is never left broken,
+ * and reports FAIL.
+ */
+import fs from 'fs';
+import { execFileSync } from 'child_process';
+const ROOT = '/Users/macstudio3/Projects/designerwallcoverings';
+const SENTINEL = `${ROOT}/scripts/romo-verify/.passed`;
+// The vendor we build to verify the fix. CREATED MUST be derived from the same slug
+// build-romo-rolls.mjs uses (VENDOR.toLowerCase().replace(/[^a-z0-9]+/g,'-')) so the
+// "did it build" counter reads the file the build actually appends to. (Previously this
+// hardcoded -black-edition while building Villa Nova → counter read the wrong file.)
+const VENDOR = 'Villa Nova';
+const SLUG = VENDOR.toLowerCase().replace(/[^a-z0-9]+/g, '-');
+const CREATED = `${ROOT}/romo-rolls-created-${SLUG}.jsonl`;
+const EMIT = '/Users/macstudio3/.claude/skills/cncp-approval-alert/emit.sh';
+const T = (fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env', 'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1];
+const EP = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+
+if (fs.existsSync(SENTINEL)) { console.log('already passed — exiting'); process.exit(0); }
+
+async function gq(q, v) {
+ const r = await fetch(EP, { method: 'POST', headers: { 'X-Shopify-Access-Token': T, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: q, variables: v }) });
+ return r.json();
+}
+function report(sev, title, body) {
+ try {
+ fs.writeFileSync('/tmp/romo-verify-body.md', body);
+ execFileSync(EMIT, ['--title', title, '--severity', sev, '--source', 'romo-verify', '--slug', 'romo-roll-verify', '--body-file', '/tmp/romo-verify-body.md'], { stdio: 'ignore' });
+ } catch (e) { /* CNCP optional */ }
+ console.log(`[${sev}] ${title}\n${body}`);
+}
+
+(async () => {
+ const before = fs.existsSync(CREATED) ? fs.readFileSync(CREATED, 'utf8').split('\n').filter(Boolean).length : 0;
+ // build exactly one. Use process.execPath (the node binary already running this script) — under
+ // launchd PATH is minimal (/usr/bin:/bin) and node lives only at /opt/homebrew/bin/node, so a bare
+ // 'node' spawn throws ENOENT, leaving out='' and silently misreporting "built 0". execPath is
+ // correct by construction regardless of how the job is invoked.
+ let out = '', spawnErr = null;
+ try { out = execFileSync(process.execPath, [`${ROOT}/build-romo-rolls.mjs`], { cwd: ROOT, env: { ...process.env, ROLL_VENDOR: VENDOR, ROLL_CAP: '1' }, encoding: 'utf8' }); }
+ catch (e) {
+ out = (e.stdout || '') + (e.stderr || '');
+ // A spawn failure (ENOENT/EACCES) or a crash before any output means the builder NEVER RAN —
+ // that is NOT "no buildable product". Flag it so it's surfaced distinctly, not swallowed.
+ if (e.code === 'ENOENT' || e.code === 'EACCES' || !out) spawnErr = e;
+ }
+ console.log(out);
+
+ const lines = fs.existsSync(CREATED) ? fs.readFileSync(CREATED, 'utf8').split('\n').filter(Boolean) : [];
+ if (lines.length <= before) {
+ if (spawnErr) {
+ report('CRITICAL', 'Romo verify: builder failed to LAUNCH (not a product problem)', `The build subprocess never ran (code=${spawnErr.code || 'unknown'}: ${spawnErr.message}).\nThis is NOT "no buildable product found" — verify could not even spawn node (likely launchd minimal PATH). No sentinel written.\n\nTail:\n` + out.split('\n').slice(-8).join('\n'));
+ } else if (/Daily variant.*limit|budget spent/i.test(out)) {
+ report('WARN', 'Romo verify: still cap-blocked — will retry tomorrow', 'Shopify daily variant cap still exhausted at run time; built 0. No sentinel written; the job retries next morning.');
+ } else {
+ report('WARN', 'Romo verify: built 0 (no buildable product found)', 'Build produced no new variant and was not cap-blocked. Investigate before re-enabling.\n\nTail:\n' + out.split('\n').slice(-8).join('\n'));
+ }
+ process.exit(0);
+ }
+
+ // verify the just-built product
+ const rec = JSON.parse(lines[lines.length - 1]);
+ const q = `query{product(id:"${rec.pid}"){title variantsCount{count} variants(first:5){nodes{id sku price selectedOptions{value}}}}}`;
+ const p = (await gq(q)).data.product;
+ const vs = p.variants.nodes;
+ const hasSample = vs.some(v => parseFloat(v.price) <= 4.255);
+ const hasRoll = vs.some(v => /Sold Per Roll/i.test((v.selectedOptions[0] && v.selectedOptions[0].value) || '') || /-Roll$/.test(v.sku || ''));
+ const detail = `"${p.title}" variants=${p.variantsCount.count}: ` + vs.map(v => (v.selectedOptions[0] && v.selectedOptions[0].value) + ' ' + v.sku + ' $' + v.price).join(' | ');
+
+ if (hasSample && hasRoll && p.variantsCount.count >= 2) {
+ fs.writeFileSync(SENTINEL, new Date().toISOString() + ' ' + rec.sku + '\n');
+ report('INFO', '✅ Romo verify PASSED — sample preserved + roll added', `FIX CONFIRMED on a fresh default-variant product.\n${detail}\n\nThe sample is preserved alongside the roll. build-romo-rolls.mjs is safe to scale. Sentinel written (won't re-run). Re-enable the 5-brand build when ready.`);
+ } else {
+ // sample missing -> revert to sample-only so prod isn't left roll-only
+ let reverted = 'n/a';
+ if (!hasSample && vs.length) {
+ try {
+ const baseSku = (rec.sku || '').replace(/-Roll$/i, '');
+ await gq(`mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){productVariantsBulkUpdate(productId:$pid,variants:$variants){userErrors{message}}}`,
+ { pid: rec.pid, variants: [{ id: vs[0].id, price: '4.25', inventoryItem: { sku: `${baseSku}-Sample` } }] });
+ reverted = 'reverted to $4.25 sample-only';
+ } catch (e) { reverted = 'REVERT FAILED: ' + e.message; }
+ }
+ report('CRITICAL', '❌ Romo verify FAILED — fix did not preserve sample', `${detail}\nhasSample=${hasSample} hasRoll=${hasRoll}\nAction: ${reverted}\nDo NOT scale. No sentinel written.`);
+ }
+})().catch(e => { report('CRITICAL', 'Romo verify ERROR', e.message); process.exit(1); });
diff --git a/scripts/sandberg-price/curl-pull.mjs b/scripts/sandberg-price/curl-pull.mjs
new file mode 100644
index 0000000..7d5e5b9
--- /dev/null
+++ b/scripts/sandberg-price/curl-pull.mjs
@@ -0,0 +1,54 @@
+// curl-pull.mjs — pull current Sandberg retail from JSON-LD via plain fetch (NO browser,
+// $0). Product PDPs are NOT Cloudflare-walled (only the homepage is). Parallel, resumable.
+// cost = retail * 0.60 (confirmed Sandberg dealer net). Verifies JSON-LD sku == our article.
+import fs from 'fs';
+const OUT = '/Users/macstudio3/Projects/designerwallcoverings/data/gimmersta-cost/sandberg-website-prices.jsonl';
+const DISCOUNT = 0.60, CONC = 10;
+const rows = JSON.parse(fs.readFileSync('/tmp/sb-matched-slugs.json', 'utf8'));
+const done = new Set(fs.existsSync(OUT) ? fs.readFileSync(OUT, 'utf8').split('\n').filter(Boolean).map(l => JSON.parse(l).art) : []);
+let todo = rows.filter(r => !done.has(r.art));
+console.log(`matched=${rows.length} done=${done.size} todo=${todo.length}`);
+
+function productLD(html) {
+ const blocks = html.match(/<script[^>]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi) || [];
+ for (const b of blocks) {
+ const json = b.replace(/<script[^>]*>/i, '').replace(/<\/script>/i, '').trim();
+ try { const o = JSON.parse(json); if (o && o['@type'] === 'Product') return o; } catch (e) {}
+ }
+ return null;
+}
+async function one(r) {
+ const url = `https://sandbergwallpaper.com/${r.slug}`;
+ let rec = { dw: r.dw, art: r.art, slug: r.slug, ok: false };
+ try {
+ const resp = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)' }, redirect: 'follow' });
+ if (resp.status === 404) { rec.reason = '404'; return rec; }
+ const html = await resp.text();
+ const p = productLD(html);
+ if (!p) { rec.reason = 'no-jsonld'; return rec; }
+ const off = Array.isArray(p.offers) ? p.offers[0] : p.offers;
+ const price = off && off.price != null ? parseFloat(off.price) : null;
+ const sku = String(p.sku || '');
+ const core = r.art.replace(/^P/, '').replace(/CS$/i, '');
+ const skuOk = sku && (sku === r.art || sku === core || r.art.includes(sku));
+ if (skuOk && price > 0) { rec = { ...rec, ok: true, ld_sku: sku, retail: price, cost: +(price * DISCOUNT).toFixed(2) }; }
+ else rec.reason = !skuOk ? `sku-mismatch(${sku})` : 'no-price';
+ } catch (e) { rec.reason = 'err:' + e.message.slice(0, 30); }
+ return rec;
+}
+(async () => {
+ let i = 0, ok = 0, miss = 0;
+ const out = fs.createWriteStream(OUT, { flags: 'a' });
+ async function worker() {
+ while (i < todo.length) {
+ const r = todo[i++];
+ const rec = await one(r);
+ out.write(JSON.stringify(rec) + '\n');
+ if (rec.ok) ok++; else miss++;
+ if ((ok + miss) % 100 === 0) console.log(` ${ok + miss}/${todo.length} ok=${ok} miss=${miss}`);
+ }
+ }
+ await Promise.all(Array.from({ length: CONC }, worker));
+ out.end();
+ console.log(`DONE: ok=${ok} miss=${miss} of ${todo.length}`);
+})();
diff --git a/scripts/sandberg-price/sitemap-pull.mjs b/scripts/sandberg-price/sitemap-pull.mjs
new file mode 100644
index 0000000..87f32ce
--- /dev/null
+++ b/scripts/sandberg-price/sitemap-pull.mjs
@@ -0,0 +1,42 @@
+// sitemap-pull.mjs — curl EVERY sitemap URL, extract JSON-LD {sku, price} from product
+// pages (categories have none → skipped). Builds the authoritative sku→price map, then
+// joins to our live articles by Product No. $0 (no browser). Parallel + resumable.
+import fs from 'fs';
+const MAP = '/tmp/sb-sitemap-pricemap.jsonl';
+const slugs = fs.readFileSync('/tmp/sb-sitemap-slugs.txt', 'utf8').split('\n').map(s => s.trim()).filter(Boolean);
+const done = new Set(fs.existsSync(MAP) ? fs.readFileSync(MAP, 'utf8').split('\n').filter(Boolean).map(l => JSON.parse(l).slug) : []);
+let todo = slugs.filter(s => !done.has(s));
+console.log(`sitemap=${slugs.length} done=${done.size} todo=${todo.length}`);
+const CONC = 12;
+function productLD(html) {
+ const blocks = html.match(/<script[^>]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi) || [];
+ for (const b of blocks) {
+ try { const o = JSON.parse(b.replace(/<script[^>]*>/i, '').replace(/<\/script>/i, '').trim()); if (o && o['@type'] === 'Product') return o; } catch (e) {}
+ }
+ return null;
+}
+async function one(slug) {
+ try {
+ const resp = await fetch('https://sandbergwallpaper.com/' + slug, { headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh)' }, redirect: 'follow' });
+ if (resp.status !== 200) return { slug, sku: null };
+ const p = productLD(await resp.text());
+ if (!p) return { slug, sku: null };
+ const off = Array.isArray(p.offers) ? p.offers[0] : p.offers;
+ return { slug, sku: String(p.sku || ''), price: off && off.price != null ? parseFloat(off.price) : null, name: (p.name || '').slice(0, 40) };
+ } catch (e) { return { slug, sku: null, err: e.message.slice(0, 20) }; }
+}
+(async () => {
+ let i = 0, prod = 0;
+ const out = fs.createWriteStream(MAP, { flags: 'a' });
+ async function worker() {
+ while (i < todo.length) {
+ const r = await one(todo[i++]);
+ out.write(JSON.stringify(r) + '\n');
+ if (r.sku && r.price) prod++;
+ if (i % 200 === 0) console.log(` ${i}/${todo.length} products=${prod}`);
+ }
+ }
+ await Promise.all(Array.from({ length: CONC }, worker));
+ out.end();
+ console.log(`DONE: scanned ${todo.length}, product pages with price = ${prod}`);
+})();
diff --git a/scripts/sanderson-onboard/out/created.jsonl b/scripts/sanderson-onboard/out/created.jsonl
new file mode 100644
index 0000000..f284e84
--- /dev/null
+++ b/scripts/sanderson-onboard/out/created.jsonl
@@ -0,0 +1,2 @@
+{"mfr_sku":"SAW0189-02","sku":"DWXH-255000","sc_id":1,"product_id":"7899582201907","settlement_verdict":"REVIEW-VISION","retail":320,"status":"draft","created_at":"2026-07-26T23:32:22.833Z"}
+{"mfr_sku":"SAW0189-01","sku":"DWXH-255001","sc_id":2,"product_id":"7899582431283","settlement_verdict":"REVIEW-VISION","retail":320,"status":"draft","created_at":"2026-07-26T23:32:29.141Z"}
diff --git a/scripts/sanderson-onboard/out/payloads.jsonl b/scripts/sanderson-onboard/out/payloads.jsonl
new file mode 100644
index 0000000..fa0229e
--- /dev/null
+++ b/scripts/sanderson-onboard/out/payloads.jsonl
@@ -0,0 +1,589 @@
+{"mfr_sku":"SAW0189-02","sku":"DWXH-255000","sc_id":1,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"101 Dalmatians Breeze Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, 101 Dalmatians, color:Ivory, Ivory, Stone, Oatmeal, Alabaster, White, Animals, Breeze Blue","body_html":"<div class=\"sanderson-product\">\n<p>101 Dalmatians in Breeze Blue is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">101 Dalmatians</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Breeze Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">101 Dalmatians</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0189-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217290_b307.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217289_6866.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217290_1_SAW0189_02_SANDERSON_101_Dalmatians_WALLPAPER_7a72.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217290_2_SAW0189_02_SANDERSON_101_Dalmatians_WALLPAPER_a57b.jpg","alt":"101 Dalmatians"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255000","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255000-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0189-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0189-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"101 Dalmatians"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Breeze Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Breeze Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fbf9ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"46.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a6a892"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d3d1c0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fbf9ed\",\"pct\":46.3,\"name\":\"Ivory\"},{\"hex\":\"#a6a892\",\"pct\":20.1,\"name\":\"Stone\"},{\"hex\":\"#d3d1c0\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#ebe9dd\",\"pct\":10.1,\"name\":\"Alabaster\"},{\"hex\":\"#fdfbf0\",\"pct\":6.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0189-01","sku":"DWXH-255001","sc_id":2,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"101 Dalmatians Candy Floss | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, 101 Dalmatians, color:Ivory, Ivory, Stone, Oatmeal, Alabaster, White, Animals, Candy Floss","body_html":"<div class=\"sanderson-product\">\n<p>101 Dalmatians in Candy Floss is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">101 Dalmatians</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Candy Floss</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">101 Dalmatians</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0189-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217290_b307.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217289_1_SAW0189_01_SANDERSON_101_Dalmatians_WALLPAPER_d5a4.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217289_2_SAW0189_01_SANDERSON_101_Dalmatians_WALLPAPER_2c41.jpg","alt":"101 Dalmatians"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217289_6866.jpg","alt":"101 Dalmatians"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255001","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255001-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0189-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0189-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"101 Dalmatians"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Candy Floss"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Candy Floss"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fbf9ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"46.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a6a892"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d3d1c0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fbf9ed\",\"pct\":46.3,\"name\":\"Ivory\"},{\"hex\":\"#a6a892\",\"pct\":20.1,\"name\":\"Stone\"},{\"hex\":\"#d3d1c0\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#ebe9dd\",\"pct\":10.1,\"name\":\"Alabaster\"},{\"hex\":\"#fdfbf0\",\"pct\":6.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0007-01","sku":"DWXH-255002","sc_id":3,"settlement_verdict":"REVIEW-VISION","retail":134,"product":{"title":"Adele Rose/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Adele, color:Ivory, Ivory, Cream, Sand, Alabaster, Florals, Rose/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Adele in Rose/Cream is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0007-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD102_51a8.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD101_246d.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD104_8f95.jpg","alt":"Adele"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255002","price":"134.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255002-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Adele"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdf8e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5eab5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd083"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdf8e6\",\"pct\":55.7,\"name\":\"Ivory\"},{\"hex\":\"#f5eab5\",\"pct\":18.8,\"name\":\"Cream\"},{\"hex\":\"#ddd083\",\"pct\":17.8,\"name\":\"Sand\"},{\"hex\":\"#f6f2da\",\"pct\":7.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0007-02","sku":"DWXH-255003","sc_id":4,"settlement_verdict":"REVIEW-VISION","retail":134,"product":{"title":"Adele Primrose/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Adele, color:Ivory, Ivory, Cream, Sand, Alabaster, Florals, Primrose/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Adele in Primrose/Ivory is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Primrose/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0007-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD102_51a8.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD101_246d.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD104_8f95.jpg","alt":"Adele"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255003","price":"134.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255003-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Adele"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Primrose/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Primrose/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdf8e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5eab5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd083"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdf8e6\",\"pct\":55.7,\"name\":\"Ivory\"},{\"hex\":\"#f5eab5\",\"pct\":18.8,\"name\":\"Cream\"},{\"hex\":\"#ddd083\",\"pct\":17.8,\"name\":\"Sand\"},{\"hex\":\"#f6f2da\",\"pct\":7.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0007-03","sku":"DWXH-255004","sc_id":5,"settlement_verdict":"REVIEW-VISION","retail":134,"product":{"title":"Adele Raspberry/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Adele, color:Ivory, Ivory, Cream, Sand, Alabaster, Florals, Raspberry/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Adele in Raspberry/Ivory is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raspberry/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Adele</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0007-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD102_51a8.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD101_246d.jpg","alt":"Adele"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAD104_8f95.jpg","alt":"Adele"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255004","price":"134.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255004-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0007-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Adele"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raspberry/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raspberry/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdf8e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5eab5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd083"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdf8e6\",\"pct\":55.7,\"name\":\"Ivory\"},{\"hex\":\"#f5eab5\",\"pct\":18.8,\"name\":\"Cream\"},{\"hex\":\"#ddd083\",\"pct\":17.8,\"name\":\"Sand\"},{\"hex\":\"#f6f2da\",\"pct\":7.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0008-01","sku":"DWXH-255005","sc_id":6,"settlement_verdict":"REVIEW-VISION","retail":126,"product":{"title":"Aesop’S Fables Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aesop’S Fables, color:Linen, Linen, Pink, Blush, Cream, Animals","body_html":"<div class=\"sanderson-product\">\n<p>Aesop’S Fables in Pink is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Pink, Blush. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aesop’S Fables</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aesop’S Fables</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0008-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAE101_bbba.jpg","alt":"Aesop’S Fables"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAE103_ee9b.jpg","alt":"Aesop’S Fables"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255005","price":"126.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255005-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0008-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0008-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aesop’S Fables"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4dbc8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d39292"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0bbaf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4dbc8\",\"pct\":50.5,\"name\":\"Linen\"},{\"hex\":\"#d39292\",\"pct\":18.7,\"name\":\"Pink\"},{\"hex\":\"#e0bbaf\",\"pct\":17.6,\"name\":\"Blush\"},{\"hex\":\"#e8e1cf\",\"pct\":13.2,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0008-02","sku":"DWXH-255006","sc_id":7,"settlement_verdict":"REVIEW-VISION","retail":126,"product":{"title":"Aesop’S Fables Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aesop’S Fables, color:Linen, Linen, Pink, Blush, Cream, Animals, Blue","body_html":"<div class=\"sanderson-product\">\n<p>Aesop’S Fables in Blue is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Pink, Blush. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aesop’S Fables</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aesop’S Fables</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0008-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAE101_bbba.jpg","alt":"Aesop’S Fables"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVAE103_ee9b.jpg","alt":"Aesop’S Fables"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255006","price":"126.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255006-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0008-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0008-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aesop’S Fables"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4dbc8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d39292"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0bbaf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4dbc8\",\"pct\":50.5,\"name\":\"Linen\"},{\"hex\":\"#d39292\",\"pct\":18.7,\"name\":\"Pink\"},{\"hex\":\"#e0bbaf\",\"pct\":17.6,\"name\":\"Blush\"},{\"hex\":\"#e8e1cf\",\"pct\":13.2,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0190-04","sku":"DWXH-255007","sc_id":8,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Alice In Wonderland Chocolate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alice In Wonderland, color:Sage, Sage, Olive, Stone, Chocolate","body_html":"<div class=\"sanderson-product\">\n<p>Alice In Wonderland in Chocolate is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chocolate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0190-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_37b5.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_4180.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_49d6.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_1_SAW0190_04_SANDERSON_Alice_In_Wonderland_WALLPAPER_874a.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_2_SAW0190_04_SANDERSON_Alice_In_Wonderland_WALLPAPER_28c4.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_8a27.jpg","alt":"Alice In Wonderland"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255007","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255007-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alice In Wonderland"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chocolate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chocolate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7eaa6c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#79725b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aebb8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7eaa6c\",\"pct\":68,\"name\":\"Sage\"},{\"hex\":\"#79725b\",\"pct\":21.2,\"name\":\"Olive\"},{\"hex\":\"#aebb8e\",\"pct\":10.8,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0190-01","sku":"DWXH-255008","sc_id":9,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Alice In Wonderland Gumball Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alice In Wonderland, color:Sage, Sage, Olive, Stone, Gumball Green","body_html":"<div class=\"sanderson-product\">\n<p>Alice In Wonderland in Gumball Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gumball Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0190-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_37b5.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_1_SAW0190_01_SANDERSON_Alice_In_Wonderland_WALLPAPER_a8df.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_2_SAW0190_01_SANDERSON_Alice_In_Wonderland_WALLPAPER_692b.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_4180.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_49d6.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_8a27.jpg","alt":"Alice In Wonderland"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255008","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255008-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alice In Wonderland"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gumball Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gumball Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7eaa6c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#79725b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aebb8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7eaa6c\",\"pct\":68,\"name\":\"Sage\"},{\"hex\":\"#79725b\",\"pct\":21.2,\"name\":\"Olive\"},{\"hex\":\"#aebb8e\",\"pct\":10.8,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0190-03","sku":"DWXH-255009","sc_id":10,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Alice In Wonderland Hundreds & Thousands | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alice In Wonderland, color:Sage, Sage, Olive, Stone, Hundreds & Thousands","body_html":"<div class=\"sanderson-product\">\n<p>Alice In Wonderland in Hundreds & Thousands is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Hundreds & Thousands</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0190-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_37b5.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_4180.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_1_SAW0190_03_SANDERSON_Alice_In_Wonderland_WALLPAPER_e633.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_2_SAW0190_03_SANDERSON_Alice_In_Wonderland_WALLPAPER_77d8.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_49d6.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_8a27.jpg","alt":"Alice In Wonderland"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255009","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255009-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alice In Wonderland"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Hundreds & Thousands"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Hundreds & Thousands"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7eaa6c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#79725b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aebb8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7eaa6c\",\"pct\":68,\"name\":\"Sage\"},{\"hex\":\"#79725b\",\"pct\":21.2,\"name\":\"Olive\"},{\"hex\":\"#aebb8e\",\"pct\":10.8,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0190-02","sku":"DWXH-255010","sc_id":11,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Alice In Wonderland Puddle Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alice In Wonderland, color:Sage, Sage, Olive, Stone, Puddle Blue","body_html":"<div class=\"sanderson-product\">\n<p>Alice In Wonderland in Puddle Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Puddle Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alice In Wonderland</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0190-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217285_37b5.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_1_SAW0190_02_SANDERSON_Alice_In_Wonderland_WALLPAPER_451d.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_2_SAW0190_02_SANDERSON_Alice_In_Wonderland_WALLPAPER_0c27.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217286_4180.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217287_49d6.jpg","alt":"Alice In Wonderland"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217288_8a27.jpg","alt":"Alice In Wonderland"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255010","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255010-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0190-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alice In Wonderland"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Puddle Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Puddle Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7eaa6c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#79725b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aebb8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7eaa6c\",\"pct\":68,\"name\":\"Sage\"},{\"hex\":\"#79725b\",\"pct\":21.2,\"name\":\"Olive\"},{\"hex\":\"#aebb8e\",\"pct\":10.8,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0094-03","sku":"DWXH-255011","sc_id":12,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Alnwick Logs Ash | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alnwick Logs, color:Alabaster, Alabaster, Linen, Mist, Botanical, Leaves-And-Trees, Ash, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Alnwick Logs in Ash is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ash</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0094-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_2df9.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_6ff5.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_1_SAW0094_03_SANDERSON_Alnwick_Logs_WALLPAPER_bd40.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_2_SAW0094_03_SANDERSON_Alnwick_Logs_WALLPAPER_392d.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_3_SAW0094_03_SANDERSON_Alnwick_Logs_WALLPAPER_91cf.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_d2ca.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_281f.jpg","alt":"Alnwick Logs"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255011","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255011-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alnwick Logs"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ash"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ash"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e2dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"34.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d8d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e2dc\",\"pct\":35,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd7\",\"pct\":34.8,\"name\":\"Linen\"},{\"hex\":\"#d6d8d2\",\"pct\":30.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0094-01","sku":"DWXH-255012","sc_id":13,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Alnwick Logs Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alnwick Logs, color:Alabaster, Alabaster, Linen, Mist, Botanical, Leaves-And-Trees, Birch, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Alnwick Logs in Birch is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0094-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_2df9.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_1_SAW0094_01_SANDERSON_Alnwick_Logs_WALLPAPER_a9e4.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_2_SAW0094_01_SANDERSON_Alnwick_Logs_WALLPAPER_e200.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_3_SAW0094_01_SANDERSON_Alnwick_Logs_WALLPAPER_a4b8.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_6ff5.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_d2ca.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_281f.jpg","alt":"Alnwick Logs"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255012","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255012-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alnwick Logs"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e2dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"34.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d8d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e2dc\",\"pct\":35,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd7\",\"pct\":34.8,\"name\":\"Linen\"},{\"hex\":\"#d6d8d2\",\"pct\":30.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0094-02","sku":"DWXH-255013","sc_id":14,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Alnwick Logs Driftwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alnwick Logs, color:Alabaster, Alabaster, Linen, Mist, Botanical, Leaves-And-Trees, Driftwood, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Alnwick Logs in Driftwood is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0094-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_2df9.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_6ff5.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_1_SAW0094_02_SANDERSON_Alnwick_Logs_WALLPAPER_387d.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_2_SAW0094_02_SANDERSON_Alnwick_Logs_WALLPAPER_d5d8.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_3_SAW0094_02_SANDERSON_Alnwick_Logs_WALLPAPER_566c.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_d2ca.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_281f.jpg","alt":"Alnwick Logs"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255013","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255013-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alnwick Logs"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e2dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"34.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d8d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e2dc\",\"pct\":35,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd7\",\"pct\":34.8,\"name\":\"Linen\"},{\"hex\":\"#d6d8d2\",\"pct\":30.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0094-04","sku":"DWXH-255014","sc_id":15,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Alnwick Logs Lacquer Black | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Alnwick Logs, color:Alabaster, Alabaster, Linen, Mist, Botanical, Leaves-And-Trees, Lacquer Black, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Alnwick Logs in Lacquer Black is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lacquer Black</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Alnwick Logs</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0094-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216508_2df9.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216507_6ff5.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216509_d2ca.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_1_SAW0094_04_SANDERSON_Alnwick_Logs_WALLPAPER_b392.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_281f.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_2_SAW0094_04_SANDERSON_Alnwick_Logs_WALLPAPER_b366.jpg","alt":"Alnwick Logs"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216510_3_SAW0094_04_SANDERSON_Alnwick_Logs_WALLPAPER_1428.jpg","alt":"Alnwick Logs"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255014","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255014-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0094-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Alnwick Logs"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lacquer Black"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lacquer Black"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e2dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"34.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d8d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e2dc\",\"pct\":35,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd7\",\"pct\":34.8,\"name\":\"Linen\"},{\"hex\":\"#d6d8d2\",\"pct\":30.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0158-02","sku":"DWXH-255015","sc_id":16,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amanpuri Midnight/Eucalyptus | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amanpuri, color:Oatmeal, Oatmeal, Taupe, Stone, Sand, Florals, Midnight/Eucalyptus","body_html":"<div class=\"sanderson-product\">\n<p>Amanpuri in Midnight/Eucalyptus is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Midnight/Eucalyptus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0158-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217043_9b9f.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217044_35f0.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217045_f6ed.jpg","alt":"Amanpuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255015","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255015-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amanpuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Midnight/Eucalyptus"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Midnight/Eucalyptus"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8c1af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8e7971"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaea2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8c1af\",\"pct\":56.1,\"name\":\"Oatmeal\"},{\"hex\":\"#8e7971\",\"pct\":19.9,\"name\":\"Taupe\"},{\"hex\":\"#acaea2\",\"pct\":13.6,\"name\":\"Stone\"},{\"hex\":\"#d1b294\",\"pct\":10.4,\"name\":\"Sand\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0158-01","sku":"DWXH-255016","sc_id":17,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amanpuri Salmon/Dove Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amanpuri, color:Oatmeal, Oatmeal, Taupe, Stone, Sand, Florals, Salmon/Dove Blue","body_html":"<div class=\"sanderson-product\">\n<p>Amanpuri in Salmon/Dove Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Salmon/Dove Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0158-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217043_9b9f.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217044_35f0.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217045_f6ed.jpg","alt":"Amanpuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255016","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255016-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amanpuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Salmon/Dove Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Salmon/Dove Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8c1af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8e7971"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaea2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8c1af\",\"pct\":56.1,\"name\":\"Oatmeal\"},{\"hex\":\"#8e7971\",\"pct\":19.9,\"name\":\"Taupe\"},{\"hex\":\"#acaea2\",\"pct\":13.6,\"name\":\"Stone\"},{\"hex\":\"#d1b294\",\"pct\":10.4,\"name\":\"Sand\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0168-03","sku":"DWXH-255017","sc_id":18,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amara Butterfly Bamboo/ Fountain Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amara Butterfly, color:Gold, Gold, Red, Brown, Sand, Terracotta, Oatmeal, Florals, Bamboo/ Fountain Green","body_html":"<div class=\"sanderson-product\">\n<p>Amara Butterfly in Bamboo/ Fountain Green is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Gold, Red, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bamboo/ Fountain Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0168-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217116_d965.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217117_22e4.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217118_09fd.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217118_1_SAW0168_03_SANDERSON_Amara_Butterfly_WALLPAPER_3add.jpg","alt":"Amara Butterfly"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255017","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255017-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amara Butterfly"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bamboo/ Fountain Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bamboo/ Fountain Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Gold"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bf8c60"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#98202f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#684331"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bf8c60\",\"pct\":22.4,\"name\":\"Gold\"},{\"hex\":\"#98202f\",\"pct\":20.3,\"name\":\"Red\"},{\"hex\":\"#684331\",\"pct\":17.4,\"name\":\"Brown\"},{\"hex\":\"#d6ac7c\",\"pct\":16.5,\"name\":\"Sand\"},{\"hex\":\"#b24f40\",\"pct\":11.8,\"name\":\"Terracotta\"},{\"hex\":\"#e3c9a4\",\"pct\":11.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0237-03","sku":"DWXH-255018","sc_id":19,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Anaar Shiitake | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Anaar, color:Alabaster, Alabaster, Greige, White, Silver, Linen, Shiitake","body_html":"<div class=\"sanderson-product\">\n<p>Anaar in Shiitake is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Anaar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Shiitake</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Anaar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0237-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217448_4a0d.jpg","alt":"Anaar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217447_7da4.jpg","alt":"Anaar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217449_5a76.jpg","alt":"Anaar"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255018","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255018-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0237-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0237-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Anaar"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Shiitake"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Shiitake"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2efe5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0b5a9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1e9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2efe5\",\"pct\":31.5,\"name\":\"Alabaster\"},{\"hex\":\"#b0b5a9\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1e9\",\"pct\":17.7,\"name\":\"White\"},{\"hex\":\"#c0c5bb\",\"pct\":15.2,\"name\":\"Silver\"},{\"hex\":\"#d9d3c4\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0137-01","sku":"DWXH-255019","sc_id":20,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Anaar Tree Annato/Blueberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Anaar Tree, color:Linen, Linen, Cream, Greige, Mist, Botanical, Leaves-And-Trees, Annato/Blueberry, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Anaar Tree in Annato/Blueberry is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Annato/Blueberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0137-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216792_ba9a.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216790_1_SAW0137_01_SANDERSON_Anaar_Tree_WALLPAPER_dbe6.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216790_2_SAW0137_01_SANDERSON_Anaar_Tree_WALLPAPER_cd02.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216790_fab6.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216791_86e7.jpg","alt":"Anaar Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255019","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255019-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Anaar Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Annato/Blueberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Annato/Blueberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfe1cf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e4d5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afb79d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfe1cf\",\"pct\":34.6,\"name\":\"Linen\"},{\"hex\":\"#e3e4d5\",\"pct\":32,\"name\":\"Cream\"},{\"hex\":\"#afb79d\",\"pct\":20.5,\"name\":\"Greige\"},{\"hex\":\"#cad1c2\",\"pct\":12.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0137-02","sku":"DWXH-255020","sc_id":21,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Anaar Tree Charcoal/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Anaar Tree, color:Linen, Linen, Cream, Greige, Mist, Botanical, Leaves-And-Trees, Charcoal/Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Anaar Tree in Charcoal/Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0137-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216792_ba9a.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216790_fab6.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216791_1_SAW0137_02_SANDERSON_Anaar_Tree_WALLPAPER_e768.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216791_2_SAW0137_02_SANDERSON_Anaar_Tree_WALLPAPER_dbb0.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216791_86e7.jpg","alt":"Anaar Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255020","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255020-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Anaar Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfe1cf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e4d5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afb79d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfe1cf\",\"pct\":34.6,\"name\":\"Linen\"},{\"hex\":\"#e3e4d5\",\"pct\":32,\"name\":\"Cream\"},{\"hex\":\"#afb79d\",\"pct\":20.5,\"name\":\"Greige\"},{\"hex\":\"#cad1c2\",\"pct\":12.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0137-03","sku":"DWXH-255021","sc_id":22,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Anaar Tree English Grey/Woad | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Anaar Tree, color:Linen, Linen, Cream, Greige, Mist, Botanical, Leaves-And-Trees, English Grey/Woad, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Anaar Tree in English Grey/Woad is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">English Grey/Woad</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Anaar Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0137-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216792_ba9a.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216790_fab6.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216791_86e7.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216792_1_SAW0137_03_SANDERSON_Anaar_Tree_WALLPAPER_3b8e.jpg","alt":"Anaar Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216792_2_SAW0137_03_SANDERSON_Anaar_Tree_WALLPAPER_c1fb.jpg","alt":"Anaar Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255021","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255021-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0137-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Anaar Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"English Grey/Woad"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"English Grey/Woad"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfe1cf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e4d5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afb79d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfe1cf\",\"pct\":34.6,\"name\":\"Linen\"},{\"hex\":\"#e3e4d5\",\"pct\":32,\"name\":\"Cream\"},{\"hex\":\"#afb79d\",\"pct\":20.5,\"name\":\"Greige\"},{\"hex\":\"#cad1c2\",\"pct\":12.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0222-02","sku":"DWXH-255022","sc_id":23,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Ancient Apple Orchard Golden Knot/Sage | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Apple, color:Alabaster, Alabaster, Oatmeal, Stone, Greige, Beige, Orchard Golden Knot/Sage","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Apple in Orchard Golden Knot/Sage is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Orchard Golden Knot/Sage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0222-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217494_ee44.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217493_25dd.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217494_1_SAW0222_02_SANDERSON_Ancient_Apple_Orchard_WALLPAPER_be83.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217495_4a1f.jpg","alt":"Ancient Apple"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255022","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255022-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Apple"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Orchard Golden Knot/Sage"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Orchard Golden Knot/Sage"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5efe8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"27.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d1c2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a3a996"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5efe8\",\"pct\":27.1,\"name\":\"Alabaster\"},{\"hex\":\"#d1d1c2\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#a3a996\",\"pct\":19,\"name\":\"Stone\"},{\"hex\":\"#b5bbad\",\"pct\":18,\"name\":\"Greige\"},{\"hex\":\"#c7c3ae\",\"pct\":14.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0222-03","sku":"DWXH-255023","sc_id":24,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Ancient Apple Orchard Midnight | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Apple, color:Alabaster, Alabaster, Oatmeal, Stone, Greige, Beige, Orchard Midnight","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Apple in Orchard Midnight is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Orchard Midnight</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0222-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217494_ee44.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217493_25dd.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217495_1_SAW0222_03_SANDERSON_Ancient_Apple_Orchard_WALLPAPER_1749.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217495_4a1f.jpg","alt":"Ancient Apple"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255023","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255023-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Apple"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Orchard Midnight"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Orchard Midnight"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5efe8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"27.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d1c2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a3a996"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5efe8\",\"pct\":27.1,\"name\":\"Alabaster\"},{\"hex\":\"#d1d1c2\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#a3a996\",\"pct\":19,\"name\":\"Stone\"},{\"hex\":\"#b5bbad\",\"pct\":18,\"name\":\"Greige\"},{\"hex\":\"#c7c3ae\",\"pct\":14.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0222-01","sku":"DWXH-255024","sc_id":25,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Ancient Apple Orchard Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Apple, color:Alabaster, Alabaster, Oatmeal, Stone, Greige, Beige, Orchard Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Apple in Orchard Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Orchard Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Apple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0222-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217494_ee44.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217493_1_SAW0222_01_SANDERSON_Ancient_Apple_Orchard_WALLPAPER_3617.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217493_25dd.jpg","alt":"Ancient Apple"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217495_4a1f.jpg","alt":"Ancient Apple"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255024","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255024-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0222-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Apple"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Orchard Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Orchard Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5efe8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"27.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d1c2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a3a996"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5efe8\",\"pct\":27.1,\"name\":\"Alabaster\"},{\"hex\":\"#d1d1c2\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#a3a996\",\"pct\":19,\"name\":\"Stone\"},{\"hex\":\"#b5bbad\",\"pct\":18,\"name\":\"Greige\"},{\"hex\":\"#c7c3ae\",\"pct\":14.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0177-03","sku":"DWXH-255025","sc_id":26,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Ancient Canopy Forest Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Canopy, color:Denim, Denim, Stone, Wedgwood, Taupe, Silver, Alabaster, Botanical, Landscapes, Forest Green","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Canopy in Forest Green is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Stone, Wedgwood. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Forest Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0177-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217222_d503.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217220_05f1.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217221_ff44.jpg","alt":"Ancient Canopy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255025","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255025-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Canopy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Forest Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Forest Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#4c586e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a1ab9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#66868f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#4c586e\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#a1ab9b\",\"pct\":20,\"name\":\"Stone\"},{\"hex\":\"#66868f\",\"pct\":15.9,\"name\":\"Wedgwood\"},{\"hex\":\"#9b847f\",\"pct\":15.7,\"name\":\"Taupe\"},{\"hex\":\"#c0cec0\",\"pct\":14.4,\"name\":\"Silver\"},{\"hex\":\"#e4ece3\",\"pct\":12.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0177-02","sku":"DWXH-255026","sc_id":27,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Ancient Canopy Moss | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Canopy, color:Denim, Denim, Stone, Wedgwood, Taupe, Silver, Alabaster, Botanical, Landscapes, Moss","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Canopy in Moss is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Stone, Wedgwood. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Moss</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0177-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217222_d503.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217220_05f1.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217221_ff44.jpg","alt":"Ancient Canopy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255026","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255026-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Canopy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Moss"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Moss"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#4c586e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a1ab9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#66868f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#4c586e\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#a1ab9b\",\"pct\":20,\"name\":\"Stone\"},{\"hex\":\"#66868f\",\"pct\":15.9,\"name\":\"Wedgwood\"},{\"hex\":\"#9b847f\",\"pct\":15.7,\"name\":\"Taupe\"},{\"hex\":\"#c0cec0\",\"pct\":14.4,\"name\":\"Silver\"},{\"hex\":\"#e4ece3\",\"pct\":12.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0177-01","sku":"DWXH-255027","sc_id":28,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Ancient Canopy Sap Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ancient Canopy, color:Denim, Denim, Stone, Wedgwood, Taupe, Silver, Alabaster, Botanical, Landscapes, Sap Green","body_html":"<div class=\"sanderson-product\">\n<p>Ancient Canopy in Sap Green is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Stone, Wedgwood. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sap Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ancient Canopy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0177-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217222_d503.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217220_05f1.jpg","alt":"Ancient Canopy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217221_ff44.jpg","alt":"Ancient Canopy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255027","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255027-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0177-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ancient Canopy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#4c586e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a1ab9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#66868f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#4c586e\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#a1ab9b\",\"pct\":20,\"name\":\"Stone\"},{\"hex\":\"#66868f\",\"pct\":15.9,\"name\":\"Wedgwood\"},{\"hex\":\"#9b847f\",\"pct\":15.7,\"name\":\"Taupe\"},{\"hex\":\"#c0cec0\",\"pct\":14.4,\"name\":\"Silver\"},{\"hex\":\"#e4ece3\",\"pct\":12.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0138-05","sku":"DWXH-255028","sc_id":29,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Andhara Dove/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andhara, color:Mist, Mist, Stone, Linen, Florals, Dove/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Andhara in Dove/Cream is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0138-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216797_a627.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216793_665d.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216794_27cd.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216795_696f.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216796_202a.jpg","alt":"Andhara"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255028","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255028-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andhara"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d2cd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0af9e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8dcd3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d2cd\",\"pct\":73.6,\"name\":\"Mist\"},{\"hex\":\"#b0af9e\",\"pct\":16.5,\"name\":\"Stone\"},{\"hex\":\"#d8dcd3\",\"pct\":10,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0138-03","sku":"DWXH-255029","sc_id":30,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Andhara Rose/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andhara, color:Mist, Mist, Stone, Linen, Florals, Rose/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Andhara in Rose/Cream is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0138-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216797_a627.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216793_665d.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216794_27cd.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216795_696f.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216796_202a.jpg","alt":"Andhara"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255029","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255029-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andhara"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d2cd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0af9e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8dcd3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d2cd\",\"pct\":73.6,\"name\":\"Mist\"},{\"hex\":\"#b0af9e\",\"pct\":16.5,\"name\":\"Stone\"},{\"hex\":\"#d8dcd3\",\"pct\":10,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0138-01","sku":"DWXH-255030","sc_id":31,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Andhara Sea Glass /Lemon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andhara, color:Mist, Mist, Stone, Linen, Florals, Sea Glass /Lemon","body_html":"<div class=\"sanderson-product\">\n<p>Andhara in Sea Glass /Lemon is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Glass /Lemon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0138-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216797_a627.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216793_665d.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216794_27cd.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216795_696f.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216796_202a.jpg","alt":"Andhara"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255030","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255030-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andhara"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Glass /Lemon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Glass /Lemon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d2cd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0af9e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8dcd3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d2cd\",\"pct\":73.6,\"name\":\"Mist\"},{\"hex\":\"#b0af9e\",\"pct\":16.5,\"name\":\"Stone\"},{\"hex\":\"#d8dcd3\",\"pct\":10,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0138-02","sku":"DWXH-255031","sc_id":32,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Andhara Teal/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andhara, color:Mist, Mist, Stone, Linen, Florals, Teal/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Andhara in Teal/Cream is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0138-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216797_a627.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216793_665d.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216794_27cd.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216795_696f.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216796_202a.jpg","alt":"Andhara"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255031","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255031-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andhara"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d2cd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0af9e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8dcd3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d2cd\",\"pct\":73.6,\"name\":\"Mist\"},{\"hex\":\"#b0af9e\",\"pct\":16.5,\"name\":\"Stone\"},{\"hex\":\"#d8dcd3\",\"pct\":10,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0138-04","sku":"DWXH-255032","sc_id":33,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Andhara Teal/Tumeric | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andhara, color:Mist, Mist, Stone, Linen, Florals, Teal/Tumeric","body_html":"<div class=\"sanderson-product\">\n<p>Andhara in Teal/Tumeric is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Tumeric</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andhara</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0138-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216797_a627.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216793_665d.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216794_27cd.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216795_696f.jpg","alt":"Andhara"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216796_202a.jpg","alt":"Andhara"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255032","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255032-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0138-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andhara"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Tumeric"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Tumeric"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d2cd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0af9e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8dcd3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d2cd\",\"pct\":73.6,\"name\":\"Mist\"},{\"hex\":\"#b0af9e\",\"pct\":16.5,\"name\":\"Stone\"},{\"hex\":\"#d8dcd3\",\"pct\":10,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0203-01","sku":"DWXH-255033","sc_id":34,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Andromeda`S Cup Olympic Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andromeda`S Cup, color:Alabaster, Alabaster, Linen, Greige, Olympic Blue","body_html":"<div class=\"sanderson-product\">\n<p>Andromeda`s Cup in Olympic Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olympic Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0203-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_eb54.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_1_SAW0203_01_SANDERSON_Andromedas_Cup_WALLPAPER_3685.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_2_SAW0203_01_SANDERSON_Andromedas_Cup_WALLPAPER_6d5c.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_427d.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_9d59.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_4464.jpg","alt":"Andromeda`S Cup"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255033","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255033-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andromeda`S Cup"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olympic Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olympic Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0dee1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d0c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4b5ac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0dee1\",\"pct\":55.8,\"name\":\"Alabaster\"},{\"hex\":\"#d8d0c9\",\"pct\":28.3,\"name\":\"Linen\"},{\"hex\":\"#c4b5ac\",\"pct\":15.9,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0203-04","sku":"DWXH-255034","sc_id":35,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Andromeda`S Cup Tyrian Lilac | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andromeda`S Cup, color:Alabaster, Alabaster, Linen, Greige, Tyrian Lilac","body_html":"<div class=\"sanderson-product\">\n<p>Andromeda`s Cup in Tyrian Lilac is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Tyrian Lilac</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0203-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_eb54.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_427d.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_9d59.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_4464.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_1_SAW0203_04_SANDERSON_Andromedas_Cup_WALLPAPER_dbdb.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_2_SAW0203_04_SANDERSON_Andromedas_Cup_WALLPAPER_99c7.jpg","alt":"Andromeda`S Cup"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255034","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255034-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andromeda`S Cup"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0dee1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d0c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4b5ac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0dee1\",\"pct\":55.8,\"name\":\"Alabaster\"},{\"hex\":\"#d8d0c9\",\"pct\":28.3,\"name\":\"Linen\"},{\"hex\":\"#c4b5ac\",\"pct\":15.9,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0084-02","sku":"DWXH-255035","sc_id":36,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Annandale Amber/Sepia | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Annandale, color:Alabaster, Alabaster, Cream, Linen, Florals, Amber/Sepia","body_html":"<div class=\"sanderson-product\">\n<p>Annandale in Amber/Sepia is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Amber/Sepia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0084-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216394_6ea9.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216395_1_SAW0084_02_SANDERSON_Annandale_WALLPAPER_29cf.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216395_2_SAW0084_02_SANDERSON_Annandale_WALLPAPER_9350.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216395_c968.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216396_bcab.jpg","alt":"Annandale"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255035","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255035-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Annandale"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Amber/Sepia"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Amber/Sepia"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebebe6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e0d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd8cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebebe6\",\"pct\":56,\"name\":\"Alabaster\"},{\"hex\":\"#e3e0d7\",\"pct\":23.2,\"name\":\"Cream\"},{\"hex\":\"#ddd8cf\",\"pct\":20.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0084-01","sku":"DWXH-255036","sc_id":37,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Annandale Dove/Taupe | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Annandale, color:Alabaster, Alabaster, Cream, Linen, Florals, Dove/Taupe","body_html":"<div class=\"sanderson-product\">\n<p>Annandale in Dove/Taupe is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove/Taupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0084-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216394_6ea9.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216394_1_SAW0084_01_SANDERSON_Annandale_WALLPAPER_7536.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216394_2_SAW0084_01_SANDERSON_Annandale_WALLPAPER_4238.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216395_c968.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216396_bcab.jpg","alt":"Annandale"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255036","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255036-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Annandale"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove/Taupe"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove/Taupe"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebebe6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e0d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd8cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebebe6\",\"pct\":56,\"name\":\"Alabaster\"},{\"hex\":\"#e3e0d7\",\"pct\":23.2,\"name\":\"Cream\"},{\"hex\":\"#ddd8cf\",\"pct\":20.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0084-03","sku":"DWXH-255037","sc_id":38,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Annandale Ivory/Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Annandale, color:Alabaster, Alabaster, Cream, Linen, Florals, Ivory/Stone","body_html":"<div class=\"sanderson-product\">\n<p>Annandale in Ivory/Stone is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory/Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0084-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216394_6ea9.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216395_c968.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216396_1_SAW0084_03_SANDERSON_Annandale_WALLPAPER_6f61.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216396_2_SAW0084_03_SANDERSON_Annandale_WALLPAPER_c183.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216396_bcab.jpg","alt":"Annandale"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255037","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255037-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0084-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Annandale"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebebe6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e0d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd8cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebebe6\",\"pct\":56,\"name\":\"Alabaster\"},{\"hex\":\"#e3e0d7\",\"pct\":23.2,\"name\":\"Cream\"},{\"hex\":\"#ddd8cf\",\"pct\":20.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0085-01","sku":"DWXH-255038","sc_id":39,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Annandale Wedgwood/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Annandale, color:Alabaster, Alabaster, Cream, Linen, Mist, Florals, Wedgwood/Linen","body_html":"<div class=\"sanderson-product\">\n<p>Annandale in Wedgwood/Linen is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Annandale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0085-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216393_fd51.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216393_1_SAW0085_01_SANDERSON_Annandale_WALLPAPER_ea42.jpg","alt":"Annandale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216393_2_SAW0085_01_SANDERSON_Annandale_WALLPAPER_3ade.jpg","alt":"Annandale"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255038","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255038-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0085-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0085-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Annandale"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e7e3d9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0ded5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dcdacf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e7e3d9\",\"pct\":29.8,\"name\":\"Alabaster\"},{\"hex\":\"#e0ded5\",\"pct\":27.7,\"name\":\"Cream\"},{\"hex\":\"#dcdacf\",\"pct\":23,\"name\":\"Linen\"},{\"hex\":\"#d3d4c8\",\"pct\":19.4,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0204-02","sku":"DWXH-255039","sc_id":40,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Aperigon Parade Celadon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aperigon Parade, color:Cream, Cream, Ivory, Celadon","body_html":"<div class=\"sanderson-product\">\n<p>Aperigon Parade in Celadon is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Celadon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0204-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_0ba9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_3cc9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_1_SAW0204_02_SANDERSON_Aperigon_Parade_WALLPAPER_2c5b.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_8e94.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_fff2.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_5914.jpg","alt":"Aperigon Parade"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255039","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255039-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aperigon Parade"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0efd7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f3f6e4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0efd7\",\"pct\":50.7,\"name\":\"Cream\"},{\"hex\":\"#f3f6e4\",\"pct\":49.3,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0204-01","sku":"DWXH-255040","sc_id":41,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Aperigon Parade Chamomile | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aperigon Parade, color:Cream, Cream, Ivory, Chamomile","body_html":"<div class=\"sanderson-product\">\n<p>Aperigon Parade in Chamomile is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chamomile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0204-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_0ba9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_1_SAW0204_01_SANDERSON_Aperigon_Parade_WALLPAPER_7621.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_3cc9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_8e94.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_fff2.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_5914.jpg","alt":"Aperigon Parade"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255040","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255040-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aperigon Parade"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chamomile"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chamomile"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0efd7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f3f6e4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0efd7\",\"pct\":50.7,\"name\":\"Cream\"},{\"hex\":\"#f3f6e4\",\"pct\":49.3,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0204-04","sku":"DWXH-255041","sc_id":42,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Aperigon Parade Porcelain | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aperigon Parade, color:Cream, Cream, Ivory, Porcelain","body_html":"<div class=\"sanderson-product\">\n<p>Aperigon Parade in Porcelain is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Porcelain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0204-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_0ba9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_3cc9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_8e94.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_1_SAW0204_04_SANDERSON_Aperigon_Parade_WALLPAPER_c160.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_fff2.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_5914.jpg","alt":"Aperigon Parade"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255041","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255041-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aperigon Parade"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Porcelain"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Porcelain"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0efd7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f3f6e4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0efd7\",\"pct\":50.7,\"name\":\"Cream\"},{\"hex\":\"#f3f6e4\",\"pct\":49.3,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0204-05","sku":"DWXH-255042","sc_id":43,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Aperigon Parade Tyrian Lilac | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aperigon Parade, color:Cream, Cream, Ivory, Tyrian Lilac","body_html":"<div class=\"sanderson-product\">\n<p>Aperigon Parade in Tyrian Lilac is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Tyrian Lilac</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0204-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_0ba9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_3cc9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_8e94.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_fff2.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_1_SAW0204_05_SANDERSON_Aperigon_Parade_WALLPAPER_6342.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_5914.jpg","alt":"Aperigon Parade"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255042","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255042-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aperigon Parade"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0efd7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f3f6e4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0efd7\",\"pct\":50.7,\"name\":\"Cream\"},{\"hex\":\"#f3f6e4\",\"pct\":49.3,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0223-01","sku":"DWXH-255043","sc_id":44,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Apothecary Rose Ether Blues | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Apothecary Rose, color:Linen, Linen, Taupe, Stone, Cream, Silver, Ether Blues","body_html":"<div class=\"sanderson-product\">\n<p>Apothecary Rose in Ether Blues is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ether Blues</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0223-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217496_f063.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217496_1_SAW0223_01_SANDERSON_Apothecary_Rose_WALLPAPER_b2c2.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217497_523b.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217498_0a94.jpg","alt":"Apothecary Rose"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255043","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255043-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Apothecary Rose"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ether Blues"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ether Blues"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dee0d3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#99988b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afafa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dee0d3\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#99988b\",\"pct\":21.1,\"name\":\"Taupe\"},{\"hex\":\"#afafa2\",\"pct\":15.6,\"name\":\"Stone\"},{\"hex\":\"#e1e2d6\",\"pct\":14.1,\"name\":\"Cream\"},{\"hex\":\"#c4c5ba\",\"pct\":12.6,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0223-03","sku":"DWXH-255044","sc_id":45,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Apothecary Rose Parchment /Olivine | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Apothecary Rose, color:Linen, Linen, Taupe, Stone, Cream, Silver, Parchment /Olivine","body_html":"<div class=\"sanderson-product\">\n<p>Apothecary Rose in Parchment /Olivine is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Parchment /Olivine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0223-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217496_f063.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217497_523b.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217498_0a94.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217498_1_SAW0223_03_SANDERSON_Apothecary_Rose_WALLPAPER_5d51.jpg","alt":"Apothecary Rose"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255044","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255044-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Apothecary Rose"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Parchment /Olivine"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Parchment /Olivine"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dee0d3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#99988b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afafa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dee0d3\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#99988b\",\"pct\":21.1,\"name\":\"Taupe\"},{\"hex\":\"#afafa2\",\"pct\":15.6,\"name\":\"Stone\"},{\"hex\":\"#e1e2d6\",\"pct\":14.1,\"name\":\"Cream\"},{\"hex\":\"#c4c5ba\",\"pct\":12.6,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0223-02","sku":"DWXH-255045","sc_id":46,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Apothecary Rose Chintz | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Apothecary Rose, color:Linen, Linen, Taupe, Stone, Cream, Silver, Chintz","body_html":"<div class=\"sanderson-product\">\n<p>Apothecary Rose in Chintz is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chintz</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Apothecary Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0223-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217496_f063.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217497_1_SAW0223_02_SANDERSON_Apothecary_Rose_WALLPAPER_a6bc.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217497_523b.jpg","alt":"Apothecary Rose"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217498_0a94.jpg","alt":"Apothecary Rose"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255045","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255045-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0223-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Apothecary Rose"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chintz"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chintz"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dee0d3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#99988b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#afafa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dee0d3\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#99988b\",\"pct\":21.1,\"name\":\"Taupe\"},{\"hex\":\"#afafa2\",\"pct\":15.6,\"name\":\"Stone\"},{\"hex\":\"#e1e2d6\",\"pct\":14.1,\"name\":\"Cream\"},{\"hex\":\"#c4c5ba\",\"pct\":12.6,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0178-02","sku":"DWXH-255046","sc_id":47,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Aril`S Garden Blue Clay/Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aril`S Garden, color:Ivory, Ivory, Stone, Cream, White, Birds, Blue Clay/Pink","body_html":"<div class=\"sanderson-product\">\n<p>Aril`s Garden in Blue Clay/Pink is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay/Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0178-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217235_3c8e.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217236_1884.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217236_1_SAW0178_02_SANDERSON_Arils_Garden_WALLPAPER_53fa.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217237_c116.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_eb0c.jpg","alt":"Aril`S Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255046","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255046-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aril`S Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay/Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay/Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b7ac91"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e5d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfbef\",\"pct\":42.6,\"name\":\"Ivory\"},{\"hex\":\"#b7ac91\",\"pct\":22.1,\"name\":\"Stone\"},{\"hex\":\"#e6e5d5\",\"pct\":19.5,\"name\":\"Cream\"},{\"hex\":\"#fefdf2\",\"pct\":13.5,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0178-03","sku":"DWXH-255047","sc_id":48,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Aril`S Garden Indigo/Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aril`S Garden, color:Ivory, Ivory, Stone, Cream, White, Birds, Indigo/Red","body_html":"<div class=\"sanderson-product\">\n<p>Aril`s Garden in Indigo/Red is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo/Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0178-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217235_3c8e.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217236_1884.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217237_1_SAW0178_03_SANDERSON_Arils_Garden_WALLPAPER_3652.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217237_c116.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_eb0c.jpg","alt":"Aril`S Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255047","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255047-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aril`S Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo/Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo/Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b7ac91"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e5d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfbef\",\"pct\":42.6,\"name\":\"Ivory\"},{\"hex\":\"#b7ac91\",\"pct\":22.1,\"name\":\"Stone\"},{\"hex\":\"#e6e5d5\",\"pct\":19.5,\"name\":\"Cream\"},{\"hex\":\"#fefdf2\",\"pct\":13.5,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0178-04","sku":"DWXH-255048","sc_id":49,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Aril`S Garden Olive/Mulberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aril`S Garden, color:Ivory, Ivory, Stone, Cream, White, Birds, Olive/Mulberry","body_html":"<div class=\"sanderson-product\">\n<p>Aril`s Garden in Olive/Mulberry is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olive/Mulberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0178-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217235_3c8e.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217236_1884.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217237_c116.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_1_SAW0178_04_SANDERSON_Arils_Garden_WALLPAPER_6b28.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_2_SAW0178_04_SANDERSON_Arils_Garden_WALLPAPER_e9bc.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_3_SAW0178_04_SANDERSON_Arils_Garden_WALLPAPER_fd31.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_4_SAW0178_04_SANDERSON_Arils_Garden_WALLPAPER_65d6.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_eb0c.jpg","alt":"Aril`S Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255048","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255048-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aril`S Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olive/Mulberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olive/Mulberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b7ac91"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e5d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfbef\",\"pct\":42.6,\"name\":\"Ivory\"},{\"hex\":\"#b7ac91\",\"pct\":22.1,\"name\":\"Stone\"},{\"hex\":\"#e6e5d5\",\"pct\":19.5,\"name\":\"Cream\"},{\"hex\":\"#fefdf2\",\"pct\":13.5,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0178-01","sku":"DWXH-255049","sc_id":50,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Aril`S Garden Teal/Russet | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aril`S Garden, color:Ivory, Ivory, Stone, Cream, White, Birds, Teal/Russet","body_html":"<div class=\"sanderson-product\">\n<p>Aril`s Garden in Teal/Russet is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Stone, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Russet</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aril`S Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0178-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217235_3c8e.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217235_1_SAW0178_01_SANDERSON_Arils_Garden_WALLPAPER_b459.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217236_1884.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217237_c116.jpg","alt":"Aril`S Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217238_eb0c.jpg","alt":"Aril`S Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255049","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255049-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0178-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aril`S Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Russet"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Russet"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b7ac91"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e5d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfbef\",\"pct\":42.6,\"name\":\"Ivory\"},{\"hex\":\"#b7ac91\",\"pct\":22.1,\"name\":\"Stone\"},{\"hex\":\"#e6e5d5\",\"pct\":19.5,\"name\":\"Cream\"},{\"hex\":\"#fefdf2\",\"pct\":13.5,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0215-02","sku":"DWXH-255050","sc_id":51,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Aubrey Lambs Ear | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aubrey, color:White, White, Duck Egg, Mist, Alabaster, Lambs Ear","body_html":"<div class=\"sanderson-product\">\n<p>Aubrey in Lambs Ear is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lambs Ear</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0215-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217427_b43f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217428_d1bb.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217429_fb41.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_767a.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217431_c97f.jpg","alt":"Aubrey"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255050","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255050-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aubrey"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lambs Ear"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lambs Ear"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfaf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#89aec8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7d6de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfaf5\",\"pct\":39.5,\"name\":\"White\"},{\"hex\":\"#89aec8\",\"pct\":22.7,\"name\":\"Duck Egg\"},{\"hex\":\"#c7d6de\",\"pct\":22.3,\"name\":\"Mist\"},{\"hex\":\"#e9ecea\",\"pct\":15.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0215-01","sku":"DWXH-255051","sc_id":52,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Aubrey Pottery Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aubrey, color:White, White, Duck Egg, Mist, Alabaster, Pottery Blue","body_html":"<div class=\"sanderson-product\">\n<p>Aubrey in Pottery Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pottery Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0215-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217427_b43f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217428_d1bb.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217429_fb41.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_767a.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217431_c97f.jpg","alt":"Aubrey"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255051","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255051-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aubrey"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pottery Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pottery Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfaf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#89aec8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7d6de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfaf5\",\"pct\":39.5,\"name\":\"White\"},{\"hex\":\"#89aec8\",\"pct\":22.7,\"name\":\"Duck Egg\"},{\"hex\":\"#c7d6de\",\"pct\":22.3,\"name\":\"Mist\"},{\"hex\":\"#e9ecea\",\"pct\":15.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0215-05","sku":"DWXH-255052","sc_id":53,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Aubrey Raw Chocolate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aubrey, color:White, White, Duck Egg, Mist, Alabaster, Raw Chocolate","body_html":"<div class=\"sanderson-product\">\n<p>Aubrey in Raw Chocolate is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raw Chocolate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0215-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217427_b43f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217428_d1bb.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217429_fb41.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_767a.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217431_c97f.jpg","alt":"Aubrey"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255052","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255052-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aubrey"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raw Chocolate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raw Chocolate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfaf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#89aec8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7d6de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfaf5\",\"pct\":39.5,\"name\":\"White\"},{\"hex\":\"#89aec8\",\"pct\":22.7,\"name\":\"Duck Egg\"},{\"hex\":\"#c7d6de\",\"pct\":22.3,\"name\":\"Mist\"},{\"hex\":\"#e9ecea\",\"pct\":15.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0205-02","sku":"DWXH-255053","sc_id":54,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Aurelia`S Grail Madder/Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aurelia`S Grail, color:Sand, Sand, Linen, Oatmeal, Beige, Ivory, Cream, Madder/Parchment","body_html":"<div class=\"sanderson-product\">\n<p>Aurelia`s Grail in Madder/Parchment is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aurelia`S Grail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Madder/Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aurelia`S Grail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0205-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217299_3431.jpg","alt":"Aurelia`S Grail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217297_e807.jpg","alt":"Aurelia`S Grail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217298_dd57.jpg","alt":"Aurelia`S Grail"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255053","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255053-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0205-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0205-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aurelia`S Grail"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Madder/Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Madder/Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0bc8e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7ddc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded1af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0bc8e\",\"pct\":20.8,\"name\":\"Sand\"},{\"hex\":\"#e7ddc2\",\"pct\":20.1,\"name\":\"Linen\"},{\"hex\":\"#ded1af\",\"pct\":15.4,\"name\":\"Oatmeal\"},{\"hex\":\"#d8c7a1\",\"pct\":15.2,\"name\":\"Beige\"},{\"hex\":\"#faf5e5\",\"pct\":14.3,\"name\":\"Ivory\"},{\"hex\":\"#f2ebd6\",\"pct\":14.1,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0191-04","sku":"DWXH-255054","sc_id":55,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bambi Neapolitan | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bambi, color:Alabaster, Alabaster, Linen, Mist, Stone, Animals, Neapolitan","body_html":"<div class=\"sanderson-product\">\n<p>Bambi in Neapolitan is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Neapolitan</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0191-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_3231.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_a149.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_dd53.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_1_SAW0191_04_SANDERSON_Bambi_WALLPAPER_90f7.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_2_SAW0191_04_SANDERSON_Bambi_WALLPAPER_5fe2.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_3_SAW0191_04_SANDERSON_Bambi_WALLPAPER_a901.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_4_SAW0191_04_SANDERSON_Bambi_WALLPAPER_cb25.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_560c.jpg","alt":"Bambi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255054","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255054-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bambi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Neapolitan"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Neapolitan"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dde7e7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7e0d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0cfc3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dde7e7\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#d7e0d8\",\"pct\":29,\"name\":\"Linen\"},{\"hex\":\"#c0cfc3\",\"pct\":17.7,\"name\":\"Mist\"},{\"hex\":\"#b2b19c\",\"pct\":17.6,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0191-01","sku":"DWXH-255055","sc_id":56,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bambi Sugared Almonds | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bambi, color:Alabaster, Alabaster, Linen, Mist, Stone, Animals, Sugared Almonds","body_html":"<div class=\"sanderson-product\">\n<p>Bambi in Sugared Almonds is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sugared Almonds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0191-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_3231.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_1_SAW0191_01_SANDERSON_Bambi_WALLPAPER_cd0a.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_2_SAW0191_01_SANDERSON_Bambi_WALLPAPER_49c6.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_3_SAW0191_01_SANDERSON_Bambi_WALLPAPER_8c0a.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_4_SAW0191_01_SANDERSON_Bambi_WALLPAPER_58f2.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_a149.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_dd53.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_560c.jpg","alt":"Bambi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255055","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255055-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bambi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sugared Almonds"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sugared Almonds"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dde7e7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7e0d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0cfc3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dde7e7\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#d7e0d8\",\"pct\":29,\"name\":\"Linen\"},{\"hex\":\"#c0cfc3\",\"pct\":17.7,\"name\":\"Mist\"},{\"hex\":\"#b2b19c\",\"pct\":17.6,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0169-02","sku":"DWXH-255056","sc_id":57,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Bamboo &Amp; Birds & Birds China Blue /Lotus Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamboo &Amp; Birds, color:Sage, Sage, Ivory, Linen, Sand, Taupe, White, Birds, & Birds China Blue /Lotus Pink","body_html":"<div class=\"sanderson-product\">\n<p>Bamboo &amp; Birds in & Birds China Blue /Lotus Pink is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Ivory, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Birds China Blue /Lotus Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0169-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217130_eb18.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217128_2a9f.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217129_1_SAW0169_02_SANDERSON_Bamboo_and_Birds_WALLPAPER_fca2.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217129_29b6.jpg","alt":"Bamboo &Amp; Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255056","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255056-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamboo &Amp; Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Birds China Blue /Lotus Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Birds China Blue /Lotus Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b670"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f9f7eb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0ddb6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b670\",\"pct\":19.3,\"name\":\"Sage\"},{\"hex\":\"#f9f7eb\",\"pct\":18.2,\"name\":\"Ivory\"},{\"hex\":\"#e0ddb6\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#bebc87\",\"pct\":16.4,\"name\":\"Sand\"},{\"hex\":\"#95916c\",\"pct\":15.3,\"name\":\"Taupe\"},{\"hex\":\"#fcfaef\",\"pct\":13.4,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0169-01","sku":"DWXH-255057","sc_id":58,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Bamboo &Amp; Birds & Birds Mandarin Red/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamboo &Amp; Birds, color:Sage, Sage, Ivory, Linen, Sand, Taupe, White, Birds, & Birds Mandarin Red/Olive","body_html":"<div class=\"sanderson-product\">\n<p>Bamboo &amp; Birds in & Birds Mandarin Red/Olive is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Ivory, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Birds Mandarin Red/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0169-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217130_eb18.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217128_1_SAW0169_01_SANDERSON_Bamboo_and_Birds_WALLPAPER_0f4f.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217128_2a9f.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217129_29b6.jpg","alt":"Bamboo &Amp; Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255057","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255057-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamboo &Amp; Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Birds Mandarin Red/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Birds Mandarin Red/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b670"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f9f7eb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0ddb6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b670\",\"pct\":19.3,\"name\":\"Sage\"},{\"hex\":\"#f9f7eb\",\"pct\":18.2,\"name\":\"Ivory\"},{\"hex\":\"#e0ddb6\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#bebc87\",\"pct\":16.4,\"name\":\"Sand\"},{\"hex\":\"#95916c\",\"pct\":15.3,\"name\":\"Taupe\"},{\"hex\":\"#fcfaef\",\"pct\":13.4,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0169-03","sku":"DWXH-255058","sc_id":59,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Bamboo &Amp; Birds & Birds Scallion Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamboo &Amp; Birds, color:Sage, Sage, Ivory, Linen, Sand, Taupe, White, Birds, & Birds Scallion Green","body_html":"<div class=\"sanderson-product\">\n<p>Bamboo &amp; Birds in & Birds Scallion Green is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Ivory, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Birds Scallion Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamboo &Amp; Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0169-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217130_eb18.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217128_2a9f.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217129_29b6.jpg","alt":"Bamboo &Amp; Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217130_1_SAW0169_03_SANDERSON_Bamboo_and_Birds_WALLPAPER_0bc8.jpg","alt":"Bamboo &Amp; Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255058","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255058-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0169-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamboo &Amp; Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Birds Scallion Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Birds Scallion Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b670"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f9f7eb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0ddb6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b670\",\"pct\":19.3,\"name\":\"Sage\"},{\"hex\":\"#f9f7eb\",\"pct\":18.2,\"name\":\"Ivory\"},{\"hex\":\"#e0ddb6\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#bebc87\",\"pct\":16.4,\"name\":\"Sand\"},{\"hex\":\"#95916c\",\"pct\":15.3,\"name\":\"Taupe\"},{\"hex\":\"#fcfaef\",\"pct\":13.4,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0095-03","sku":"DWXH-255059","sc_id":60,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Bamburgh Sky Driftwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamburgh Sky, color:Linen, Linen, Mist, Alabaster, Landscapes, Driftwood","body_html":"<div class=\"sanderson-product\">\n<p>Bamburgh Sky in Driftwood is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0095-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216517_ee4c.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216515_90c6.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216516_d0cf.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216517_1_SAW0095_03_SANDERSON_Bamburgh_Sky_WALLPAPER_7a56.jpg","alt":"Bamburgh Sky"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255059","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255059-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamburgh Sky"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8d7d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d3d1c8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dedfd9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8d7d1\",\"pct\":68.8,\"name\":\"Linen\"},{\"hex\":\"#d3d1c8\",\"pct\":16,\"name\":\"Mist\"},{\"hex\":\"#dedfd9\",\"pct\":15.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0095-01","sku":"DWXH-255060","sc_id":61,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Bamburgh Sky Estuary Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamburgh Sky, color:Linen, Linen, Mist, Alabaster, Landscapes, Estuary Blue","body_html":"<div class=\"sanderson-product\">\n<p>Bamburgh Sky in Estuary Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Estuary Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0095-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216517_ee4c.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216515_1_SAW0095_01_SANDERSON_Bamburgh_Sky_WALLPAPER_d946.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216515_90c6.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216516_d0cf.jpg","alt":"Bamburgh Sky"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255060","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255060-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamburgh Sky"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Estuary Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Estuary Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8d7d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d3d1c8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dedfd9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8d7d1\",\"pct\":68.8,\"name\":\"Linen\"},{\"hex\":\"#d3d1c8\",\"pct\":16,\"name\":\"Mist\"},{\"hex\":\"#dedfd9\",\"pct\":15.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0095-02","sku":"DWXH-255061","sc_id":62,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Bamburgh Sky Mist Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bamburgh Sky, color:Linen, Linen, Mist, Alabaster, Landscapes, Mist Blue","body_html":"<div class=\"sanderson-product\">\n<p>Bamburgh Sky in Mist Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mist Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bamburgh Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0095-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216517_ee4c.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216515_90c6.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216516_1_SAW0095_02_SANDERSON_Bamburgh_Sky_WALLPAPER_524f.jpg","alt":"Bamburgh Sky"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216516_d0cf.jpg","alt":"Bamburgh Sky"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255061","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255061-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0095-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bamburgh Sky"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mist Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mist Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8d7d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d3d1c8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dedfd9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8d7d1\",\"pct\":68.8,\"name\":\"Linen\"},{\"hex\":\"#d3d1c8\",\"pct\":16,\"name\":\"Mist\"},{\"hex\":\"#dedfd9\",\"pct\":15.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0107-02","sku":"DWXH-255062","sc_id":63,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Beach Huts Driftwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Beach Huts, color:Alabaster, Alabaster, Cream, Linen, Driftwood","body_html":"<div class=\"sanderson-product\">\n<p>Beach Huts in Driftwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0107-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216561_1f43.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216559_4adb.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216561_1_SAW0107_02_SANDERSON_Beach_Huts_WALLPAPER_fb00.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216561_2_SAW0107_02_SANDERSON_Beach_Huts_WALLPAPER_ccff.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216561_3_SAW0107_02_SANDERSON_Beach_Huts_WALLPAPER_554d.jpg","alt":"Beach Huts"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255062","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255062-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0107-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0107-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Beach Huts"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e9e8e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4e2d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d7ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e9e8e0\",\"pct\":48.2,\"name\":\"Alabaster\"},{\"hex\":\"#e4e2d8\",\"pct\":33.1,\"name\":\"Cream\"},{\"hex\":\"#d7d7ce\",\"pct\":18.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0108-01","sku":"DWXH-255063","sc_id":64,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Beach Huts Marine | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Beach Huts, color:Mist, Mist, Alabaster, Duck Egg, Marine","body_html":"<div class=\"sanderson-product\">\n<p>Beach Huts in Marine is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster, Duck Egg. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Marine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0108-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216560_95c6.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216560_1_SAW0108_01_SANDERSON_Beach_Huts_WALLPAPER_5154.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216560_2_SAW0108_01_SANDERSON_Beach_Huts_WALLPAPER_fc72.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216560_3_SAW0108_01_SANDERSON_Beach_Huts_WALLPAPER_c9c3.jpg","alt":"Beach Huts"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255063","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255063-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0108-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0108-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Beach Huts"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Marine"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Marine"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2d4d9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"41.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ecece8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a4bfcb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2d4d9\",\"pct\":41.4,\"name\":\"Mist\"},{\"hex\":\"#ecece8\",\"pct\":39.1,\"name\":\"Alabaster\"},{\"hex\":\"#a4bfcb\",\"pct\":19.5,\"name\":\"Duck Egg\"}]"}]}
+{"mfr_sku":"SAW0107-01","sku":"DWXH-255064","sc_id":65,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Beach Huts Nautical | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Beach Huts, color:Alabaster, Alabaster, Cream, Linen, Nautical","body_html":"<div class=\"sanderson-product\">\n<p>Beach Huts in Nautical is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Nautical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Beach Huts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0107-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216561_1f43.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216559_1_SAW0107_01_SANDERSON_Beach_Huts_WALLPAPER_e918.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216559_2_SAW0107_01_SANDERSON_Beach_Huts_WALLPAPER_bf4b.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216559_3_SAW0107_01_SANDERSON_Beach_Huts_WALLPAPER_eb37.jpg","alt":"Beach Huts"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216559_4adb.jpg","alt":"Beach Huts"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255064","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255064-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0107-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0107-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Beach Huts"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Nautical"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Nautical"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e9e8e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4e2d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d7ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e9e8e0\",\"pct\":48.2,\"name\":\"Alabaster\"},{\"hex\":\"#e4e2d8\",\"pct\":33.1,\"name\":\"Cream\"},{\"hex\":\"#d7d7ce\",\"pct\":18.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0126-01","sku":"DWXH-255065","sc_id":66,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bird Of Paradise Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bird Of Paradise, color:White, White, Greige, Linen, Alabaster, Oatmeal, Birds, Leaves-And-Trees, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Bird Of Paradise in Linen is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0126-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216654_b9d3.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216652_1_SAW0126_01_SANDERSON_Bird_Of_Paradise_WALLPAPER_fa97.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216652_f707.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216653_4ee3.jpg","alt":"Bird Of Paradise"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255065","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255065-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bird Of Paradise"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f3f3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5af9c"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f3f3\",\"pct\":32.8,\"name\":\"White\"},{\"hex\":\"#b5af9c\",\"pct\":19.1,\"name\":\"Greige\"},{\"hex\":\"#dad3c5\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#e9e7e2\",\"pct\":15.2,\"name\":\"Alabaster\"},{\"hex\":\"#c9cbae\",\"pct\":14.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0126-02","sku":"DWXH-255066","sc_id":67,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bird Of Paradise Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bird Of Paradise, color:White, White, Greige, Linen, Alabaster, Oatmeal, Birds, Leaves-And-Trees, Olive, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Bird Of Paradise in Olive is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0126-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216654_b9d3.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216652_f707.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216653_1_SAW0126_02_SANDERSON_Bird_Of_Paradise_WALLPAPER_b679.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216653_4ee3.jpg","alt":"Bird Of Paradise"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255066","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255066-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bird Of Paradise"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f3f3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5af9c"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f3f3\",\"pct\":32.8,\"name\":\"White\"},{\"hex\":\"#b5af9c\",\"pct\":19.1,\"name\":\"Greige\"},{\"hex\":\"#dad3c5\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#e9e7e2\",\"pct\":15.2,\"name\":\"Alabaster\"},{\"hex\":\"#c9cbae\",\"pct\":14.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0126-03","sku":"DWXH-255067","sc_id":68,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bird Of Paradise Orchid | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bird Of Paradise, color:White, White, Greige, Linen, Alabaster, Oatmeal, Birds, Leaves-And-Trees, Orchid, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Bird Of Paradise in Orchid is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Orchid</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bird Of Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0126-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216654_b9d3.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216652_f707.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216653_4ee3.jpg","alt":"Bird Of Paradise"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216654_1_SAW0126_03_SANDERSON_Bird_Of_Paradise_WALLPAPER_aedf.jpg","alt":"Bird Of Paradise"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255067","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255067-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0126-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bird Of Paradise"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Orchid"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Orchid"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f3f3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5af9c"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f3f3\",\"pct\":32.8,\"name\":\"White\"},{\"hex\":\"#b5af9c\",\"pct\":19.1,\"name\":\"Greige\"},{\"hex\":\"#dad3c5\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#e9e7e2\",\"pct\":15.2,\"name\":\"Alabaster\"},{\"hex\":\"#c9cbae\",\"pct\":14.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0127-03","sku":"DWXH-255068","sc_id":69,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Calathea Orchid/Eucalyptus | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Calathea, color:Alabaster, Alabaster, Ochre, Cream, Sand, Linen, Botanical, Leaves-And-Trees, Orchid/Eucalyptus, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Calathea in Orchid/Eucalyptus is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Ochre, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Orchid/Eucalyptus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0127-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216631_3286.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216630_2f50.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216632_1_SAW0127_03_SANDERSON_Calathea_WALLPAPER_12c2.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216632_6984.jpg","alt":"Calathea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255068","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255068-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Calathea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Orchid/Eucalyptus"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Orchid/Eucalyptus"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1eade"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8749"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ece6d7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1eade\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#9b8749\",\"pct\":21.2,\"name\":\"Ochre\"},{\"hex\":\"#ece6d7\",\"pct\":15.7,\"name\":\"Cream\"},{\"hex\":\"#c4bd8b\",\"pct\":15,\"name\":\"Sand\"},{\"hex\":\"#dcd6ba\",\"pct\":12.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0139-05","sku":"DWXH-255069","sc_id":70,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Cantaloupe Bastille | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cantaloupe, color:Linen, Linen, Oatmeal, Cream, Botanical, Leaves-And-Trees, Bastille, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Cantaloupe in Bastille is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bastille</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0139-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3f1a.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_c45b.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_43e5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_f672.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216764_1_SAW0139_05_SANDERSON_Cantaloupe_WALLPAPER_eb8f.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216764_2_SAW0139_05_SANDERSON_Cantaloupe_WALLPAPER_1243.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216764_3_SAW0139_05_SANDERSON_Cantaloupe_WALLPAPER_12b4.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216764_4_SAW0139_05_SANDERSON_Cantaloupe_WALLPAPER_44c8.jpg","alt":"Cantaloupe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255069","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255069-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cantaloupe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bastille"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bastille"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dad4bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d3bc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3e0d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dad4bf\",\"pct\":59.6,\"name\":\"Linen\"},{\"hex\":\"#d8d3bc\",\"pct\":26.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e3e0d2\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0139-03","sku":"DWXH-255070","sc_id":71,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Cantaloupe Caraway | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cantaloupe, color:Linen, Linen, Oatmeal, Cream, Botanical, Leaves-And-Trees, Caraway, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Cantaloupe in Caraway is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Caraway</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0139-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3f1a.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_c45b.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_1_SAW0139_03_SANDERSON_Cantaloupe_WALLPAPER_010c.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_2_SAW0139_03_SANDERSON_Cantaloupe_WALLPAPER_a860.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_3_SAW0139_03_SANDERSON_Cantaloupe_WALLPAPER_1548.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_43e5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_4_SAW0139_03_SANDERSON_Cantaloupe_WALLPAPER_8b39.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_f672.jpg","alt":"Cantaloupe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255070","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255070-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cantaloupe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Caraway"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Caraway"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dad4bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d3bc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3e0d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dad4bf\",\"pct\":59.6,\"name\":\"Linen\"},{\"hex\":\"#d8d3bc\",\"pct\":26.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e3e0d2\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0139-04","sku":"DWXH-255071","sc_id":72,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Cantaloupe Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cantaloupe, color:Linen, Linen, Oatmeal, Cream, Botanical, Leaves-And-Trees, Clay, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Cantaloupe in Clay is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0139-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3f1a.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_c45b.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_43e5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_1_SAW0139_04_SANDERSON_Cantaloupe_WALLPAPER_4f79.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_2_SAW0139_04_SANDERSON_Cantaloupe_WALLPAPER_5524.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_3_SAW0139_04_SANDERSON_Cantaloupe_WALLPAPER_9fec.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_4_SAW0139_04_SANDERSON_Cantaloupe_WALLPAPER_7a38.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_f672.jpg","alt":"Cantaloupe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255071","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255071-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cantaloupe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dad4bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d3bc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3e0d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dad4bf\",\"pct\":59.6,\"name\":\"Linen\"},{\"hex\":\"#d8d3bc\",\"pct\":26.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e3e0d2\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0139-02","sku":"DWXH-255072","sc_id":73,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Cantaloupe English Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cantaloupe, color:Linen, Linen, Oatmeal, Cream, Botanical, Leaves-And-Trees, English Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Cantaloupe in English Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">English Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0139-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3f1a.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_1_SAW0139_02_SANDERSON_Cantaloupe_WALLPAPER_81f7.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_2_SAW0139_02_SANDERSON_Cantaloupe_WALLPAPER_68d8.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_3_SAW0139_02_SANDERSON_Cantaloupe_WALLPAPER_6bc5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_4_SAW0139_02_SANDERSON_Cantaloupe_WALLPAPER_3f0e.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_c45b.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_43e5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_f672.jpg","alt":"Cantaloupe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255072","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255072-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cantaloupe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"English Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"English Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dad4bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d3bc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3e0d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dad4bf\",\"pct\":59.6,\"name\":\"Linen\"},{\"hex\":\"#d8d3bc\",\"pct\":26.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e3e0d2\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0139-01","sku":"DWXH-255073","sc_id":74,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Cantaloupe Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cantaloupe, color:Linen, Linen, Oatmeal, Cream, Botanical, Leaves-And-Trees, Stone, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Cantaloupe in Stone is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cantaloupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0139-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3f1a.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_1_SAW0139_01_SANDERSON_Cantaloupe_WALLPAPER_110d.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_2_SAW0139_01_SANDERSON_Cantaloupe_WALLPAPER_d589.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_3_SAW0139_01_SANDERSON_Cantaloupe_WALLPAPER_982f.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216760_4_SAW0139_01_SANDERSON_Cantaloupe_WALLPAPER_9466.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216761_c45b.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216762_43e5.jpg","alt":"Cantaloupe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216763_f672.jpg","alt":"Cantaloupe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255073","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255073-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0139-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cantaloupe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dad4bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d3bc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3e0d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dad4bf\",\"pct\":59.6,\"name\":\"Linen\"},{\"hex\":\"#d8d3bc\",\"pct\":26.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e3e0d2\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0224-01","sku":"DWXH-255074","sc_id":75,"settlement_verdict":"CLEAR","retail":621,"product":{"title":"Carpet Garden Paradise | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Carpet Garden, color:Sage, Sage, Olive, Stone, Oatmeal, Linen, Landscapes, Paradise","body_html":"<div class=\"sanderson-product\">\n<p>Carpet Garden in Paradise is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Carpet Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Paradise</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Carpet Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0224-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217519_97ef.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217518_1_SAW0224_01_SANDERSON_Carpet_Garden_WALLPAPER_4c9c.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217518_2_SAW0224_01_SANDERSON_Carpet_Garden_WALLPAPER_c548.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217518_d61c.jpg","alt":"Carpet Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255074","price":"621.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255074-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0224-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0224-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Carpet Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Paradise"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Paradise"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#999e89"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#647c5c"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#abb49e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#999e89\",\"pct\":32.6,\"name\":\"Sage\"},{\"hex\":\"#647c5c\",\"pct\":20,\"name\":\"Olive\"},{\"hex\":\"#abb49e\",\"pct\":18.9,\"name\":\"Stone\"},{\"hex\":\"#c4c8b4\",\"pct\":15.6,\"name\":\"Oatmeal\"},{\"hex\":\"#dcddca\",\"pct\":12.9,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0224-02","sku":"DWXH-255075","sc_id":76,"settlement_verdict":"CLEAR","retail":621,"product":{"title":"Carpet Garden Sanctuary | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Carpet Garden, color:Sage, Sage, Olive, Stone, Oatmeal, Linen, Landscapes, Sanctuary","body_html":"<div class=\"sanderson-product\">\n<p>Carpet Garden in Sanctuary is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Olive, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Carpet Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sanctuary</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Carpet Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0224-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217519_97ef.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217518_d61c.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217519_1_SAW0224_02_SANDERSON_Carpet_Garden_WALLPAPER_307c.jpg","alt":"Carpet Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217519_2_SAW0224_02_SANDERSON_Carpet_Garden_WALLPAPER_2ab9.jpg","alt":"Carpet Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255075","price":"621.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255075-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0224-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0224-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Carpet Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sanctuary"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sanctuary"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#999e89"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#647c5c"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#abb49e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#999e89\",\"pct\":32.6,\"name\":\"Sage\"},{\"hex\":\"#647c5c\",\"pct\":20,\"name\":\"Olive\"},{\"hex\":\"#abb49e\",\"pct\":18.9,\"name\":\"Stone\"},{\"hex\":\"#c4c8b4\",\"pct\":15.6,\"name\":\"Oatmeal\"},{\"hex\":\"#dcddca\",\"pct\":12.9,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0140-02","sku":"DWXH-255076","sc_id":77,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Grass | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Grass","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Grass is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grass</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255076","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255076-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grass"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grass"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0140-01","sku":"DWXH-255077","sc_id":78,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255077","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255077-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0140-04","sku":"DWXH-255078","sc_id":79,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Silver","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Silver is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255078","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255078-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0140-06","sku":"DWXH-255079","sc_id":80,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Taupe | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Taupe","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Taupe is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Taupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255079","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255079-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0140-05","sku":"DWXH-255080","sc_id":81,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Teal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Teal","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Teal is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255080","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255080-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0159-02","sku":"DWXH-255081","sc_id":82,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Caverley Gold Metallic/Gardenia Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caverley, color:Charcoal, Charcoal, Olive, Navy, Sand, Linen, Leaves-And-Trees, Gold Metallic/Gardenia Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Caverley in Gold Metallic/Gardenia Green is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive, Navy. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold Metallic/Gardenia Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0159-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_5f7d.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_1e65.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_1_SAW0159_02_SANDERSON_Caverley_WALLPAPER_3c17.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_2_SAW0159_02_SANDERSON_Caverley_WALLPAPER_40a7.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_3_SAW0159_02_SANDERSON_Caverley_WALLPAPER_f99b.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_4455.jpg","alt":"Caverley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255081","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255081-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caverley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold Metallic/Gardenia Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold Metallic/Gardenia Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#27333e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#877258"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Navy"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#22303d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#27333e\",\"pct\":35.9,\"name\":\"Charcoal\"},{\"hex\":\"#877258\",\"pct\":19.5,\"name\":\"Olive\"},{\"hex\":\"#22303d\",\"pct\":17.1,\"name\":\"Navy\"},{\"hex\":\"#c2ac89\",\"pct\":15.3,\"name\":\"Sand\"},{\"hex\":\"#e7dfc1\",\"pct\":12.2,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0159-03","sku":"DWXH-255082","sc_id":83,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Caverley Indigo Blue/Rowan Berry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caverley, color:Charcoal, Charcoal, Olive, Navy, Sand, Linen, Leaves-And-Trees, Indigo Blue/Rowan Berry, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Caverley in Indigo Blue/Rowan Berry is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive, Navy. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo Blue/Rowan Berry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0159-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_5f7d.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_1e65.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_4455.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_1_SAW0159_03_SANDERSON_Caverley_WALLPAPER_7faf.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_2_SAW0159_03_SANDERSON_Caverley_WALLPAPER_ed95.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_3_SAW0159_03_SANDERSON_Caverley_WALLPAPER_a5d9.jpg","alt":"Caverley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255082","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255082-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caverley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo Blue/Rowan Berry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo Blue/Rowan Berry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#27333e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#877258"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Navy"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#22303d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#27333e\",\"pct\":35.9,\"name\":\"Charcoal\"},{\"hex\":\"#877258\",\"pct\":19.5,\"name\":\"Olive\"},{\"hex\":\"#22303d\",\"pct\":17.1,\"name\":\"Navy\"},{\"hex\":\"#c2ac89\",\"pct\":15.3,\"name\":\"Sand\"},{\"hex\":\"#e7dfc1\",\"pct\":12.2,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0159-01","sku":"DWXH-255083","sc_id":84,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Caverley Rose/French Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caverley, color:Charcoal, Charcoal, Olive, Navy, Sand, Linen, Leaves-And-Trees, Rose/French Blue, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Caverley in Rose/French Blue is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive, Navy. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/French Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caverley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0159-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217037_5f7d.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_1_SAW0159_01_SANDERSON_Caverley_WALLPAPER_a706.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_1e65.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_2_SAW0159_01_SANDERSON_Caverley_WALLPAPER_e33c.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217035_3_SAW0159_01_SANDERSON_Caverley_WALLPAPER_7164.jpg","alt":"Caverley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217036_4455.jpg","alt":"Caverley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255083","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255083-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0159-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caverley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/French Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/French Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#27333e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#877258"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Navy"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#22303d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#27333e\",\"pct\":35.9,\"name\":\"Charcoal\"},{\"hex\":\"#877258\",\"pct\":19.5,\"name\":\"Olive\"},{\"hex\":\"#22303d\",\"pct\":17.1,\"name\":\"Navy\"},{\"hex\":\"#c2ac89\",\"pct\":15.3,\"name\":\"Sand\"},{\"hex\":\"#e7dfc1\",\"pct\":12.2,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0038-01","sku":"DWXH-255084","sc_id":85,"settlement_verdict":"REVIEW-VISION","retail":284,"product":{"title":"Chelsea Pink/Celadon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chelsea, color:Stone, Stone, Alabaster, Taupe, Oatmeal, Mist, White, Florals, Pink/Celadon","body_html":"<div class=\"sanderson-product\">\n<p>Chelsea in Pink/Celadon is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Alabaster, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chelsea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pink/Celadon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chelsea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0038-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214606_ae21.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214604_1_SAW0038_01_SANDERSON_Chelsea_WALLPAPER_ed38.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214604_2_SAW0038_01_SANDERSON_Chelsea_WALLPAPER_5fb7.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214604_fbf5.jpg","alt":"Chelsea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255084","price":"284.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255084-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0038-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0038-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chelsea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pink/Celadon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pink/Celadon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#9dc0a8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"17.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ebe2dd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#98918b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#9dc0a8\",\"pct\":17.5,\"name\":\"Stone\"},{\"hex\":\"#ebe2dd\",\"pct\":17.4,\"name\":\"Alabaster\"},{\"hex\":\"#98918b\",\"pct\":17.2,\"name\":\"Taupe\"},{\"hex\":\"#d7c2b8\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#d0dbc9\",\"pct\":16.5,\"name\":\"Mist\"},{\"hex\":\"#eef0ee\",\"pct\":14.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0038-02","sku":"DWXH-255085","sc_id":86,"settlement_verdict":"REVIEW-VISION","retail":284,"product":{"title":"Chelsea White/Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chelsea, color:Stone, Stone, Alabaster, Taupe, Oatmeal, Mist, White, Florals, White/Pink","body_html":"<div class=\"sanderson-product\">\n<p>Chelsea in White/Pink is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Alabaster, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chelsea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">White/Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chelsea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0038-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214606_ae21.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214604_fbf5.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214606_1_SAW0038_02_SANDERSON_Chelsea_WALLPAPER_8ccc.jpg","alt":"Chelsea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214606_2_SAW0038_02_SANDERSON_Chelsea_WALLPAPER_4bd0.jpg","alt":"Chelsea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255085","price":"284.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255085-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0038-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0038-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chelsea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"White/Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"White/Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#9dc0a8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"17.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ebe2dd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#98918b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#9dc0a8\",\"pct\":17.5,\"name\":\"Stone\"},{\"hex\":\"#ebe2dd\",\"pct\":17.4,\"name\":\"Alabaster\"},{\"hex\":\"#98918b\",\"pct\":17.2,\"name\":\"Taupe\"},{\"hex\":\"#d7c2b8\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#d0dbc9\",\"pct\":16.5,\"name\":\"Mist\"},{\"hex\":\"#eef0ee\",\"pct\":14.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0045-03","sku":"DWXH-255086","sc_id":87,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Chestnut Tree Coral/Bayleaf | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chestnut Tree, color:Linen, Linen, Oatmeal, Alabaster, Florals, Leaves-And-Trees, Coral/Bayleaf, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chestnut Tree in Coral/Bayleaf is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Coral/Bayleaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0045-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_555b.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_687e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_25d9.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_1_SAW0045_03_SANDERSON_Chestnut_Tree_WALLPAPER_de71.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_2_SAW0045_03_SANDERSON_Chestnut_Tree_WALLPAPER_bba6.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_3_SAW0045_03_SANDERSON_Chestnut_Tree_WALLPAPER_5644.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_e89e.jpg","alt":"Chestnut Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255086","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255086-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chestnut Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Coral/Bayleaf"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Coral/Bayleaf"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dadccf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c8b5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5e3da"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dadccf\",\"pct\":74,\"name\":\"Linen\"},{\"hex\":\"#c8c8b5\",\"pct\":16.3,\"name\":\"Oatmeal\"},{\"hex\":\"#e5e3da\",\"pct\":9.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0045-02","sku":"DWXH-255087","sc_id":88,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Chestnut Tree Grey Blue/Sage | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chestnut Tree, color:Linen, Linen, Oatmeal, Alabaster, Florals, Leaves-And-Trees, Grey Blue/Sage, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chestnut Tree in Grey Blue/Sage is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey Blue/Sage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0045-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_555b.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_687e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_1_SAW0045_02_SANDERSON_Chestnut_Tree_WALLPAPER_978f.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_25d9.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_2_SAW0045_02_SANDERSON_Chestnut_Tree_WALLPAPER_a8ab.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_3_SAW0045_02_SANDERSON_Chestnut_Tree_WALLPAPER_36c8.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_e89e.jpg","alt":"Chestnut Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255087","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255087-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chestnut Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey Blue/Sage"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey Blue/Sage"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dadccf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c8b5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5e3da"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dadccf\",\"pct\":74,\"name\":\"Linen\"},{\"hex\":\"#c8c8b5\",\"pct\":16.3,\"name\":\"Oatmeal\"},{\"hex\":\"#e5e3da\",\"pct\":9.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0045-01","sku":"DWXH-255088","sc_id":89,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Chestnut Tree Lemon/Lettuce | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chestnut Tree, color:Linen, Linen, Oatmeal, Alabaster, Florals, Leaves-And-Trees, Lemon/Lettuce, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chestnut Tree in Lemon/Lettuce is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lemon/Lettuce</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0045-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_555b.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_1_SAW0045_01_SANDERSON_Chestnut_Tree_WALLPAPER_f8b8.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_2_SAW0045_01_SANDERSON_Chestnut_Tree_WALLPAPER_815d.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_3_SAW0045_01_SANDERSON_Chestnut_Tree_WALLPAPER_835f.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_4_SAW0045_01_SANDERSON_Chestnut_Tree_WALLPAPER_015e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_687e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_25d9.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_e89e.jpg","alt":"Chestnut Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255088","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255088-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chestnut Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lemon/Lettuce"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lemon/Lettuce"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dadccf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c8b5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5e3da"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dadccf\",\"pct\":74,\"name\":\"Linen\"},{\"hex\":\"#c8c8b5\",\"pct\":16.3,\"name\":\"Oatmeal\"},{\"hex\":\"#e5e3da\",\"pct\":9.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0045-04","sku":"DWXH-255089","sc_id":90,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Chestnut Tree Seaspray/Peony | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chestnut Tree, color:Linen, Linen, Oatmeal, Alabaster, Florals, Leaves-And-Trees, Seaspray/Peony, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chestnut Tree in Seaspray/Peony is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Seaspray/Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chestnut Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0045-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_555b.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215707_687e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215708_25d9.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215709_e89e.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_1_SAW0045_04_SANDERSON_Chestnut_Tree_WALLPAPER_fee9.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_2_SAW0045_04_SANDERSON_Chestnut_Tree_WALLPAPER_c560.jpg","alt":"Chestnut Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215710_3_SAW0045_04_SANDERSON_Chestnut_Tree_WALLPAPER_53c7.jpg","alt":"Chestnut Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255089","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255089-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0045-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chestnut Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Seaspray/Peony"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Seaspray/Peony"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dadccf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c8b5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5e3da"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dadccf\",\"pct\":74,\"name\":\"Linen\"},{\"hex\":\"#c8c8b5\",\"pct\":16.3,\"name\":\"Oatmeal\"},{\"hex\":\"#e5e3da\",\"pct\":9.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0170-01","sku":"DWXH-255090","sc_id":91,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Chinoiserie Hall Chinese Green/Lotus Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chinoiserie Hall, color:Wedgwood, Wedgwood, Grey, Denim, Linen, Stone, Leaves-And-Trees, Chinese Green/Lotus Pink, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chinoiserie Hall in Chinese Green/Lotus Pink is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Grey, Denim. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chinese Green/Lotus Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0170-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217111_4ffe.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217110_0c29.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217110_1_SAW0170_01_SANDERSON_Chinoiserie_Hall_WALLPAPER_96d8.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217112_5505.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217113_70f9.jpg","alt":"Chinoiserie Hall"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255090","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255090-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chinoiserie Hall"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chinese Green/Lotus Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chinese Green/Lotus Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#799ec9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8c8dac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#567a7c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#799ec9\",\"pct\":35,\"name\":\"Wedgwood\"},{\"hex\":\"#8c8dac\",\"pct\":23.2,\"name\":\"Grey\"},{\"hex\":\"#567a7c\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#ded0cd\",\"pct\":14.8,\"name\":\"Linen\"},{\"hex\":\"#92a4c3\",\"pct\":5.7,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0170-03","sku":"DWXH-255091","sc_id":92,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Chinoiserie Hall Dawn Blue/Persimmon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chinoiserie Hall, color:Wedgwood, Wedgwood, Grey, Denim, Linen, Stone, Leaves-And-Trees, Dawn Blue/Persimmon, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chinoiserie Hall in Dawn Blue/Persimmon is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Grey, Denim. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dawn Blue/Persimmon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0170-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217111_4ffe.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217110_0c29.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217112_1_SAW0170_03_SANDERSON_Chinoiserie_Hall_WALLPAPER_67b0.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217112_5505.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217113_70f9.jpg","alt":"Chinoiserie Hall"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255091","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255091-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chinoiserie Hall"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dawn Blue/Persimmon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dawn Blue/Persimmon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#799ec9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8c8dac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#567a7c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#799ec9\",\"pct\":35,\"name\":\"Wedgwood\"},{\"hex\":\"#8c8dac\",\"pct\":23.2,\"name\":\"Grey\"},{\"hex\":\"#567a7c\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#ded0cd\",\"pct\":14.8,\"name\":\"Linen\"},{\"hex\":\"#92a4c3\",\"pct\":5.7,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0170-04","sku":"DWXH-255092","sc_id":93,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Chinoiserie Hall Linen/ Chintz | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chinoiserie Hall, color:Wedgwood, Wedgwood, Grey, Denim, Linen, Stone, Leaves-And-Trees, Linen/ Chintz, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chinoiserie Hall in Linen/ Chintz is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Grey, Denim. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/ Chintz</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0170-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217111_4ffe.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217110_0c29.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217112_5505.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217113_1_SAW0170_04_SANDERSON_Chinoiserie_Hall_WALLPAPER_077c.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217113_70f9.jpg","alt":"Chinoiserie Hall"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255092","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255092-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chinoiserie Hall"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/ Chintz"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/ Chintz"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#799ec9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8c8dac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#567a7c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#799ec9\",\"pct\":35,\"name\":\"Wedgwood\"},{\"hex\":\"#8c8dac\",\"pct\":23.2,\"name\":\"Grey\"},{\"hex\":\"#567a7c\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#ded0cd\",\"pct\":14.8,\"name\":\"Linen\"},{\"hex\":\"#92a4c3\",\"pct\":5.7,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0086-01","sku":"DWXH-255093","sc_id":94,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Chiswick Grove Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chiswick Grove, color:Mist, Mist, Alabaster, Birds, Florals, Leaves-And-Trees, Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chiswick Grove in Gold is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0086-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_8127.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_1_SAW0086_01_SANDERSON_Chiswick_Grove_WALLPAPER_d071.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_2_SAW0086_01_SANDERSON_Chiswick_Grove_WALLPAPER_d902.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_d9a2.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_6136.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_3774.jpg","alt":"Chiswick Grove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255093","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255093-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chiswick Grove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0d4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdddb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0d4d1\",\"pct\":85.1,\"name\":\"Mist\"},{\"hex\":\"#dcdddb\",\"pct\":14.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0086-02","sku":"DWXH-255094","sc_id":95,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Chiswick Grove Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chiswick Grove, color:Mist, Mist, Alabaster, Birds, Florals, Leaves-And-Trees, Linen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chiswick Grove in Linen is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0086-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_8127.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_d9a2.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_1_SAW0086_02_SANDERSON_Chiswick_Grove_WALLPAPER_b4a1.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_2_SAW0086_02_SANDERSON_Chiswick_Grove_WALLPAPER_cce3.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_6136.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_3774.jpg","alt":"Chiswick Grove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255094","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255094-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chiswick Grove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0d4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdddb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0d4d1\",\"pct\":85.1,\"name\":\"Mist\"},{\"hex\":\"#dcdddb\",\"pct\":14.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0086-03","sku":"DWXH-255095","sc_id":96,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Chiswick Grove Sage | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chiswick Grove, color:Mist, Mist, Alabaster, Birds, Florals, Leaves-And-Trees, Sage, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chiswick Grove in Sage is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0086-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_8127.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_d9a2.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_6136.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_1_SAW0086_03_SANDERSON_Chiswick_Grove_WALLPAPER_3935.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_2_SAW0086_03_SANDERSON_Chiswick_Grove_WALLPAPER_f938.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_3774.jpg","alt":"Chiswick Grove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255095","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255095-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chiswick Grove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0d4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdddb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0d4d1\",\"pct\":85.1,\"name\":\"Mist\"},{\"hex\":\"#dcdddb\",\"pct\":14.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0086-04","sku":"DWXH-255096","sc_id":97,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Chiswick Grove Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chiswick Grove, color:Mist, Mist, Alabaster, Birds, Florals, Leaves-And-Trees, Silver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chiswick Grove in Silver is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chiswick Grove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0086-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_8127.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216385_d9a2.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216386_6136.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216387_3774.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_1_SAW0086_04_SANDERSON_Chiswick_Grove_WALLPAPER_a844.jpg","alt":"Chiswick Grove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216388_2_SAW0086_04_SANDERSON_Chiswick_Grove_WALLPAPER_b7de.jpg","alt":"Chiswick Grove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255096","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255096-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0086-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chiswick Grove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0d4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdddb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0d4d1\",\"pct\":85.1,\"name\":\"Mist\"},{\"hex\":\"#dcdddb\",\"pct\":14.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0022-03","sku":"DWXH-255097","sc_id":98,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Clementine Chintz | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Clementine, color:Alabaster, Alabaster, Cream, Greige, Florals, Chintz","body_html":"<div class=\"sanderson-product\">\n<p>Clementine in Chintz is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chintz</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0022-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213387_a380.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213386_75ad.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_1_SAW0022_03_SANDERSON_Clementine_WALLPAPER_097a.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_2_SAW0022_03_SANDERSON_Clementine_WALLPAPER_039f.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_3cd4.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213389_cdc4.jpg","alt":"Clementine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255097","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255097-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Clementine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chintz"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chintz"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2ebe1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4ded2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7b6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2ebe1\",\"pct\":55.4,\"name\":\"Alabaster\"},{\"hex\":\"#e4ded2\",\"pct\":26.2,\"name\":\"Cream\"},{\"hex\":\"#c7b6af\",\"pct\":18.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0022-04","sku":"DWXH-255098","sc_id":99,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Clementine Delft Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Clementine, color:Alabaster, Alabaster, Cream, Greige, Florals, Delft Blue","body_html":"<div class=\"sanderson-product\">\n<p>Clementine in Delft Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Delft Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0022-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213387_a380.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213386_75ad.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_3cd4.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213389_cdc4.jpg","alt":"Clementine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255098","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255098-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Clementine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Delft Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Delft Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2ebe1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4ded2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7b6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2ebe1\",\"pct\":55.4,\"name\":\"Alabaster\"},{\"hex\":\"#e4ded2\",\"pct\":26.2,\"name\":\"Cream\"},{\"hex\":\"#c7b6af\",\"pct\":18.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0022-01","sku":"DWXH-255099","sc_id":100,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Clementine Dusky Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Clementine, color:Alabaster, Alabaster, Cream, Greige, Florals, Dusky Pink","body_html":"<div class=\"sanderson-product\">\n<p>Clementine in Dusky Pink is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dusky Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0022-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213387_a380.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213386_75ad.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_3cd4.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213389_cdc4.jpg","alt":"Clementine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255099","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255099-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Clementine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dusky Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dusky Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2ebe1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4ded2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7b6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2ebe1\",\"pct\":55.4,\"name\":\"Alabaster\"},{\"hex\":\"#e4ded2\",\"pct\":26.2,\"name\":\"Cream\"},{\"hex\":\"#c7b6af\",\"pct\":18.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0022-02","sku":"DWXH-255100","sc_id":101,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Clementine Indienne | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Clementine, color:Alabaster, Alabaster, Cream, Greige, Florals, Indienne","body_html":"<div class=\"sanderson-product\">\n<p>Clementine in Indienne is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indienne</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Clementine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0022-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213387_a380.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213386_75ad.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213388_3cd4.jpg","alt":"Clementine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213389_cdc4.jpg","alt":"Clementine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255100","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255100-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0022-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Clementine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indienne"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indienne"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2ebe1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4ded2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7b6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2ebe1\",\"pct\":55.4,\"name\":\"Alabaster\"},{\"hex\":\"#e4ded2\",\"pct\":26.2,\"name\":\"Cream\"},{\"hex\":\"#c7b6af\",\"pct\":18.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0109-01","sku":"DWXH-255101","sc_id":102,"settlement_verdict":"CLEAR","retail":139,"product":{"title":"Cobble (Wallcovering) Driftwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cobble (Wallcovering), color:Cream, Cream, Alabaster, Linen, Driftwood","body_html":"<div class=\"sanderson-product\">\n<p>Cobble (Wallcovering) in Driftwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cobble (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cobble (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0109-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216581_8cbf.jpg","alt":"Cobble (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216581_1_SAW0109_01_SANDERSON_Cobble_WALLPAPER_6704.jpg","alt":"Cobble (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255101","price":"139.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255101-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0109-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0109-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cobble (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e3d7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"47.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e5da"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"34.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dddac8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e3d7\",\"pct\":47.3,\"name\":\"Cream\"},{\"hex\":\"#e8e5da\",\"pct\":34.8,\"name\":\"Alabaster\"},{\"hex\":\"#dddac8\",\"pct\":17.8,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0087-03","sku":"DWXH-255102","sc_id":103,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Courtney Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Courtney, color:Beige, Beige, Linen, Oatmeal, Gold","body_html":"<div class=\"sanderson-product\">\n<p>Courtney in Gold is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0087-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216407_2a1c.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216405_5391.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216406_e0ad.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216407_1_SAW0087_03_SANDERSON_Courtney_WALLPAPER_9387.jpg","alt":"Courtney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255102","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255102-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Courtney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdbca2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcd0be"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdbca2\",\"pct\":73.2,\"name\":\"Beige\"},{\"hex\":\"#dcd0be\",\"pct\":14.6,\"name\":\"Linen\"},{\"hex\":\"#d4c6af\",\"pct\":12.2,\"name\":\"Oatmeal\"}]"}]}
+{"mfr_sku":"SAW0087-02","sku":"DWXH-255103","sc_id":104,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Courtney Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Courtney, color:Beige, Beige, Linen, Oatmeal, Stone","body_html":"<div class=\"sanderson-product\">\n<p>Courtney in Stone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0087-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216407_2a1c.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216405_5391.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216406_1_SAW0087_02_SANDERSON_Courtney_WALLPAPER_bc48.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216406_e0ad.jpg","alt":"Courtney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255103","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255103-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Courtney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdbca2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcd0be"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdbca2\",\"pct\":73.2,\"name\":\"Beige\"},{\"hex\":\"#dcd0be\",\"pct\":14.6,\"name\":\"Linen\"},{\"hex\":\"#d4c6af\",\"pct\":12.2,\"name\":\"Oatmeal\"}]"}]}
+{"mfr_sku":"SAW0087-01","sku":"DWXH-255104","sc_id":105,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Courtney Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Courtney, color:Beige, Beige, Linen, Oatmeal, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Courtney in Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Courtney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0087-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216407_2a1c.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216405_1_SAW0087_01_SANDERSON_Courtney_WALLPAPER_f6a2.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216405_5391.jpg","alt":"Courtney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216406_e0ad.jpg","alt":"Courtney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255104","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255104-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0087-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Courtney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdbca2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcd0be"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdbca2\",\"pct\":73.2,\"name\":\"Beige\"},{\"hex\":\"#dcd0be\",\"pct\":14.6,\"name\":\"Linen\"},{\"hex\":\"#d4c6af\",\"pct\":12.2,\"name\":\"Oatmeal\"}]"}]}
+{"mfr_sku":"SAW0001-01","sku":"DWXH-255105","sc_id":106,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Cowparsley Amethyst | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cowparsley, color:Sand, Sand, Beige, Linen, Florals, Amethyst","body_html":"<div class=\"sanderson-product\">\n<p>Cowparsley in Amethyst is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cowparsley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Amethyst</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cowparsley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0001-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWCO105_3fdc.jpg","alt":"Cowparsley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWCO103_578b.jpg","alt":"Cowparsley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255105","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255105-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0001-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0001-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cowparsley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Amethyst"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Amethyst"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5cd67"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"69.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c095"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e8dead"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5cd67\",\"pct\":69.5,\"name\":\"Sand\"},{\"hex\":\"#c6c095\",\"pct\":17.1,\"name\":\"Beige\"},{\"hex\":\"#e8dead\",\"pct\":13.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0001-02","sku":"DWXH-255106","sc_id":107,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Cowparsley Chinese Yellow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cowparsley, color:Sand, Sand, Beige, Linen, Florals, Chinese Yellow","body_html":"<div class=\"sanderson-product\">\n<p>Cowparsley in Chinese Yellow is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cowparsley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chinese Yellow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cowparsley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0001-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWCO105_3fdc.jpg","alt":"Cowparsley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWCO103_578b.jpg","alt":"Cowparsley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255106","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255106-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0001-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0001-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cowparsley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chinese Yellow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chinese Yellow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5cd67"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"69.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c095"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e8dead"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5cd67\",\"pct\":69.5,\"name\":\"Sand\"},{\"hex\":\"#c6c095\",\"pct\":17.1,\"name\":\"Beige\"},{\"hex\":\"#e8dead\",\"pct\":13.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0171-02","sku":"DWXH-255107","sc_id":108,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Crane &Amp; Frog & Frog Honey/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Crane &Amp; Frog, color:Sand, Sand, Gold, Oatmeal, Cream, Animals, & Frog Honey/Olive","body_html":"<div class=\"sanderson-product\">\n<p>Crane &amp; Frog in & Frog Honey/Olive is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Frog Honey/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0171-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217124_cffb.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217123_4c0a.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217124_1_SAW0171_02_SANDERSON_Crane_and_Frog_WALLPAPER_660d.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217125_b962.jpg","alt":"Crane &Amp; Frog"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255107","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255107-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Crane &Amp; Frog"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Frog Honey/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Frog Honey/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efce91"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bf8e55"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f5d596"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efce91\",\"pct\":48,\"name\":\"Sand\"},{\"hex\":\"#bf8e55\",\"pct\":20,\"name\":\"Gold\"},{\"hex\":\"#f5d596\",\"pct\":19.2,\"name\":\"Oatmeal\"},{\"hex\":\"#f3e2bf\",\"pct\":12.8,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0171-01","sku":"DWXH-255108","sc_id":109,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Crane &Amp; Frog & Frog Ink Black/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Crane &Amp; Frog, color:Sand, Sand, Gold, Oatmeal, Cream, Animals, & Frog Ink Black/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Crane &amp; Frog in & Frog Ink Black/Multi is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Frog Ink Black/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0171-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217124_cffb.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217123_1_SAW0171_01_SANDERSON_Crane_and_Frog_WALLPAPER_1dc9.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217123_4c0a.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217125_b962.jpg","alt":"Crane &Amp; Frog"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255108","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255108-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Crane &Amp; Frog"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Frog Ink Black/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Frog Ink Black/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efce91"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bf8e55"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f5d596"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efce91\",\"pct\":48,\"name\":\"Sand\"},{\"hex\":\"#bf8e55\",\"pct\":20,\"name\":\"Gold\"},{\"hex\":\"#f5d596\",\"pct\":19.2,\"name\":\"Oatmeal\"},{\"hex\":\"#f3e2bf\",\"pct\":12.8,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0206-01","sku":"DWXH-255109","sc_id":110,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Cupid`S Beau Florin/Madder | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cupid`S Beau, color:Stone, Stone, Linen, Greige, Taupe, Florin/Madder","body_html":"<div class=\"sanderson-product\">\n<p>Cupid`s Beau in Florin/Madder is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Florin/Madder</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0206-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217312_077e.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217312_1_SAW0206_01_SANDERSON_Cupids_Beau_WALLPAPER_b1bf.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217312_2_SAW0206_01_SANDERSON_Cupids_Beau_WALLPAPER_28da.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217312_3_SAW0206_01_SANDERSON_Cupids_Beau_WALLPAPER_2097.jpg","alt":"Cupid`S Beau"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255109","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255109-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0206-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0206-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cupid`S Beau"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Florin/Madder"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Florin/Madder"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aca78f"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dadbcc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bebea9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aca78f\",\"pct\":64.2,\"name\":\"Stone\"},{\"hex\":\"#dadbcc\",\"pct\":12.3,\"name\":\"Linen\"},{\"hex\":\"#bebea9\",\"pct\":11.9,\"name\":\"Greige\"},{\"hex\":\"#a09982\",\"pct\":11.5,\"name\":\"Taupe\"}]"}]}
+{"mfr_sku":"SAW0238-01","sku":"DWXH-255110","sc_id":111,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Dabu Raw Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dabu, color:Sage, Sage, Beige, Raw Honey","body_html":"<div class=\"sanderson-product\">\n<p>Dabu in Raw Honey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dabu</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raw Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dabu</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0238-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217465_2053.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217462_5da2.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217463_6a53.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217464_cea7.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217466_196d.jpg","alt":"Dabu"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255110","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255110-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0238-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0238-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dabu"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raw Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raw Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#9eb37a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bdc9a5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#9eb37a\",\"pct\":87.4,\"name\":\"Sage\"},{\"hex\":\"#bdc9a5\",\"pct\":12.7,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0179-02","sku":"DWXH-255111","sc_id":112,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Dallimore Fawn/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dallimore, color:Mist, Mist, Sky, Duck Egg, Alabaster, Fawn/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Dallimore in Fawn/Multi is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Sky, Duck Egg. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fawn/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0179-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217232_7e2d.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217233_0605.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217234_3cbf.jpg","alt":"Dallimore"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255111","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255111-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dallimore"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fawn/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fawn/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b9cacf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b9d2e1"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#81afc8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b9cacf\",\"pct\":39.1,\"name\":\"Mist\"},{\"hex\":\"#b9d2e1\",\"pct\":31,\"name\":\"Sky\"},{\"hex\":\"#81afc8\",\"pct\":19.1,\"name\":\"Duck Egg\"},{\"hex\":\"#e0e8ea\",\"pct\":10.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0179-01","sku":"DWXH-255112","sc_id":113,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Dallimore Indigo/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dallimore, color:Mist, Mist, Sky, Duck Egg, Alabaster, Indigo/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Dallimore in Indigo/Multi is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Sky, Duck Egg. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0179-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217232_7e2d.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217233_0605.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217234_3cbf.jpg","alt":"Dallimore"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255112","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255112-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dallimore"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b9cacf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b9d2e1"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#81afc8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b9cacf\",\"pct\":39.1,\"name\":\"Mist\"},{\"hex\":\"#b9d2e1\",\"pct\":31,\"name\":\"Sky\"},{\"hex\":\"#81afc8\",\"pct\":19.1,\"name\":\"Duck Egg\"},{\"hex\":\"#e0e8ea\",\"pct\":10.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0179-03","sku":"DWXH-255113","sc_id":114,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Dallimore Wild Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dallimore, color:Mist, Mist, Sky, Duck Egg, Alabaster, Wild Rose","body_html":"<div class=\"sanderson-product\">\n<p>Dallimore in Wild Rose is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Sky, Duck Egg. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wild Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dallimore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0179-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217232_7e2d.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217233_0605.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217234_1_SAW0179_03_SANDERSON_Dallimore_WALLPAPER_2d2b.jpg","alt":"Dallimore"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217234_3cbf.jpg","alt":"Dallimore"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255113","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255113-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0179-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dallimore"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wild Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wild Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b9cacf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b9d2e1"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#81afc8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b9cacf\",\"pct\":39.1,\"name\":\"Mist\"},{\"hex\":\"#b9d2e1\",\"pct\":31,\"name\":\"Sky\"},{\"hex\":\"#81afc8\",\"pct\":19.1,\"name\":\"Duck Egg\"},{\"hex\":\"#e0e8ea\",\"pct\":10.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0074-02","sku":"DWXH-255114","sc_id":115,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Damson Tree Denim/Barley | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Damson Tree, color:Alabaster, Alabaster, Mist, Linen, Birds, Leaves-And-Trees, Denim/Barley, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Damson Tree in Denim/Barley is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Denim/Barley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0074-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216365_f8ab.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216363_9e0b.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216364_1_SAW0074_02_SANDERSON_Damson_Tree_WALLPAPER_8900.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216364_2_SAW0074_02_SANDERSON_Damson_Tree_WALLPAPER_8e6d.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216364_9e5d.jpg","alt":"Damson Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255114","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255114-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Damson Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Denim/Barley"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Denim/Barley"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4e5df"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ced2cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d9d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4e5df\",\"pct\":55.3,\"name\":\"Alabaster\"},{\"hex\":\"#ced2cb\",\"pct\":24.4,\"name\":\"Mist\"},{\"hex\":\"#d8d9d2\",\"pct\":20.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0074-01","sku":"DWXH-255115","sc_id":116,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Damson Tree Dijon/Mole | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Damson Tree, color:Alabaster, Alabaster, Mist, Linen, Birds, Leaves-And-Trees, Dijon/Mole, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Damson Tree in Dijon/Mole is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dijon/Mole</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0074-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216365_f8ab.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216363_1_SAW0074_01_SANDERSON_Damson_Tree_WALLPAPER_4873.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216363_2_SAW0074_01_SANDERSON_Damson_Tree_WALLPAPER_763a.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216363_9e0b.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216364_9e5d.jpg","alt":"Damson Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255115","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255115-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Damson Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dijon/Mole"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dijon/Mole"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4e5df"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ced2cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d9d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4e5df\",\"pct\":55.3,\"name\":\"Alabaster\"},{\"hex\":\"#ced2cb\",\"pct\":24.4,\"name\":\"Mist\"},{\"hex\":\"#d8d9d2\",\"pct\":20.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0074-03","sku":"DWXH-255116","sc_id":117,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Damson Tree Mineral/Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Damson Tree, color:Alabaster, Alabaster, Mist, Linen, Birds, Leaves-And-Trees, Mineral/Dove, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Damson Tree in Mineral/Dove is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral/Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Damson Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0074-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216365_f8ab.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216363_9e0b.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216364_9e5d.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216365_1_SAW0074_03_SANDERSON_Damson_Tree_WALLPAPER_4522.jpg","alt":"Damson Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216365_2_SAW0074_03_SANDERSON_Damson_Tree_WALLPAPER_534b.jpg","alt":"Damson Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255116","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255116-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0074-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Damson Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral/Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral/Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4e5df"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ced2cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d9d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4e5df\",\"pct\":55.3,\"name\":\"Alabaster\"},{\"hex\":\"#ced2cb\",\"pct\":24.4,\"name\":\"Mist\"},{\"hex\":\"#d8d9d2\",\"pct\":20.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0002-05","sku":"DWXH-255117","sc_id":118,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Coral | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Coral","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Coral is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Coral</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255117","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255117-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Coral"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Coral"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0002-01","sku":"DWXH-255118","sc_id":119,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Red","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Red is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255118","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255118-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0002-02","sku":"DWXH-255119","sc_id":120,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Blackcurrant | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Blackcurrant","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Blackcurrant is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blackcurrant</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255119","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255119-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blackcurrant"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blackcurrant"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0002-03","sku":"DWXH-255120","sc_id":121,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Slate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Slate","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Slate is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Slate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255120","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255120-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Slate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Slate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0002-04","sku":"DWXH-255121","sc_id":122,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Chaffinch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Chaffinch","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Chaffinch is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chaffinch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255121","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255121-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chaffinch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chaffinch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0002-06","sku":"DWXH-255122","sc_id":123,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Dandelion Clocks Metallic/Smoke Tree | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dandelion Clocks, color:Brown, Brown, Linen, Ochre, Gold, Olive, Florals, Metallic/Smoke Tree","body_html":"<div class=\"sanderson-product\">\n<p>Dandelion Clocks in Metallic/Smoke Tree is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Brown, Linen, Ochre. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Metallic/Smoke Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dandelion Clocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0002-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA103_d12f.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA101_399c.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA102_af87.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWDA104_bb7e.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217030_4d58.jpg","alt":"Dandelion Clocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217031_e3c1.jpg","alt":"Dandelion Clocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255122","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255122-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0002-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dandelion Clocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Metallic/Smoke Tree"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Metallic/Smoke Tree"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Brown"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#665954"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8dcc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ac7a45"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#665954\",\"pct\":53.5,\"name\":\"Brown\"},{\"hex\":\"#e8dcc2\",\"pct\":13.8,\"name\":\"Linen\"},{\"hex\":\"#ac7a45\",\"pct\":12.2,\"name\":\"Ochre\"},{\"hex\":\"#cc9f64\",\"pct\":11,\"name\":\"Gold\"},{\"hex\":\"#706356\",\"pct\":9.5,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0192-02","sku":"DWXH-255123","sc_id":124,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Donald Nautical Night Fishing | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Donald Nautical, color:Marine, Marine, Cream, Grey, Animals, Night Fishing","body_html":"<div class=\"sanderson-product\">\n<p>Donald Nautical in Night Fishing is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Marine, Cream, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Donald Nautical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Night Fishing</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Donald Nautical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0192-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217283_c986.jpg","alt":"Donald Nautical"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217282_8cd9.jpg","alt":"Donald Nautical"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217283_1_SAW0192_02_SANDERSON_Donald_Nautical_WALLPAPER_5ce5.jpg","alt":"Donald Nautical"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255123","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255123-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0192-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0192-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Donald Nautical"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Night Fishing"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Night Fishing"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Marine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Marine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#27476f"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e1d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#74889a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#27476f\",\"pct\":72.1,\"name\":\"Marine\"},{\"hex\":\"#e8e1d4\",\"pct\":15.8,\"name\":\"Cream\"},{\"hex\":\"#74889a\",\"pct\":12.1,\"name\":\"Grey\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0192-01","sku":"DWXH-255124","sc_id":125,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Donald Nautical Sea Salt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Donald Nautical, color:Marine, Marine, Cream, Grey, Animals, Sea Salt","body_html":"<div class=\"sanderson-product\">\n<p>Donald Nautical in Sea Salt is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Marine, Cream, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Donald Nautical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Salt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Donald Nautical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0192-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217283_c986.jpg","alt":"Donald Nautical"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217282_1_SAW0192_01_SANDERSON_Donald_Nautical_WALLPAPER_d566.jpg","alt":"Donald Nautical"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217282_8cd9.jpg","alt":"Donald Nautical"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255124","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255124-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0192-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0192-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Donald Nautical"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Marine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Marine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#27476f"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e1d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#74889a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#27476f\",\"pct\":72.1,\"name\":\"Marine\"},{\"hex\":\"#e8e1d4\",\"pct\":15.8,\"name\":\"Cream\"},{\"hex\":\"#74889a\",\"pct\":12.1,\"name\":\"Grey\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0075-02","sku":"DWXH-255125","sc_id":126,"settlement_verdict":"CLEAR","retail":139,"product":{"title":"Dorothy Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dorothy, color:Mist, Mist, Linen, Dove","body_html":"<div class=\"sanderson-product\">\n<p>Dorothy in Dove is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dorothy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dorothy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0075-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216382_17e3.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216381_0e9a.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216382_1_SAW0075_02_SANDERSON_Dorothy_WALLPAPER_3ed4.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216382_2_SAW0075_02_SANDERSON_Dorothy_WALLPAPER_c699.jpg","alt":"Dorothy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255125","price":"139.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255125-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0075-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0075-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dorothy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7d7d7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d9d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"9.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7d7d7\",\"pct\":89.8,\"name\":\"Mist\"},{\"hex\":\"#d9d9d9\",\"pct\":9.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0075-01","sku":"DWXH-255126","sc_id":127,"settlement_verdict":"CLEAR","retail":139,"product":{"title":"Dorothy Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dorothy, color:Mist, Mist, Linen","body_html":"<div class=\"sanderson-product\">\n<p>Dorothy in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dorothy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dorothy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0075-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216382_17e3.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216381_0e9a.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216381_1_SAW0075_01_SANDERSON_Dorothy_WALLPAPER_1088.jpg","alt":"Dorothy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216381_2_SAW0075_01_SANDERSON_Dorothy_WALLPAPER_4278.jpg","alt":"Dorothy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255126","price":"139.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255126-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0075-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0075-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dorothy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7d7d7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d9d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"9.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7d7d7\",\"pct\":89.8,\"name\":\"Mist\"},{\"hex\":\"#d9d9d9\",\"pct\":9.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0193-01","sku":"DWXH-255127","sc_id":128,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Dumbo Peanut Butter & Jelly | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dumbo, color:Ivory, Ivory, Taupe, Oatmeal, Cream, Animals, Peanut Butter & Jelly","body_html":"<div class=\"sanderson-product\">\n<p>Dumbo in Peanut Butter & Jelly is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dumbo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Peanut Butter & Jelly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dumbo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0193-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217284_4320.jpg","alt":"Dumbo"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217284_1_SAW0193_01_SANDERSON_Dumbo_WALLPAPER_02f5.jpg","alt":"Dumbo"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255127","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255127-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0193-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0193-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dumbo"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Peanut Butter & Jelly"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Peanut Butter & Jelly"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fbf9ea"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b49579"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1cab0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fbf9ea\",\"pct\":55.1,\"name\":\"Ivory\"},{\"hex\":\"#b49579\",\"pct\":19.7,\"name\":\"Taupe\"},{\"hex\":\"#d1cab0\",\"pct\":18.4,\"name\":\"Oatmeal\"},{\"hex\":\"#ede8d1\",\"pct\":6.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0096-01","sku":"DWXH-255128","sc_id":129,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Dune Hares Mist/Pebble | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dune Hares, color:Alabaster, Alabaster, Mist, Linen, Animals, Landscapes, Mist/Pebble","body_html":"<div class=\"sanderson-product\">\n<p>Dune Hares in Mist/Pebble is a Sanderson Wallcovering in a animals/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Mist, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dune Hares</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mist/Pebble</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dune Hares</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0096-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216518_0362.jpg","alt":"Dune Hares"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216518_1_SAW0096_01_SANDERSON_Dune_Hares_WALLPAPER_72cf.jpg","alt":"Dune Hares"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216518_2_SAW0096_01_SANDERSON_Dune_Hares_WALLPAPER_8061.jpg","alt":"Dune Hares"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255128","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255128-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0096-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0096-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dune Hares"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mist/Pebble"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mist/Pebble"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d4d9d3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"35.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dbddd7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1e3de\",\"pct\":50.1,\"name\":\"Alabaster\"},{\"hex\":\"#d4d9d3\",\"pct\":35.2,\"name\":\"Mist\"},{\"hex\":\"#dbddd7\",\"pct\":14.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0014-01","sku":"DWXH-255129","sc_id":130,"settlement_verdict":"REVIEW-VISION","retail":281,"product":{"title":"Eleni Grey Pearl | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Eleni, color:Greige, Greige, Oatmeal, Stone, Florals, Grey Pearl","body_html":"<div class=\"sanderson-product\">\n<p>Eleni in Grey Pearl is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Eleni</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey Pearl</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Eleni</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0014-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DAEG213026_3a39.jpg","alt":"Eleni"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255129","price":"281.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255129-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0014-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0014-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Eleni"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey Pearl"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey Pearl"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c1beae"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"63"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c2b3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#abac9d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c1beae\",\"pct\":63,\"name\":\"Greige\"},{\"hex\":\"#c6c2b3\",\"pct\":27.6,\"name\":\"Oatmeal\"},{\"hex\":\"#abac9d\",\"pct\":9.4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0118-01","sku":"DWXH-255130","sc_id":131,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Elysian Geese (Wallcovering) Amsterdam Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian Geese (Wallcovering), color:Greige, Greige, Taupe, Birds, Amsterdam Green","body_html":"<div class=\"sanderson-product\">\n<p>Elysian Geese (Wallcovering) in Amsterdam Green is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Amsterdam Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0118-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216609_463f.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216608_1_SAW0118_01_SANDERSON_Elysian_Geese_WALLPAPER_27f6.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216608_4b0a.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216610_fc64.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216611_a630.jpg","alt":"Elysian Geese (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255130","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255130-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian Geese (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Amsterdam Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Amsterdam Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2bda9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a59178"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2bda9\",\"pct\":80.9,\"name\":\"Greige\"},{\"hex\":\"#a59178\",\"pct\":14.4,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0118-03","sku":"DWXH-255131","sc_id":132,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Elysian Geese (Wallcovering) Blue Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian Geese (Wallcovering), color:Greige, Greige, Taupe, Birds, Blue Clay","body_html":"<div class=\"sanderson-product\">\n<p>Elysian Geese (Wallcovering) in Blue Clay is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0118-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216609_463f.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216608_4b0a.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216610_1_SAW0118_03_SANDERSON_Elysian_Geese_WALLPAPER_d5df.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216610_fc64.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216611_a630.jpg","alt":"Elysian Geese (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255131","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255131-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian Geese (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2bda9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a59178"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2bda9\",\"pct\":80.9,\"name\":\"Greige\"},{\"hex\":\"#a59178\",\"pct\":14.4,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0118-02","sku":"DWXH-255132","sc_id":133,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Elysian Geese (Wallcovering) Briarwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian Geese (Wallcovering), color:Greige, Greige, Taupe, Birds, Briarwood","body_html":"<div class=\"sanderson-product\">\n<p>Elysian Geese (Wallcovering) in Briarwood is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Briarwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0118-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216609_463f.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216608_4b0a.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216609_1_SAW0118_02_SANDERSON_Elysian_Geese_WALLPAPER_6a44.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216610_fc64.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216611_a630.jpg","alt":"Elysian Geese (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255132","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255132-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian Geese (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Briarwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Briarwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2bda9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a59178"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2bda9\",\"pct\":80.9,\"name\":\"Greige\"},{\"hex\":\"#a59178\",\"pct\":14.4,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0118-04","sku":"DWXH-255133","sc_id":134,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Elysian Geese (Wallcovering) Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian Geese (Wallcovering), color:Greige, Greige, Taupe, Birds, Gilver","body_html":"<div class=\"sanderson-product\">\n<p>Elysian Geese (Wallcovering) in Gilver is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian Geese (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0118-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216609_463f.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216608_4b0a.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216610_fc64.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216611_1_SAW0118_04_SANDERSON_Elysian_Geese_WALLPAPER_3925.jpg","alt":"Elysian Geese (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216611_a630.jpg","alt":"Elysian Geese (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255133","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255133-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0118-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian Geese (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2bda9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a59178"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2bda9\",\"pct\":80.9,\"name\":\"Greige\"},{\"hex\":\"#a59178\",\"pct\":14.4,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0117-01","sku":"DWXH-255134","sc_id":135,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Elysian (Wallcovering) Fig | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian (Wallcovering), color:Linen, Linen, Beige, Stone, Oatmeal, Alabaster, Landscapes, Fig","body_html":"<div class=\"sanderson-product\">\n<p>Elysian (Wallcovering) in Fig is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fig</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0117-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216593_969b.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216592_1_SAW0117_01_SANDERSON_Elysian_WALLPAPER_25cc.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216592_29c3.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216592_2_SAW0117_01_SANDERSON_Elysian_WALLPAPER_424a.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216594_fe5c.jpg","alt":"Elysian (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255134","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255134-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dcd9d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c5c2b0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaa93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dcd9d4\",\"pct\":35.1,\"name\":\"Linen\"},{\"hex\":\"#c5c2b0\",\"pct\":18.9,\"name\":\"Beige\"},{\"hex\":\"#acaa93\",\"pct\":17.9,\"name\":\"Stone\"},{\"hex\":\"#cecbbd\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e1ddda\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0172-01","sku":"DWXH-255135","sc_id":136,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Emperor Peony Cinnabar Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Emperor Peony, color:Taupe, Taupe, Cream, Oatmeal, White, Ivory, Greige, Florals, Cinnabar Red","body_html":"<div class=\"sanderson-product\">\n<p>Emperor Peony in Cinnabar Red is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Cream, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cinnabar Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0172-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217121_b519.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217119_1_SAW0172_01_SANDERSON_Emperor_Peony_WALLPAPER_a096.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217119_2c87.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217120_8221.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217122_1dc9.jpg","alt":"Emperor Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255135","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255135-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Emperor Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cinnabar Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cinnabar Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#967e70"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"23"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece5cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3c5a5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#967e70\",\"pct\":23,\"name\":\"Taupe\"},{\"hex\":\"#ece5cd\",\"pct\":20.7,\"name\":\"Cream\"},{\"hex\":\"#e3c5a5\",\"pct\":17,\"name\":\"Oatmeal\"},{\"hex\":\"#fdfcf0\",\"pct\":16.2,\"name\":\"White\"},{\"hex\":\"#faf8ed\",\"pct\":13.7,\"name\":\"Ivory\"},{\"hex\":\"#afb99a\",\"pct\":9.3,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0172-04","sku":"DWXH-255136","sc_id":137,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Emperor Peony Jade/Apricot | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Emperor Peony, color:Taupe, Taupe, Cream, Oatmeal, White, Ivory, Greige, Jade/Apricot","body_html":"<div class=\"sanderson-product\">\n<p>Emperor Peony in Jade/Apricot is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Cream, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Jade/Apricot</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0172-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217121_b519.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217119_2c87.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217120_8221.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217122_1_SAW0172_04_SANDERSON_Emperor_Peony_WALLPAPER_81be.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217122_1dc9.jpg","alt":"Emperor Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255136","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255136-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Emperor Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Jade/Apricot"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Jade/Apricot"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#967e70"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"23"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece5cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3c5a5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#967e70\",\"pct\":23,\"name\":\"Taupe\"},{\"hex\":\"#ece5cd\",\"pct\":20.7,\"name\":\"Cream\"},{\"hex\":\"#e3c5a5\",\"pct\":17,\"name\":\"Oatmeal\"},{\"hex\":\"#fdfcf0\",\"pct\":16.2,\"name\":\"White\"},{\"hex\":\"#faf8ed\",\"pct\":13.7,\"name\":\"Ivory\"},{\"hex\":\"#afb99a\",\"pct\":9.3,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0172-03","sku":"DWXH-255137","sc_id":138,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Emperor Peony Lotus Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Emperor Peony, color:Taupe, Taupe, Cream, Oatmeal, White, Ivory, Greige, Lotus Pink","body_html":"<div class=\"sanderson-product\">\n<p>Emperor Peony in Lotus Pink is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Cream, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lotus Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0172-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217121_b519.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217119_2c87.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217120_8221.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217121_1_SAW0172_03_SANDERSON_Emperor_Peony_WALLPAPER_5249.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217122_1dc9.jpg","alt":"Emperor Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255137","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255137-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Emperor Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lotus Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lotus Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#967e70"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"23"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece5cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3c5a5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#967e70\",\"pct\":23,\"name\":\"Taupe\"},{\"hex\":\"#ece5cd\",\"pct\":20.7,\"name\":\"Cream\"},{\"hex\":\"#e3c5a5\",\"pct\":17,\"name\":\"Oatmeal\"},{\"hex\":\"#fdfcf0\",\"pct\":16.2,\"name\":\"White\"},{\"hex\":\"#faf8ed\",\"pct\":13.7,\"name\":\"Ivory\"},{\"hex\":\"#afb99a\",\"pct\":9.3,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0172-02","sku":"DWXH-255138","sc_id":139,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Emperor Peony Midnight/Apricot | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Emperor Peony, color:Taupe, Taupe, Cream, Oatmeal, White, Ivory, Greige, Midnight/Apricot","body_html":"<div class=\"sanderson-product\">\n<p>Emperor Peony in Midnight/Apricot is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Cream, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Midnight/Apricot</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Emperor Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0172-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217121_b519.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217119_2c87.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217120_1_SAW0172_02_SANDERSON_Emperor_Peony_WALLPAPER_e7f4.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217120_8221.jpg","alt":"Emperor Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217122_1dc9.jpg","alt":"Emperor Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255138","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255138-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0172-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Emperor Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Midnight/Apricot"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Midnight/Apricot"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#967e70"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"23"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece5cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3c5a5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#967e70\",\"pct\":23,\"name\":\"Taupe\"},{\"hex\":\"#ece5cd\",\"pct\":20.7,\"name\":\"Cream\"},{\"hex\":\"#e3c5a5\",\"pct\":17,\"name\":\"Oatmeal\"},{\"hex\":\"#fdfcf0\",\"pct\":16.2,\"name\":\"White\"},{\"hex\":\"#faf8ed\",\"pct\":13.7,\"name\":\"Ivory\"},{\"hex\":\"#afb99a\",\"pct\":9.3,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0065-03","sku":"DWXH-255139","sc_id":140,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Empire Trellis Indigo/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Empire Trellis, color:Linen, Linen, Alabaster, Mist, Indigo/Linen","body_html":"<div class=\"sanderson-product\">\n<p>Empire Trellis in Indigo/Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0065-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216335_c676.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216337_fdaa.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216338_1_SAW0065_03_SANDERSON_Empire_Trellis_WALLPAPER_ecad.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216338_a82d.jpg","alt":"Empire Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255139","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255139-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Empire Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9d5d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2e2dd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5d4ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9d5d1\",\"pct\":72,\"name\":\"Linen\"},{\"hex\":\"#e2e2dd\",\"pct\":16.6,\"name\":\"Alabaster\"},{\"hex\":\"#d5d4ce\",\"pct\":8.5,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0065-02","sku":"DWXH-255140","sc_id":141,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Empire Trellis Linen/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Empire Trellis, color:Linen, Linen, Alabaster, Mist, Linen/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Empire Trellis in Linen/Cream is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0065-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216335_c676.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216337_1_SAW0065_02_SANDERSON_Empire_Trellis_WALLPAPER_43ee.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216337_fdaa.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216338_a82d.jpg","alt":"Empire Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255140","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255140-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Empire Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9d5d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2e2dd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5d4ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9d5d1\",\"pct\":72,\"name\":\"Linen\"},{\"hex\":\"#e2e2dd\",\"pct\":16.6,\"name\":\"Alabaster\"},{\"hex\":\"#d5d4ce\",\"pct\":8.5,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0097-01","sku":"DWXH-255141","sc_id":142,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Estuary Birds Blue/Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Estuary Birds, color:Alabaster, Alabaster, Linen, Greige, Birds, Blue/Grey","body_html":"<div class=\"sanderson-product\">\n<p>Estuary Birds in Blue/Grey is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue/Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0097-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216494_9663.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216492_1_SAW0097_01_SANDERSON_Estuary_Birds_WALLPAPER_9b47.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216492_2_SAW0097_01_SANDERSON_Estuary_Birds_WALLPAPER_04a1.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216492_f28a.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216493_b571.jpg","alt":"Estuary Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255141","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255141-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Estuary Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue/Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue/Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8dbd2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c1bfac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3dd\",\"pct\":56.2,\"name\":\"Alabaster\"},{\"hex\":\"#d8dbd2\",\"pct\":24.9,\"name\":\"Linen\"},{\"hex\":\"#c1bfac\",\"pct\":17.7,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0097-02","sku":"DWXH-255142","sc_id":143,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Estuary Birds Chalk/Sepia | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Estuary Birds, color:Alabaster, Alabaster, Linen, Greige, Birds, Chalk/Sepia","body_html":"<div class=\"sanderson-product\">\n<p>Estuary Birds in Chalk/Sepia is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chalk/Sepia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0097-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216494_9663.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216492_f28a.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216493_1_SAW0097_02_SANDERSON_Estuary_Birds_WALLPAPER_aa7a.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216493_2_SAW0097_02_SANDERSON_Estuary_Birds_WALLPAPER_fa80.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216493_b571.jpg","alt":"Estuary Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255142","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255142-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Estuary Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chalk/Sepia"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chalk/Sepia"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8dbd2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c1bfac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3dd\",\"pct\":56.2,\"name\":\"Alabaster\"},{\"hex\":\"#d8dbd2\",\"pct\":24.9,\"name\":\"Linen\"},{\"hex\":\"#c1bfac\",\"pct\":17.7,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0097-03","sku":"DWXH-255143","sc_id":144,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Estuary Birds Mist/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Estuary Birds, color:Alabaster, Alabaster, Linen, Greige, Birds, Mist/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Estuary Birds in Mist/Ivory is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mist/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Estuary Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0097-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216494_9663.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216492_f28a.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216493_b571.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216494_1_SAW0097_03_SANDERSON_Estuary_Birds_WALLPAPER_c198.jpg","alt":"Estuary Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216494_2_SAW0097_03_SANDERSON_Estuary_Birds_WALLPAPER_8ec7.jpg","alt":"Estuary Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255143","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255143-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0097-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Estuary Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mist/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mist/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8dbd2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c1bfac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3dd\",\"pct\":56.2,\"name\":\"Alabaster\"},{\"hex\":\"#d8dbd2\",\"pct\":24.9,\"name\":\"Linen\"},{\"hex\":\"#c1bfac\",\"pct\":17.7,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0160-03","sku":"DWXH-255144","sc_id":145,"settlement_verdict":"REVIEW-VISION","retail":239,"product":{"title":"Etchings &Amp; Roses & Roses Amanpuri Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Etchings &Amp; Roses, color:White, White, Alabaster, Blush, Florals, & Roses Amanpuri Red","body_html":"<div class=\"sanderson-product\">\n<p>Etchings &amp; Roses in & Roses Amanpuri Red is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Blush. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Roses Amanpuri Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0160-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217054_efb4.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217052_351b.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217053_d10a.jpg","alt":"Etchings &Amp; Roses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255144","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255144-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Etchings &Amp; Roses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Roses Amanpuri Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Roses Amanpuri Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"62"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f1ebe3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0b5af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf5\",\"pct\":62,\"name\":\"White\"},{\"hex\":\"#f1ebe3\",\"pct\":20.2,\"name\":\"Alabaster\"},{\"hex\":\"#e0b5af\",\"pct\":17.8,\"name\":\"Blush\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0160-01","sku":"DWXH-255145","sc_id":146,"settlement_verdict":"REVIEW-VISION","retail":239,"product":{"title":"Etchings &Amp; Roses & Roses China Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Etchings &Amp; Roses, color:White, White, Alabaster, Blush, Florals, & Roses China Blue","body_html":"<div class=\"sanderson-product\">\n<p>Etchings &amp; Roses in & Roses China Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Blush. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Roses China Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0160-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217054_efb4.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217052_351b.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217053_d10a.jpg","alt":"Etchings &Amp; Roses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255145","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255145-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Etchings &Amp; Roses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Roses China Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Roses China Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"62"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f1ebe3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0b5af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf5\",\"pct\":62,\"name\":\"White\"},{\"hex\":\"#f1ebe3\",\"pct\":20.2,\"name\":\"Alabaster\"},{\"hex\":\"#e0b5af\",\"pct\":17.8,\"name\":\"Blush\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0076-01","sku":"DWXH-255146","sc_id":147,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Everly Barley | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Everly, color:Alabaster, Alabaster, Linen, Florals, Barley","body_html":"<div class=\"sanderson-product\">\n<p>Everly in Barley is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Everly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Barley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Everly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0076-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216375_c359.jpg","alt":"Everly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216375_1_SAW0076_01_SANDERSON_Everly_WALLPAPER_2149.jpg","alt":"Everly"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255146","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255146-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0076-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0076-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Everly"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Barley"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Barley"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e9e4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e1ddd0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e9e4\",\"pct\":74.2,\"name\":\"Alabaster\"},{\"hex\":\"#e1ddd0\",\"pct\":22.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0119-01","sku":"DWXH-255147","sc_id":148,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Evesham Deer (Wallcovering) Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Evesham Deer (Wallcovering), color:Silver, Silver, Grey, Animals, Birch","body_html":"<div class=\"sanderson-product\">\n<p>Evesham Deer (Wallcovering) in Birch is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0119-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216619_2f57.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216618_1_SAW0119_01_SANDERSON_Evesham_Deer_WALLPAPER_048a.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216618_2_SAW0119_01_SANDERSON_Evesham_Deer_WALLPAPER_fb8f.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216618_d00f.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216620_59b6.jpg","alt":"Evesham Deer (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255147","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255147-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Evesham Deer (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c0c1bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#96938e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c0c1bc\",\"pct\":87.3,\"name\":\"Silver\"},{\"hex\":\"#96938e\",\"pct\":12.9,\"name\":\"Grey\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0119-03","sku":"DWXH-255148","sc_id":149,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Evesham Deer (Wallcovering) Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Evesham Deer (Wallcovering), color:Silver, Silver, Grey, Animals, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Evesham Deer (Wallcovering) in Indigo is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0119-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216619_2f57.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216618_d00f.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216620_1_SAW0119_03_SANDERSON_Evesham_Deer_WALLPAPER_2c1e.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216620_2_SAW0119_03_SANDERSON_Evesham_Deer_WALLPAPER_df48.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216620_59b6.jpg","alt":"Evesham Deer (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255148","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255148-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Evesham Deer (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c0c1bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#96938e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c0c1bc\",\"pct\":87.3,\"name\":\"Silver\"},{\"hex\":\"#96938e\",\"pct\":12.9,\"name\":\"Grey\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0119-02","sku":"DWXH-255149","sc_id":150,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Evesham Deer (Wallcovering) Silver Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Evesham Deer (Wallcovering), color:Silver, Silver, Grey, Animals, Silver Grey","body_html":"<div class=\"sanderson-product\">\n<p>Evesham Deer (Wallcovering) in Silver Grey is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Evesham Deer (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0119-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216619_2f57.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216618_d00f.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216619_1_SAW0119_02_SANDERSON_Evesham_Deer_WALLPAPER_e65c.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216619_2_SAW0119_02_SANDERSON_Evesham_Deer_WALLPAPER_f65b.jpg","alt":"Evesham Deer (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216620_59b6.jpg","alt":"Evesham Deer (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255149","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255149-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0119-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Evesham Deer (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c0c1bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#96938e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c0c1bc\",\"pct\":87.3,\"name\":\"Silver\"},{\"hex\":\"#96938e\",\"pct\":12.9,\"name\":\"Grey\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0027-02","sku":"DWXH-255150","sc_id":151,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Fabienne Eggshell | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fabienne, color:Mist, Mist, Alabaster, Eggshell","body_html":"<div class=\"sanderson-product\">\n<p>Fabienne in Eggshell is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fabienne</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eggshell</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fabienne</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0027-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214071_64ec.jpg","alt":"Fabienne"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214069_db45.jpg","alt":"Fabienne"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214071_1_SAW0027_02_SANDERSON_Fabienne_WALLPAPER_604a.jpg","alt":"Fabienne"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214071_2_SAW0027_02_SANDERSON_Fabienne_WALLPAPER_052a.jpg","alt":"Fabienne"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255150","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255150-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0027-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0027-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fabienne"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4e0d7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"60.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8e3db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4e0d7\",\"pct\":60.6,\"name\":\"Mist\"},{\"hex\":\"#d8e3db\",\"pct\":39.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0026-01","sku":"DWXH-255151","sc_id":152,"settlement_verdict":"CLEAR","retail":177,"product":{"title":"Fabienne Plain Eggshell | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fabienne Plain, color:Silver, Silver, Eggshell","body_html":"<div class=\"sanderson-product\">\n<p>Fabienne Plain in Eggshell is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fabienne Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eggshell</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fabienne Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0026-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214077_57e6.jpg","alt":"Fabienne Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214077_1_SAW0026_01_SANDERSON_Fabienne_Plain_WALLPAPER_5419.jpg","alt":"Fabienne Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214077_2_SAW0026_01_SANDERSON_Fabienne_Plain_WALLPAPER_8d41.jpg","alt":"Fabienne Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255151","price":"177.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255151-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0026-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0026-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fabienne Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b8beb9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"99.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b8beb9\",\"pct\":99.9,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0027-01","sku":"DWXH-255152","sc_id":153,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Fabienne Sand | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fabienne, color:Mist, Mist, Alabaster, Sand","body_html":"<div class=\"sanderson-product\">\n<p>Fabienne in Sand is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fabienne</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sand</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fabienne</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0027-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214071_64ec.jpg","alt":"Fabienne"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214069_db45.jpg","alt":"Fabienne"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255152","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255152-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0027-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0027-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fabienne"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4e0d7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"60.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8e3db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4e0d7\",\"pct\":60.6,\"name\":\"Mist\"},{\"hex\":\"#d8e3db\",\"pct\":39.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0216-03","sku":"DWXH-255153","sc_id":154,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Fairdown Berry/Sandstone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fairdown, color:White, White, Greige, Alabaster, Cream, Berry/Sandstone","body_html":"<div class=\"sanderson-product\">\n<p>Fairdown in Berry/Sandstone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Berry/Sandstone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0216-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_346d.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217439_800a.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217441_980b.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217442_732e.jpg","alt":"Fairdown"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255153","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255153-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fairdown"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Berry/Sandstone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Berry/Sandstone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f3ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bbc0ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#edece3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f3ec\",\"pct\":50.8,\"name\":\"White\"},{\"hex\":\"#bbc0ac\",\"pct\":21,\"name\":\"Greige\"},{\"hex\":\"#edece3\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#e1e2d6\",\"pct\":11.8,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0216-04","sku":"DWXH-255154","sc_id":155,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Fairdown Chocolate/Putty | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fairdown, color:White, White, Greige, Alabaster, Cream, Chocolate/Putty","body_html":"<div class=\"sanderson-product\">\n<p>Fairdown in Chocolate/Putty is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chocolate/Putty</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0216-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_346d.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217439_800a.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217441_980b.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217442_732e.jpg","alt":"Fairdown"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255154","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255154-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fairdown"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chocolate/Putty"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chocolate/Putty"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f3ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bbc0ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#edece3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f3ec\",\"pct\":50.8,\"name\":\"White\"},{\"hex\":\"#bbc0ac\",\"pct\":21,\"name\":\"Greige\"},{\"hex\":\"#edece3\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#e1e2d6\",\"pct\":11.8,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0216-02","sku":"DWXH-255155","sc_id":156,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Fairdown Forest/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fairdown, color:White, White, Greige, Alabaster, Cream, Forest/Olive","body_html":"<div class=\"sanderson-product\">\n<p>Fairdown in Forest/Olive is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Forest/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0216-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_346d.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217439_800a.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_1_SAW0216_02_SANDERSON_Fairdown_WALLPAPER_4f51.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_2_SAW0216_02_SANDERSON_Fairdown_WALLPAPER_3269.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217441_980b.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217442_732e.jpg","alt":"Fairdown"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255155","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255155-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fairdown"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Forest/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Forest/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f3ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bbc0ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#edece3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f3ec\",\"pct\":50.8,\"name\":\"White\"},{\"hex\":\"#bbc0ac\",\"pct\":21,\"name\":\"Greige\"},{\"hex\":\"#edece3\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#e1e2d6\",\"pct\":11.8,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0216-01","sku":"DWXH-255156","sc_id":157,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Fairdown Wedgwood/Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fairdown, color:White, White, Greige, Alabaster, Cream, Wedgwood/Willow","body_html":"<div class=\"sanderson-product\">\n<p>Fairdown in Wedgwood/Willow is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood/Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fairdown</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0216-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217440_346d.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217439_800a.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217441_980b.jpg","alt":"Fairdown"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217442_732e.jpg","alt":"Fairdown"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255156","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255156-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0216-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fairdown"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood/Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood/Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f3ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bbc0ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#edece3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f3ec\",\"pct\":50.8,\"name\":\"White\"},{\"hex\":\"#bbc0ac\",\"pct\":21,\"name\":\"Greige\"},{\"hex\":\"#edece3\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#e1e2d6\",\"pct\":11.8,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0128-04","sku":"DWXH-255157","sc_id":158,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Fan Palm Charcoal/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fan Palm, color:Raspberry, Raspberry, Ochre, Taupe, Botanical, Leaves-And-Trees, Charcoal/Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fan Palm in Charcoal/Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Raspberry, Ochre, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0128-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_0ab0.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_b30f.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_117b.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_1_SAW0128_04_SANDERSON_Fan_Palm_WALLPAPER_2946.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_2_SAW0128_04_SANDERSON_Fan_Palm_WALLPAPER_1d85.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_8d92.jpg","alt":"Fan Palm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255157","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255157-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fan Palm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Raspberry"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#af1952"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a27156"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#af8663"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#af1952\",\"pct\":72.5,\"name\":\"Raspberry\"},{\"hex\":\"#a27156\",\"pct\":13.8,\"name\":\"Ochre\"},{\"hex\":\"#af8663\",\"pct\":13.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0128-02","sku":"DWXH-255158","sc_id":159,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Fan Palm Linen/Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fan Palm, color:Raspberry, Raspberry, Ochre, Taupe, Botanical, Leaves-And-Trees, Linen/Gilver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fan Palm in Linen/Gilver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Raspberry, Ochre, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0128-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_0ab0.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_b30f.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_117b.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_1_SAW0128_02_SANDERSON_Fan_Palm_WALLPAPER_1040.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_2_SAW0128_02_SANDERSON_Fan_Palm_WALLPAPER_32ec.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_8d92.jpg","alt":"Fan Palm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255158","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255158-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fan Palm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Raspberry"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#af1952"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a27156"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#af8663"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#af1952\",\"pct\":72.5,\"name\":\"Raspberry\"},{\"hex\":\"#a27156\",\"pct\":13.8,\"name\":\"Ochre\"},{\"hex\":\"#af8663\",\"pct\":13.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0128-03","sku":"DWXH-255159","sc_id":160,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Fan Palm Rhodera/Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fan Palm, color:Raspberry, Raspberry, Ochre, Taupe, Botanical, Leaves-And-Trees, Rhodera/Gilver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fan Palm in Rhodera/Gilver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Raspberry, Ochre, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rhodera/Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0128-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_0ab0.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_b30f.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_117b.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_1_SAW0128_03_SANDERSON_Fan_Palm_WALLPAPER_d160.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_2_SAW0128_03_SANDERSON_Fan_Palm_WALLPAPER_188f.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_8d92.jpg","alt":"Fan Palm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255159","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255159-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fan Palm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rhodera/Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rhodera/Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Raspberry"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#af1952"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a27156"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#af8663"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#af1952\",\"pct\":72.5,\"name\":\"Raspberry\"},{\"hex\":\"#a27156\",\"pct\":13.8,\"name\":\"Ochre\"},{\"hex\":\"#af8663\",\"pct\":13.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0098-01","sku":"DWXH-255160","sc_id":161,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Farne Grasses Cream/Sage | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farne Grasses, color:Alabaster, Alabaster, Linen, Botanical, Florals, Cream/Sage","body_html":"<div class=\"sanderson-product\">\n<p>Farne Grasses in Cream/Sage is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream/Sage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0098-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216487_0b0f.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216486_1_SAW0098_01_SANDERSON_Farne_Grasses_WALLPAPER_7fc2.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216486_2_SAW0098_01_SANDERSON_Farne_Grasses_WALLPAPER_d011.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216486_9d9d.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216488_3483.jpg","alt":"Farne Grasses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255160","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255160-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farne Grasses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream/Sage"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream/Sage"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d9d2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3de\",\"pct\":84.6,\"name\":\"Alabaster\"},{\"hex\":\"#d9d9d2\",\"pct\":13.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0098-03","sku":"DWXH-255161","sc_id":162,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Farne Grasses Willow/Pebble | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farne Grasses, color:Alabaster, Alabaster, Linen, Botanical, Florals, Willow/Pebble","body_html":"<div class=\"sanderson-product\">\n<p>Farne Grasses in Willow/Pebble is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow/Pebble</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0098-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216487_0b0f.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216486_9d9d.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216488_1_SAW0098_03_SANDERSON_Farne_Grasses_WALLPAPER_ba58.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216488_2_SAW0098_03_SANDERSON_Farne_Grasses_WALLPAPER_df99.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216488_3483.jpg","alt":"Farne Grasses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255161","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255161-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farne Grasses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow/Pebble"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow/Pebble"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d9d2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3de\",\"pct\":84.6,\"name\":\"Alabaster\"},{\"hex\":\"#d9d9d2\",\"pct\":13.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0120-02","sku":"DWXH-255162","sc_id":163,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Farthing Wood Cobalt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farthing Wood, color:Linen, Linen, Oatmeal, Greige, Mist, Botanical, Leaves-And-Trees, Cobalt, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Farthing Wood in Cobalt is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cobalt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0120-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216614_7e72.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216612_53b9.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216613_1_SAW0120_02_SANDERSON_Farthing_Wood_WALLPAPER_29d8.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216613_2_SAW0120_02_SANDERSON_Farthing_Wood_WALLPAPER_e866.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216613_8eca.jpg","alt":"Farthing Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255162","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255162-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farthing Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cobalt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cobalt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdcd5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c9cabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdbbaa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdcd5\",\"pct\":48.6,\"name\":\"Linen\"},{\"hex\":\"#c9cabd\",\"pct\":18.7,\"name\":\"Oatmeal\"},{\"hex\":\"#bdbbaa\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#d1cfc3\",\"pct\":14.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0120-03","sku":"DWXH-255163","sc_id":164,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Farthing Wood Sage Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farthing Wood, color:Linen, Linen, Oatmeal, Greige, Mist, Botanical, Leaves-And-Trees, Sage Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Farthing Wood in Sage Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0120-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216614_7e72.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216612_53b9.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216613_8eca.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216614_1_SAW0120_03_SANDERSON_Farthing_Wood_WALLPAPER_5afd.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216614_2_SAW0120_03_SANDERSON_Farthing_Wood_WALLPAPER_9e02.jpg","alt":"Farthing Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255163","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255163-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farthing Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdcd5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c9cabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdbbaa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdcd5\",\"pct\":48.6,\"name\":\"Linen\"},{\"hex\":\"#c9cabd\",\"pct\":18.7,\"name\":\"Oatmeal\"},{\"hex\":\"#bdbbaa\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#d1cfc3\",\"pct\":14.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0120-01","sku":"DWXH-255164","sc_id":165,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Farthing Wood Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farthing Wood, color:Linen, Linen, Oatmeal, Greige, Mist, Botanical, Leaves-And-Trees, Silver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Farthing Wood in Silver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farthing Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0120-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216614_7e72.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216612_1_SAW0120_01_SANDERSON_Farthing_Wood_WALLPAPER_0b8b.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216612_2_SAW0120_01_SANDERSON_Farthing_Wood_WALLPAPER_2800.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216612_53b9.jpg","alt":"Farthing Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216613_8eca.jpg","alt":"Farthing Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255164","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255164-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0120-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farthing Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdcd5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c9cabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdbbaa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdcd5\",\"pct\":48.6,\"name\":\"Linen\"},{\"hex\":\"#c9cabd\",\"pct\":18.7,\"name\":\"Oatmeal\"},{\"hex\":\"#bdbbaa\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#d1cfc3\",\"pct\":14.9,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0147-02","sku":"DWXH-255165","sc_id":166,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Fencott Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fencott, color:Silver, Silver, Oatmeal, Botanical, Leaves-And-Trees, Blue, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fencott in Blue is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0147-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216897_6440.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216898_04e8.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216898_1_SAW0147_02_SANDERSON_Fencott_WALLPAPER_09b6.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216898_2_SAW0147_02_SANDERSON_Fencott_WALLPAPER_276b.jpg","alt":"Fencott"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255165","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255165-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0147-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0147-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fencott"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c5bd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"71.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cecfbe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c5bd\",\"pct\":71.3,\"name\":\"Silver\"},{\"hex\":\"#cecfbe\",\"pct\":28.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0148-01","sku":"DWXH-255166","sc_id":167,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Fencott Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fencott, color:Oatmeal, Oatmeal, Linen, Botanical, Leaves-And-Trees, Cream, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fencott in Cream is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0148-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216896_d924.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216896_1_SAW0148_01_SANDERSON_Fencott_WALLPAPER_f488.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216896_2_SAW0148_01_SANDERSON_Fencott_WALLPAPER_d426.jpg","alt":"Fencott"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255166","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255166-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0148-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0148-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fencott"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0ccb6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d7c5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0ccb6\",\"pct\":85.4,\"name\":\"Oatmeal\"},{\"hex\":\"#d9d7c5\",\"pct\":14.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0147-01","sku":"DWXH-255167","sc_id":168,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Fencott Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fencott, color:Silver, Silver, Oatmeal, Botanical, Leaves-And-Trees, Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fencott in Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fencott</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0147-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216897_6440.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216897_1_SAW0147_01_SANDERSON_Fencott_WALLPAPER_14c2.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216897_2_SAW0147_01_SANDERSON_Fencott_WALLPAPER_b554.jpg","alt":"Fencott"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216898_04e8.jpg","alt":"Fencott"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255167","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255167-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0147-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0147-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fencott"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c5bd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"71.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cecfbe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c5bd\",\"pct\":71.3,\"name\":\"Silver\"},{\"hex\":\"#cecfbe\",\"pct\":28.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0129-01","sku":"DWXH-255168","sc_id":169,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Fernery Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fernery, color:Charcoal, Charcoal, Olive, Botanical, Leaves-And-Trees, Botanical Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fernery in Botanical Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0129-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216634_cd83.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216633_1_SAW0129_01_SANDERSON_Fernery_WALLPAPER_9b55.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216633_2_SAW0129_01_SANDERSON_Fernery_WALLPAPER_504d.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216633_ec5c.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216635_d56e.jpg","alt":"Fernery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255168","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255168-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fernery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#293336"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"76.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#799848"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#293336\",\"pct\":76.5,\"name\":\"Charcoal\"},{\"hex\":\"#799848\",\"pct\":22.3,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0003-01","sku":"DWXH-255169","sc_id":170,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Finches Yellow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Finches, color:Duck Egg, Duck Egg, Silver, Mist, Birds, Leaves-And-Trees, Yellow, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Finches in Yellow is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Finches</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Yellow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Finches</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0003-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWFI103_632b.jpg","alt":"Finches"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWFI101_69c5.jpg","alt":"Finches"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255169","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255169-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0003-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0003-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Finches"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Yellow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Yellow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b7cfbf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b8cdbe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d6c8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b7cfbf\",\"pct\":59.8,\"name\":\"Duck Egg\"},{\"hex\":\"#b8cdbe\",\"pct\":23.2,\"name\":\"Silver\"},{\"hex\":\"#d0d6c8\",\"pct\":17.1,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0003-02","sku":"DWXH-255170","sc_id":171,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Finches Duck Egg | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Finches, color:Duck Egg, Duck Egg, Silver, Mist, Birds, Leaves-And-Trees, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Finches in Duck Egg is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Finches</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Duck Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Finches</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0003-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWFI103_632b.jpg","alt":"Finches"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOPWFI101_69c5.jpg","alt":"Finches"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255170","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255170-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0003-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0003-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Finches"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b7cfbf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b8cdbe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d6c8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b7cfbf\",\"pct\":59.8,\"name\":\"Duck Egg\"},{\"hex\":\"#b8cdbe\",\"pct\":23.2,\"name\":\"Silver\"},{\"hex\":\"#d0d6c8\",\"pct\":17.1,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0039-01","sku":"DWXH-255171","sc_id":172,"settlement_verdict":"REVIEW-VISION","retail":239,"product":{"title":"Flamingos Turquoise/Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Flamingos, color:Duck Egg, Duck Egg, Cream, Mist, Animals, Turquoise/Pink","body_html":"<div class=\"sanderson-product\">\n<p>Flamingos in Turquoise/Pink is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Cream, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Flamingos</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Turquoise/Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Flamingos</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0039-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214569_502d.jpg","alt":"Flamingos"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214569_1_SAW0039_01_SANDERSON_Flamingos_WALLPAPER_38d6.jpg","alt":"Flamingos"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214569_2_SAW0039_01_SANDERSON_Flamingos_WALLPAPER_89d9.jpg","alt":"Flamingos"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255171","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255171-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0039-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0039-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Flamingos"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Turquoise/Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Turquoise/Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b2cdcd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f1dcdb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9d2d1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b2cdcd\",\"pct\":56.8,\"name\":\"Duck Egg\"},{\"hex\":\"#f1dcdb\",\"pct\":29.7,\"name\":\"Cream\"},{\"hex\":\"#c9d2d1\",\"pct\":13.5,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0029-01","sku":"DWXH-255172","sc_id":173,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Florrie Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Florrie, color:Mist, Mist, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Florrie in Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Florrie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Florrie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0029-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214058_9517.jpg","alt":"Florrie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214058_1_SAW0029_01_SANDERSON_Florrie_WALLPAPER_e2fd.jpg","alt":"Florrie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214058_2_SAW0029_01_SANDERSON_Florrie_WALLPAPER_0ccf.jpg","alt":"Florrie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214058_3_SAW0029_01_SANDERSON_Florrie_WALLPAPER_1ebd.jpg","alt":"Florrie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255172","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255172-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0029-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0029-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Florrie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c5d4db"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c5d4db\",\"pct\":100,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0180-03","sku":"DWXH-255173","sc_id":174,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Forest Of Dean Midnight /Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Forest Of Dean, color:White, White, Taupe, Linen, Greige, Animals, Midnight /Multi","body_html":"<div class=\"sanderson-product\">\n<p>Forest Of Dean in Midnight /Multi is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Taupe, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Midnight /Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0180-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217217_5998.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217218_6b15.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_17a8.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_1_SAW0180_03_SANDERSON_Forest_of_Dean_WALLPAPER_e132.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_2_SAW0180_03_SANDERSON_Forest_of_Dean_WALLPAPER_bf4e.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_3_SAW0180_03_SANDERSON_Forest_of_Dean_WALLPAPER_49e7.jpg","alt":"Forest Of Dean"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255173","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255173-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Forest Of Dean"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Midnight /Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Midnight /Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fefffa"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ac7f6f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"25"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2d5a9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fefffa\",\"pct\":56.5,\"name\":\"White\"},{\"hex\":\"#ac7f6f\",\"pct\":25,\"name\":\"Taupe\"},{\"hex\":\"#f2d5a9\",\"pct\":11.6,\"name\":\"Linen\"},{\"hex\":\"#b0c797\",\"pct\":6.9,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0180-02","sku":"DWXH-255174","sc_id":175,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Forest Of Dean Mulberry/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Forest Of Dean, color:White, White, Taupe, Linen, Greige, Animals, Mulberry/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Forest Of Dean in Mulberry/Multi is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Taupe, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mulberry/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0180-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217217_5998.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217218_1_SAW0180_02_SANDERSON_Forest_of_Dean_WALLPAPER_b6cb.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217218_2_SAW0180_02_SANDERSON_Forest_of_Dean_WALLPAPER_2f5e.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217218_6b15.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_17a8.jpg","alt":"Forest Of Dean"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255174","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255174-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Forest Of Dean"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mulberry/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mulberry/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fefffa"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ac7f6f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"25"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2d5a9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fefffa\",\"pct\":56.5,\"name\":\"White\"},{\"hex\":\"#ac7f6f\",\"pct\":25,\"name\":\"Taupe\"},{\"hex\":\"#f2d5a9\",\"pct\":11.6,\"name\":\"Linen\"},{\"hex\":\"#b0c797\",\"pct\":6.9,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0066-03","sku":"DWXH-255175","sc_id":176,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Fruit Aviary Cream/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fruit Aviary, color:Alabaster, Alabaster, Oatmeal, Birds, Leaves-And-Trees, Cream/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fruit Aviary in Cream/Multi is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fruit Aviary</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fruit Aviary</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0066-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216314_404c.jpg","alt":"Fruit Aviary"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216312_0d4e.jpg","alt":"Fruit Aviary"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216314_1_SAW0066_03_SANDERSON_Fruit_Aviary_WALLPAPER_32e7.jpg","alt":"Fruit Aviary"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255175","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255175-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0066-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0066-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fruit Aviary"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efebe9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1c8c3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efebe9\",\"pct\":80.4,\"name\":\"Alabaster\"},{\"hex\":\"#d1c8c3\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0066-02","sku":"DWXH-255176","sc_id":177,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Fruit Aviary Duck Egg/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fruit Aviary, color:Alabaster, Alabaster, Oatmeal, Birds, Leaves-And-Trees, Duck Egg/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fruit Aviary in Duck Egg/Multi is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fruit Aviary</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Duck Egg/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fruit Aviary</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0066-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216314_404c.jpg","alt":"Fruit Aviary"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216312_0d4e.jpg","alt":"Fruit Aviary"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216312_1_SAW0066_02_SANDERSON_Fruit_Aviary_WALLPAPER_87cf.jpg","alt":"Fruit Aviary"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255176","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255176-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0066-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0066-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fruit Aviary"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Duck Egg/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Duck Egg/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efebe9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1c8c3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efebe9\",\"pct\":80.4,\"name\":\"Alabaster\"},{\"hex\":\"#d1c8c3\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0217-03","sku":"DWXH-255177","sc_id":178,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Gingham Duck Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Gingham, color:Mist, Mist, Stone, White, Alabaster, Duck Blue","body_html":"<div class=\"sanderson-product\">\n<p>Gingham in Duck Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Duck Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0217-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217432_a4df.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217433_91e2.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217434_9fe9.jpg","alt":"Gingham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255177","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255177-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Gingham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Duck Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Duck Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfcdd2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#91aebb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f3ef"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfcdd2\",\"pct\":52.1,\"name\":\"Mist\"},{\"hex\":\"#91aebb\",\"pct\":21.6,\"name\":\"Stone\"},{\"hex\":\"#f2f3ef\",\"pct\":14.3,\"name\":\"White\"},{\"hex\":\"#e3e8e6\",\"pct\":11.9,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0217-01","sku":"DWXH-255178","sc_id":179,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Gingham Picnic Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Gingham, color:Mist, Mist, Stone, White, Alabaster, Picnic Blue","body_html":"<div class=\"sanderson-product\">\n<p>Gingham in Picnic Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Picnic Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0217-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217432_a4df.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217433_91e2.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217434_9fe9.jpg","alt":"Gingham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255178","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255178-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Gingham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Picnic Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Picnic Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfcdd2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#91aebb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f3ef"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfcdd2\",\"pct\":52.1,\"name\":\"Mist\"},{\"hex\":\"#91aebb\",\"pct\":21.6,\"name\":\"Stone\"},{\"hex\":\"#f2f3ef\",\"pct\":14.3,\"name\":\"White\"},{\"hex\":\"#e3e8e6\",\"pct\":11.9,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0217-02","sku":"DWXH-255179","sc_id":180,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Gingham Wild Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Gingham, color:Mist, Mist, Stone, White, Alabaster, Wild Honey","body_html":"<div class=\"sanderson-product\">\n<p>Gingham in Wild Honey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wild Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Gingham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0217-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217432_a4df.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217433_91e2.jpg","alt":"Gingham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217434_9fe9.jpg","alt":"Gingham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255179","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255179-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0217-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Gingham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wild Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wild Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfcdd2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#91aebb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f3ef"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfcdd2\",\"pct\":52.1,\"name\":\"Mist\"},{\"hex\":\"#91aebb\",\"pct\":21.6,\"name\":\"Stone\"},{\"hex\":\"#f2f3ef\",\"pct\":14.3,\"name\":\"White\"},{\"hex\":\"#e3e8e6\",\"pct\":11.9,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0141-01","sku":"DWXH-255180","sc_id":181,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Hakimi Emerald | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hakimi, color:Aubergine, Aubergine, Charcoal, Olive, Stone, Brown, Florals, Emerald","body_html":"<div class=\"sanderson-product\">\n<p>Hakimi in Emerald is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Aubergine, Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Emerald</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0141-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216769_56eb.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216768_1_SAW0141_01_SANDERSON_Hakimi_WALLPAPER_d503.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216768_c455.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216770_1c7d.jpg","alt":"Hakimi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255180","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255180-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hakimi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Emerald"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Emerald"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Aubergine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Aubergine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#494947"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"41.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#474845"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#82725c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#494947\",\"pct\":41.9,\"name\":\"Aubergine\"},{\"hex\":\"#474845\",\"pct\":19.1,\"name\":\"Charcoal\"},{\"hex\":\"#82725c\",\"pct\":15.6,\"name\":\"Olive\"},{\"hex\":\"#b6a286\",\"pct\":12.9,\"name\":\"Stone\"},{\"hex\":\"#55534b\",\"pct\":10.5,\"name\":\"Brown\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0130-04","sku":"DWXH-255181","sc_id":182,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Hampton Trellis Charcoal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hampton Trellis, color:Oatmeal, Oatmeal, Beige, Linen, Charcoal","body_html":"<div class=\"sanderson-product\">\n<p>Hampton Trellis in Charcoal is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0130-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_045c.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216660_32c9.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_f8bc.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_1_SAW0130_04_SANDERSON_Hampton_Trellis_WALLPAPER_eb0a.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_2_SAW0130_04_SANDERSON_Hampton_Trellis_WALLPAPER_7179.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_f36b.jpg","alt":"Hampton Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255181","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255181-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hampton Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cfc7b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2b295"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd5c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cfc7b3\",\"pct\":56.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c2b295\",\"pct\":29.1,\"name\":\"Beige\"},{\"hex\":\"#ddd5c2\",\"pct\":14.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0130-01","sku":"DWXH-255182","sc_id":183,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Hampton Trellis Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hampton Trellis, color:Oatmeal, Oatmeal, Beige, Linen","body_html":"<div class=\"sanderson-product\">\n<p>Hampton Trellis in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0130-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_045c.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_1_SAW0130_01_SANDERSON_Hampton_Trellis_WALLPAPER_04a8.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_2_SAW0130_01_SANDERSON_Hampton_Trellis_WALLPAPER_c050.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216660_32c9.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_f8bc.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_f36b.jpg","alt":"Hampton Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255182","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255182-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hampton Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cfc7b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2b295"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd5c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cfc7b3\",\"pct\":56.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c2b295\",\"pct\":29.1,\"name\":\"Beige\"},{\"hex\":\"#ddd5c2\",\"pct\":14.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0040-01","sku":"DWXH-255183","sc_id":184,"settlement_verdict":"REVIEW-VISION","retail":188,"product":{"title":"Hedera Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hedera, color:White, White, Sage, Greige, Linen, Botanical, Leaves-And-Trees, Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Hedera in Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Sage, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hedera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hedera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0040-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214593_0b00.jpg","alt":"Hedera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214593_1_SAW0040_01_SANDERSON_Hedera_WALLPAPER_44e1.jpg","alt":"Hedera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214593_2_SAW0040_01_SANDERSON_Hedera_WALLPAPER_a759.jpg","alt":"Hedera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214593_3_SAW0040_01_SANDERSON_Hedera_WALLPAPER_cbaa.jpg","alt":"Hedera"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255183","price":"188.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255183-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0040-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0040-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hedera"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0f1f1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#80b976"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9d09e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0f1f1\",\"pct\":51.9,\"name\":\"White\"},{\"hex\":\"#80b976\",\"pct\":19.2,\"name\":\"Sage\"},{\"hex\":\"#a9d09e\",\"pct\":17.7,\"name\":\"Greige\"},{\"hex\":\"#d1e0cd\",\"pct\":11.2,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0225-01","sku":"DWXH-255184","sc_id":185,"settlement_verdict":"CLEAR","retail":972,"product":{"title":"Highgrove Arboretum Ether Blues | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Arboretum, color:Alabaster, Alabaster, Stone, White, Silver, Mist, Ether Blues","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Arboretum in Ether Blues is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Stone, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Arboretum</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ether Blues</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Arboretum</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0225-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217513_0fcb.jpg","alt":"Highgrove Arboretum"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255184","price":"972.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255184-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0225-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0225-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Arboretum"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ether Blues"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ether Blues"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e4df"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#99a6a5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f1f2ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e4df\",\"pct\":32.1,\"name\":\"Alabaster\"},{\"hex\":\"#99a6a5\",\"pct\":19.3,\"name\":\"Stone\"},{\"hex\":\"#f1f2ed\",\"pct\":17.2,\"name\":\"White\"},{\"hex\":\"#c0c7c2\",\"pct\":17.1,\"name\":\"Silver\"},{\"hex\":\"#d2d6d1\",\"pct\":14.4,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0226-02","sku":"DWXH-255185","sc_id":186,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Damask Gritstone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Damask, color:Linen, Linen, Beige, Oatmeal, Cream, Gritstone","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Damask in Gritstone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gritstone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0226-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217503_7b95.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217502_74d9.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217503_1_SAW0226_02_SANDERSON_Highgrove_Damask_WALLPAPER_49b2.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217504_64f1.jpg","alt":"Highgrove Damask"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255185","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255185-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Damask"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gritstone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gritstone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdacc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cac2ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cdc5ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdacc\",\"pct\":35.2,\"name\":\"Linen\"},{\"hex\":\"#cac2ab\",\"pct\":29.9,\"name\":\"Beige\"},{\"hex\":\"#cdc5ae\",\"pct\":22.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e4e0d4\",\"pct\":12.9,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0226-03","sku":"DWXH-255186","sc_id":187,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Damask Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Damask, color:Linen, Linen, Beige, Oatmeal, Cream, Rose","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Damask in Rose is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0226-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217503_7b95.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217502_74d9.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217504_1_SAW0226_03_SANDERSON_Highgrove_Damask_WALLPAPER_947e.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217504_64f1.jpg","alt":"Highgrove Damask"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255186","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255186-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Damask"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdacc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cac2ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cdc5ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdacc\",\"pct\":35.2,\"name\":\"Linen\"},{\"hex\":\"#cac2ab\",\"pct\":29.9,\"name\":\"Beige\"},{\"hex\":\"#cdc5ae\",\"pct\":22.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e4e0d4\",\"pct\":12.9,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0226-01","sku":"DWXH-255187","sc_id":188,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Damask Silver Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Damask, color:Linen, Linen, Beige, Oatmeal, Cream, Silver Green","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Damask in Silver Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Damask</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0226-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217503_7b95.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217502_1_SAW0226_01_SANDERSON_Highgrove_Damask_WALLPAPER_5c00.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217502_2_SAW0226_01_SANDERSON_Highgrove_Damask_WALLPAPER_cc3a.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217502_74d9.jpg","alt":"Highgrove Damask"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217504_64f1.jpg","alt":"Highgrove Damask"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255187","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255187-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0226-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Damask"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dfdacc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cac2ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cdc5ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dfdacc\",\"pct\":35.2,\"name\":\"Linen\"},{\"hex\":\"#cac2ab\",\"pct\":29.9,\"name\":\"Beige\"},{\"hex\":\"#cdc5ae\",\"pct\":22.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e4e0d4\",\"pct\":12.9,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0227-04","sku":"DWXH-255188","sc_id":189,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Toile Madder Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Toile, color:Oatmeal, Oatmeal, Stone, Beige, Greige, Linen, Alabaster, Landscapes, Madder Rose","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Toile in Madder Rose is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Stone, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Madder Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0227-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_16e4.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_f463.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_6619.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_a513.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_1_SAW0227_04_SANDERSON_Highgrove_Toile_WALLPAPER_bd11.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_2_SAW0227_04_SANDERSON_Highgrove_Toile_WALLPAPER_51e0.jpg","alt":"Highgrove Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255188","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255188-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Madder Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Madder Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7bcb9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c49193"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0acac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7bcb9\",\"pct\":20.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c49193\",\"pct\":18.3,\"name\":\"Stone\"},{\"hex\":\"#d0acac\",\"pct\":17,\"name\":\"Beige\"},{\"hex\":\"#cca3a3\",\"pct\":16.9,\"name\":\"Greige\"},{\"hex\":\"#dfceca\",\"pct\":15,\"name\":\"Linen\"},{\"hex\":\"#eae4df\",\"pct\":12.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0227-01","sku":"DWXH-255189","sc_id":190,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Toile Oak | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Toile, color:Oatmeal, Oatmeal, Stone, Beige, Greige, Linen, Alabaster, Landscapes, Oak","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Toile in Oak is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Stone, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0227-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_16e4.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_1_SAW0227_01_SANDERSON_Highgrove_Toile_WALLPAPER_bdd1.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_2_SAW0227_01_SANDERSON_Highgrove_Toile_WALLPAPER_ea79.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_f463.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_6619.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_a513.jpg","alt":"Highgrove Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255189","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255189-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Oak"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Oak"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7bcb9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c49193"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0acac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7bcb9\",\"pct\":20.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c49193\",\"pct\":18.3,\"name\":\"Stone\"},{\"hex\":\"#d0acac\",\"pct\":17,\"name\":\"Beige\"},{\"hex\":\"#cca3a3\",\"pct\":16.9,\"name\":\"Greige\"},{\"hex\":\"#dfceca\",\"pct\":15,\"name\":\"Linen\"},{\"hex\":\"#eae4df\",\"pct\":12.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0227-03","sku":"DWXH-255190","sc_id":191,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Toile Tetbury Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Toile, color:Oatmeal, Oatmeal, Stone, Beige, Greige, Linen, Alabaster, Landscapes, Tetbury Blue","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Toile in Tetbury Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Stone, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Tetbury Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0227-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_16e4.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_f463.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_6619.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_1_SAW0227_03_SANDERSON_Highgrove_Toile_WALLPAPER_4608.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_2_SAW0227_03_SANDERSON_Highgrove_Toile_WALLPAPER_a4d8.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_a513.jpg","alt":"Highgrove Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255190","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255190-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Tetbury Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Tetbury Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7bcb9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c49193"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0acac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7bcb9\",\"pct\":20.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c49193\",\"pct\":18.3,\"name\":\"Stone\"},{\"hex\":\"#d0acac\",\"pct\":17,\"name\":\"Beige\"},{\"hex\":\"#cca3a3\",\"pct\":16.9,\"name\":\"Greige\"},{\"hex\":\"#dfceca\",\"pct\":15,\"name\":\"Linen\"},{\"hex\":\"#eae4df\",\"pct\":12.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0227-02","sku":"DWXH-255191","sc_id":192,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Highgrove Toile Yew Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Highgrove Toile, color:Oatmeal, Oatmeal, Stone, Beige, Greige, Linen, Alabaster, Landscapes, Yew Green","body_html":"<div class=\"sanderson-product\">\n<p>Highgrove Toile in Yew Green is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Stone, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Yew Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Highgrove Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0227-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217505_16e4.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217478_f463.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_1_SAW0227_02_SANDERSON_Highgrove_Toile_WALLPAPER_a55c.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_2_SAW0227_02_SANDERSON_Highgrove_Toile_WALLPAPER_a956.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217479_6619.jpg","alt":"Highgrove Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217480_a513.jpg","alt":"Highgrove Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255191","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255191-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0227-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Highgrove Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Yew Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Yew Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7bcb9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c49193"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0acac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7bcb9\",\"pct\":20.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c49193\",\"pct\":18.3,\"name\":\"Stone\"},{\"hex\":\"#d0acac\",\"pct\":17,\"name\":\"Beige\"},{\"hex\":\"#cca3a3\",\"pct\":16.9,\"name\":\"Greige\"},{\"hex\":\"#dfceca\",\"pct\":15,\"name\":\"Linen\"},{\"hex\":\"#eae4df\",\"pct\":12.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0161-01","sku":"DWXH-255192","sc_id":193,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Hollyhocks Copper/Rhodera | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hollyhocks, color:Sky, Sky, Beige, Taupe, Linen, Duck Egg, Florals, Copper/Rhodera","body_html":"<div class=\"sanderson-product\">\n<p>Hollyhocks in Copper/Rhodera is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sky, Beige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Copper/Rhodera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0161-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_ba6e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_1_SAW0161_01_SANDERSON_Hollyhocks_WALLPAPER_0d73.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_2_SAW0161_01_SANDERSON_Hollyhocks_WALLPAPER_b0f4.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_3_SAW0161_01_SANDERSON_Hollyhocks_WALLPAPER_deec.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_4_SAW0161_01_SANDERSON_Hollyhocks_WALLPAPER_a1f7.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_5_SAW0161_01_SANDERSON_Hollyhocks_WALLPAPER_4c0e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_d1a5.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_f849.jpg","alt":"Hollyhocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255192","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255192-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hollyhocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Copper/Rhodera"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Copper/Rhodera"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sky"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#59c5ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"40.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cf99"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#95907e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#59c5ed\",\"pct\":40.4,\"name\":\"Sky\"},{\"hex\":\"#d0cf99\",\"pct\":22,\"name\":\"Beige\"},{\"hex\":\"#95907e\",\"pct\":18,\"name\":\"Taupe\"},{\"hex\":\"#e3e7b5\",\"pct\":14.3,\"name\":\"Linen\"},{\"hex\":\"#79becd\",\"pct\":5.3,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0161-02","sku":"DWXH-255193","sc_id":194,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Hollyhocks Fire Pink/Bright Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hollyhocks, color:Sky, Sky, Beige, Taupe, Linen, Duck Egg, Florals, Fire Pink/Bright Blue","body_html":"<div class=\"sanderson-product\">\n<p>Hollyhocks in Fire Pink/Bright Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sky, Beige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fire Pink/Bright Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0161-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_ba6e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_d1a5.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_1_SAW0161_02_SANDERSON_Hollyhocks_WALLPAPER_5f48.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_2_SAW0161_02_SANDERSON_Hollyhocks_WALLPAPER_cba6.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_3_SAW0161_02_SANDERSON_Hollyhocks_WALLPAPER_30c7.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_4_SAW0161_02_SANDERSON_Hollyhocks_WALLPAPER_bdea.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_5_SAW0161_02_SANDERSON_Hollyhocks_WALLPAPER_d190.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_f849.jpg","alt":"Hollyhocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255193","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255193-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hollyhocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fire Pink/Bright Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fire Pink/Bright Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sky"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#59c5ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"40.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cf99"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#95907e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#59c5ed\",\"pct\":40.4,\"name\":\"Sky\"},{\"hex\":\"#d0cf99\",\"pct\":22,\"name\":\"Beige\"},{\"hex\":\"#95907e\",\"pct\":18,\"name\":\"Taupe\"},{\"hex\":\"#e3e7b5\",\"pct\":14.3,\"name\":\"Linen\"},{\"hex\":\"#79becd\",\"pct\":5.3,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0161-03","sku":"DWXH-255194","sc_id":195,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Hollyhocks Gold Metallic/Tan | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hollyhocks, color:Sky, Sky, Beige, Taupe, Linen, Duck Egg, Florals, Gold Metallic/Tan","body_html":"<div class=\"sanderson-product\">\n<p>Hollyhocks in Gold Metallic/Tan is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sky, Beige, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold Metallic/Tan</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hollyhocks</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0161-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217033_ba6e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217032_d1a5.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_1_SAW0161_03_SANDERSON_Hollyhocks_WALLPAPER_17b7.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_2_SAW0161_03_SANDERSON_Hollyhocks_WALLPAPER_a23e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_3_SAW0161_03_SANDERSON_Hollyhocks_WALLPAPER_8eb6.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_4_SAW0161_03_SANDERSON_Hollyhocks_WALLPAPER_5bf3.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_5_SAW0161_03_SANDERSON_Hollyhocks_WALLPAPER_071e.jpg","alt":"Hollyhocks"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217034_f849.jpg","alt":"Hollyhocks"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255194","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255194-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0161-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hollyhocks"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold Metallic/Tan"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold Metallic/Tan"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sky"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#59c5ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"40.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cf99"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#95907e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#59c5ed\",\"pct\":40.4,\"name\":\"Sky\"},{\"hex\":\"#d0cf99\",\"pct\":22,\"name\":\"Beige\"},{\"hex\":\"#95907e\",\"pct\":18,\"name\":\"Taupe\"},{\"hex\":\"#e3e7b5\",\"pct\":14.3,\"name\":\"Linen\"},{\"hex\":\"#79becd\",\"pct\":5.3,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0194-01","sku":"DWXH-255195","sc_id":196,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Hundred Acre Wood Cashew | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hundred Acre Wood, color:Alabaster, Alabaster, Cream, Taupe, Oatmeal, Animals, Cashew","body_html":"<div class=\"sanderson-product\">\n<p>Hundred Acre Wood in Cashew is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hundred Acre Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cashew</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hundred Acre Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0194-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217291_d52f.jpg","alt":"Hundred Acre Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217291_1_SAW0194_01_SANDERSON_Hundred_Acre_Wood_WALLPAPER_cf11.jpg","alt":"Hundred Acre Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217291_2_SAW0194_01_SANDERSON_Hundred_Acre_Wood_WALLPAPER_acf1.jpg","alt":"Hundred Acre Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255195","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255195-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0194-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0194-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hundred Acre Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cashew"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cashew"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f3ecd9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f1e9d6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a99f7b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f3ecd9\",\"pct\":33.4,\"name\":\"Alabaster\"},{\"hex\":\"#f1e9d6\",\"pct\":32.9,\"name\":\"Cream\"},{\"hex\":\"#a99f7b\",\"pct\":18.3,\"name\":\"Taupe\"},{\"hex\":\"#dad1bc\",\"pct\":15.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0162-01","sku":"DWXH-255196","sc_id":197,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Hykenham French Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hykenham, color:Wedgwood, Wedgwood, Olive, Oatmeal, Grey, Sage, Florals, French Rose","body_html":"<div class=\"sanderson-product\">\n<p>Hykenham in French Rose is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Olive, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">French Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0162-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217041_d8e1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217040_1_SAW0162_01_SANDERSON_Hykenham_WALLPAPER_3bda.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217040_2_SAW0162_01_SANDERSON_Hykenham_WALLPAPER_51e1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217040_adb1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217042_f4bc.jpg","alt":"Hykenham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255196","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255196-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hykenham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"French Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"French Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#449f9c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#616334"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0cfab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#449f9c\",\"pct\":42.8,\"name\":\"Wedgwood\"},{\"hex\":\"#616334\",\"pct\":24,\"name\":\"Olive\"},{\"hex\":\"#e0cfab\",\"pct\":16.2,\"name\":\"Oatmeal\"},{\"hex\":\"#6c936f\",\"pct\":11.1,\"name\":\"Grey\"},{\"hex\":\"#83a488\",\"pct\":5.9,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0162-03","sku":"DWXH-255197","sc_id":198,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Hykenham Gold Metallic/Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hykenham, color:Wedgwood, Wedgwood, Olive, Oatmeal, Grey, Sage, Florals, Gold Metallic/Rose","body_html":"<div class=\"sanderson-product\">\n<p>Hykenham in Gold Metallic/Rose is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Olive, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold Metallic/Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0162-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217041_d8e1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217040_adb1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217042_1_SAW0162_03_SANDERSON_Hykenham_WALLPAPER_0f57.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217042_2_SAW0162_03_SANDERSON_Hykenham_WALLPAPER_c1a3.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217042_f4bc.jpg","alt":"Hykenham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255197","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255197-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hykenham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold Metallic/Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold Metallic/Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#449f9c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#616334"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0cfab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#449f9c\",\"pct\":42.8,\"name\":\"Wedgwood\"},{\"hex\":\"#616334\",\"pct\":24,\"name\":\"Olive\"},{\"hex\":\"#e0cfab\",\"pct\":16.2,\"name\":\"Oatmeal\"},{\"hex\":\"#6c936f\",\"pct\":11.1,\"name\":\"Grey\"},{\"hex\":\"#83a488\",\"pct\":5.9,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0142-01","sku":"DWXH-255198","sc_id":199,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Ishi Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ishi, color:Oatmeal, Oatmeal, Linen, Beige, Stone, Dove","body_html":"<div class=\"sanderson-product\">\n<p>Ishi in Dove is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0142-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_100d.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_1_SAW0142_01_SANDERSON_Ishi_WALLPAPER_b679.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_2_SAW0142_01_SANDERSON_Ishi_WALLPAPER_cc4e.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_3_SAW0142_01_SANDERSON_Ishi_WALLPAPER_150d.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_9833.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_b701.jpg","alt":"Ishi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255198","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255198-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ishi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c9cead"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9dec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2caa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c9cead\",\"pct\":34.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d9dec2\",\"pct\":31.9,\"name\":\"Linen\"},{\"hex\":\"#c2caa2\",\"pct\":18,\"name\":\"Beige\"},{\"hex\":\"#adb98d\",\"pct\":16,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0142-02","sku":"DWXH-255199","sc_id":200,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Ishi Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ishi, color:Oatmeal, Oatmeal, Linen, Beige, Stone, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Ishi in Indigo is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0142-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_100d.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_9833.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_1_SAW0142_02_SANDERSON_Ishi_WALLPAPER_aad1.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_2_SAW0142_02_SANDERSON_Ishi_WALLPAPER_9d38.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_3_SAW0142_02_SANDERSON_Ishi_WALLPAPER_8c77.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_b701.jpg","alt":"Ishi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255199","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255199-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ishi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c9cead"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9dec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2caa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c9cead\",\"pct\":34.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d9dec2\",\"pct\":31.9,\"name\":\"Linen\"},{\"hex\":\"#c2caa2\",\"pct\":18,\"name\":\"Beige\"},{\"hex\":\"#adb98d\",\"pct\":16,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0121-01","sku":"DWXH-255200","sc_id":201,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Juniper Pine Elder Bark | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Juniper Pine, color:Mist, Mist, Linen, Grey, Silver, Alabaster, Botanical, Leaves-And-Trees, Elder Bark, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Juniper Pine in Elder Bark is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Juniper Pine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Elder Bark</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Juniper Pine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0121-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216622_bade.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216621_1408.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216621_1_SAW0121_01_SANDERSON_Juniper_Pine_WALLPAPER_e7fd.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216621_2_SAW0121_01_SANDERSON_Juniper_Pine_WALLPAPER_1c70.jpg","alt":"Juniper Pine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255200","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255200-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0121-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0121-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Juniper Pine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Elder Bark"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Elder Bark"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d4ce"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdad4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#8ea09a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d4ce\",\"pct\":31.6,\"name\":\"Mist\"},{\"hex\":\"#dcdad4\",\"pct\":19,\"name\":\"Linen\"},{\"hex\":\"#8ea09a\",\"pct\":18.3,\"name\":\"Grey\"},{\"hex\":\"#b6c0ba\",\"pct\":17.2,\"name\":\"Silver\"},{\"hex\":\"#e0ded9\",\"pct\":13.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0121-02","sku":"DWXH-255201","sc_id":202,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Juniper Pine Forest | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Juniper Pine, color:Mist, Mist, Linen, Grey, Silver, Alabaster, Botanical, Leaves-And-Trees, Forest, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Juniper Pine in Forest is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Juniper Pine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Forest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Juniper Pine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0121-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216622_bade.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216621_1408.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216622_1_SAW0121_02_SANDERSON_Juniper_Pine_WALLPAPER_523d.jpg","alt":"Juniper Pine"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216622_2_SAW0121_02_SANDERSON_Juniper_Pine_WALLPAPER_c169.jpg","alt":"Juniper Pine"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255201","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255201-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0121-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0121-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Juniper Pine"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Forest"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Forest"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d4ce"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcdad4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#8ea09a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d4ce\",\"pct\":31.6,\"name\":\"Mist\"},{\"hex\":\"#dcdad4\",\"pct\":19,\"name\":\"Linen\"},{\"hex\":\"#8ea09a\",\"pct\":18.3,\"name\":\"Grey\"},{\"hex\":\"#b6c0ba\",\"pct\":17.2,\"name\":\"Silver\"},{\"hex\":\"#e0ded9\",\"pct\":13.8,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0143-02","sku":"DWXH-255202","sc_id":203,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Kalapi Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kalapi, color:Beige, Beige, Green, Olive, Birds, Parchment","body_html":"<div class=\"sanderson-product\">\n<p>Kalapi in Parchment is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Green, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0143-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216757_1bd3.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216758_1_SAW0143_02_SANDERSON_Kalapi_WALLPAPER_3b02.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216758_2_SAW0143_02_SANDERSON_Kalapi_WALLPAPER_de87.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216758_b23d.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216759_5376.jpg","alt":"Kalapi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255202","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255202-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kalapi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfbea0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#546f4d"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#848657"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfbea0\",\"pct\":66.3,\"name\":\"Beige\"},{\"hex\":\"#546f4d\",\"pct\":22.7,\"name\":\"Green\"},{\"hex\":\"#848657\",\"pct\":10.9,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0143-01","sku":"DWXH-255203","sc_id":204,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Kalapi Peacock | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kalapi, color:Beige, Beige, Green, Olive, Birds, Peacock","body_html":"<div class=\"sanderson-product\">\n<p>Kalapi in Peacock is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Green, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Peacock</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0143-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216757_1bd3.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216757_1_SAW0143_01_SANDERSON_Kalapi_WALLPAPER_eb6e.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216757_2_SAW0143_01_SANDERSON_Kalapi_WALLPAPER_b100.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216758_b23d.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216759_5376.jpg","alt":"Kalapi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255203","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255203-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kalapi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Peacock"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Peacock"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfbea0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#546f4d"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#848657"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfbea0\",\"pct\":66.3,\"name\":\"Beige\"},{\"hex\":\"#546f4d\",\"pct\":22.7,\"name\":\"Green\"},{\"hex\":\"#848657\",\"pct\":10.9,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0143-03","sku":"DWXH-255204","sc_id":205,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Kalapi Sea Glass | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kalapi, color:Beige, Beige, Green, Olive, Birds, Sea Glass","body_html":"<div class=\"sanderson-product\">\n<p>Kalapi in Sea Glass is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Green, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Glass</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kalapi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0143-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216757_1bd3.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216758_b23d.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216759_1_SAW0143_03_SANDERSON_Kalapi_WALLPAPER_60a5.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216759_2_SAW0143_03_SANDERSON_Kalapi_WALLPAPER_8744.jpg","alt":"Kalapi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216759_5376.jpg","alt":"Kalapi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255204","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255204-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0143-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kalapi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Glass"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Glass"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bfbea0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#546f4d"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#848657"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bfbea0\",\"pct\":66.3,\"name\":\"Beige\"},{\"hex\":\"#546f4d\",\"pct\":22.7,\"name\":\"Green\"},{\"hex\":\"#848657\",\"pct\":10.9,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0106-03","sku":"DWXH-255205","sc_id":206,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kasuri Caraway | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kasuri, color:Alabaster, Alabaster, Wedgwood, Grey, Stone, Mist, Caraway","body_html":"<div class=\"sanderson-product\">\n<p>Kasuri in Caraway is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Wedgwood, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Caraway</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0106-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_58bd.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_a88d.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_1_SAW0106_03_SANDERSON_Kasuri_WALLPAPER_21d3.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_2_SAW0106_03_SANDERSON_Kasuri_WALLPAPER_0c31.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_2ab8.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_fcb5.jpg","alt":"Kasuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255205","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255205-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kasuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Caraway"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Caraway"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e8dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#6a90ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7a9eb3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e8dd\",\"pct\":33.9,\"name\":\"Alabaster\"},{\"hex\":\"#6a90ab\",\"pct\":20.3,\"name\":\"Wedgwood\"},{\"hex\":\"#7a9eb3\",\"pct\":18.6,\"name\":\"Grey\"},{\"hex\":\"#8ba9b9\",\"pct\":13.9,\"name\":\"Stone\"},{\"hex\":\"#c6d1cf\",\"pct\":13.4,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0106-04","sku":"DWXH-255206","sc_id":207,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kasuri Country Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kasuri, color:Alabaster, Alabaster, Wedgwood, Grey, Stone, Mist, Country Linen","body_html":"<div class=\"sanderson-product\">\n<p>Kasuri in Country Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Wedgwood, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Country Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0106-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_58bd.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_a88d.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_2ab8.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_1_SAW0106_04_SANDERSON_Kasuri_WALLPAPER_84ac.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_2_SAW0106_04_SANDERSON_Kasuri_WALLPAPER_c569.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_fcb5.jpg","alt":"Kasuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255206","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255206-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kasuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e8dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#6a90ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7a9eb3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e8dd\",\"pct\":33.9,\"name\":\"Alabaster\"},{\"hex\":\"#6a90ab\",\"pct\":20.3,\"name\":\"Wedgwood\"},{\"hex\":\"#7a9eb3\",\"pct\":18.6,\"name\":\"Grey\"},{\"hex\":\"#8ba9b9\",\"pct\":13.9,\"name\":\"Stone\"},{\"hex\":\"#c6d1cf\",\"pct\":13.4,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0106-02","sku":"DWXH-255207","sc_id":208,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kasuri Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kasuri, color:Alabaster, Alabaster, Wedgwood, Grey, Stone, Mist, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Kasuri in Indigo is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Wedgwood, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0106-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_58bd.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_a88d.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_1_SAW0106_02_SANDERSON_Kasuri_WALLPAPER_a3c6.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_2_SAW0106_02_SANDERSON_Kasuri_WALLPAPER_8641.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_2ab8.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_fcb5.jpg","alt":"Kasuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255207","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255207-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kasuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e8dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#6a90ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7a9eb3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e8dd\",\"pct\":33.9,\"name\":\"Alabaster\"},{\"hex\":\"#6a90ab\",\"pct\":20.3,\"name\":\"Wedgwood\"},{\"hex\":\"#7a9eb3\",\"pct\":18.6,\"name\":\"Grey\"},{\"hex\":\"#8ba9b9\",\"pct\":13.9,\"name\":\"Stone\"},{\"hex\":\"#c6d1cf\",\"pct\":13.4,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0088-02","sku":"DWXH-255208","sc_id":209,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kent Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kent, color:Mist, Mist, Linen, Alabaster, Dove","body_html":"<div class=\"sanderson-product\">\n<p>Kent in Dove is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0088-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_8054.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_1_SAW0088_02_SANDERSON_Kent_WALLPAPER_b6d9.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_1d0d.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_2_SAW0088_02_SANDERSON_Kent_WALLPAPER_0a2e.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_b778.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_eb10.jpg","alt":"Kent"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255208","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255208-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kent"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdd4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbdcd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dddedb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdd4d1\",\"pct\":54.9,\"name\":\"Mist\"},{\"hex\":\"#dbdcd9\",\"pct\":29.9,\"name\":\"Linen\"},{\"hex\":\"#dddedb\",\"pct\":15.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0088-04","sku":"DWXH-255209","sc_id":210,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kent Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kent, color:Mist, Mist, Linen, Alabaster, Parchment","body_html":"<div class=\"sanderson-product\">\n<p>Kent in Parchment is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0088-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_8054.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_1d0d.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_b778.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_1_SAW0088_04_SANDERSON_Kent_WALLPAPER_4c79.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_2_SAW0088_04_SANDERSON_Kent_WALLPAPER_66df.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_eb10.jpg","alt":"Kent"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255209","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255209-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kent"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdd4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbdcd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dddedb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdd4d1\",\"pct\":54.9,\"name\":\"Mist\"},{\"hex\":\"#dbdcd9\",\"pct\":29.9,\"name\":\"Linen\"},{\"hex\":\"#dddedb\",\"pct\":15.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0088-01","sku":"DWXH-255210","sc_id":211,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kent Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kent, color:Mist, Mist, Linen, Alabaster, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Kent in Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0088-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_8054.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_1_SAW0088_01_SANDERSON_Kent_WALLPAPER_9f55.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_2_SAW0088_01_SANDERSON_Kent_WALLPAPER_7724.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_1d0d.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_b778.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_eb10.jpg","alt":"Kent"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255210","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255210-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kent"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdd4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbdcd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dddedb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdd4d1\",\"pct\":54.9,\"name\":\"Mist\"},{\"hex\":\"#dbdcd9\",\"pct\":29.9,\"name\":\"Linen\"},{\"hex\":\"#dddedb\",\"pct\":15.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0239-04","sku":"DWXH-255211","sc_id":212,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Khes Indigo/Woad | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Khes, color:Alabaster, Alabaster, Oatmeal, Sand, Cream, Linen, Indigo/Woad","body_html":"<div class=\"sanderson-product\">\n<p>Khes in Indigo/Woad is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo/Woad</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0239-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217450_f936.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217451_eb34.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217452_ef8c.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217453_96d5.jpg","alt":"Khes"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255211","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255211-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Khes"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo/Woad"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo/Woad"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edeae0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbc7ae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7ae93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edeae0\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#dbc7ae\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c7ae93\",\"pct\":15.4,\"name\":\"Sand\"},{\"hex\":\"#e9e2d5\",\"pct\":15.3,\"name\":\"Cream\"},{\"hex\":\"#e1d3c0\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0239-03","sku":"DWXH-255212","sc_id":213,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Khes Udaipur Blue/Aleppo Pepper | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Khes, color:Alabaster, Alabaster, Oatmeal, Sand, Cream, Linen, Udaipur Blue/Aleppo Pepper","body_html":"<div class=\"sanderson-product\">\n<p>Khes in Udaipur Blue/Aleppo Pepper is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Udaipur Blue/Aleppo Pepper</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0239-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217450_f936.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217451_eb34.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217452_ef8c.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217453_96d5.jpg","alt":"Khes"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255212","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255212-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Khes"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Udaipur Blue/Aleppo Pepper"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Udaipur Blue/Aleppo Pepper"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edeae0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbc7ae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7ae93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edeae0\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#dbc7ae\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c7ae93\",\"pct\":15.4,\"name\":\"Sand\"},{\"hex\":\"#e9e2d5\",\"pct\":15.3,\"name\":\"Cream\"},{\"hex\":\"#e1d3c0\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0131-01","sku":"DWXH-255213","sc_id":214,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"King Protea Aqua/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, King Protea, color:Alabaster, Alabaster, Greige, Linen, Cream, Florals, Aqua/Linen","body_html":"<div class=\"sanderson-product\">\n<p>King Protea in Aqua/Linen is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Aqua/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0131-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216647_56a3.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216645_1_SAW0131_01_SANDERSON_King_Protea_WALLPAPER_9f38.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216645_2_SAW0131_01_SANDERSON_King_Protea_WALLPAPER_1088.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216645_88a9.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216646_75db.jpg","alt":"King Protea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255213","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255213-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"King Protea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Aqua/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Aqua/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eae2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"49.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcb5a6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eae2\",\"pct\":49.2,\"name\":\"Alabaster\"},{\"hex\":\"#bcb5a6\",\"pct\":18.3,\"name\":\"Greige\"},{\"hex\":\"#dad3c6\",\"pct\":18.1,\"name\":\"Linen\"},{\"hex\":\"#e3ddd2\",\"pct\":14.4,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0131-02","sku":"DWXH-255214","sc_id":215,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"King Protea Rhodera/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, King Protea, color:Alabaster, Alabaster, Greige, Linen, Cream, Florals, Rhodera/Cream","body_html":"<div class=\"sanderson-product\">\n<p>King Protea in Rhodera/Cream is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rhodera/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0131-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216647_56a3.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216645_88a9.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216646_1_SAW0131_02_SANDERSON_King_Protea_WALLPAPER_342a.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216646_2_SAW0131_02_SANDERSON_King_Protea_WALLPAPER_5b17.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216646_75db.jpg","alt":"King Protea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255214","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255214-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"King Protea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rhodera/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rhodera/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eae2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"49.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcb5a6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eae2\",\"pct\":49.2,\"name\":\"Alabaster\"},{\"hex\":\"#bcb5a6\",\"pct\":18.3,\"name\":\"Greige\"},{\"hex\":\"#dad3c6\",\"pct\":18.1,\"name\":\"Linen\"},{\"hex\":\"#e3ddd2\",\"pct\":14.4,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0228-03","sku":"DWXH-255215","sc_id":216,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Kitchen Garden Mineral/ Gooseberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kitchen Garden, color:Alabaster, Alabaster, Greige, White, Oatmeal, Cream, Mineral/ Gooseberry","body_html":"<div class=\"sanderson-product\">\n<p>Kitchen Garden in Mineral/ Gooseberry is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral/ Gooseberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0228-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_571e.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_ab91.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_1_SAW0228_03_SANDERSON_Kitchen_Garden_WALLPAPER_7d6e.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_2_SAW0228_03_SANDERSON_Kitchen_Garden_WALLPAPER_8b2b.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_87cc.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_eaad.jpg","alt":"Kitchen Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255215","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255215-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kitchen Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral/ Gooseberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral/ Gooseberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1efe4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcaf98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1ea"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1efe4\",\"pct\":34.3,\"name\":\"Alabaster\"},{\"hex\":\"#bcaf98\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1ea\",\"pct\":19.1,\"name\":\"White\"},{\"hex\":\"#d6ccb9\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e1d4\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0228-04","sku":"DWXH-255216","sc_id":217,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Kitchen Garden Olive & Russet | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kitchen Garden, color:Alabaster, Alabaster, Greige, White, Oatmeal, Cream, Olive & Russet","body_html":"<div class=\"sanderson-product\">\n<p>Kitchen Garden in Olive & Russet is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olive & Russet</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0228-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_571e.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_ab91.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_87cc.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_1_SAW0228_04_SANDERSON_Kitchen_Garden_WALLPAPER_c268.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_2_SAW0228_04_SANDERSON_Kitchen_Garden_WALLPAPER_9493.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_eaad.jpg","alt":"Kitchen Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255216","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255216-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kitchen Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olive & Russet"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olive & Russet"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1efe4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcaf98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1ea"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1efe4\",\"pct\":34.3,\"name\":\"Alabaster\"},{\"hex\":\"#bcaf98\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1ea\",\"pct\":19.1,\"name\":\"White\"},{\"hex\":\"#d6ccb9\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e1d4\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0228-01","sku":"DWXH-255217","sc_id":218,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Kitchen Garden Wedgwood/Gala | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kitchen Garden, color:Alabaster, Alabaster, Greige, White, Oatmeal, Cream, Wedgwood/Gala","body_html":"<div class=\"sanderson-product\">\n<p>Kitchen Garden in Wedgwood/Gala is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood/Gala</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0228-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_571e.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_1_SAW0228_01_SANDERSON_Kitchen_Garden_WALLPAPER_e32c.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_2_SAW0228_01_SANDERSON_Kitchen_Garden_WALLPAPER_73ea.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_ab91.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_87cc.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_eaad.jpg","alt":"Kitchen Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255217","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255217-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kitchen Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood/Gala"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood/Gala"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1efe4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcaf98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1ea"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1efe4\",\"pct\":34.3,\"name\":\"Alabaster\"},{\"hex\":\"#bcaf98\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1ea\",\"pct\":19.1,\"name\":\"White\"},{\"hex\":\"#d6ccb9\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e1d4\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0209-02","sku":"DWXH-255218","sc_id":219,"settlement_verdict":"CLEAR","retail":346,"product":{"title":"Lakeland Paradis Carmine | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lakeland Paradis, color:Ivory, Ivory, Taupe, Oatmeal, Linen, Alabaster, Carmine","body_html":"<div class=\"sanderson-product\">\n<p>Lakeland Paradis in Carmine is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Carmine</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0209-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217306_74ac.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217304_49f9.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217305_1_SAW0209_02_SANDERSON_Lakeland_Paradis_WALLPAPER_9df4.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217305_812a.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217307_ec1e.jpg","alt":"Lakeland Paradis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255218","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255218-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lakeland Paradis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Carmine"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Carmine"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f6ea"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b09d7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1c6aa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f6ea\",\"pct\":37.2,\"name\":\"Ivory\"},{\"hex\":\"#b09d7a\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#d1c6aa\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0d9c2\",\"pct\":14.9,\"name\":\"Linen\"},{\"hex\":\"#f1eedf\",\"pct\":11.2,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0209-01","sku":"DWXH-255219","sc_id":220,"settlement_verdict":"CLEAR","retail":346,"product":{"title":"Lakeland Paradis Poppinjay/Lion | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lakeland Paradis, color:Ivory, Ivory, Taupe, Oatmeal, Linen, Alabaster, Poppinjay/Lion","body_html":"<div class=\"sanderson-product\">\n<p>Lakeland Paradis in Poppinjay/Lion is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Poppinjay/Lion</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0209-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217306_74ac.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217304_1_SAW0209_01_SANDERSON_Lakeland_Paradis_WALLPAPER_b91f.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217304_2_SAW0209_01_SANDERSON_Lakeland_Paradis_WALLPAPER_1bc9.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217304_49f9.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217305_812a.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217307_ec1e.jpg","alt":"Lakeland Paradis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255219","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255219-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lakeland Paradis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Poppinjay/Lion"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Poppinjay/Lion"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f6ea"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b09d7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1c6aa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f6ea\",\"pct\":37.2,\"name\":\"Ivory\"},{\"hex\":\"#b09d7a\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#d1c6aa\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0d9c2\",\"pct\":14.9,\"name\":\"Linen\"},{\"hex\":\"#f1eedf\",\"pct\":11.2,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0209-04","sku":"DWXH-255220","sc_id":221,"settlement_verdict":"CLEAR","retail":346,"product":{"title":"Lakeland Paradis Sandstone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lakeland Paradis, color:Ivory, Ivory, Taupe, Oatmeal, Linen, Alabaster, Sandstone","body_html":"<div class=\"sanderson-product\">\n<p>Lakeland Paradis in Sandstone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sandstone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lakeland Paradis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0209-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217306_74ac.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217304_49f9.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217305_812a.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217307_1_SAW0209_04_SANDERSON_Lakeland_Paradis_WALLPAPER_8cee.jpg","alt":"Lakeland Paradis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217307_ec1e.jpg","alt":"Lakeland Paradis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255220","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255220-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0209-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lakeland Paradis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sandstone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sandstone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f6ea"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b09d7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1c6aa"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f6ea\",\"pct\":37.2,\"name\":\"Ivory\"},{\"hex\":\"#b09d7a\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#d1c6aa\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0d9c2\",\"pct\":14.9,\"name\":\"Linen\"},{\"hex\":\"#f1eedf\",\"pct\":11.2,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0112-01","sku":"DWXH-255221","sc_id":222,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Larina Sky | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Larina, color:Silver, Silver, Mist, Birds, Sky","body_html":"<div class=\"sanderson-product\">\n<p>Larina in Sky is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Larina</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Larina</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0112-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216578_efb3.jpg","alt":"Larina"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216578_1_SAW0112_01_SANDERSON_Larina_WALLPAPER_1cfc.jpg","alt":"Larina"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216578_2_SAW0112_01_SANDERSON_Larina_WALLPAPER_6484.jpg","alt":"Larina"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255221","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255221-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0112-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0112-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Larina"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b9c9c8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c1cecb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"10.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b9c9c8\",\"pct\":87.8,\"name\":\"Silver\"},{\"hex\":\"#c1cecb\",\"pct\":10.5,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0054-01","sku":"DWXH-255222","sc_id":223,"settlement_verdict":"CLEAR","retail":186,"product":{"title":"Laurie Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Laurie, color:Linen, Linen, Cream, Alabaster, Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Laurie in Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Laurie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Laurie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0054-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216268_8b53.jpg","alt":"Laurie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216268_1_SAW0054_01_SANDERSON_Laurie_WALLPAPER_92ce.jpg","alt":"Laurie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216268_2_SAW0054_01_SANDERSON_Laurie_WALLPAPER_696e.jpg","alt":"Laurie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255222","price":"186.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255222-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0054-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0054-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Laurie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2dbd0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e2d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ece5dd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2dbd0\",\"pct\":53.5,\"name\":\"Linen\"},{\"hex\":\"#e8e2d9\",\"pct\":33.3,\"name\":\"Cream\"},{\"hex\":\"#ece5dd\",\"pct\":13.2,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0089-02","sku":"DWXH-255223","sc_id":224,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Lerena Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lerena, color:Linen, Linen, Oatmeal, Cream, Birds, Florals","body_html":"<div class=\"sanderson-product\">\n<p>Lerena in Cream is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0089-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_da8d.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_19d4.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_1_SAW0089_02_SANDERSON_Lerena_WALLPAPER_cc5c.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_2_SAW0089_02_SANDERSON_Lerena_WALLPAPER_d550.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_ecbc.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_eeaf.jpg","alt":"Lerena"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255223","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255223-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lerena"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5c3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd0ba"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5c3\",\"pct\":67.6,\"name\":\"Linen\"},{\"hex\":\"#dbd0ba\",\"pct\":16.8,\"name\":\"Oatmeal\"},{\"hex\":\"#e3ded1\",\"pct\":15.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0089-01","sku":"DWXH-255224","sc_id":225,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Lerena Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lerena, color:Linen, Linen, Oatmeal, Cream, Birds, Florals, Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Lerena in Ivory is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0089-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_da8d.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_19d4.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_1_SAW0089_01_SANDERSON_Lerena_WALLPAPER_6612.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_2_SAW0089_01_SANDERSON_Lerena_WALLPAPER_8c82.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_ecbc.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_eeaf.jpg","alt":"Lerena"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255224","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255224-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lerena"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5c3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd0ba"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5c3\",\"pct\":67.6,\"name\":\"Linen\"},{\"hex\":\"#dbd0ba\",\"pct\":16.8,\"name\":\"Oatmeal\"},{\"hex\":\"#e3ded1\",\"pct\":15.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0089-03","sku":"DWXH-255225","sc_id":226,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Lerena Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lerena, color:Linen, Linen, Oatmeal, Cream, Birds, Florals, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Lerena in Wedgwood is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0089-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_da8d.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_19d4.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_1_SAW0089_03_SANDERSON_Lerena_WALLPAPER_972c.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_2_SAW0089_03_SANDERSON_Lerena_WALLPAPER_3908.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_ecbc.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_eeaf.jpg","alt":"Lerena"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255225","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255225-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lerena"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5c3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd0ba"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5c3\",\"pct\":67.6,\"name\":\"Linen\"},{\"hex\":\"#dbd0ba\",\"pct\":16.8,\"name\":\"Oatmeal\"},{\"hex\":\"#e3ded1\",\"pct\":15.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0089-04","sku":"DWXH-255226","sc_id":227,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Lerena Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lerena, color:Linen, Linen, Oatmeal, Cream, Birds, Florals, Willow","body_html":"<div class=\"sanderson-product\">\n<p>Lerena in Willow is a Sanderson Wallcovering in a birds/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lerena</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0089-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216398_da8d.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216397_19d4.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216399_ecbc.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_1_SAW0089_04_SANDERSON_Lerena_WALLPAPER_a0c6.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_2_SAW0089_04_SANDERSON_Lerena_WALLPAPER_57ff.jpg","alt":"Lerena"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216400_eeaf.jpg","alt":"Lerena"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255226","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255226-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0089-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lerena"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5c3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd0ba"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5c3\",\"pct\":67.6,\"name\":\"Linen\"},{\"hex\":\"#dbd0ba\",\"pct\":16.8,\"name\":\"Oatmeal\"},{\"hex\":\"#e3ded1\",\"pct\":15.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0122-04","sku":"DWXH-255227","sc_id":228,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Lismore (Wallcovering) Fig | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lismore (Wallcovering), color:Greige, Greige, Stone, Animal-Print, Birds, Fig, Animal Print","body_html":"<div class=\"sanderson-product\">\n<p>Lismore (Wallcovering) in Fig is a Sanderson Wallcovering in a animal print/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fig</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0122-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216605_730d.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216604_d812.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216606_5b3f.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216607_1_SAW0122_04_SANDERSON_Lismore_WALLPAPER_d09d.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216607_bc25.jpg","alt":"Lismore (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255227","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255227-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lismore (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b2b3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"93.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a9a9a0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b2b3ad\",\"pct\":93.6,\"name\":\"Greige\"},{\"hex\":\"#a9a9a0\",\"pct\":3.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animal-print"}]}
+{"mfr_sku":"SAW0122-01","sku":"DWXH-255228","sc_id":229,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Lismore (Wallcovering) Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lismore (Wallcovering), color:Greige, Greige, Stone, Animal-Print, Birds, Indigo, Animal Print","body_html":"<div class=\"sanderson-product\">\n<p>Lismore (Wallcovering) in Indigo is a Sanderson Wallcovering in a animal print/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0122-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216605_730d.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216604_1_SAW0122_01_SANDERSON_Lismore_WALLPAPER_e5b9.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216604_d812.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216606_5b3f.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216607_bc25.jpg","alt":"Lismore (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255228","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255228-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lismore (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b2b3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"93.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a9a9a0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b2b3ad\",\"pct\":93.6,\"name\":\"Greige\"},{\"hex\":\"#a9a9a0\",\"pct\":3.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animal-print"}]}
+{"mfr_sku":"SAW0100-01","sku":"DWXH-255229","sc_id":230,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Little Thistles Grey Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Little Thistles, color:Alabaster, Alabaster, Linen, Mist, Botanical, Florals, Grey Blue","body_html":"<div class=\"sanderson-product\">\n<p>Little Thistles in Grey Blue is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0100-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216513_ad91.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216513_1_SAW0100_01_SANDERSON_Little_Thistles_WALLPAPER_a35b.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216513_2_SAW0100_01_SANDERSON_Little_Thistles_WALLPAPER_7050.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216513_3_SAW0100_01_SANDERSON_Little_Thistles_WALLPAPER_0af9.jpg","alt":"Little Thistles"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255229","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255229-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0100-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0100-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Little Thistles"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dedfda"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"63.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dadcd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cdd0ca"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dedfda\",\"pct\":63.4,\"name\":\"Alabaster\"},{\"hex\":\"#dadcd7\",\"pct\":26.6,\"name\":\"Linen\"},{\"hex\":\"#cdd0ca\",\"pct\":9.8,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0099-02","sku":"DWXH-255230","sc_id":231,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Little Thistles Pewter | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Little Thistles, color:Linen, Linen, Alabaster, Oatmeal, Botanical, Florals, Pewter","body_html":"<div class=\"sanderson-product\">\n<p>Little Thistles in Pewter is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pewter</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0099-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216511_2953.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216512_1_SAW0099_02_SANDERSON_Little_Thistles_WALLPAPER_a8f7.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216512_2_SAW0099_02_SANDERSON_Little_Thistles_WALLPAPER_4be0.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216512_3_SAW0099_02_SANDERSON_Little_Thistles_WALLPAPER_2535.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216512_62be.jpg","alt":"Little Thistles"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255230","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255230-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0099-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0099-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Little Thistles"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pewter"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pewter"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddbce"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dfdfd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ccc8b9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddbce\",\"pct\":70.8,\"name\":\"Linen\"},{\"hex\":\"#dfdfd9\",\"pct\":20.4,\"name\":\"Alabaster\"},{\"hex\":\"#ccc8b9\",\"pct\":8.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0173-02","sku":"DWXH-255231","sc_id":232,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Lotus Leaf Midnight/Copper | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lotus Leaf, color:Beige, Beige, Sand, Gold, Oatmeal, Botanical, Midnight/Copper","body_html":"<div class=\"sanderson-product\">\n<p>Lotus Leaf in Midnight/Copper is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Sand, Gold. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lotus Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Midnight/Copper</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lotus Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0173-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217126_9c57.jpg","alt":"Lotus Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217127_c896.jpg","alt":"Lotus Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255231","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255231-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0173-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0173-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lotus Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Midnight/Copper"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Midnight/Copper"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdc492"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1be89"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9a157"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdc492\",\"pct\":37.1,\"name\":\"Beige\"},{\"hex\":\"#b1be89\",\"pct\":33.7,\"name\":\"Sand\"},{\"hex\":\"#a9a157\",\"pct\":16.7,\"name\":\"Gold\"},{\"hex\":\"#d9d7ab\",\"pct\":12.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0173-01","sku":"DWXH-255232","sc_id":233,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Lotus Leaf Oriental Green/ Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lotus Leaf, color:Beige, Beige, Sand, Gold, Oatmeal, Botanical, Oriental Green/ Olive","body_html":"<div class=\"sanderson-product\">\n<p>Lotus Leaf in Oriental Green/ Olive is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Sand, Gold. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lotus Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Oriental Green/ Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lotus Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0173-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217126_9c57.jpg","alt":"Lotus Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217127_c896.jpg","alt":"Lotus Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255232","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255232-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0173-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0173-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lotus Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Oriental Green/ Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Oriental Green/ Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdc492"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1be89"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9a157"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdc492\",\"pct\":37.1,\"name\":\"Beige\"},{\"hex\":\"#b1be89\",\"pct\":33.7,\"name\":\"Sand\"},{\"hex\":\"#a9a157\",\"pct\":16.7,\"name\":\"Gold\"},{\"hex\":\"#d9d7ab\",\"pct\":12.4,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0078-02","sku":"DWXH-255233","sc_id":234,"settlement_verdict":"REVIEW-VISION","retail":139,"product":{"title":"Lyme Leaf Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lyme Leaf, color:Linen, Linen, Mist, Leaves-And-Trees, Dove, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Lyme Leaf in Dove is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lyme Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lyme Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0078-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216384_3cdd.jpg","alt":"Lyme Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216384_1_SAW0078_02_SANDERSON_Lyme_Leaf_WALLPAPER_0868.jpg","alt":"Lyme Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216384_2_SAW0078_02_SANDERSON_Lyme_Leaf_WALLPAPER_a831.jpg","alt":"Lyme Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255233","price":"139.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255233-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0078-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0078-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lyme Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9d9d8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d5d5d3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"44.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9d9d8\",\"pct\":54.8,\"name\":\"Linen\"},{\"hex\":\"#d5d5d3\",\"pct\":44.5,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0144-01","sku":"DWXH-255234","sc_id":235,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Madurai Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Madurai, color:Linen, Linen, Oatmeal, Cream, Alabaster, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Madurai in Indigo is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0144-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216756_858a.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216754_1_SAW0144_01_SANDERSON_Madurai_WALLPAPER_151d.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216754_62f2.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216755_77ea.jpg","alt":"Madurai"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255234","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255234-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Madurai"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbdcc2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d1a2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e8d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbdcc2\",\"pct\":36.7,\"name\":\"Linen\"},{\"hex\":\"#d7d1a2\",\"pct\":30,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e8d5\",\"pct\":16.7,\"name\":\"Cream\"},{\"hex\":\"#e8ebdc\",\"pct\":16.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0144-02","sku":"DWXH-255235","sc_id":236,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Madurai Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Madurai, color:Linen, Linen, Oatmeal, Cream, Alabaster, Stone","body_html":"<div class=\"sanderson-product\">\n<p>Madurai in Stone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0144-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216756_858a.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216754_62f2.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216755_1_SAW0144_02_SANDERSON_Madurai_WALLPAPER_2d18.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216755_77ea.jpg","alt":"Madurai"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255235","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255235-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Madurai"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbdcc2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d1a2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e8d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbdcc2\",\"pct\":36.7,\"name\":\"Linen\"},{\"hex\":\"#d7d1a2\",\"pct\":30,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e8d5\",\"pct\":16.7,\"name\":\"Cream\"},{\"hex\":\"#e8ebdc\",\"pct\":16.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0079-02","sku":"DWXH-255236","sc_id":237,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Maelee Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Maelee, color:Mist, Mist, Linen, Alabaster, Florals","body_html":"<div class=\"sanderson-product\">\n<p>Maelee in Linen is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Maelee</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Maelee</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0079-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216349_a492.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216348_3149.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216349_1_SAW0079_02_SANDERSON_Maelee_WALLPAPER_cf5a.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216349_2_SAW0079_02_SANDERSON_Maelee_WALLPAPER_7c23.jpg","alt":"Maelee"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255236","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255236-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0079-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0079-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Maelee"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d1c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dad9d6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dfdedc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d1c6\",\"pct\":55,\"name\":\"Mist\"},{\"hex\":\"#dad9d6\",\"pct\":28.8,\"name\":\"Linen\"},{\"hex\":\"#dfdedc\",\"pct\":16.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0047-02","sku":"DWXH-255237","sc_id":238,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Magnolia &Amp; Pomegranate & Pomegranate Grey Blue/Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Magnolia &Amp; Pomegranate, color:Silver, Silver, Alabaster, Linen, Mist, Oatmeal, Florals, Leaves-And-Trees, & Pomegranate Grey Blue/Parchment, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Magnolia &amp; Pomegranate in & Pomegranate Grey Blue/Parchment is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Magnolia &Amp; Pomegranate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Pomegranate Grey Blue/Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Magnolia &Amp; Pomegranate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0047-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215724_34ee.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215722_a0e6.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215724_1_SAW0047_02_SANDERSON_Magnolia_and_Pomegranate_WALLPAPER_548d.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215724_2_SAW0047_02_SANDERSON_Magnolia_and_Pomegranate_WALLPAPER_b907.jpg","alt":"Magnolia &Amp; Pomegranate"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255237","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255237-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0047-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0047-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Magnolia &Amp; Pomegranate"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Pomegranate Grey Blue/Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Pomegranate Grey Blue/Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c6bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e6e2dc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dedacd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c6bf\",\"pct\":54.6,\"name\":\"Silver\"},{\"hex\":\"#e6e2dc\",\"pct\":14.6,\"name\":\"Alabaster\"},{\"hex\":\"#dedacd\",\"pct\":13.9,\"name\":\"Linen\"},{\"hex\":\"#ccccc0\",\"pct\":10.1,\"name\":\"Mist\"},{\"hex\":\"#c7c3b2\",\"pct\":6.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0047-01","sku":"DWXH-255238","sc_id":239,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Magnolia &Amp; Pomegranate & Pomegranate Silver/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Magnolia &Amp; Pomegranate, color:Silver, Silver, Alabaster, Linen, Mist, Oatmeal, Florals, Leaves-And-Trees, & Pomegranate Silver/Linen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Magnolia &amp; Pomegranate in & Pomegranate Silver/Linen is a Sanderson Wallcovering in a florals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Magnolia &Amp; Pomegranate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Pomegranate Silver/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Magnolia &Amp; Pomegranate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0047-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215724_34ee.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215722_1_SAW0047_01_SANDERSON_Magnolia_and_Pomegranate_WALLPAPER_0b88.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215722_2_SAW0047_01_SANDERSON_Magnolia_and_Pomegranate_WALLPAPER_e149.jpg","alt":"Magnolia &Amp; Pomegranate"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215722_a0e6.jpg","alt":"Magnolia &Amp; Pomegranate"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255238","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255238-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0047-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0047-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Magnolia &Amp; Pomegranate"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Pomegranate Silver/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Pomegranate Silver/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c6bf"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e6e2dc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dedacd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c6bf\",\"pct\":54.6,\"name\":\"Silver\"},{\"hex\":\"#e6e2dc\",\"pct\":14.6,\"name\":\"Alabaster\"},{\"hex\":\"#dedacd\",\"pct\":13.9,\"name\":\"Linen\"},{\"hex\":\"#ccccc0\",\"pct\":10.1,\"name\":\"Mist\"},{\"hex\":\"#c7c3b2\",\"pct\":6.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0241-03","sku":"DWXH-255239","sc_id":240,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Malay Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Malay, color:Duck Egg, Duck Egg, Mist, Silver, Clay","body_html":"<div class=\"sanderson-product\">\n<p>Malay in Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Mist, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0241-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_3f44.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_1263.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217456_1602.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217457_5c24.jpg","alt":"Malay"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255239","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255239-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Malay"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aabdbd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6cdcd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b7c4c4"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aabdbd\",\"pct\":74.9,\"name\":\"Duck Egg\"},{\"hex\":\"#c6cdcd\",\"pct\":15.1,\"name\":\"Mist\"},{\"hex\":\"#b7c4c4\",\"pct\":10,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0241-04","sku":"DWXH-255240","sc_id":241,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Malay Kiln Mud | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Malay, color:Duck Egg, Duck Egg, Mist, Silver, Kiln Mud","body_html":"<div class=\"sanderson-product\">\n<p>Malay in Kiln Mud is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Mist, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Kiln Mud</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0241-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_3f44.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_1263.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217456_1602.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217457_5c24.jpg","alt":"Malay"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255240","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255240-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Malay"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Kiln Mud"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Kiln Mud"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aabdbd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6cdcd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b7c4c4"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aabdbd\",\"pct\":74.9,\"name\":\"Duck Egg\"},{\"hex\":\"#c6cdcd\",\"pct\":15.1,\"name\":\"Mist\"},{\"hex\":\"#b7c4c4\",\"pct\":10,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0241-02","sku":"DWXH-255241","sc_id":242,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Malay Porcelain | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Malay, color:Duck Egg, Duck Egg, Mist, Silver, Porcelain","body_html":"<div class=\"sanderson-product\">\n<p>Malay in Porcelain is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Mist, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Porcelain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0241-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_3f44.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_1263.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_1_SAW0241_02_SANDERSON_Malay_WALLPAPER_6cc5.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_2_SAW0241_02_SANDERSON_Malay_WALLPAPER_afcf.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_3_SAW0241_02_SANDERSON_Malay_WALLPAPER_2aa6.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217456_1602.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217457_5c24.jpg","alt":"Malay"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255241","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255241-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Malay"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Porcelain"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Porcelain"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aabdbd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6cdcd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b7c4c4"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aabdbd\",\"pct\":74.9,\"name\":\"Duck Egg\"},{\"hex\":\"#c6cdcd\",\"pct\":15.1,\"name\":\"Mist\"},{\"hex\":\"#b7c4c4\",\"pct\":10,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0069-05","sku":"DWXH-255242","sc_id":243,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Mapperton Chalk | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mapperton, color:Sand, Sand, Beige, Oatmeal, Linen, Botanical, Florals, Chalk","body_html":"<div class=\"sanderson-product\">\n<p>Mapperton in Chalk is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chalk</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0069-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_e25d.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_a60a.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_b70e.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_ac27.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_1_SAW0069_05_SANDERSON_Mapperton_WALLPAPER_9ebc.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_4751.jpg","alt":"Mapperton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255242","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255242-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mapperton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chalk"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chalk"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bab78a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7c3a4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4d0bb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bab78a\",\"pct\":53,\"name\":\"Sand\"},{\"hex\":\"#c7c3a4\",\"pct\":17.9,\"name\":\"Beige\"},{\"hex\":\"#d4d0bb\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#dfdcd0\",\"pct\":12,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0069-02","sku":"DWXH-255243","sc_id":244,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Mapperton Garden Green/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mapperton, color:Sand, Sand, Beige, Oatmeal, Linen, Botanical, Florals, Garden Green/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Mapperton in Garden Green/Cream is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Garden Green/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0069-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_e25d.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_a60a.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_1_SAW0069_02_SANDERSON_Mapperton_WALLPAPER_a70b.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_b70e.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_ac27.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_4751.jpg","alt":"Mapperton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255243","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255243-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mapperton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Garden Green/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Garden Green/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bab78a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7c3a4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4d0bb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bab78a\",\"pct\":53,\"name\":\"Sand\"},{\"hex\":\"#c7c3a4\",\"pct\":17.9,\"name\":\"Beige\"},{\"hex\":\"#d4d0bb\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#dfdcd0\",\"pct\":12,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0069-04","sku":"DWXH-255244","sc_id":245,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Mapperton Linen/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mapperton, color:Sand, Sand, Beige, Oatmeal, Linen, Botanical, Florals, Linen/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Mapperton in Linen/Cream is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0069-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_e25d.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_a60a.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_b70e.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_1_SAW0069_04_SANDERSON_Mapperton_WALLPAPER_b3e0.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_ac27.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_4751.jpg","alt":"Mapperton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255244","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255244-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mapperton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bab78a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7c3a4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4d0bb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bab78a\",\"pct\":53,\"name\":\"Sand\"},{\"hex\":\"#c7c3a4\",\"pct\":17.9,\"name\":\"Beige\"},{\"hex\":\"#d4d0bb\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#dfdcd0\",\"pct\":12,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0069-01","sku":"DWXH-255245","sc_id":246,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Mapperton Russet/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mapperton, color:Sand, Sand, Beige, Oatmeal, Linen, Botanical, Florals, Russet/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Mapperton in Russet/Cream is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Russet/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0069-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_e25d.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_1_SAW0069_01_SANDERSON_Mapperton_WALLPAPER_fb84.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_a60a.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_b70e.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_ac27.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_4751.jpg","alt":"Mapperton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255245","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255245-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mapperton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Russet/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Russet/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bab78a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7c3a4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4d0bb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bab78a\",\"pct\":53,\"name\":\"Sand\"},{\"hex\":\"#c7c3a4\",\"pct\":17.9,\"name\":\"Beige\"},{\"hex\":\"#d4d0bb\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#dfdcd0\",\"pct\":12,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0069-03","sku":"DWXH-255246","sc_id":247,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Mapperton Sage/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mapperton, color:Sand, Sand, Beige, Oatmeal, Linen, Botanical, Florals, Sage/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Mapperton in Sage/Cream is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mapperton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0069-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216340_e25d.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216339_a60a.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_1_SAW0069_03_SANDERSON_Mapperton_WALLPAPER_3841.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216341_b70e.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216342_ac27.jpg","alt":"Mapperton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216343_4751.jpg","alt":"Mapperton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255246","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255246-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0069-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mapperton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bab78a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7c3a4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d4d0bb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bab78a\",\"pct\":53,\"name\":\"Sand\"},{\"hex\":\"#c7c3a4\",\"pct\":17.9,\"name\":\"Beige\"},{\"hex\":\"#d4d0bb\",\"pct\":17.2,\"name\":\"Oatmeal\"},{\"hex\":\"#dfdcd0\",\"pct\":12,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0150-04","sku":"DWXH-255247","sc_id":248,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Marcham Copper Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Marcham, color:Beige, Beige, Oatmeal, Botanical, Leaves-And-Trees, Copper Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Marcham in Copper Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Copper Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0150-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216903_6536.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216899_eafd.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216900_b753.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216901_15e9.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216902_6640.jpg","alt":"Marcham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255247","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255247-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Marcham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Copper Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Copper Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c7c0a4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cdb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c7c0a4\",\"pct\":73.7,\"name\":\"Beige\"},{\"hex\":\"#d0cdb6\",\"pct\":26.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0150-05","sku":"DWXH-255248","sc_id":249,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Marcham Country Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Marcham, color:Beige, Beige, Oatmeal, Botanical, Leaves-And-Trees, Country Linen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Marcham in Country Linen is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Country Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0150-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216903_6536.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216899_eafd.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216900_b753.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216901_15e9.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216902_6640.jpg","alt":"Marcham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255248","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255248-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Marcham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c7c0a4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cdb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c7c0a4\",\"pct\":73.7,\"name\":\"Beige\"},{\"hex\":\"#d0cdb6\",\"pct\":26.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0150-01","sku":"DWXH-255249","sc_id":250,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Marcham Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Marcham, color:Beige, Beige, Oatmeal, Botanical, Leaves-And-Trees, Cream, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Marcham in Cream is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0150-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216903_6536.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216899_eafd.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216900_b753.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216901_15e9.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216902_6640.jpg","alt":"Marcham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255249","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255249-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Marcham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c7c0a4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cdb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c7c0a4\",\"pct\":73.7,\"name\":\"Beige\"},{\"hex\":\"#d0cdb6\",\"pct\":26.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0090-04","sku":"DWXH-255250","sc_id":251,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Mawton Charcoal/Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mawton, color:Alabaster, Alabaster, Linen, Charcoal/Gilver","body_html":"<div class=\"sanderson-product\">\n<p>Mawton in Charcoal/Gilver is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0090-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_2463.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_6cbf.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_4b1b.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_1_SAW0090_04_SANDERSON_Mawton_WALLPAPER_7c41.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_2_SAW0090_04_SANDERSON_Mawton_WALLPAPER_82c5.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_eb9a.jpg","alt":"Mawton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255250","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255250-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mawton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3e4dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd8d0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3e4dc\",\"pct\":66.4,\"name\":\"Alabaster\"},{\"hex\":\"#dbd8d0\",\"pct\":33.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0090-01","sku":"DWXH-255251","sc_id":252,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Mawton Dove/Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mawton, color:Alabaster, Alabaster, Linen, Dove/Stone","body_html":"<div class=\"sanderson-product\">\n<p>Mawton in Dove/Stone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove/Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0090-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_2463.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_1_SAW0090_01_SANDERSON_Mawton_WALLPAPER_4e9c.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_2_SAW0090_01_SANDERSON_Mawton_WALLPAPER_d2e3.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_6cbf.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_4b1b.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_eb9a.jpg","alt":"Mawton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255251","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255251-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mawton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove/Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove/Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3e4dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd8d0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3e4dc\",\"pct\":66.4,\"name\":\"Alabaster\"},{\"hex\":\"#dbd8d0\",\"pct\":33.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0090-02","sku":"DWXH-255252","sc_id":253,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Mawton Willow/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mawton, color:Alabaster, Alabaster, Linen, Willow/Cream","body_html":"<div class=\"sanderson-product\">\n<p>Mawton in Willow/Cream is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0090-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_2463.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_1_SAW0090_02_SANDERSON_Mawton_WALLPAPER_c76b.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_2_SAW0090_02_SANDERSON_Mawton_WALLPAPER_98a8.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_6cbf.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_4b1b.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_eb9a.jpg","alt":"Mawton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255252","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255252-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mawton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3e4dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd8d0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3e4dc\",\"pct\":66.4,\"name\":\"Alabaster\"},{\"hex\":\"#dbd8d0\",\"pct\":33.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0048-01","sku":"DWXH-255253","sc_id":254,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Meadow Canvas Gilver/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Meadow Canvas, color:Linen, Linen, Taupe, Beige, Greige, Stone, Botanical, Leaves-And-Trees, Gilver/Linen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Meadow Canvas in Gilver/Linen is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Taupe, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Meadow Canvas</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gilver/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Meadow Canvas</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0048-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_7b0b.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_1_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_63ed.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_2_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_82e7.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_3_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_cd9e.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_4_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_6c0c.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_5_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_2415.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_6_SAW0048_01_SANDERSON_Meadow_Canvas_WALLPAPER_8a64.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215695_399c.jpg","alt":"Meadow Canvas"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255253","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255253-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0048-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0048-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Meadow Canvas"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gilver/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gilver/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d6cfc5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a08a78"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c8beb2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d6cfc5\",\"pct\":29.8,\"name\":\"Linen\"},{\"hex\":\"#a08a78\",\"pct\":20.6,\"name\":\"Taupe\"},{\"hex\":\"#c8beb2\",\"pct\":17.4,\"name\":\"Beige\"},{\"hex\":\"#b9a99c\",\"pct\":16.2,\"name\":\"Greige\"},{\"hex\":\"#ae9c8d\",\"pct\":16.1,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0048-03","sku":"DWXH-255254","sc_id":255,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Meadow Canvas White/Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Meadow Canvas, color:Linen, Linen, Taupe, Beige, Greige, Stone, Botanical, Leaves-And-Trees, White/Parchment, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Meadow Canvas in White/Parchment is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Taupe, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Meadow Canvas</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">White/Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Meadow Canvas</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0048-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215693_7b0b.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215695_1_SAW0048_03_SANDERSON_Meadow_Canvas_WALLPAPER_7b45.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215695_2_SAW0048_03_SANDERSON_Meadow_Canvas_WALLPAPER_061a.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215695_399c.jpg","alt":"Meadow Canvas"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215695_3_SAW0048_03_SANDERSON_Meadow_Canvas_WALLPAPER_f9a4.jpg","alt":"Meadow Canvas"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255254","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255254-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0048-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0048-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Meadow Canvas"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"White/Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"White/Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d6cfc5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a08a78"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c8beb2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d6cfc5\",\"pct\":29.8,\"name\":\"Linen\"},{\"hex\":\"#a08a78\",\"pct\":20.6,\"name\":\"Taupe\"},{\"hex\":\"#c8beb2\",\"pct\":17.4,\"name\":\"Beige\"},{\"hex\":\"#b9a99c\",\"pct\":16.2,\"name\":\"Greige\"},{\"hex\":\"#ae9c8d\",\"pct\":16.1,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0197-01","sku":"DWXH-255255","sc_id":256,"settlement_verdict":"REVIEW-VISION","retail":402,"product":{"title":"Mickey In The Clouds Sea Salt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey In The Clouds, color:Silver, Silver, Linen, Stone, Animals, Sea Salt","body_html":"<div class=\"sanderson-product\">\n<p>Mickey In The Clouds in Sea Salt is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Linen, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey In The Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Salt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey In The Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0197-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217292_2eae.jpg","alt":"Mickey In The Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217292_1_SAW0197_01_SANDERSON_Mickey_In_The_Clouds_WALLPAPER_96c4.jpg","alt":"Mickey In The Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217292_2_SAW0197_01_SANDERSON_Mickey_In_The_Clouds_WALLPAPER_924b.jpg","alt":"Mickey In The Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217292_3_SAW0197_01_SANDERSON_Mickey_In_The_Clouds_WALLPAPER_43e8.jpg","alt":"Mickey In The Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255255","price":"402.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255255-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0197-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0197-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey In The Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c0c9c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ddd6cc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a0a19d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c0c9c6\",\"pct\":59.8,\"name\":\"Silver\"},{\"hex\":\"#ddd6cc\",\"pct\":29.8,\"name\":\"Linen\"},{\"hex\":\"#a0a19d\",\"pct\":8.2,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0195-02","sku":"DWXH-255256","sc_id":257,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey &Amp; Minnie & Minnie Allsorts | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey &Amp; Minnie, color:Sage, Sage, Taupe, Animals, & Minnie Allsorts","body_html":"<div class=\"sanderson-product\">\n<p>Mickey &amp; Minnie in & Minnie Allsorts is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Minnie Allsorts</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0195-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_6e90.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_fe85.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_1_SAW0195_02_SANDERSON_Mickey_and_Minnie_WALLPAPER_1823.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_2_SAW0195_02_SANDERSON_Mickey_and_Minnie_WALLPAPER_e70a.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_574c.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_28ef.jpg","alt":"Mickey &Amp; Minnie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255256","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255256-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey &Amp; Minnie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Minnie Allsorts"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Minnie Allsorts"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#84bc77"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8b67"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#84bc77\",\"pct\":88.4,\"name\":\"Sage\"},{\"hex\":\"#9b8b67\",\"pct\":11.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0195-03","sku":"DWXH-255257","sc_id":258,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey &Amp; Minnie & Minnie Bonbon Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey &Amp; Minnie, color:Sage, Sage, Taupe, Animals, & Minnie Bonbon Blue","body_html":"<div class=\"sanderson-product\">\n<p>Mickey &amp; Minnie in & Minnie Bonbon Blue is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Minnie Bonbon Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0195-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_6e90.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_fe85.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_574c.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_1_SAW0195_03_SANDERSON_Mickey_and_Minnie_WALLPAPER_382a.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_28ef.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_2_SAW0195_03_SANDERSON_Mickey_and_Minnie_WALLPAPER_b22e.jpg","alt":"Mickey &Amp; Minnie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255257","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255257-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey &Amp; Minnie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Minnie Bonbon Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Minnie Bonbon Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#84bc77"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8b67"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#84bc77\",\"pct\":88.4,\"name\":\"Sage\"},{\"hex\":\"#9b8b67\",\"pct\":11.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0195-04","sku":"DWXH-255258","sc_id":259,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey &Amp; Minnie & Minnie Gumball Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey &Amp; Minnie, color:Sage, Sage, Taupe, Animals, & Minnie Gumball Green","body_html":"<div class=\"sanderson-product\">\n<p>Mickey &amp; Minnie in & Minnie Gumball Green is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Minnie Gumball Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0195-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_6e90.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_fe85.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_574c.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_28ef.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_1_SAW0195_04_SANDERSON_Mickey_and_Minnie_WALLPAPER_a314.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_2_SAW0195_04_SANDERSON_Mickey_and_Minnie_WALLPAPER_1c26.jpg","alt":"Mickey &Amp; Minnie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255258","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255258-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey &Amp; Minnie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Minnie Gumball Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Minnie Gumball Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#84bc77"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8b67"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#84bc77\",\"pct\":88.4,\"name\":\"Sage\"},{\"hex\":\"#9b8b67\",\"pct\":11.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0195-01","sku":"DWXH-255259","sc_id":260,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey &Amp; Minnie & Minnie Rhubarb & Custard | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey &Amp; Minnie, color:Sage, Sage, Taupe, Animals, & Minnie Rhubarb & Custard","body_html":"<div class=\"sanderson-product\">\n<p>Mickey &amp; Minnie in & Minnie Rhubarb & Custard is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Minnie Rhubarb & Custard</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey &Amp; Minnie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0195-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217265_6e90.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_1_SAW0195_01_SANDERSON_Mickey_and_Minnie_WALLPAPER_16c7.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_2_SAW0195_01_SANDERSON_Mickey_and_Minnie_WALLPAPER_bc90.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217262_fe85.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217263_574c.jpg","alt":"Mickey &Amp; Minnie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217264_28ef.jpg","alt":"Mickey &Amp; Minnie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255259","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255259-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0195-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey &Amp; Minnie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Minnie Rhubarb & Custard"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Minnie Rhubarb & Custard"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#84bc77"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8b67"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#84bc77\",\"pct\":88.4,\"name\":\"Sage\"},{\"hex\":\"#9b8b67\",\"pct\":11.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0198-03","sku":"DWXH-255260","sc_id":261,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey Stripe Peanut | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey Stripe, color:White, White, Mist, Olive, Alabaster, Animals, Peanut","body_html":"<div class=\"sanderson-product\">\n<p>Mickey Stripe in Peanut is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Mist, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Peanut</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0198-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217271_db4e.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217272_bd5d.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217273_1_SAW0198_03_SANDERSON_Mickey_Stripe_WALLPAPER_9a4a.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217273_1c75.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217273_2_SAW0198_03_SANDERSON_Mickey_Stripe_WALLPAPER_a761.jpg","alt":"Mickey Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255260","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255260-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Peanut"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Peanut"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f4ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"38.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7d2ce"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"37.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7b6d5e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f4ec\",\"pct\":38.2,\"name\":\"White\"},{\"hex\":\"#c7d2ce\",\"pct\":37.3,\"name\":\"Mist\"},{\"hex\":\"#7b6d5e\",\"pct\":18.5,\"name\":\"Olive\"},{\"hex\":\"#e1e5df\",\"pct\":6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0198-01","sku":"DWXH-255261","sc_id":262,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey Stripe Sea Salt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey Stripe, color:White, White, Mist, Olive, Alabaster, Animals, Sea Salt","body_html":"<div class=\"sanderson-product\">\n<p>Mickey Stripe in Sea Salt is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Mist, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Salt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0198-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217271_db4e.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217271_1_SAW0198_01_SANDERSON_Mickey_Stripe_WALLPAPER_0a37.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217271_2_SAW0198_01_SANDERSON_Mickey_Stripe_WALLPAPER_9522.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217272_bd5d.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217273_1c75.jpg","alt":"Mickey Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255261","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255261-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f4ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"38.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7d2ce"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"37.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7b6d5e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f4ec\",\"pct\":38.2,\"name\":\"White\"},{\"hex\":\"#c7d2ce\",\"pct\":37.3,\"name\":\"Mist\"},{\"hex\":\"#7b6d5e\",\"pct\":18.5,\"name\":\"Olive\"},{\"hex\":\"#e1e5df\",\"pct\":6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0199-03","sku":"DWXH-255262","sc_id":263,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Minnie On The Move Babyccino | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Minnie On The Move, color:Cream, Cream, Sand, Alabaster, Animals, Babyccino","body_html":"<div class=\"sanderson-product\">\n<p>Minnie On The Move in Babyccino is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Babyccino</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0199-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217269_9855.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217268_2697.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217270_e7bb.jpg","alt":"Minnie On The Move"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255262","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255262-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Minnie On The Move"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Babyccino"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Babyccino"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f3cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"77.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bdab86"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f6dd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f3cb\",\"pct\":77.7,\"name\":\"Cream\"},{\"hex\":\"#bdab86\",\"pct\":18.4,\"name\":\"Sand\"},{\"hex\":\"#f2f6dd\",\"pct\":3.9,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0199-02","sku":"DWXH-255263","sc_id":264,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Minnie On The Move Sherbet | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Minnie On The Move, color:Cream, Cream, Sand, Alabaster, Animals, Sherbet","body_html":"<div class=\"sanderson-product\">\n<p>Minnie On The Move in Sherbet is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sherbet</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0199-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217269_9855.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217268_2697.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217270_e7bb.jpg","alt":"Minnie On The Move"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255263","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255263-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Minnie On The Move"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sherbet"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sherbet"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f3cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"77.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bdab86"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f6dd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f3cb\",\"pct\":77.7,\"name\":\"Cream\"},{\"hex\":\"#bdab86\",\"pct\":18.4,\"name\":\"Sand\"},{\"hex\":\"#f2f6dd\",\"pct\":3.9,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0242-04","sku":"DWXH-255264","sc_id":265,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Mudmi Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mudmi, color:Denim, Denim, Teal, Stone, Clay","body_html":"<div class=\"sanderson-product\">\n<p>Mudmi in Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Teal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0242-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217459_a43e.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_77ca.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217460_b898.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217461_2e69.jpg","alt":"Mudmi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255264","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255264-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mudmi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#496d82"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#406881"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#99a9ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#496d82\",\"pct\":70,\"name\":\"Denim\"},{\"hex\":\"#406881\",\"pct\":21.4,\"name\":\"Teal\"},{\"hex\":\"#99a9ae\",\"pct\":8.7,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0242-02","sku":"DWXH-255265","sc_id":266,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Mudmi Persian Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mudmi, color:Denim, Denim, Teal, Stone, Persian Blue","body_html":"<div class=\"sanderson-product\">\n<p>Mudmi in Persian Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Teal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Persian Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0242-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217459_a43e.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_77ca.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217460_b898.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217461_2e69.jpg","alt":"Mudmi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255265","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255265-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mudmi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Persian Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Persian Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#496d82"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#406881"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#99a9ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#496d82\",\"pct\":70,\"name\":\"Denim\"},{\"hex\":\"#406881\",\"pct\":21.4,\"name\":\"Teal\"},{\"hex\":\"#99a9ae\",\"pct\":8.7,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0242-03","sku":"DWXH-255266","sc_id":267,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Mudmi Pink Pepper | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mudmi, color:Denim, Denim, Teal, Stone, Pink Pepper","body_html":"<div class=\"sanderson-product\">\n<p>Mudmi in Pink Pepper is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Teal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pink Pepper</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0242-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217459_a43e.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_77ca.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217460_b898.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217461_2e69.jpg","alt":"Mudmi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255266","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255266-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mudmi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pink Pepper"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pink Pepper"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#496d82"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#406881"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#99a9ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#496d82\",\"pct\":70,\"name\":\"Denim\"},{\"hex\":\"#406881\",\"pct\":21.4,\"name\":\"Teal\"},{\"hex\":\"#99a9ae\",\"pct\":8.7,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0243-04","sku":"DWXH-255267","sc_id":268,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Musafir Lionsmane | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Musafir, color:Alabaster, Alabaster, Duck Egg, Mist, Greige, Silver, Lionsmane","body_html":"<div class=\"sanderson-product\">\n<p>Musafir in Lionsmane is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lionsmane</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0243-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217445_dc32.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217443_a527.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217444_37d5.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217446_4752.jpg","alt":"Musafir"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255267","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255267-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Musafir"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lionsmane"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lionsmane"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#eae7e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"26.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a5c3c4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c3d0cd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#eae7e0\",\"pct\":26.7,\"name\":\"Alabaster\"},{\"hex\":\"#a5c3c4\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#c3d0cd\",\"pct\":20.6,\"name\":\"Mist\"},{\"hex\":\"#b8aea6\",\"pct\":15.7,\"name\":\"Greige\"},{\"hex\":\"#b6c5c3\",\"pct\":12.2,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0243-03","sku":"DWXH-255268","sc_id":269,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Musafir Mineral/Coral | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Musafir, color:Alabaster, Alabaster, Duck Egg, Mist, Greige, Silver, Mineral/Coral","body_html":"<div class=\"sanderson-product\">\n<p>Musafir in Mineral/Coral is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral/Coral</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0243-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217445_dc32.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217443_a527.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217444_37d5.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217446_4752.jpg","alt":"Musafir"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255268","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255268-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Musafir"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral/Coral"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral/Coral"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#eae7e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"26.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a5c3c4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c3d0cd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#eae7e0\",\"pct\":26.7,\"name\":\"Alabaster\"},{\"hex\":\"#a5c3c4\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#c3d0cd\",\"pct\":20.6,\"name\":\"Mist\"},{\"hex\":\"#b8aea6\",\"pct\":15.7,\"name\":\"Greige\"},{\"hex\":\"#b6c5c3\",\"pct\":12.2,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0243-02","sku":"DWXH-255269","sc_id":270,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Musafir Udaipur Blue/Cinnamon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Musafir, color:Alabaster, Alabaster, Duck Egg, Mist, Greige, Silver, Udaipur Blue/Cinnamon","body_html":"<div class=\"sanderson-product\">\n<p>Musafir in Udaipur Blue/Cinnamon is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Udaipur Blue/Cinnamon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0243-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217445_dc32.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217443_a527.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217444_37d5.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217446_4752.jpg","alt":"Musafir"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255269","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255269-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Musafir"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Udaipur Blue/Cinnamon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Udaipur Blue/Cinnamon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#eae7e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"26.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a5c3c4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c3d0cd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#eae7e0\",\"pct\":26.7,\"name\":\"Alabaster\"},{\"hex\":\"#a5c3c4\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#c3d0cd\",\"pct\":20.6,\"name\":\"Mist\"},{\"hex\":\"#b8aea6\",\"pct\":15.7,\"name\":\"Greige\"},{\"hex\":\"#b6c5c3\",\"pct\":12.2,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0080-01","sku":"DWXH-255270","sc_id":271,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Nectar Mineral/Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nectar, color:Alabaster, Alabaster, Animals, Mineral/Dove","body_html":"<div class=\"sanderson-product\">\n<p>Nectar in Mineral/Dove is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nectar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral/Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nectar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0080-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216354_dddd.jpg","alt":"Nectar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216354_1_SAW0080_01_SANDERSON_Nectar_WALLPAPER_46fa.jpg","alt":"Nectar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216354_2_SAW0080_01_SANDERSON_Nectar_WALLPAPER_e909.jpg","alt":"Nectar"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255270","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255270-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0080-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0080-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nectar"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral/Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral/Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e9e9e9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"97.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e9e9e9\",\"pct\":97.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0101-02","sku":"DWXH-255271","sc_id":272,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Nest Egg Almond Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nest Egg, color:Linen, Linen, Oatmeal, Animals, Birds, Almond Stone","body_html":"<div class=\"sanderson-product\">\n<p>Nest Egg in Almond Stone is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Almond Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0101-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_a5a6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_5ec0.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_1_SAW0101_02_SANDERSON_Nest_Egg_WALLPAPER_3297.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_2_SAW0101_02_SANDERSON_Nest_Egg_WALLPAPER_fd34.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_49cb.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_3ff8.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_d5cd.jpg","alt":"Nest Egg"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255271","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255271-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nest Egg"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Almond Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Almond Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddccb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d2c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddccb\",\"pct\":82.9,\"name\":\"Linen\"},{\"hex\":\"#d2c1ac\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0101-05","sku":"DWXH-255272","sc_id":273,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Nest Egg Blush Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nest Egg, color:Linen, Linen, Oatmeal, Animals, Birds, Blush Pink","body_html":"<div class=\"sanderson-product\">\n<p>Nest Egg in Blush Pink is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blush Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0101-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_a5a6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_5ec0.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_49cb.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_3ff8.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_d5cd.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_1_SAW0101_05_SANDERSON_Nest_Egg_WALLPAPER_3fe7.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_2_SAW0101_05_SANDERSON_Nest_Egg_WALLPAPER_a8d2.jpg","alt":"Nest Egg"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255272","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255272-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nest Egg"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blush Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blush Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddccb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d2c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddccb\",\"pct\":82.9,\"name\":\"Linen\"},{\"hex\":\"#d2c1ac\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0101-04","sku":"DWXH-255273","sc_id":274,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Nest Egg Corn Graphite | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nest Egg, color:Linen, Linen, Oatmeal, Animals, Birds, Corn Graphite","body_html":"<div class=\"sanderson-product\">\n<p>Nest Egg in Corn Graphite is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Corn Graphite</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0101-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_a5a6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_5ec0.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_49cb.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_3ff8.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_1_SAW0101_04_SANDERSON_Nest_Egg_WALLPAPER_ae86.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_2_SAW0101_04_SANDERSON_Nest_Egg_WALLPAPER_0920.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_d5cd.jpg","alt":"Nest Egg"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255273","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255273-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nest Egg"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Corn Graphite"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Corn Graphite"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddccb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d2c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddccb\",\"pct\":82.9,\"name\":\"Linen\"},{\"hex\":\"#d2c1ac\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0101-01","sku":"DWXH-255274","sc_id":275,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Nest Egg Eggshell/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nest Egg, color:Linen, Linen, Oatmeal, Animals, Birds, Eggshell/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Nest Egg in Eggshell/Ivory is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eggshell/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0101-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_a5a6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_1_SAW0101_01_SANDERSON_Nest_Egg_WALLPAPER_8a62.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_2_SAW0101_01_SANDERSON_Nest_Egg_WALLPAPER_56e6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_5ec0.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_49cb.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_3ff8.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_d5cd.jpg","alt":"Nest Egg"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255274","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255274-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nest Egg"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eggshell/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eggshell/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddccb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d2c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddccb\",\"pct\":82.9,\"name\":\"Linen\"},{\"hex\":\"#d2c1ac\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0010-03","sku":"DWXH-255275","sc_id":276,"settlement_verdict":"CLEAR","retail":99,"product":{"title":"New Tiger Stripe Wallcovering Leaf Grn/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, New Tiger Stripe Wallcovering, color:Blush, Blush, Alabaster, White, Cream, Ivory, Leaf Grn/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>New Tiger Stripe Wallcovering in Leaf Grn/Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Blush, Alabaster, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Leaf Grn/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0010-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP101_b1e2.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP103_9421.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP104_9af4.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP106_bc8c.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP107_f903.jpg","alt":"New Tiger Stripe Wallcovering"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255275","price":"99.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255275-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"New Tiger Stripe Wallcovering"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Leaf Grn/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Leaf Grn/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Blush"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdc4c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5e5df"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fefcf1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdc4c7\",\"pct\":37.8,\"name\":\"Blush\"},{\"hex\":\"#f5e5df\",\"pct\":19,\"name\":\"Alabaster\"},{\"hex\":\"#fefcf1\",\"pct\":15,\"name\":\"White\"},{\"hex\":\"#f6d3d1\",\"pct\":14.5,\"name\":\"Cream\"},{\"hex\":\"#faf5eb\",\"pct\":13.6,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0010-04","sku":"DWXH-255276","sc_id":277,"settlement_verdict":"CLEAR","retail":99,"product":{"title":"New Tiger Stripe Wallcovering Honey/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, New Tiger Stripe Wallcovering, color:Blush, Blush, Alabaster, White, Cream, Ivory, Honey/Cream","body_html":"<div class=\"sanderson-product\">\n<p>New Tiger Stripe Wallcovering in Honey/Cream is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Blush, Alabaster, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Honey/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0010-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP101_b1e2.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP103_9421.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP104_9af4.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP106_bc8c.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP107_f903.jpg","alt":"New Tiger Stripe Wallcovering"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255276","price":"99.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255276-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"New Tiger Stripe Wallcovering"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Honey/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Honey/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Blush"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdc4c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5e5df"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fefcf1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdc4c7\",\"pct\":37.8,\"name\":\"Blush\"},{\"hex\":\"#f5e5df\",\"pct\":19,\"name\":\"Alabaster\"},{\"hex\":\"#fefcf1\",\"pct\":15,\"name\":\"White\"},{\"hex\":\"#f6d3d1\",\"pct\":14.5,\"name\":\"Cream\"},{\"hex\":\"#faf5eb\",\"pct\":13.6,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0010-05","sku":"DWXH-255277","sc_id":278,"settlement_verdict":"CLEAR","retail":99,"product":{"title":"New Tiger Stripe Wallcovering Blue/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, New Tiger Stripe Wallcovering, color:Blush, Blush, Alabaster, White, Cream, Ivory, Blue/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>New Tiger Stripe Wallcovering in Blue/Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Blush, Alabaster, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0010-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP101_b1e2.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP103_9421.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP104_9af4.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP106_bc8c.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP107_f903.jpg","alt":"New Tiger Stripe Wallcovering"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255277","price":"99.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255277-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"New Tiger Stripe Wallcovering"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Blush"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdc4c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5e5df"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fefcf1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdc4c7\",\"pct\":37.8,\"name\":\"Blush\"},{\"hex\":\"#f5e5df\",\"pct\":19,\"name\":\"Alabaster\"},{\"hex\":\"#fefcf1\",\"pct\":15,\"name\":\"White\"},{\"hex\":\"#f6d3d1\",\"pct\":14.5,\"name\":\"Cream\"},{\"hex\":\"#faf5eb\",\"pct\":13.6,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0010-06","sku":"DWXH-255278","sc_id":279,"settlement_verdict":"CLEAR","retail":99,"product":{"title":"New Tiger Stripe Wallcovering Linen/Calico | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, New Tiger Stripe Wallcovering, color:Blush, Blush, Alabaster, White, Cream, Ivory, Linen/Calico","body_html":"<div class=\"sanderson-product\">\n<p>New Tiger Stripe Wallcovering in Linen/Calico is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Blush, Alabaster, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Calico</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0010-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP101_b1e2.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP103_9421.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP104_9af4.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP106_bc8c.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP107_f903.jpg","alt":"New Tiger Stripe Wallcovering"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255278","price":"99.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255278-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"New Tiger Stripe Wallcovering"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Calico"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Calico"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Blush"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdc4c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5e5df"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fefcf1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdc4c7\",\"pct\":37.8,\"name\":\"Blush\"},{\"hex\":\"#f5e5df\",\"pct\":19,\"name\":\"Alabaster\"},{\"hex\":\"#fefcf1\",\"pct\":15,\"name\":\"White\"},{\"hex\":\"#f6d3d1\",\"pct\":14.5,\"name\":\"Cream\"},{\"hex\":\"#faf5eb\",\"pct\":13.6,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0010-01","sku":"DWXH-255279","sc_id":280,"settlement_verdict":"CLEAR","retail":99,"product":{"title":"New Tiger Stripe Wallcovering Rose/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, New Tiger Stripe Wallcovering, color:Blush, Blush, Alabaster, White, Cream, Ivory, Rose/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>New Tiger Stripe Wallcovering in Rose/Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Blush, Alabaster, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">New Tiger Stripe Wallcovering</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0010-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP101_b1e2.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP103_9421.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP104_9af4.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP106_bc8c.jpg","alt":"New Tiger Stripe Wallcovering"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVTP107_f903.jpg","alt":"New Tiger Stripe Wallcovering"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255279","price":"99.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255279-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0010-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"New Tiger Stripe Wallcovering"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Blush"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdc4c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f5e5df"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fefcf1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdc4c7\",\"pct\":37.8,\"name\":\"Blush\"},{\"hex\":\"#f5e5df\",\"pct\":19,\"name\":\"Alabaster\"},{\"hex\":\"#fefcf1\",\"pct\":15,\"name\":\"White\"},{\"hex\":\"#f6d3d1\",\"pct\":14.5,\"name\":\"Cream\"},{\"hex\":\"#faf5eb\",\"pct\":13.6,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0163-01","sku":"DWXH-255280","sc_id":281,"settlement_verdict":"REVIEW-VISION","retail":310,"product":{"title":"Olivia Botanical Green/Orange | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Olivia, color:Mist, Mist, Duck Egg, Stone, Silver, Linen, Alabaster, Florals, Botanical Green/Orange","body_html":"<div class=\"sanderson-product\">\n<p>Olivia in Botanical Green/Orange is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Duck Egg, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Olivia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green/Orange</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Olivia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0163-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217039_8a76.jpg","alt":"Olivia"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217038_5f34.jpg","alt":"Olivia"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255280","price":"310.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255280-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0163-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0163-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Olivia"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green/Orange"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green/Orange"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdd2cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b4cecb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a8b395"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdd2cc\",\"pct\":20.9,\"name\":\"Mist\"},{\"hex\":\"#b4cecb\",\"pct\":19.6,\"name\":\"Duck Egg\"},{\"hex\":\"#a8b395\",\"pct\":16.9,\"name\":\"Stone\"},{\"hex\":\"#c3cdba\",\"pct\":16,\"name\":\"Silver\"},{\"hex\":\"#d2d9c7\",\"pct\":13.4,\"name\":\"Linen\"},{\"hex\":\"#e1e7db\",\"pct\":13.1,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0163-02","sku":"DWXH-255281","sc_id":282,"settlement_verdict":"REVIEW-VISION","retail":310,"product":{"title":"Olivia Sky Mist/Tan | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Olivia, color:Mist, Mist, Duck Egg, Stone, Silver, Linen, Alabaster, Florals, Sky Mist/Tan","body_html":"<div class=\"sanderson-product\">\n<p>Olivia in Sky Mist/Tan is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Duck Egg, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Olivia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky Mist/Tan</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Olivia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0163-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217039_8a76.jpg","alt":"Olivia"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217038_5f34.jpg","alt":"Olivia"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255281","price":"310.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255281-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0163-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0163-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Olivia"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky Mist/Tan"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky Mist/Tan"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdd2cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b4cecb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a8b395"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdd2cc\",\"pct\":20.9,\"name\":\"Mist\"},{\"hex\":\"#b4cecb\",\"pct\":19.6,\"name\":\"Duck Egg\"},{\"hex\":\"#a8b395\",\"pct\":16.9,\"name\":\"Stone\"},{\"hex\":\"#c3cdba\",\"pct\":16,\"name\":\"Silver\"},{\"hex\":\"#d2d9c7\",\"pct\":13.4,\"name\":\"Linen\"},{\"hex\":\"#e1e7db\",\"pct\":13.1,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0210-01","sku":"DWXH-255282","sc_id":283,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Oology Portal Silkie | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Oology Portal, color:Linen, Linen, Oatmeal, Taupe, Birds, Silkie","body_html":"<div class=\"sanderson-product\">\n<p>Oology Portal in Silkie is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Oology Portal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silkie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Oology Portal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0210-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217326_bc21.jpg","alt":"Oology Portal"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217326_1_SAW0210_01_SANDERSON_Oology_Portal_WALLPAPER_91d5.jpg","alt":"Oology Portal"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255282","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255282-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0210-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0210-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Oology Portal"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silkie"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silkie"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5d9b4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d5caa2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b5986b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5d9b4\",\"pct\":51.8,\"name\":\"Linen\"},{\"hex\":\"#d5caa2\",\"pct\":30,\"name\":\"Oatmeal\"},{\"hex\":\"#b5986b\",\"pct\":18.2,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0091-03","sku":"DWXH-255283","sc_id":284,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Orange Tree Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Orange Tree, color:Linen, Linen, Oatmeal, Botanical, Leaves-And-Trees, Dove, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Orange Tree in Dove is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0091-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_56b5.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_fa1b.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_1_SAW0091_03_SANDERSON_Orange_Tree_WALLPAPER_39a8.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_2_SAW0091_03_SANDERSON_Orange_Tree_WALLPAPER_5026.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_a305.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_405a.jpg","alt":"Orange Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255283","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255283-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Orange Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"57.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d0bf"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"42.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2d9ca\",\"pct\":57.6,\"name\":\"Linen\"},{\"hex\":\"#d7d0bf\",\"pct\":42.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0091-01","sku":"DWXH-255284","sc_id":285,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Orange Tree Oyster | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Orange Tree, color:Linen, Linen, Oatmeal, Botanical, Leaves-And-Trees, Oyster, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Orange Tree in Oyster is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Oyster</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0091-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_56b5.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_1_SAW0091_01_SANDERSON_Orange_Tree_WALLPAPER_700d.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_2_SAW0091_01_SANDERSON_Orange_Tree_WALLPAPER_3858.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_fa1b.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_a305.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_405a.jpg","alt":"Orange Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255284","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255284-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Orange Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Oyster"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Oyster"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"57.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d0bf"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"42.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2d9ca\",\"pct\":57.6,\"name\":\"Linen\"},{\"hex\":\"#d7d0bf\",\"pct\":42.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0091-04","sku":"DWXH-255285","sc_id":286,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Orange Tree Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Orange Tree, color:Linen, Linen, Oatmeal, Botanical, Leaves-And-Trees, Stone, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Orange Tree in Stone is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0091-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_56b5.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_fa1b.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_a305.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_1_SAW0091_04_SANDERSON_Orange_Tree_WALLPAPER_bba1.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_2_SAW0091_04_SANDERSON_Orange_Tree_WALLPAPER_a0d3.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_405a.jpg","alt":"Orange Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255285","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255285-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Orange Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"57.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d0bf"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"42.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2d9ca\",\"pct\":57.6,\"name\":\"Linen\"},{\"hex\":\"#d7d0bf\",\"pct\":42.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0091-02","sku":"DWXH-255286","sc_id":287,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Orange Tree Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Orange Tree, color:Linen, Linen, Oatmeal, Botanical, Leaves-And-Trees, Willow, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Orange Tree in Willow is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Orange Tree</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0091-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_56b5.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216401_fa1b.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_1_SAW0091_02_SANDERSON_Orange_Tree_WALLPAPER_a5dd.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216402_2_SAW0091_02_SANDERSON_Orange_Tree_WALLPAPER_ac5a.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216403_a305.jpg","alt":"Orange Tree"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216404_405a.jpg","alt":"Orange Tree"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255286","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255286-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0091-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Orange Tree"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"57.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d0bf"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"42.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2d9ca\",\"pct\":57.6,\"name\":\"Linen\"},{\"hex\":\"#d7d0bf\",\"pct\":42.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0092-01","sku":"DWXH-255287","sc_id":288,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Osier Dove/Chalk | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osier, color:Alabaster, Alabaster, Linen, Cream, Botanical, Leaves-And-Trees, Dove/Chalk, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Osier in Dove/Chalk is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove/Chalk</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0092-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_206a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_1_SAW0092_01_SANDERSON_Osier_WALLPAPER_91d5.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_218a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_2_SAW0092_01_SANDERSON_Osier_WALLPAPER_9b8b.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_f6dd.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_0bf6.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_3e1e.jpg","alt":"Osier"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255287","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255287-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osier"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove/Chalk"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove/Chalk"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e3e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0dbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e3e0\",\"pct\":53.3,\"name\":\"Alabaster\"},{\"hex\":\"#e0dbd4\",\"pct\":32.1,\"name\":\"Linen\"},{\"hex\":\"#e3ded8\",\"pct\":14.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0092-05","sku":"DWXH-255288","sc_id":289,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Osier Ivory/Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osier, color:Alabaster, Alabaster, Linen, Cream, Botanical, Leaves-And-Trees, Ivory/Stone, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Osier in Ivory/Stone is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory/Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0092-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_206a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_218a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_f6dd.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_0bf6.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_3e1e.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_1_SAW0092_05_SANDERSON_Osier_WALLPAPER_1592.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_2_SAW0092_05_SANDERSON_Osier_WALLPAPER_afce.jpg","alt":"Osier"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255288","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255288-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osier"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e3e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0dbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e3e0\",\"pct\":53.3,\"name\":\"Alabaster\"},{\"hex\":\"#e0dbd4\",\"pct\":32.1,\"name\":\"Linen\"},{\"hex\":\"#e3ded8\",\"pct\":14.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0092-04","sku":"DWXH-255289","sc_id":290,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Osier Parchment/ Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osier, color:Alabaster, Alabaster, Linen, Cream, Botanical, Leaves-And-Trees, Parchment/ Cream, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Osier in Parchment/ Cream is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Parchment/ Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0092-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_206a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_218a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_f6dd.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_0bf6.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_1_SAW0092_04_SANDERSON_Osier_WALLPAPER_6506.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_2_SAW0092_04_SANDERSON_Osier_WALLPAPER_1f29.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_3e1e.jpg","alt":"Osier"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255289","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255289-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osier"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Parchment/ Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Parchment/ Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e3e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0dbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e3e0\",\"pct\":53.3,\"name\":\"Alabaster\"},{\"hex\":\"#e0dbd4\",\"pct\":32.1,\"name\":\"Linen\"},{\"hex\":\"#e3ded8\",\"pct\":14.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0092-03","sku":"DWXH-255290","sc_id":291,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Osier Rosewood/Sepia | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osier, color:Alabaster, Alabaster, Linen, Cream, Botanical, Leaves-And-Trees, Rosewood/Sepia, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Osier in Rosewood/Sepia is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rosewood/Sepia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0092-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_206a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_218a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_f6dd.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_0bf6.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_1_SAW0092_03_SANDERSON_Osier_WALLPAPER_3baf.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_2_SAW0092_03_SANDERSON_Osier_WALLPAPER_6b37.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_3e1e.jpg","alt":"Osier"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255290","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255290-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osier"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rosewood/Sepia"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rosewood/Sepia"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e3e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0dbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e3e0\",\"pct\":53.3,\"name\":\"Alabaster\"},{\"hex\":\"#e0dbd4\",\"pct\":32.1,\"name\":\"Linen\"},{\"hex\":\"#e3ded8\",\"pct\":14.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0092-02","sku":"DWXH-255291","sc_id":292,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Osier Willow/Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osier, color:Alabaster, Alabaster, Linen, Cream, Botanical, Leaves-And-Trees, Willow/Cream, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Osier in Willow/Cream is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow/Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osier</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0092-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216412_206a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216408_218a.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_1_SAW0092_02_SANDERSON_Osier_WALLPAPER_0eff.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_2_SAW0092_02_SANDERSON_Osier_WALLPAPER_1491.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216409_f6dd.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216410_0bf6.jpg","alt":"Osier"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216411_3e1e.jpg","alt":"Osier"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255291","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255291-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0092-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osier"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow/Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow/Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e3e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e0dbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3ded8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e3e0\",\"pct\":53.3,\"name\":\"Alabaster\"},{\"hex\":\"#e0dbd4\",\"pct\":32.1,\"name\":\"Linen\"},{\"hex\":\"#e3ded8\",\"pct\":14.7,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0152-05","sku":"DWXH-255292","sc_id":293,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Osney Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osney, color:Greige, Greige, Stone, Grey","body_html":"<div class=\"sanderson-product\">\n<p>Osney in Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0152-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216892_9487.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_86c2.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216893_5af1.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216894_503a.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216895_fff4.jpg","alt":"Osney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255292","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255292-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#abb9a0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aab89e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#abb9a0\",\"pct\":59.4,\"name\":\"Greige\"},{\"hex\":\"#aab89e\",\"pct\":39.6,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0152-02","sku":"DWXH-255293","sc_id":294,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Osney Leaf Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osney, color:Greige, Greige, Stone, Leaf Green","body_html":"<div class=\"sanderson-product\">\n<p>Osney in Leaf Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Leaf Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0152-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216892_9487.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_86c2.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216893_5af1.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216894_503a.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216895_fff4.jpg","alt":"Osney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255293","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255293-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Leaf Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Leaf Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#abb9a0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aab89e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#abb9a0\",\"pct\":59.4,\"name\":\"Greige\"},{\"hex\":\"#aab89e\",\"pct\":39.6,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0152-01","sku":"DWXH-255294","sc_id":295,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Osney Powder Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osney, color:Greige, Greige, Stone, Powder Blue","body_html":"<div class=\"sanderson-product\">\n<p>Osney in Powder Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Powder Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0152-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216892_9487.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_1_SAW0152_01_SANDERSON_Osney_WALLPAPER_0302.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_86c2.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216893_5af1.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216894_503a.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216895_fff4.jpg","alt":"Osney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255294","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255294-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Powder Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Powder Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#abb9a0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aab89e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#abb9a0\",\"pct\":59.4,\"name\":\"Greige\"},{\"hex\":\"#aab89e\",\"pct\":39.6,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0123-03","sku":"DWXH-255295","sc_id":296,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Owlswick (Wallcovering) Briarwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Owlswick (Wallcovering), color:Mist, Mist, Stone, Silver, Oatmeal, Birds, Leaves-And-Trees, Briarwood, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Owlswick (Wallcovering) in Briarwood is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Briarwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0123-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216596_73d2.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216595_8b8a.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216597_1_SAW0123_03_SANDERSON_Owlswick_WALLPAPER_5896.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216597_8717.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216598_7696.jpg","alt":"Owlswick (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255295","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255295-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Owlswick (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Briarwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Briarwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2d2c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aeae9f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8c8bc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2d2c7\",\"pct\":53,\"name\":\"Mist\"},{\"hex\":\"#aeae9f\",\"pct\":16.7,\"name\":\"Stone\"},{\"hex\":\"#b8c8bc\",\"pct\":15.7,\"name\":\"Silver\"},{\"hex\":\"#cac9b8\",\"pct\":14.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0123-01","sku":"DWXH-255296","sc_id":297,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Owlswick (Wallcovering) Teal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Owlswick (Wallcovering), color:Mist, Mist, Stone, Silver, Oatmeal, Birds, Leaves-And-Trees, Teal, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Owlswick (Wallcovering) in Teal is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0123-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216596_73d2.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216595_1_SAW0123_01_SANDERSON_Owlswick_WALLPAPER_9985.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216595_8b8a.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216597_8717.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216598_7696.jpg","alt":"Owlswick (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255296","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255296-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Owlswick (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2d2c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aeae9f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8c8bc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2d2c7\",\"pct\":53,\"name\":\"Mist\"},{\"hex\":\"#aeae9f\",\"pct\":16.7,\"name\":\"Stone\"},{\"hex\":\"#b8c8bc\",\"pct\":15.7,\"name\":\"Silver\"},{\"hex\":\"#cac9b8\",\"pct\":14.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0123-02","sku":"DWXH-255297","sc_id":298,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Owlswick (Wallcovering) Whitstable Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Owlswick (Wallcovering), color:Mist, Mist, Stone, Silver, Oatmeal, Birds, Leaves-And-Trees, Whitstable Blue, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Owlswick (Wallcovering) in Whitstable Blue is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Whitstable Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0123-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216596_73d2.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216595_8b8a.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216596_1_SAW0123_02_SANDERSON_Owlswick_WALLPAPER_18b0.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216597_8717.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216598_7696.jpg","alt":"Owlswick (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255297","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255297-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Owlswick (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Whitstable Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Whitstable Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2d2c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aeae9f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8c8bc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2d2c7\",\"pct\":53,\"name\":\"Mist\"},{\"hex\":\"#aeae9f\",\"pct\":16.7,\"name\":\"Stone\"},{\"hex\":\"#b8c8bc\",\"pct\":15.7,\"name\":\"Silver\"},{\"hex\":\"#cac9b8\",\"pct\":14.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0181-01","sku":"DWXH-255298","sc_id":299,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Oxbow Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Oxbow, color:White, White, Gold, Oatmeal, Botanical, Birch","body_html":"<div class=\"sanderson-product\">\n<p>Oxbow in Birch is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0181-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217251_73e7.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217249_1_SAW0181_01_SANDERSON_Oxbow_WALLPAPER_0cc7.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217249_cd69.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_3fcd.jpg","alt":"Oxbow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255298","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255298-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Oxbow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#97ac4e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1d8ab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf3\",\"pct\":55.1,\"name\":\"White\"},{\"hex\":\"#97ac4e\",\"pct\":27.9,\"name\":\"Gold\"},{\"hex\":\"#d1d8ab\",\"pct\":16.1,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0181-02","sku":"DWXH-255299","sc_id":300,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Oxbow Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Oxbow, color:White, White, Gold, Oatmeal, Botanical, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Oxbow in Indigo is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0181-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217251_73e7.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217249_cd69.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_1_SAW0181_02_SANDERSON_Oxbow_WALLPAPER_c284.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_2_SAW0181_02_SANDERSON_Oxbow_WALLPAPER_dc0f.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_3_SAW0181_02_SANDERSON_Oxbow_WALLPAPER_0033.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_3fcd.jpg","alt":"Oxbow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255299","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255299-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Oxbow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#97ac4e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1d8ab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf3\",\"pct\":55.1,\"name\":\"White\"},{\"hex\":\"#97ac4e\",\"pct\":27.9,\"name\":\"Gold\"},{\"hex\":\"#d1d8ab\",\"pct\":16.1,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0011-01","sku":"DWXH-255300","sc_id":301,"settlement_verdict":"REVIEW-VISION","retail":147,"product":{"title":"Paisley Circles Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Paisley Circles, color:Silver, Silver, Mist, Stone, Cream, Linen, Botanical, Blue","body_html":"<div class=\"sanderson-product\">\n<p>Paisley Circles in Blue is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Mist, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Paisley Circles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Paisley Circles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0011-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPC103_ff97.jpg","alt":"Paisley Circles"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255300","price":"147.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255300-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0011-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0011-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Paisley Circles"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b7c0b7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cfd1c4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#9babac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b7c0b7\",\"pct\":33.6,\"name\":\"Silver\"},{\"hex\":\"#cfd1c4\",\"pct\":20.1,\"name\":\"Mist\"},{\"hex\":\"#9babac\",\"pct\":17.8,\"name\":\"Stone\"},{\"hex\":\"#ebe6ce\",\"pct\":15.2,\"name\":\"Cream\"},{\"hex\":\"#e0deca\",\"pct\":13.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0012-01","sku":"DWXH-255301","sc_id":302,"settlement_verdict":"REVIEW-VISION","retail":159,"product":{"title":"Palampore Silver/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palampore, color:Cream, Cream, Alabaster, Beige, Oatmeal, Linen, Florals, Silver/Gold","body_html":"<div class=\"sanderson-product\">\n<p>Palampore in Silver/Gold is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palampore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palampore</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0012-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPA105_9557.jpg","alt":"Palampore"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255301","price":"159.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255301-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0012-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0012-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palampore"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2ead6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f6eeda"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dac699"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2ead6\",\"pct\":33.4,\"name\":\"Cream\"},{\"hex\":\"#f6eeda\",\"pct\":20,\"name\":\"Alabaster\"},{\"hex\":\"#dac699\",\"pct\":18.7,\"name\":\"Beige\"},{\"hex\":\"#e4d5b1\",\"pct\":17.1,\"name\":\"Oatmeal\"},{\"hex\":\"#ebdfc2\",\"pct\":10.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0132-04","sku":"DWXH-255302","sc_id":303,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Palm House Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palm House, color:Linen, Linen, Cream, Beige, Alabaster, Botanical, Leaves-And-Trees, Botanical Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Palm House in Botanical Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0132-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_cce5.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_c4d8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_66c9.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_5c5a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_1_SAW0132_04_SANDERSON_Palm_House_WALLPAPER_8eb8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_2_SAW0132_04_SANDERSON_Palm_House_WALLPAPER_8ca1.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_4a0d.jpg","alt":"Palm House"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255302","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255302-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palm House"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd5c2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2b598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd5c2\",\"pct\":32.8,\"name\":\"Linen\"},{\"hex\":\"#eae6d7\",\"pct\":32.6,\"name\":\"Cream\"},{\"hex\":\"#c2b598\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#ece9db\",\"pct\":16.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0132-02","sku":"DWXH-255303","sc_id":304,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Palm House Charcoal/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palm House, color:Linen, Linen, Cream, Beige, Alabaster, Botanical, Leaves-And-Trees, Charcoal/Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Palm House in Charcoal/Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0132-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_cce5.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_c4d8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_1_SAW0132_02_SANDERSON_Palm_House_WALLPAPER_c2e2.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_2_SAW0132_02_SANDERSON_Palm_House_WALLPAPER_1056.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_66c9.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_5c5a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_4a0d.jpg","alt":"Palm House"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255303","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255303-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palm House"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd5c2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2b598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd5c2\",\"pct\":32.8,\"name\":\"Linen\"},{\"hex\":\"#eae6d7\",\"pct\":32.6,\"name\":\"Cream\"},{\"hex\":\"#c2b598\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#ece9db\",\"pct\":16.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0132-03","sku":"DWXH-255304","sc_id":305,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Palm House Chartreuse/Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palm House, color:Linen, Linen, Cream, Beige, Alabaster, Botanical, Leaves-And-Trees, Chartreuse/Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Palm House in Chartreuse/Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chartreuse/Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0132-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_cce5.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_c4d8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_66c9.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_1_SAW0132_03_SANDERSON_Palm_House_WALLPAPER_9c1a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_2_SAW0132_03_SANDERSON_Palm_House_WALLPAPER_39da.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_5c5a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_4a0d.jpg","alt":"Palm House"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255304","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255304-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palm House"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chartreuse/Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chartreuse/Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd5c2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2b598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd5c2\",\"pct\":32.8,\"name\":\"Linen\"},{\"hex\":\"#eae6d7\",\"pct\":32.6,\"name\":\"Cream\"},{\"hex\":\"#c2b598\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#ece9db\",\"pct\":16.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0132-05","sku":"DWXH-255305","sc_id":306,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Palm House Linen/Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palm House, color:Linen, Linen, Cream, Beige, Alabaster, Botanical, Leaves-And-Trees, Linen/Gilver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Palm House in Linen/Gilver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0132-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_cce5.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_c4d8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_66c9.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_5c5a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_4a0d.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_1_SAW0132_05_SANDERSON_Palm_House_WALLPAPER_da80.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_2_SAW0132_05_SANDERSON_Palm_House_WALLPAPER_6d7c.jpg","alt":"Palm House"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255305","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255305-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palm House"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd5c2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2b598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd5c2\",\"pct\":32.8,\"name\":\"Linen\"},{\"hex\":\"#eae6d7\",\"pct\":32.6,\"name\":\"Cream\"},{\"hex\":\"#c2b598\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#ece9db\",\"pct\":16.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0132-01","sku":"DWXH-255306","sc_id":307,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Palm House Teal/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Palm House, color:Linen, Linen, Cream, Beige, Alabaster, Botanical, Leaves-And-Trees, Teal/Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Palm House in Teal/Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Palm House</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0132-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216644_cce5.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_1_SAW0132_01_SANDERSON_Palm_House_WALLPAPER_e3ed.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_2_SAW0132_01_SANDERSON_Palm_House_WALLPAPER_a05a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216640_c4d8.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216641_66c9.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216642_5c5a.jpg","alt":"Palm House"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216643_4a0d.jpg","alt":"Palm House"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255306","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255306-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0132-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Palm House"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd5c2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6d7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2b598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd5c2\",\"pct\":32.8,\"name\":\"Linen\"},{\"hex\":\"#eae6d7\",\"pct\":32.6,\"name\":\"Cream\"},{\"hex\":\"#c2b598\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#ece9db\",\"pct\":16.4,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0145-02","sku":"DWXH-255307","sc_id":308,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Pamir Garden Cream/Nettle | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pamir Garden, color:Cream, Cream, Denim, Grey, Stone, Oatmeal, Animals, Landscapes, Cream/Nettle","body_html":"<div class=\"sanderson-product\">\n<p>Pamir Garden in Cream/Nettle is a Sanderson Wallcovering in a animals/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Denim, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pamir Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream/Nettle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pamir Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0145-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216766_c27b.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216765_ca7f.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216766_1_SAW0145_02_SANDERSON_Pamir_Garden_WALLPAPER_c11f.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216766_2_SAW0145_02_SANDERSON_Pamir_Garden_WALLPAPER_708d.jpg","alt":"Pamir Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255307","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255307-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0145-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0145-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pamir Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream/Nettle"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream/Nettle"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6dfcd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#627765"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#799d97"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6dfcd\",\"pct\":34.4,\"name\":\"Cream\"},{\"hex\":\"#627765\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#799d97\",\"pct\":15.1,\"name\":\"Grey\"},{\"hex\":\"#b0a98c\",\"pct\":14.9,\"name\":\"Stone\"},{\"hex\":\"#d0cebc\",\"pct\":14.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0145-01","sku":"DWXH-255308","sc_id":309,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Pamir Garden Teal/Peacock | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pamir Garden, color:Cream, Cream, Denim, Grey, Stone, Oatmeal, Animals, Landscapes, Teal/Peacock","body_html":"<div class=\"sanderson-product\">\n<p>Pamir Garden in Teal/Peacock is a Sanderson Wallcovering in a animals/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Denim, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pamir Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Peacock</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pamir Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0145-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216766_c27b.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216765_1_SAW0145_01_SANDERSON_Pamir_Garden_WALLPAPER_98fa.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216765_2_SAW0145_01_SANDERSON_Pamir_Garden_WALLPAPER_335d.jpg","alt":"Pamir Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216765_ca7f.jpg","alt":"Pamir Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255308","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255308-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0145-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0145-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pamir Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Peacock"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Peacock"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6dfcd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#627765"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#799d97"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6dfcd\",\"pct\":34.4,\"name\":\"Cream\"},{\"hex\":\"#627765\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#799d97\",\"pct\":15.1,\"name\":\"Grey\"},{\"hex\":\"#b0a98c\",\"pct\":14.9,\"name\":\"Stone\"},{\"hex\":\"#d0cebc\",\"pct\":14.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0174-02","sku":"DWXH-255309","sc_id":310,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Penjing Ink Black/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Penjing, color:Taupe, Taupe, Oatmeal, Botanical, Ink Black/Gold","body_html":"<div class=\"sanderson-product\">\n<p>Penjing in Ink Black/Gold is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Penjing</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ink Black/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Penjing</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0174-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217108_2675.jpg","alt":"Penjing"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217109_1_SAW0174_02_SANDERSON_Penjing_WALLPAPER_f9c4.jpg","alt":"Penjing"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217109_4305.jpg","alt":"Penjing"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255309","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255309-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0174-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0174-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Penjing"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ink Black/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ink Black/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#a0936e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cfcea3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#a0936e\",\"pct\":88.2,\"name\":\"Taupe\"},{\"hex\":\"#cfcea3\",\"pct\":11.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0174-01","sku":"DWXH-255310","sc_id":311,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Penjing Scallion Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Penjing, color:Taupe, Taupe, Oatmeal, Botanical, Scallion Green","body_html":"<div class=\"sanderson-product\">\n<p>Penjing in Scallion Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Penjing</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Scallion Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Penjing</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0174-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217108_2675.jpg","alt":"Penjing"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217108_1_SAW0174_01_SANDERSON_Penjing_WALLPAPER_6a0d.jpg","alt":"Penjing"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217109_4305.jpg","alt":"Penjing"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255310","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255310-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0174-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0174-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Penjing"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Scallion Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Scallion Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#a0936e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cfcea3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#a0936e\",\"pct\":88.2,\"name\":\"Taupe\"},{\"hex\":\"#cfcea3\",\"pct\":11.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0229-01","sku":"DWXH-255311","sc_id":312,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Pergola Parchment | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pergola, color:Cream, Cream, Linen, Greige, White, Alabaster, Parchment","body_html":"<div class=\"sanderson-product\">\n<p>Pergola in Parchment is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Parchment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0229-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217506_6f8c.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_1_SAW0229_01_SANDERSON_Pergola_WALLPAPER_4067.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_2_SAW0229_01_SANDERSON_Pergola_WALLPAPER_ab02.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_60bb.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_77d3.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_50fb.jpg","alt":"Pergola"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255311","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255311-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pergola"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Parchment"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdfc9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7d9c6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0a598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdfc9\",\"pct\":35.9,\"name\":\"Cream\"},{\"hex\":\"#e7d9c6\",\"pct\":18.4,\"name\":\"Linen\"},{\"hex\":\"#c0a598\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#fbf8f2\",\"pct\":16.8,\"name\":\"White\"},{\"hex\":\"#efe7db\",\"pct\":11.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0229-04","sku":"DWXH-255312","sc_id":313,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Pergola Stripe High Tea | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pergola, color:Cream, Cream, Linen, Greige, White, Alabaster, Stripe High Tea","body_html":"<div class=\"sanderson-product\">\n<p>Pergola in Stripe High Tea is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stripe High Tea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0229-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217506_6f8c.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_60bb.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_77d3.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_50fb.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217506_1_SAW0229_04_SANDERSON_Pergola_Stripe_WALLPAPER_c6d2.jpg","alt":"Pergola"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255312","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255312-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pergola"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stripe High Tea"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stripe High Tea"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdfc9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7d9c6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0a598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdfc9\",\"pct\":35.9,\"name\":\"Cream\"},{\"hex\":\"#e7d9c6\",\"pct\":18.4,\"name\":\"Linen\"},{\"hex\":\"#c0a598\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#fbf8f2\",\"pct\":16.8,\"name\":\"White\"},{\"hex\":\"#efe7db\",\"pct\":11.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0229-03","sku":"DWXH-255313","sc_id":314,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Pergola Stripe Mineral Blue/Wisteria | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pergola, color:Cream, Cream, Linen, Greige, White, Alabaster, Stripe Mineral Blue/Wisteria","body_html":"<div class=\"sanderson-product\">\n<p>Pergola in Stripe Mineral Blue/Wisteria is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stripe Mineral Blue/Wisteria</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0229-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217506_6f8c.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_60bb.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_77d3.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_1_SAW0229_03_SANDERSON_Pergola_Stripe_WALLPAPER_ffc9.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_2_SAW0229_03_SANDERSON_Pergola_Stripe_WALLPAPER_7670.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_50fb.jpg","alt":"Pergola"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255313","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255313-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pergola"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stripe Mineral Blue/Wisteria"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stripe Mineral Blue/Wisteria"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdfc9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7d9c6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0a598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdfc9\",\"pct\":35.9,\"name\":\"Cream\"},{\"hex\":\"#e7d9c6\",\"pct\":18.4,\"name\":\"Linen\"},{\"hex\":\"#c0a598\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#fbf8f2\",\"pct\":16.8,\"name\":\"White\"},{\"hex\":\"#efe7db\",\"pct\":11.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0200-01","sku":"DWXH-255314","sc_id":315,"settlement_verdict":"CLEAR","retail":621,"product":{"title":"Peter Pan Evening Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Peter Pan, color:Denim, Denim, White, Delft Blue, Wedgwood, Landscapes, Evening Blue","body_html":"<div class=\"sanderson-product\">\n<p>Peter Pan in Evening Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, White, Delft Blue. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Peter Pan</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Evening Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Peter Pan</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0200-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217293_7156.jpg","alt":"Peter Pan"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217293_1_SAW0200_01_SANDERSON_Peter_Pan_WALLPAPER_f86b.jpg","alt":"Peter Pan"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217293_2_SAW0200_01_SANDERSON_Peter_Pan_WALLPAPER_ea2b.jpg","alt":"Peter Pan"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217293_3_SAW0200_01_SANDERSON_Peter_Pan_WALLPAPER_e1c3.jpg","alt":"Peter Pan"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255314","price":"621.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255314-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0200-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0200-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Peter Pan"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Evening Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Evening Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#4c638a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#fffeff"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Delft Blue"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#46577c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#4c638a\",\"pct\":35.2,\"name\":\"Denim\"},{\"hex\":\"#fffeff\",\"pct\":29.9,\"name\":\"White\"},{\"hex\":\"#46577c\",\"pct\":21,\"name\":\"Delft Blue\"},{\"hex\":\"#6f7c97\",\"pct\":11.8,\"name\":\"Wedgwood\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0025-05","sku":"DWXH-255315","sc_id":316,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Picture Gallery Aqua/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Picture Gallery, color:Alabaster, Alabaster, Cream, Olive, Oatmeal, Beige, Birds, Aqua/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Picture Gallery in Aqua/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Aqua/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0025-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213399_11ff.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213398_f4b7.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213400_06d6.jpg","alt":"Picture Gallery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255315","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255315-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Picture Gallery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Aqua/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Aqua/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0ede6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae4d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#736551"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0ede6\",\"pct\":29.5,\"name\":\"Alabaster\"},{\"hex\":\"#eae4d8\",\"pct\":21.6,\"name\":\"Cream\"},{\"hex\":\"#736551\",\"pct\":21.3,\"name\":\"Olive\"},{\"hex\":\"#dcd0b3\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1b59c\",\"pct\":13.5,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0025-03","sku":"DWXH-255316","sc_id":317,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Picture Gallery Red/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Picture Gallery, color:Alabaster, Alabaster, Cream, Olive, Oatmeal, Beige, Birds, Red/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Picture Gallery in Red/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Red/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0025-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213399_11ff.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213398_f4b7.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213400_06d6.jpg","alt":"Picture Gallery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255316","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255316-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Picture Gallery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Red/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Red/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0ede6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae4d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#736551"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0ede6\",\"pct\":29.5,\"name\":\"Alabaster\"},{\"hex\":\"#eae4d8\",\"pct\":21.6,\"name\":\"Cream\"},{\"hex\":\"#736551\",\"pct\":21.3,\"name\":\"Olive\"},{\"hex\":\"#dcd0b3\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1b59c\",\"pct\":13.5,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0025-04","sku":"DWXH-255317","sc_id":318,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Picture Gallery Sand/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Picture Gallery, color:Alabaster, Alabaster, Cream, Olive, Oatmeal, Beige, Birds, Sand/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Picture Gallery in Sand/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Cream, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sand/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Picture Gallery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0025-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213399_11ff.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213398_f4b7.jpg","alt":"Picture Gallery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVOY213400_06d6.jpg","alt":"Picture Gallery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255317","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255317-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0025-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Picture Gallery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sand/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sand/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0ede6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"29.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae4d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#736551"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0ede6\",\"pct\":29.5,\"name\":\"Alabaster\"},{\"hex\":\"#eae4d8\",\"pct\":21.6,\"name\":\"Cream\"},{\"hex\":\"#736551\",\"pct\":21.3,\"name\":\"Olive\"},{\"hex\":\"#dcd0b3\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1b59c\",\"pct\":13.5,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0070-01","sku":"DWXH-255318","sc_id":319,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Pineapple Royale Graphite/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pineapple Royale, color:Black, Black, Olive, Taupe, Charcoal, Botanical, Graphite/Gold","body_html":"<div class=\"sanderson-product\">\n<p>Pineapple Royale in Graphite/Gold is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Olive, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pineapple Royale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Graphite/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pineapple Royale</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0070-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216326_bd11.jpg","alt":"Pineapple Royale"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216326_1_SAW0070_01_SANDERSON_Pineapple_Royale_WALLPAPER_cbc7.jpg","alt":"Pineapple Royale"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255318","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255318-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0070-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0070-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pineapple Royale"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Graphite/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Graphite/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#2a2a2a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"62.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#806847"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b4976a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#2a2a2a\",\"pct\":62.5,\"name\":\"Black\"},{\"hex\":\"#806847\",\"pct\":14.2,\"name\":\"Olive\"},{\"hex\":\"#b4976a\",\"pct\":14,\"name\":\"Taupe\"},{\"hex\":\"#32302d\",\"pct\":9.4,\"name\":\"Charcoal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0182-01","sku":"DWXH-255319","sc_id":320,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Pinetum Stripe Flax | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinetum Stripe, color:Linen, Linen, Ivory, Cream, Alabaster, Flax","body_html":"<div class=\"sanderson-product\">\n<p>Pinetum Stripe in Flax is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Flax</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0182-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217252_1a21.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217252_1_SAW0182_01_SANDERSON_Pinetum_Stripe_WALLPAPER_68fc.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217253_cbca.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217254_a9e8.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_ca01.jpg","alt":"Pinetum Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255319","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255319-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinetum Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Flax"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Flax"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1daba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e9e3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1daba\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#fdfbef\",\"pct\":33.8,\"name\":\"Ivory\"},{\"hex\":\"#e9e3cb\",\"pct\":15,\"name\":\"Cream\"},{\"hex\":\"#f4f1df\",\"pct\":14.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0182-03","sku":"DWXH-255320","sc_id":321,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Pinetum Stripe Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinetum Stripe, color:Linen, Linen, Ivory, Cream, Alabaster, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Pinetum Stripe in Indigo is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0182-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217252_1a21.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217253_cbca.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217254_1_SAW0182_03_SANDERSON_Pinetum_Stripe_WALLPAPER_a501.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217254_a9e8.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_ca01.jpg","alt":"Pinetum Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255320","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255320-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinetum Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1daba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e9e3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1daba\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#fdfbef\",\"pct\":33.8,\"name\":\"Ivory\"},{\"hex\":\"#e9e3cb\",\"pct\":15,\"name\":\"Cream\"},{\"hex\":\"#f4f1df\",\"pct\":14.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0182-04","sku":"DWXH-255321","sc_id":322,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Pinetum Stripe Sap Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinetum Stripe, color:Linen, Linen, Ivory, Cream, Alabaster, Sap Green","body_html":"<div class=\"sanderson-product\">\n<p>Pinetum Stripe in Sap Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sap Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0182-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217252_1a21.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217253_cbca.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217254_a9e8.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_1_SAW0182_04_SANDERSON_Pinetum_Stripe_WALLPAPER_0e51.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_2_SAW0182_04_SANDERSON_Pinetum_Stripe_WALLPAPER_5bfd.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_ca01.jpg","alt":"Pinetum Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255321","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255321-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinetum Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1daba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e9e3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1daba\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#fdfbef\",\"pct\":33.8,\"name\":\"Ivory\"},{\"hex\":\"#e9e3cb\",\"pct\":15,\"name\":\"Cream\"},{\"hex\":\"#f4f1df\",\"pct\":14.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0146-05","sku":"DWXH-255322","sc_id":323,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream, Dove","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Dove is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255322","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255322-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0146-01","sku":"DWXH-255323","sc_id":324,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255323","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255323-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0146-03","sku":"DWXH-255324","sc_id":325,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Woad | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream, Woad","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Woad is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Woad</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255324","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255324-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Woad"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Woad"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0013-01","sku":"DWXH-255325","sc_id":326,"settlement_verdict":"REVIEW-VISION","retail":159,"product":{"title":"Porcelain Garden Rose/Fennel | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Porcelain Garden, color:Sand, Sand, Oatmeal, Beige, Florals, Rose/Fennel","body_html":"<div class=\"sanderson-product\">\n<p>Porcelain Garden in Rose/Fennel is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/Fennel</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0013-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO102_8a1b.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO101_06c3.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO104_1194.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO106_87de.jpg","alt":"Porcelain Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255325","price":"159.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255325-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Porcelain Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/Fennel"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/Fennel"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8e17b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eee297"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d392"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8e17b\",\"pct\":73.4,\"name\":\"Sand\"},{\"hex\":\"#eee297\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d392\",\"pct\":12,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0013-02","sku":"DWXH-255326","sc_id":327,"settlement_verdict":"REVIEW-VISION","retail":159,"product":{"title":"Porcelain Garden Rose/Linden | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Porcelain Garden, color:Sand, Sand, Oatmeal, Beige, Florals, Rose/Linden","body_html":"<div class=\"sanderson-product\">\n<p>Porcelain Garden in Rose/Linden is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose/Linden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0013-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO102_8a1b.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO101_06c3.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO104_1194.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO106_87de.jpg","alt":"Porcelain Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255326","price":"159.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255326-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Porcelain Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose/Linden"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose/Linden"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8e17b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eee297"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d392"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8e17b\",\"pct\":73.4,\"name\":\"Sand\"},{\"hex\":\"#eee297\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d392\",\"pct\":12,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0013-03","sku":"DWXH-255327","sc_id":328,"settlement_verdict":"REVIEW-VISION","retail":159,"product":{"title":"Porcelain Garden Red/Beige | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Porcelain Garden, color:Sand, Sand, Oatmeal, Beige, Florals, Red/Beige","body_html":"<div class=\"sanderson-product\">\n<p>Porcelain Garden in Red/Beige is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Red/Beige</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0013-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO102_8a1b.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO101_06c3.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO104_1194.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO106_87de.jpg","alt":"Porcelain Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255327","price":"159.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255327-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Porcelain Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Red/Beige"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Red/Beige"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8e17b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eee297"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d392"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8e17b\",\"pct\":73.4,\"name\":\"Sand\"},{\"hex\":\"#eee297\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d392\",\"pct\":12,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0013-04","sku":"DWXH-255328","sc_id":329,"settlement_verdict":"REVIEW-VISION","retail":159,"product":{"title":"Porcelain Garden Magenta/Leaf Grn | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Porcelain Garden, color:Sand, Sand, Oatmeal, Beige, Florals, Magenta/Leaf Grn","body_html":"<div class=\"sanderson-product\">\n<p>Porcelain Garden in Magenta/Leaf Grn is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Magenta/Leaf Grn</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Porcelain Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0013-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO102_8a1b.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO101_06c3.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO104_1194.jpg","alt":"Porcelain Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCAVPO106_87de.jpg","alt":"Porcelain Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255328","price":"159.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255328-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0013-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Porcelain Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Magenta/Leaf Grn"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Magenta/Leaf Grn"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8e17b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eee297"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d392"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8e17b\",\"pct\":73.4,\"name\":\"Sand\"},{\"hex\":\"#eee297\",\"pct\":14.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d392\",\"pct\":12,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0033-02","sku":"DWXH-255329","sc_id":330,"settlement_verdict":"CLEAR","retail":129,"product":{"title":"Pretty Ponies Chintz/Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pretty Ponies, color:White, White, Alabaster, Chintz/Blue","body_html":"<div class=\"sanderson-product\">\n<p>Pretty Ponies in Chintz/Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pretty Ponies</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chintz/Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pretty Ponies</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0033-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214035_0b62.jpg","alt":"Pretty Ponies"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214035_1_SAW0033_02_SANDERSON_Pretty_Ponies_WALLPAPER_f2cf.jpg","alt":"Pretty Ponies"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214035_2_SAW0033_02_SANDERSON_Pretty_Ponies_WALLPAPER_166c.jpg","alt":"Pretty Ponies"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214035_3_SAW0033_02_SANDERSON_Pretty_Ponies_WALLPAPER_8642.jpg","alt":"Pretty Ponies"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255329","price":"129.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255329-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0033-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0033-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pretty Ponies"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chintz/Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chintz/Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1eafb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dee2ee"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1eafb\",\"pct\":82.1,\"name\":\"White\"},{\"hex\":\"#dee2ee\",\"pct\":17.9,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0071-04","sku":"DWXH-255330","sc_id":331,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Protea Flower Porcelain/Blush | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Protea Flower, color:Alabaster, Alabaster, Linen, Florals, Porcelain/Blush","body_html":"<div class=\"sanderson-product\">\n<p>Protea Flower in Porcelain/Blush is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Porcelain/Blush</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0071-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216330_1d5f.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216327_fab2.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216329_2100.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216330_1_SAW0071_04_SANDERSON_Protea_Flower_WALLPAPER_f487.jpg","alt":"Protea Flower"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255330","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255330-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Protea Flower"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Porcelain/Blush"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Porcelain/Blush"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebe8e1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dadbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebe8e1\",\"pct\":82.3,\"name\":\"Alabaster\"},{\"hex\":\"#dadbd4\",\"pct\":15.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0071-03","sku":"DWXH-255331","sc_id":332,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Protea Flower Russet/Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Protea Flower, color:Alabaster, Alabaster, Linen, Florals, Russet/Green","body_html":"<div class=\"sanderson-product\">\n<p>Protea Flower in Russet/Green is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Russet/Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0071-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216330_1d5f.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216327_fab2.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216329_1_SAW0071_03_SANDERSON_Protea_Flower_WALLPAPER_3a41.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216329_2100.jpg","alt":"Protea Flower"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255331","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255331-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Protea Flower"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Russet/Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Russet/Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebe8e1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dadbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebe8e1\",\"pct\":82.3,\"name\":\"Alabaster\"},{\"hex\":\"#dadbd4\",\"pct\":15.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0211-01","sku":"DWXH-255332","sc_id":333,"settlement_verdict":"CLEAR","retail":972,"product":{"title":"Pygmalion Alabaster | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pygmalion, color:Linen, Linen, Beige, Stone, Cream, Oatmeal, Alabaster, Landscapes","body_html":"<div class=\"sanderson-product\">\n<p>Pygmalion in Alabaster is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pygmalion</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Alabaster</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pygmalion</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0211-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217327_c5cf.jpg","alt":"Pygmalion"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217327_1_SAW0211_01_SANDERSON_Pygmalion_WALLPAPER_2a4a.jpg","alt":"Pygmalion"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217327_2_SAW0211_01_SANDERSON_Pygmalion_WALLPAPER_ac7a.jpg","alt":"Pygmalion"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217327_3_SAW0211_01_SANDERSON_Pygmalion_WALLPAPER_4b60.jpg","alt":"Pygmalion"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255332","price":"972.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255332-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0211-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0211-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pygmalion"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4dbc9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1c1aa"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b3a188"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4dbc9\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#d1c1aa\",\"pct\":18.2,\"name\":\"Beige\"},{\"hex\":\"#b3a188\",\"pct\":18.1,\"name\":\"Stone\"},{\"hex\":\"#ebe4d6\",\"pct\":16.8,\"name\":\"Cream\"},{\"hex\":\"#dacdb8\",\"pct\":15.3,\"name\":\"Oatmeal\"},{\"hex\":\"#f0ece0\",\"pct\":13,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0057-03","sku":"DWXH-255333","sc_id":334,"settlement_verdict":"REVIEW-VISION","retail":177,"product":{"title":"Rhodera Amethyst/Charcoal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rhodera, color:Alabaster, Alabaster, Silver, Florals, Amethyst/Charcoal","body_html":"<div class=\"sanderson-product\">\n<p>Rhodera in Amethyst/Charcoal is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rhodera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Amethyst/Charcoal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rhodera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0057-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216266_d0c9.jpg","alt":"Rhodera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216264_10aa.jpg","alt":"Rhodera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216266_1_SAW0057_03_SANDERSON_Rhodera_WALLPAPER_b4b9.jpg","alt":"Rhodera"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255333","price":"177.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255333-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0057-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0057-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rhodera"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Amethyst/Charcoal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Amethyst/Charcoal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efebe7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"81.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#acb2bb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efebe7\",\"pct\":81.3,\"name\":\"Alabaster\"},{\"hex\":\"#acb2bb\",\"pct\":18.6,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0057-02","sku":"DWXH-255334","sc_id":335,"settlement_verdict":"REVIEW-VISION","retail":177,"product":{"title":"Rhodera Coral/Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rhodera, color:Alabaster, Alabaster, Silver, Florals, Coral/Grey","body_html":"<div class=\"sanderson-product\">\n<p>Rhodera in Coral/Grey is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rhodera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Coral/Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rhodera</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0057-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216266_d0c9.jpg","alt":"Rhodera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216264_10aa.jpg","alt":"Rhodera"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216264_1_SAW0057_02_SANDERSON_Rhodera_WALLPAPER_2373.jpg","alt":"Rhodera"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255334","price":"177.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255334-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0057-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0057-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rhodera"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Coral/Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Coral/Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efebe7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"81.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#acb2bb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efebe7\",\"pct\":81.3,\"name\":\"Alabaster\"},{\"hex\":\"#acb2bb\",\"pct\":18.6,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0133-02","sku":"DWXH-255335","sc_id":336,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Ringtailed Lemur Cream/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ringtailed Lemur, color:Alabaster, Alabaster, Taupe, Oatmeal, Animals, Leaves-And-Trees, Cream/Olive, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Ringtailed Lemur in Cream/Olive is a Sanderson Wallcovering in a animals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0133-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216665_7fba.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216663_08d7.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216664_1_SAW0133_02_SANDERSON_Ringtailed_Lemur_WALLPAPER_52da.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216664_2_SAW0133_02_SANDERSON_Ringtailed_Lemur_WALLPAPER_95d6.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216664_2bcb.jpg","alt":"Ringtailed Lemur"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255335","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255335-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ringtailed Lemur"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5ede2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#807d69"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9ccbb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5ede2\",\"pct\":64.9,\"name\":\"Alabaster\"},{\"hex\":\"#807d69\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#c9ccbb\",\"pct\":15.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0133-03","sku":"DWXH-255336","sc_id":337,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Ringtailed Lemur Stone/Eucalyptus | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ringtailed Lemur, color:Alabaster, Alabaster, Taupe, Oatmeal, Animals, Leaves-And-Trees, Stone/Eucalyptus, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Ringtailed Lemur in Stone/Eucalyptus is a Sanderson Wallcovering in a animals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Stone/Eucalyptus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0133-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216665_7fba.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216663_08d7.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216664_2bcb.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216665_1_SAW0133_03_SANDERSON_Ringtailed_Lemur_WALLPAPER_8597.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216665_2_SAW0133_03_SANDERSON_Ringtailed_Lemur_WALLPAPER_938d.jpg","alt":"Ringtailed Lemur"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255336","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255336-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ringtailed Lemur"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Stone/Eucalyptus"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Stone/Eucalyptus"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5ede2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#807d69"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9ccbb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5ede2\",\"pct\":64.9,\"name\":\"Alabaster\"},{\"hex\":\"#807d69\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#c9ccbb\",\"pct\":15.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0113-01","sku":"DWXH-255337","sc_id":338,"settlement_verdict":"CLEAR","retail":186,"product":{"title":"Ripley Ochre/Slate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ripley, color:Alabaster, Alabaster, Linen, Mist, Cream, Ochre/Slate","body_html":"<div class=\"sanderson-product\">\n<p>Ripley in Ochre/Slate is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ripley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ochre/Slate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ripley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0113-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216584_ea07.jpg","alt":"Ripley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216584_1_SAW0113_01_SANDERSON_Ripley_WALLPAPER_5a9c.jpg","alt":"Ripley"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216584_2_SAW0113_01_SANDERSON_Ripley_WALLPAPER_bb60.jpg","alt":"Ripley"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255337","price":"186.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255337-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0113-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0113-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ripley"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ochre/Slate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ochre/Slate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbdcd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d6d6d1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3dc\",\"pct\":52.4,\"name\":\"Alabaster\"},{\"hex\":\"#dbdcd7\",\"pct\":19,\"name\":\"Linen\"},{\"hex\":\"#d6d6d1\",\"pct\":18.5,\"name\":\"Mist\"},{\"hex\":\"#e0dfd6\",\"pct\":10.1,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0183-01","sku":"DWXH-255338","sc_id":339,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Robin`S Wood Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Robin`S Wood, color:Taupe, Taupe, Forest, Brown, Sand, Denim, Botanical, Botanical Green","body_html":"<div class=\"sanderson-product\">\n<p>Robin`s Wood in Botanical Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Forest, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0183-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217224_1ac1.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217223_1_SAW0183_01_SANDERSON_Robins_Wood_WALLPAPER_53d4.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217223_2_SAW0183_01_SANDERSON_Robins_Wood_WALLPAPER_d56f.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217223_5866.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217225_58aa.jpg","alt":"Robin`S Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255338","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255338-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Robin`S Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#878673"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Forest"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#274642"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#54553d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#878673\",\"pct\":31.2,\"name\":\"Taupe\"},{\"hex\":\"#274642\",\"pct\":29.9,\"name\":\"Forest\"},{\"hex\":\"#54553d\",\"pct\":19.9,\"name\":\"Brown\"},{\"hex\":\"#c9b48c\",\"pct\":10.3,\"name\":\"Sand\"},{\"hex\":\"#687e70\",\"pct\":8.6,\"name\":\"Denim\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0059-02","sku":"DWXH-255339","sc_id":340,"settlement_verdict":"REVIEW-VISION","retail":233,"product":{"title":"Rosa Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rosa, color:Alabaster, Alabaster, White, Mist, Florals, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Rosa in Indigo is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, White, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rosa</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rosa</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0059-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216277_4997.jpg","alt":"Rosa"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216277_1_SAW0059_02_SANDERSON_Rosa_WALLPAPER_f71d.jpg","alt":"Rosa"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216277_2_SAW0059_02_SANDERSON_Rosa_WALLPAPER_05c7.jpg","alt":"Rosa"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255339","price":"233.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255339-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0059-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0059-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rosa"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efebe9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"62.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f2eeed"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"25.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d1d3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efebe9\",\"pct\":62.6,\"name\":\"Alabaster\"},{\"hex\":\"#f2eeed\",\"pct\":25.9,\"name\":\"White\"},{\"hex\":\"#d0d1d3\",\"pct\":10.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0164-02","sku":"DWXH-255340","sc_id":341,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Rose And Peony Blue Clay/Carmen Lt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rose And Peony, color:Sage, Sage, Beige, Greige, Sand, Oatmeal, Terracotta, Florals, Blue Clay/Carmen Lt","body_html":"<div class=\"sanderson-product\">\n<p>Rose And Peony in Blue Clay/Carmen Lt is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Beige, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay/Carmen Lt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0164-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217029_e170.jpg","alt":"Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217028_c8b7.jpg","alt":"Rose And Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255340","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255340-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0164-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0164-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rose And Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay/Carmen Lt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay/Carmen Lt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#819867"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8b59f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8bc99"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#819867\",\"pct\":18.8,\"name\":\"Sage\"},{\"hex\":\"#d8b59f\",\"pct\":18,\"name\":\"Beige\"},{\"hex\":\"#b8bc99\",\"pct\":17.7,\"name\":\"Greige\"},{\"hex\":\"#cd9d8c\",\"pct\":16.3,\"name\":\"Sand\"},{\"hex\":\"#d6ceb8\",\"pct\":15.6,\"name\":\"Oatmeal\"},{\"hex\":\"#9e695c\",\"pct\":13.5,\"name\":\"Terracotta\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0184-01","sku":"DWXH-255341","sc_id":342,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Rubus Blackberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rubus, color:White, White, Sage, Linen, Botanical, Blackberry","body_html":"<div class=\"sanderson-product\">\n<p>Rubus in Blackberry is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Sage, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rubus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blackberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rubus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0184-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217227_425a.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217227_1_SAW0184_01_SANDERSON_Rubus_WALLPAPER_2a92.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217227_2_SAW0184_01_SANDERSON_Rubus_WALLPAPER_10a6.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217227_3_SAW0184_01_SANDERSON_Rubus_WALLPAPER_2a71.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217228_6b30.jpg","alt":"Rubus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255341","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255341-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0184-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0184-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rubus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blackberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blackberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fcfaf3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#859765"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e1e0c1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fcfaf3\",\"pct\":67.4,\"name\":\"White\"},{\"hex\":\"#859765\",\"pct\":21.4,\"name\":\"Sage\"},{\"hex\":\"#e1e0c1\",\"pct\":11.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0184-02","sku":"DWXH-255342","sc_id":343,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Rubus Raspberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rubus, color:White, White, Sage, Linen, Botanical, Raspberry","body_html":"<div class=\"sanderson-product\">\n<p>Rubus in Raspberry is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Sage, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rubus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raspberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rubus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0184-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217227_425a.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217228_1_SAW0184_02_SANDERSON_Rubus_WALLPAPER_2463.jpg","alt":"Rubus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217228_6b30.jpg","alt":"Rubus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255342","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255342-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0184-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0184-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rubus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fcfaf3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#859765"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e1e0c1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fcfaf3\",\"pct\":67.4,\"name\":\"White\"},{\"hex\":\"#859765\",\"pct\":21.4,\"name\":\"Sage\"},{\"hex\":\"#e1e0c1\",\"pct\":11.3,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0218-04","sku":"DWXH-255343","sc_id":344,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Rye Berry/Pink Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rye, color:Cream, Cream, Sand, Berry/Pink Clay","body_html":"<div class=\"sanderson-product\">\n<p>Rye in Berry/Pink Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Berry/Pink Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0218-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217438_d99c.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217435_fde3.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217436_9066.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_811a.jpg","alt":"Rye"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255343","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255343-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rye"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Berry/Pink Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Berry/Pink Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdcca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8ab98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdcca\",\"pct\":85.1,\"name\":\"Cream\"},{\"hex\":\"#d8ab98\",\"pct\":14.9,\"name\":\"Sand\"}]"}]}
+{"mfr_sku":"SAW0218-03","sku":"DWXH-255344","sc_id":345,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Rye Slip Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rye, color:Cream, Cream, Sand, Slip Clay","body_html":"<div class=\"sanderson-product\">\n<p>Rye in Slip Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Slip Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0218-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217438_d99c.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217435_fde3.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217436_9066.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_1_SAW0218_03_SANDERSON_Rye_WALLPAPER_b0e5.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_2_SAW0218_03_SANDERSON_Rye_WALLPAPER_79c4.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_811a.jpg","alt":"Rye"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255344","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255344-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rye"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Slip Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Slip Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdcca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8ab98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdcca\",\"pct\":85.1,\"name\":\"Cream\"},{\"hex\":\"#d8ab98\",\"pct\":14.9,\"name\":\"Sand\"}]"}]}
+{"mfr_sku":"SAW0218-01","sku":"DWXH-255345","sc_id":346,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Rye Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rye, color:Cream, Cream, Sand, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Rye in Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0218-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217438_d99c.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217435_fde3.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217436_9066.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_811a.jpg","alt":"Rye"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255345","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255345-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rye"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdcca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8ab98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdcca\",\"pct\":85.1,\"name\":\"Cream\"},{\"hex\":\"#d8ab98\",\"pct\":14.9,\"name\":\"Sand\"}]"}]}
+{"mfr_sku":"SAW0041-01","sku":"DWXH-255346","sc_id":347,"settlement_verdict":"CLEAR","retail":239,"product":{"title":"Sail Away Sea Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sail Away, color:Alabaster, Alabaster, Ivory, Silver, Landscapes, Sea Green","body_html":"<div class=\"sanderson-product\">\n<p>Sail Away in Sea Green is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Ivory, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sail Away</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sail Away</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0041-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214588_b0a1.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214588_1_SAW0041_01_SANDERSON_Sail_Away_WALLPAPER_cc23.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214588_2_SAW0041_01_SANDERSON_Sail_Away_WALLPAPER_b44d.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214590_a6a9.jpg","alt":"Sail Away"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255346","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255346-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0041-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0041-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sail Away"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e6d9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f7f0e2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4c7be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e6d9\",\"pct\":67.3,\"name\":\"Alabaster\"},{\"hex\":\"#f7f0e2\",\"pct\":20.6,\"name\":\"Ivory\"},{\"hex\":\"#c4c7be\",\"pct\":12.2,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0041-02","sku":"DWXH-255347","sc_id":348,"settlement_verdict":"CLEAR","retail":239,"product":{"title":"Sail Away Sky Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sail Away, color:Alabaster, Alabaster, Ivory, Silver, Landscapes, Sky Blue","body_html":"<div class=\"sanderson-product\">\n<p>Sail Away in Sky Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Ivory, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sail Away</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sail Away</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0041-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214588_b0a1.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214590_1_SAW0041_02_SANDERSON_Sail_Away_WALLPAPER_4c21.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214590_2_SAW0041_02_SANDERSON_Sail_Away_WALLPAPER_4ea9.jpg","alt":"Sail Away"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214590_a6a9.jpg","alt":"Sail Away"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255347","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255347-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0041-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0041-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sail Away"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e6d9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f7f0e2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4c7be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e6d9\",\"pct\":67.3,\"name\":\"Alabaster\"},{\"hex\":\"#f7f0e2\",\"pct\":20.6,\"name\":\"Ivory\"},{\"hex\":\"#c4c7be\",\"pct\":12.2,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0230-02","sku":"DWXH-255348","sc_id":349,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Salisbury Madder Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Salisbury, color:Alabaster, Alabaster, Grey, Greige, Silver, Linen, Madder Rose","body_html":"<div class=\"sanderson-product\">\n<p>Salisbury in Madder Rose is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Grey, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Salisbury</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Madder Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Salisbury</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0230-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217487_8992.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217488_0cb4.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217488_1_SAW0230_02_SANDERSON_Salisbury_WALLPAPER_ff2d.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217488_2_SAW0230_02_SANDERSON_Salisbury_WALLPAPER_411f.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217489_ed22.jpg","alt":"Salisbury"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255348","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255348-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0230-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0230-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Salisbury"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Madder Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Madder Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0ede3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#78919b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9b5af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0ede3\",\"pct\":33.2,\"name\":\"Alabaster\"},{\"hex\":\"#78919b\",\"pct\":19.3,\"name\":\"Grey\"},{\"hex\":\"#a9b5af\",\"pct\":17.7,\"name\":\"Greige\"},{\"hex\":\"#c2c1b4\",\"pct\":15.6,\"name\":\"Silver\"},{\"hex\":\"#dddcd4\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0230-01","sku":"DWXH-255349","sc_id":350,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Salisbury Tetbury Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Salisbury, color:Alabaster, Alabaster, Grey, Greige, Silver, Linen, Tetbury Blue","body_html":"<div class=\"sanderson-product\">\n<p>Salisbury in Tetbury Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Grey, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Salisbury</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Tetbury Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Salisbury</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0230-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217487_8992.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217487_1_SAW0230_01_SANDERSON_Salisbury_WALLPAPER_bd92.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217487_2_SAW0230_01_SANDERSON_Salisbury_WALLPAPER_1101.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217488_0cb4.jpg","alt":"Salisbury"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217489_ed22.jpg","alt":"Salisbury"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255349","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255349-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0230-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0230-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Salisbury"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Tetbury Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Tetbury Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0ede3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#78919b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9b5af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0ede3\",\"pct\":33.2,\"name\":\"Alabaster\"},{\"hex\":\"#78919b\",\"pct\":19.3,\"name\":\"Grey\"},{\"hex\":\"#a9b5af\",\"pct\":17.7,\"name\":\"Greige\"},{\"hex\":\"#c2c1b4\",\"pct\":15.6,\"name\":\"Silver\"},{\"hex\":\"#dddcd4\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0102-03","sku":"DWXH-255350","sc_id":351,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Sea Houses Chalk/Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sea Houses, color:Linen, Linen, Oatmeal, Greige, Cream, Landscapes, Chalk/Silver","body_html":"<div class=\"sanderson-product\">\n<p>Sea Houses in Chalk/Silver is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chalk/Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0102-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216489_c167.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216490_2156.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216491_1_SAW0102_03_SANDERSON_Sea_Houses_WALLPAPER_ed05.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216491_fe66.jpg","alt":"Sea Houses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255350","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255350-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sea Houses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chalk/Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chalk/Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7d5cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1cec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bebbae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7d5cb\",\"pct\":42.9,\"name\":\"Linen\"},{\"hex\":\"#d1cec2\",\"pct\":23.2,\"name\":\"Oatmeal\"},{\"hex\":\"#bebbae\",\"pct\":18.8,\"name\":\"Greige\"},{\"hex\":\"#dfddd6\",\"pct\":15.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0102-01","sku":"DWXH-255351","sc_id":352,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Sea Houses Charcoal/Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sea Houses, color:Linen, Linen, Oatmeal, Greige, Cream, Landscapes, Charcoal/Linen","body_html":"<div class=\"sanderson-product\">\n<p>Sea Houses in Charcoal/Linen is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0102-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216489_c167.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216489_1_SAW0102_01_SANDERSON_Sea_Houses_WALLPAPER_f757.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216490_2156.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216491_fe66.jpg","alt":"Sea Houses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255351","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255351-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sea Houses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7d5cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1cec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bebbae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7d5cb\",\"pct\":42.9,\"name\":\"Linen\"},{\"hex\":\"#d1cec2\",\"pct\":23.2,\"name\":\"Oatmeal\"},{\"hex\":\"#bebbae\",\"pct\":18.8,\"name\":\"Greige\"},{\"hex\":\"#dfddd6\",\"pct\":15.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0102-02","sku":"DWXH-255352","sc_id":353,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Sea Houses Green/Sand | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sea Houses, color:Linen, Linen, Oatmeal, Greige, Cream, Landscapes, Green/Sand","body_html":"<div class=\"sanderson-product\">\n<p>Sea Houses in Green/Sand is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Green/Sand</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sea Houses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0102-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216489_c167.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216490_1_SAW0102_02_SANDERSON_Sea_Houses_WALLPAPER_fa54.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216490_2156.jpg","alt":"Sea Houses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216491_fe66.jpg","alt":"Sea Houses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255352","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255352-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0102-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sea Houses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Green/Sand"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Green/Sand"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d7d5cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1cec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bebbae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d7d5cb\",\"pct\":42.9,\"name\":\"Linen\"},{\"hex\":\"#d1cec2\",\"pct\":23.2,\"name\":\"Oatmeal\"},{\"hex\":\"#bebbae\",\"pct\":18.8,\"name\":\"Greige\"},{\"hex\":\"#dfddd6\",\"pct\":15.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0115-01","sku":"DWXH-255353","sc_id":354,"settlement_verdict":"REVIEW-VISION","retail":186,"product":{"title":"Sea Kelp Aqua/Lichen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sea Kelp, color:Alabaster, Alabaster, Linen, Leaves-And-Trees, Aqua/Lichen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Sea Kelp in Aqua/Lichen is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sea Kelp</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Aqua/Lichen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sea Kelp</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0115-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216569_5b26.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216566_1_SAW0115_01_SANDERSON_Sea_Kelp_WALLPAPER_7bab.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216566_2_SAW0115_01_SANDERSON_Sea_Kelp_WALLPAPER_f323.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216566_7893.jpg","alt":"Sea Kelp"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255353","price":"186.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255353-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0115-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0115-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sea Kelp"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Aqua/Lichen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Aqua/Lichen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e9e9e3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e9e9e3\",\"pct\":80.5,\"name\":\"Alabaster\"},{\"hex\":\"#d8d6c9\",\"pct\":19.5,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0115-03","sku":"DWXH-255354","sc_id":355,"settlement_verdict":"REVIEW-VISION","retail":186,"product":{"title":"Sea Kelp Driftwood/Slate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sea Kelp, color:Alabaster, Alabaster, Linen, Leaves-And-Trees, Driftwood/Slate, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Sea Kelp in Driftwood/Slate is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sea Kelp</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood/Slate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sea Kelp</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0115-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216569_5b26.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216566_7893.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216569_1_SAW0115_03_SANDERSON_Sea_Kelp_WALLPAPER_961c.jpg","alt":"Sea Kelp"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216569_2_SAW0115_03_SANDERSON_Sea_Kelp_WALLPAPER_409e.jpg","alt":"Sea Kelp"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255354","price":"186.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255354-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0115-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0115-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sea Kelp"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood/Slate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood/Slate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e9e9e3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e9e9e3\",\"pct\":80.5,\"name\":\"Alabaster\"},{\"hex\":\"#d8d6c9\",\"pct\":19.5,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0042-01","sku":"DWXH-255355","sc_id":356,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Seagulls Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Seagulls, color:Mist, Mist, Alabaster, Birds, Blue","body_html":"<div class=\"sanderson-product\">\n<p>Seagulls in Blue is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Seagulls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Seagulls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0042-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214585_f8f7.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214585_1_SAW0042_01_SANDERSON_Seagulls_WALLPAPER_f0cb.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214585_2_SAW0042_01_SANDERSON_Seagulls_WALLPAPER_4b9e.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214585_3_SAW0042_01_SANDERSON_Seagulls_WALLPAPER_1f60.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214586_8248.jpg","alt":"Seagulls"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255355","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255355-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0042-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0042-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Seagulls"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c9dee3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e7e6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c9dee3\",\"pct\":84.9,\"name\":\"Mist\"},{\"hex\":\"#e3e7e6\",\"pct\":15.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0185-03","sku":"DWXH-255356","sc_id":357,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sessile Plain Birch/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sessile Plain, color:Linen, Linen, Cream, Birch/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Sessile Plain in Birch/Multi is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0185-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217246_e5f4.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217244_e2ac.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217245_cb42.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217247_9d66.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217248_3cc4.jpg","alt":"Sessile Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255356","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255356-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sessile Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e0c1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e0c1\",\"pct\":84.4,\"name\":\"Linen\"},{\"hex\":\"#eae6c9\",\"pct\":15.6,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0185-04","sku":"DWXH-255357","sc_id":358,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sessile Plain Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sessile Plain, color:Linen, Linen, Cream, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Sessile Plain in Indigo is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0185-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217246_e5f4.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217244_e2ac.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217245_cb42.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217247_9d66.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217248_3cc4.jpg","alt":"Sessile Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255357","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255357-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sessile Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e0c1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e0c1\",\"pct\":84.4,\"name\":\"Linen\"},{\"hex\":\"#eae6c9\",\"pct\":15.6,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0185-05","sku":"DWXH-255358","sc_id":359,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sessile Plain Moss Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sessile Plain, color:Linen, Linen, Cream, Moss Green","body_html":"<div class=\"sanderson-product\">\n<p>Sessile Plain in Moss Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Moss Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0185-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217246_e5f4.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217244_e2ac.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217245_cb42.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217247_9d66.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217248_3cc4.jpg","alt":"Sessile Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255358","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255358-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sessile Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Moss Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Moss Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e0c1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e0c1\",\"pct\":84.4,\"name\":\"Linen\"},{\"hex\":\"#eae6c9\",\"pct\":15.6,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0185-01","sku":"DWXH-255359","sc_id":360,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sessile Plain Wild Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sessile Plain, color:Linen, Linen, Cream, Wild Rose","body_html":"<div class=\"sanderson-product\">\n<p>Sessile Plain in Wild Rose is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wild Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0185-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217246_e5f4.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217244_e2ac.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217245_cb42.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217247_9d66.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217248_3cc4.jpg","alt":"Sessile Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255359","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255359-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sessile Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wild Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wild Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e0c1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e0c1\",\"pct\":84.4,\"name\":\"Linen\"},{\"hex\":\"#eae6c9\",\"pct\":15.6,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0219-03","sku":"DWXH-255360","sc_id":361,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Sherwood Stripe Cashew | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sherwood Stripe, color:Rose, Rose, Cream, Linen, Cashew","body_html":"<div class=\"sanderson-product\">\n<p>Sherwood Stripe in Cashew is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Rose, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cashew</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0219-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217424_97ec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217423_4ee0.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217425_cbec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217426_2feb.jpg","alt":"Sherwood Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255360","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255360-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sherwood Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cashew"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cashew"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c58568"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e2d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3dcce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c58568\",\"pct\":50,\"name\":\"Rose\"},{\"hex\":\"#e8e2d4\",\"pct\":26.8,\"name\":\"Cream\"},{\"hex\":\"#e3dcce\",\"pct\":23.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0219-02","sku":"DWXH-255361","sc_id":362,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Sherwood Stripe Sandstone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sherwood Stripe, color:Rose, Rose, Cream, Linen, Sandstone","body_html":"<div class=\"sanderson-product\">\n<p>Sherwood Stripe in Sandstone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Rose, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sandstone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0219-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217424_97ec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217423_4ee0.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217425_cbec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217426_2feb.jpg","alt":"Sherwood Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255361","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255361-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sherwood Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sandstone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sandstone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c58568"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e2d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3dcce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c58568\",\"pct\":50,\"name\":\"Rose\"},{\"hex\":\"#e8e2d4\",\"pct\":26.8,\"name\":\"Cream\"},{\"hex\":\"#e3dcce\",\"pct\":23.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0219-04","sku":"DWXH-255362","sc_id":363,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Sherwood Stripe Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sherwood Stripe, color:Rose, Rose, Cream, Linen, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Sherwood Stripe in Wedgwood is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Rose, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0219-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217424_97ec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217423_4ee0.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217425_cbec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217426_2feb.jpg","alt":"Sherwood Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255362","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255362-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sherwood Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c58568"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e2d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3dcce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c58568\",\"pct\":50,\"name\":\"Rose\"},{\"hex\":\"#e8e2d4\",\"pct\":26.8,\"name\":\"Cream\"},{\"hex\":\"#e3dcce\",\"pct\":23.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0219-01","sku":"DWXH-255363","sc_id":364,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Sherwood Stripe Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sherwood Stripe, color:Rose, Rose, Cream, Linen, Willow","body_html":"<div class=\"sanderson-product\">\n<p>Sherwood Stripe in Willow is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Rose, Cream, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sherwood Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0219-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217424_97ec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217423_4ee0.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217425_cbec.jpg","alt":"Sherwood Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217426_2feb.jpg","alt":"Sherwood Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255363","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255363-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0219-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sherwood Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c58568"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e8e2d4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e3dcce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c58568\",\"pct\":50,\"name\":\"Rose\"},{\"hex\":\"#e8e2d4\",\"pct\":26.8,\"name\":\"Cream\"},{\"hex\":\"#e3dcce\",\"pct\":23.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0116-01","sku":"DWXH-255364","sc_id":365,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Shore Birds Blush | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Shore Birds, color:Cream, Cream, Alabaster, Linen, Birds, Blush","body_html":"<div class=\"sanderson-product\">\n<p>Shore Birds in Blush is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blush</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0116-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216563_cbd2.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216562_1565.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216562_1_SAW0116_01_SANDERSON_Shore_Birds_WALLPAPER_f954.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216564_8287.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216565_5302.jpg","alt":"Shore Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255364","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255364-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Shore Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1dfd3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"75.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5e4d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d4c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"6.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1dfd3\",\"pct\":75.9,\"name\":\"Cream\"},{\"hex\":\"#e5e4d9\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#d8d4c5\",\"pct\":6.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0116-02","sku":"DWXH-255365","sc_id":366,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Shore Birds Driftwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Shore Birds, color:Cream, Cream, Alabaster, Linen, Birds, Driftwood","body_html":"<div class=\"sanderson-product\">\n<p>Shore Birds in Driftwood is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Driftwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0116-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216563_cbd2.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216562_1565.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216563_1_SAW0116_02_SANDERSON_Shore_Birds_WALLPAPER_bd32.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216564_8287.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216565_5302.jpg","alt":"Shore Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255365","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255365-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Shore Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Driftwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1dfd3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"75.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5e4d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d4c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"6.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1dfd3\",\"pct\":75.9,\"name\":\"Cream\"},{\"hex\":\"#e5e4d9\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#d8d4c5\",\"pct\":6.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0116-04","sku":"DWXH-255366","sc_id":367,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Shore Birds Gull | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Shore Birds, color:Cream, Cream, Alabaster, Linen, Birds, Gull","body_html":"<div class=\"sanderson-product\">\n<p>Shore Birds in Gull is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gull</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0116-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216563_cbd2.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216562_1565.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216564_8287.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216565_1_SAW0116_04_SANDERSON_Shore_Birds_WALLPAPER_628b.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216565_5302.jpg","alt":"Shore Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255366","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255366-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Shore Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gull"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gull"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1dfd3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"75.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5e4d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d4c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"6.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1dfd3\",\"pct\":75.9,\"name\":\"Cream\"},{\"hex\":\"#e5e4d9\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#d8d4c5\",\"pct\":6.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0116-03","sku":"DWXH-255367","sc_id":368,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Shore Birds Sky | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Shore Birds, color:Cream, Cream, Alabaster, Linen, Birds, Sky","body_html":"<div class=\"sanderson-product\">\n<p>Shore Birds in Sky is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Shore Birds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0116-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216563_cbd2.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216562_1565.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216564_1_SAW0116_03_SANDERSON_Shore_Birds_WALLPAPER_3816.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216564_8287.jpg","alt":"Shore Birds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCOA216565_5302.jpg","alt":"Shore Birds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255367","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255367-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0116-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Shore Birds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1dfd3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"75.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5e4d9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d4c5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"6.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1dfd3\",\"pct\":75.9,\"name\":\"Cream\"},{\"hex\":\"#e5e4d9\",\"pct\":16.3,\"name\":\"Alabaster\"},{\"hex\":\"#d8d4c5\",\"pct\":6.7,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0231-01","sku":"DWXH-255368","sc_id":369,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Silver Lime Gritstone/Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silver Lime, color:Mist, Mist, Greige, Alabaster, Gritstone/Rose","body_html":"<div class=\"sanderson-product\">\n<p>Silver Lime in Gritstone/Rose is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gritstone/Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0231-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217517_0280.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217514_1_SAW0231_01_SANDERSON_Silver_Lime_WALLPAPER_5417.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217514_db37.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217515_a147.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217516_52b9.jpg","alt":"Silver Lime"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255368","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255368-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silver Lime"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gritstone/Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gritstone/Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c6d5d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"61.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b4b595"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7e0de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c6d5d4\",\"pct\":61.2,\"name\":\"Mist\"},{\"hex\":\"#b4b595\",\"pct\":20.1,\"name\":\"Greige\"},{\"hex\":\"#d7e0de\",\"pct\":18.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0231-03","sku":"DWXH-255369","sc_id":370,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Silver Lime Nymph | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silver Lime, color:Mist, Mist, Greige, Alabaster, Nymph","body_html":"<div class=\"sanderson-product\">\n<p>Silver Lime in Nymph is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Nymph</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0231-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217517_0280.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217514_db37.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217515_a147.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217516_1_SAW0231_03_SANDERSON_Silver_Lime_WALLPAPER_73fe.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217516_52b9.jpg","alt":"Silver Lime"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255369","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255369-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silver Lime"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Nymph"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Nymph"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c6d5d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"61.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b4b595"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7e0de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c6d5d4\",\"pct\":61.2,\"name\":\"Mist\"},{\"hex\":\"#b4b595\",\"pct\":20.1,\"name\":\"Greige\"},{\"hex\":\"#d7e0de\",\"pct\":18.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0124-02","sku":"DWXH-255370","sc_id":371,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Silvi Clouds Cloud | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silvi Clouds, color:Stone, Stone, Silver, Mist, Duck Egg, Landscapes, Cloud","body_html":"<div class=\"sanderson-product\">\n<p>Silvi Clouds in Cloud is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cloud</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0124-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_56d0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_1_SAW0124_02_SANDERSON_Silvi_Clouds_WALLPAPER_cd54.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_2_SAW0124_02_SANDERSON_Silvi_Clouds_WALLPAPER_f6db.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_33b5.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_26ba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_b2b8.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_e4a3.jpg","alt":"Silvi Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255370","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255370-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silvi Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cloud"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cloud"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b4b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aebebe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ced1ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b4b3\",\"pct\":34.5,\"name\":\"Stone\"},{\"hex\":\"#aebebe\",\"pct\":29.1,\"name\":\"Silver\"},{\"hex\":\"#ced1ce\",\"pct\":28.3,\"name\":\"Mist\"},{\"hex\":\"#9fb6b5\",\"pct\":8.1,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0124-01","sku":"DWXH-255371","sc_id":372,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Silvi Clouds Sky | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silvi Clouds, color:Stone, Stone, Silver, Mist, Duck Egg, Landscapes, Sky","body_html":"<div class=\"sanderson-product\">\n<p>Silvi Clouds in Sky is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0124-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_56d0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_1_SAW0124_01_SANDERSON_Silvi_Clouds_WALLPAPER_acba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_2_SAW0124_01_SANDERSON_Silvi_Clouds_WALLPAPER_12a4.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_33b5.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_26ba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_b2b8.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_e4a3.jpg","alt":"Silvi Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255371","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255371-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silvi Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b4b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aebebe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ced1ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b4b3\",\"pct\":34.5,\"name\":\"Stone\"},{\"hex\":\"#aebebe\",\"pct\":29.1,\"name\":\"Silver\"},{\"hex\":\"#ced1ce\",\"pct\":28.3,\"name\":\"Mist\"},{\"hex\":\"#9fb6b5\",\"pct\":8.1,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0124-05","sku":"DWXH-255372","sc_id":373,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Silvi Clouds Taupe Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silvi Clouds, color:Stone, Stone, Silver, Mist, Duck Egg, Landscapes, Taupe Grey","body_html":"<div class=\"sanderson-product\">\n<p>Silvi Clouds in Taupe Grey is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Taupe Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0124-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_56d0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_33b5.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_26ba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_b2b8.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_1_SAW0124_05_SANDERSON_Silvi_Clouds_WALLPAPER_9648.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_2_SAW0124_05_SANDERSON_Silvi_Clouds_WALLPAPER_f419.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_e4a3.jpg","alt":"Silvi Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255372","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255372-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silvi Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Taupe Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Taupe Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b4b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aebebe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ced1ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b4b3\",\"pct\":34.5,\"name\":\"Stone\"},{\"hex\":\"#aebebe\",\"pct\":29.1,\"name\":\"Silver\"},{\"hex\":\"#ced1ce\",\"pct\":28.3,\"name\":\"Mist\"},{\"hex\":\"#9fb6b5\",\"pct\":8.1,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0201-01","sku":"DWXH-255373","sc_id":374,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Snow White Puddle Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Snow White, color:Mist, Mist, Taupe, Beige, Greige, Puddle Blue","body_html":"<div class=\"sanderson-product\">\n<p>Snow White in Puddle Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Taupe, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Snow White</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Puddle Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Snow White</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0201-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217274_7225.jpg","alt":"Snow White"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217274_1_SAW0201_01_SANDERSON_Snow_White_WALLPAPER_ebee.jpg","alt":"Snow White"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217275_69a2.jpg","alt":"Snow White"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255373","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255373-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0201-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0201-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Snow White"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Puddle Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Puddle Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b8d6d6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a3917a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9bf9f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b8d6d6\",\"pct\":52.7,\"name\":\"Mist\"},{\"hex\":\"#a3917a\",\"pct\":21.5,\"name\":\"Taupe\"},{\"hex\":\"#c9bf9f\",\"pct\":12.9,\"name\":\"Beige\"},{\"hex\":\"#aebdaf\",\"pct\":12.8,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0201-02","sku":"DWXH-255374","sc_id":375,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Snow White Whipped Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Snow White, color:Mist, Mist, Taupe, Beige, Greige, Whipped Cream","body_html":"<div class=\"sanderson-product\">\n<p>Snow White in Whipped Cream is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Taupe, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Snow White</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Whipped Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Snow White</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0201-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217274_7225.jpg","alt":"Snow White"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217275_1_SAW0201_02_SANDERSON_Snow_White_WALLPAPER_9b5f.jpg","alt":"Snow White"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217275_69a2.jpg","alt":"Snow White"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255374","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255374-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0201-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0201-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Snow White"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Whipped Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Whipped Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b8d6d6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a3917a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9bf9f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b8d6d6\",\"pct\":52.7,\"name\":\"Mist\"},{\"hex\":\"#a3917a\",\"pct\":21.5,\"name\":\"Taupe\"},{\"hex\":\"#c9bf9f\",\"pct\":12.9,\"name\":\"Beige\"},{\"hex\":\"#aebdaf\",\"pct\":12.8,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0044-04","sku":"DWXH-255375","sc_id":376,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain Birch White | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, Birch White","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in Birch White is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch White</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_aaab.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_573c.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255375","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255375-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch White"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch White"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0044-01","sku":"DWXH-255376","sc_id":377,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain Eau De Nil | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, Eau De Nil","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in Eau De Nil is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eau De Nil</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_1_SAW0044_01_SANDERSON_Soho_Plain_WALLPAPER_24e3.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_2_SAW0044_01_SANDERSON_Soho_Plain_WALLPAPER_93a2.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_3_SAW0044_01_SANDERSON_Soho_Plain_WALLPAPER_8ce6.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_4_SAW0044_01_SANDERSON_Soho_Plain_WALLPAPER_6781.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_5_SAW0044_01_SANDERSON_Soho_Plain_WALLPAPER_cb25.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255376","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255376-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eau De Nil"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eau De Nil"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0044-02","sku":"DWXH-255377","sc_id":378,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, Linen","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_aaab.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_1_SAW0044_02_SANDERSON_Soho_Plain_WALLPAPER_7bca.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_2_SAW0044_02_SANDERSON_Soho_Plain_WALLPAPER_2683.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_3_SAW0044_02_SANDERSON_Soho_Plain_WALLPAPER_be35.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_4_SAW0044_02_SANDERSON_Soho_Plain_WALLPAPER_b139.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255377","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255377-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0044-03","sku":"DWXH-255378","sc_id":379,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain Soft Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, Soft Grey","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in Soft Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Soft Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_aaab.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_1_SAW0044_03_SANDERSON_Soho_Plain_WALLPAPER_93cf.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_2_SAW0044_03_SANDERSON_Soho_Plain_WALLPAPER_2264.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_3_SAW0044_03_SANDERSON_Soho_Plain_WALLPAPER_2cc9.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255378","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255378-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Soft Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Soft Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0165-02","sku":"DWXH-255379","sc_id":380,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Sommerville Blush/Grey Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sommerville, color:Duck Egg, Duck Egg, Sage, Mist, Stone, Greige, Florals, Blush/Grey Birch","body_html":"<div class=\"sanderson-product\">\n<p>Sommerville in Blush/Grey Birch is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Sage, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blush/Grey Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0165-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217049_ac71.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217050_1_SAW0165_02_SANDERSON_Sommerville_WALLPAPER_7500.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217050_2_SAW0165_02_SANDERSON_Sommerville_WALLPAPER_0777.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217050_98e1.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217051_7186.jpg","alt":"Sommerville"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255379","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255379-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sommerville"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blush/Grey Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blush/Grey Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#a6c3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"47.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b9e7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdd0c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#a6c3ad\",\"pct\":47.5,\"name\":\"Duck Egg\"},{\"hex\":\"#9b9e7a\",\"pct\":17.3,\"name\":\"Sage\"},{\"hex\":\"#bdd0c2\",\"pct\":13.3,\"name\":\"Mist\"},{\"hex\":\"#a1be9f\",\"pct\":11.4,\"name\":\"Stone\"},{\"hex\":\"#a7bfa6\",\"pct\":10.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0165-01","sku":"DWXH-255380","sc_id":381,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Sommerville Mint/Plum | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sommerville, color:Duck Egg, Duck Egg, Sage, Mist, Stone, Greige, Florals, Mint/Plum","body_html":"<div class=\"sanderson-product\">\n<p>Sommerville in Mint/Plum is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Sage, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mint/Plum</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0165-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217049_ac71.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217049_1_SAW0165_01_SANDERSON_Sommerville_WALLPAPER_8942.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217049_2_SAW0165_01_SANDERSON_Sommerville_WALLPAPER_00cb.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217050_98e1.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217051_7186.jpg","alt":"Sommerville"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255380","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255380-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sommerville"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mint/Plum"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mint/Plum"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#a6c3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"47.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b9e7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdd0c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#a6c3ad\",\"pct\":47.5,\"name\":\"Duck Egg\"},{\"hex\":\"#9b9e7a\",\"pct\":17.3,\"name\":\"Sage\"},{\"hex\":\"#bdd0c2\",\"pct\":13.3,\"name\":\"Mist\"},{\"hex\":\"#a1be9f\",\"pct\":11.4,\"name\":\"Stone\"},{\"hex\":\"#a7bfa6\",\"pct\":10.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0153-01","sku":"DWXH-255381","sc_id":382,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sonning Stripe Powder Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sonning Stripe, color:Mist, Mist, Linen, Silver, Powder Blue","body_html":"<div class=\"sanderson-product\">\n<p>Sonning Stripe in Powder Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Powder Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0153-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_e280.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_1_SAW0153_01_SANDERSON_Sonning_Stripe_WALLPAPER_fa9d.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_2_SAW0153_01_SANDERSON_Sonning_Stripe_WALLPAPER_ba3c.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_3_SAW0153_01_SANDERSON_Sonning_Stripe_WALLPAPER_1ba3.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_9118.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_b8ec.jpg","alt":"Sonning Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255381","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255381-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sonning Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Powder Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Powder Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cccdc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c5c5b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"5.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cccdc3\",\"pct\":64.1,\"name\":\"Mist\"},{\"hex\":\"#dcddd6\",\"pct\":30.2,\"name\":\"Linen\"},{\"hex\":\"#c5c5b8\",\"pct\":5.7,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0153-03","sku":"DWXH-255382","sc_id":383,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sonning Stripe Silver Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sonning Stripe, color:Mist, Mist, Linen, Silver, Silver Grey","body_html":"<div class=\"sanderson-product\">\n<p>Sonning Stripe in Silver Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0153-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_e280.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_9118.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_b8ec.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_1_SAW0153_03_SANDERSON_Sonning_Stripe_WALLPAPER_1a5d.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_2_SAW0153_03_SANDERSON_Sonning_Stripe_WALLPAPER_7344.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_3_SAW0153_03_SANDERSON_Sonning_Stripe_WALLPAPER_56bc.jpg","alt":"Sonning Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255382","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255382-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sonning Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cccdc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c5c5b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"5.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cccdc3\",\"pct\":64.1,\"name\":\"Mist\"},{\"hex\":\"#dcddd6\",\"pct\":30.2,\"name\":\"Linen\"},{\"hex\":\"#c5c5b8\",\"pct\":5.7,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0082-04","sku":"DWXH-255383","sc_id":384,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Spring Leaves Barley | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Spring Leaves, color:Linen, Linen, Mist, Cream, Alabaster, Leaves-And-Trees, Barley, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Spring Leaves in Barley is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Barley</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0082-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216372_4627.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216371_64f2.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216373_9442.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216374_1_SAW0082_04_SANDERSON_Spring_Leaves_WALLPAPER_6d4b.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216374_6d50.jpg","alt":"Spring Leaves"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255383","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255383-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Spring Leaves"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Barley"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Barley"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d8c7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dde0d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d9ca\",\"pct\":51.3,\"name\":\"Linen\"},{\"hex\":\"#d1d8c7\",\"pct\":21.8,\"name\":\"Mist\"},{\"hex\":\"#dde0d6\",\"pct\":13.8,\"name\":\"Cream\"},{\"hex\":\"#e2e4dc\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0082-02","sku":"DWXH-255384","sc_id":385,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Spring Leaves Celadon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Spring Leaves, color:Linen, Linen, Mist, Cream, Alabaster, Leaves-And-Trees, Celadon, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Spring Leaves in Celadon is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Celadon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0082-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216372_4627.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216371_64f2.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216372_1_SAW0082_02_SANDERSON_Spring_Leaves_WALLPAPER_ddf2.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216373_9442.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216374_6d50.jpg","alt":"Spring Leaves"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255384","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255384-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Spring Leaves"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d8c7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dde0d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d9ca\",\"pct\":51.3,\"name\":\"Linen\"},{\"hex\":\"#d1d8c7\",\"pct\":21.8,\"name\":\"Mist\"},{\"hex\":\"#dde0d6\",\"pct\":13.8,\"name\":\"Cream\"},{\"hex\":\"#e2e4dc\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0082-03","sku":"DWXH-255385","sc_id":386,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Spring Leaves Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Spring Leaves, color:Linen, Linen, Mist, Cream, Alabaster, Leaves-And-Trees, Dove, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Spring Leaves in Dove is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0082-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216372_4627.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216371_64f2.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216373_1_SAW0082_03_SANDERSON_Spring_Leaves_WALLPAPER_4c0b.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216373_9442.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216374_6d50.jpg","alt":"Spring Leaves"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255385","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255385-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Spring Leaves"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d8c7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dde0d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d9ca\",\"pct\":51.3,\"name\":\"Linen\"},{\"hex\":\"#d1d8c7\",\"pct\":21.8,\"name\":\"Mist\"},{\"hex\":\"#dde0d6\",\"pct\":13.8,\"name\":\"Cream\"},{\"hex\":\"#e2e4dc\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0082-01","sku":"DWXH-255386","sc_id":387,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Spring Leaves Flint | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Spring Leaves, color:Linen, Linen, Mist, Cream, Alabaster, Leaves-And-Trees, Flint, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Spring Leaves in Flint is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Mist, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Flint</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Spring Leaves</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0082-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216372_4627.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216371_1_SAW0082_01_SANDERSON_Spring_Leaves_WALLPAPER_b38d.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216371_64f2.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216373_9442.jpg","alt":"Spring Leaves"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216374_6d50.jpg","alt":"Spring Leaves"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255386","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255386-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0082-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Spring Leaves"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Flint"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Flint"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d9ca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d1d8c7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dde0d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d9ca\",\"pct\":51.3,\"name\":\"Linen\"},{\"hex\":\"#d1d8c7\",\"pct\":21.8,\"name\":\"Mist\"},{\"hex\":\"#dde0d6\",\"pct\":13.8,\"name\":\"Cream\"},{\"hex\":\"#e2e4dc\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0005-01","sku":"DWXH-255387","sc_id":388,"settlement_verdict":"REVIEW-VISION","retail":119,"product":{"title":"Squirrel &Amp; Dove & Dove Linen/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Squirrel &Amp; Dove, color:Linen, Linen, Olive, Taupe, Beige, Animals, Birds, & Dove Linen/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Squirrel &amp; Dove in & Dove Linen/Ivory is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Olive, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Dove Linen/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0005-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ102_cb6e.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ101_7ec4.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ103_bce6.jpg","alt":"Squirrel &Amp; Dove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255387","price":"119.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255387-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Squirrel &Amp; Dove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Dove Linen/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Dove Linen/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd7ba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#867057"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a99f84"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd7ba\",\"pct\":53.9,\"name\":\"Linen\"},{\"hex\":\"#867057\",\"pct\":22.4,\"name\":\"Olive\"},{\"hex\":\"#a99f84\",\"pct\":14,\"name\":\"Taupe\"},{\"hex\":\"#cbc4a8\",\"pct\":9.6,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0005-02","sku":"DWXH-255388","sc_id":389,"settlement_verdict":"REVIEW-VISION","retail":119,"product":{"title":"Squirrel &Amp; Dove & Dove Teal/Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Squirrel &Amp; Dove, color:Linen, Linen, Olive, Taupe, Beige, Animals, Birds, & Dove Teal/Red","body_html":"<div class=\"sanderson-product\">\n<p>Squirrel &amp; Dove in & Dove Teal/Red is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Olive, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Dove Teal/Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0005-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ102_cb6e.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ101_7ec4.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ103_bce6.jpg","alt":"Squirrel &Amp; Dove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255388","price":"119.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255388-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Squirrel &Amp; Dove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Dove Teal/Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Dove Teal/Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd7ba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#867057"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a99f84"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd7ba\",\"pct\":53.9,\"name\":\"Linen\"},{\"hex\":\"#867057\",\"pct\":22.4,\"name\":\"Olive\"},{\"hex\":\"#a99f84\",\"pct\":14,\"name\":\"Taupe\"},{\"hex\":\"#cbc4a8\",\"pct\":9.6,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0005-03","sku":"DWXH-255389","sc_id":390,"settlement_verdict":"REVIEW-VISION","retail":119,"product":{"title":"Squirrel &Amp; Dove & Dove Eggshell/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Squirrel &Amp; Dove, color:Linen, Linen, Olive, Taupe, Beige, Animals, Birds, & Dove Eggshell/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Squirrel &amp; Dove in & Dove Eggshell/Ivory is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Olive, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Dove Eggshell/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Squirrel &Amp; Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0005-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ102_cb6e.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ101_7ec4.jpg","alt":"Squirrel &Amp; Dove"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSQ103_bce6.jpg","alt":"Squirrel &Amp; Dove"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255389","price":"119.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255389-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0005-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Squirrel &Amp; Dove"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Dove Eggshell/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Dove Eggshell/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbd7ba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#867057"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a99f84"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbd7ba\",\"pct\":53.9,\"name\":\"Linen\"},{\"hex\":\"#867057\",\"pct\":22.4,\"name\":\"Olive\"},{\"hex\":\"#a99f84\",\"pct\":14,\"name\":\"Taupe\"},{\"hex\":\"#cbc4a8\",\"pct\":9.6,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0166-03","sku":"DWXH-255390","sc_id":391,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Stapleton Park Ink/Broncho | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Stapleton Park, color:Greige, Greige, Taupe, Oatmeal, Linen, Beige, Florals, Ink/Broncho","body_html":"<div class=\"sanderson-product\">\n<p>Stapleton Park in Ink/Broncho is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ink/Broncho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0166-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_f0ee.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_0399.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_1_SAW0166_03_SANDERSON_Stapleton_Park_WALLPAPER_f051.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_2_SAW0166_03_SANDERSON_Stapleton_Park_WALLPAPER_4b0c.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_3_SAW0166_03_SANDERSON_Stapleton_Park_WALLPAPER_332e.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_4_SAW0166_03_SANDERSON_Stapleton_Park_WALLPAPER_4165.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_5_SAW0166_03_SANDERSON_Stapleton_Park_WALLPAPER_cdf4.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_edde.jpg","alt":"Stapleton Park"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255390","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255390-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Stapleton Park"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ink/Broncho"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ink/Broncho"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4c49b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#928e5a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d3d0a0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4c49b\",\"pct\":50.6,\"name\":\"Greige\"},{\"hex\":\"#928e5a\",\"pct\":17.8,\"name\":\"Taupe\"},{\"hex\":\"#d3d0a0\",\"pct\":13.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e9e4bb\",\"pct\":12.7,\"name\":\"Linen\"},{\"hex\":\"#b9c095\",\"pct\":5.7,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0166-02","sku":"DWXH-255391","sc_id":392,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Stapleton Park Sage/Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Stapleton Park, color:Greige, Greige, Taupe, Oatmeal, Linen, Beige, Florals, Sage/Honey","body_html":"<div class=\"sanderson-product\">\n<p>Stapleton Park in Sage/Honey is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage/Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0166-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_f0ee.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_0399.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_1_SAW0166_02_SANDERSON_Stapleton_Park_WALLPAPER_e927.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_2_SAW0166_02_SANDERSON_Stapleton_Park_WALLPAPER_0d55.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_3_SAW0166_02_SANDERSON_Stapleton_Park_WALLPAPER_a1a0.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_4_SAW0166_02_SANDERSON_Stapleton_Park_WALLPAPER_9cf2.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_5_SAW0166_02_SANDERSON_Stapleton_Park_WALLPAPER_ceb9.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_edde.jpg","alt":"Stapleton Park"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255391","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255391-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Stapleton Park"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage/Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage/Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4c49b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#928e5a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d3d0a0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4c49b\",\"pct\":50.6,\"name\":\"Greige\"},{\"hex\":\"#928e5a\",\"pct\":17.8,\"name\":\"Taupe\"},{\"hex\":\"#d3d0a0\",\"pct\":13.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e9e4bb\",\"pct\":12.7,\"name\":\"Linen\"},{\"hex\":\"#b9c095\",\"pct\":5.7,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0104-01","sku":"DWXH-255392","sc_id":393,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Summer Harvest Claret/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Summer Harvest, color:Alabaster, Alabaster, Linen, Oatmeal, Florals, Claret/Olive","body_html":"<div class=\"sanderson-product\">\n<p>Summer Harvest in Claret/Olive is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Claret/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0104-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216495_92ca.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216495_1_SAW0104_01_SANDERSON_Summer_Harvest_WALLPAPER_069d.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216495_2_SAW0104_01_SANDERSON_Summer_Harvest_WALLPAPER_587d.jpg","alt":"Summer Harvest"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255392","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255392-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0104-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0104-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Summer Harvest"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Claret/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Claret/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e5dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"68.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2ddd0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5c4a9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e5dc\",\"pct\":68.7,\"name\":\"Alabaster\"},{\"hex\":\"#e2ddd0\",\"pct\":14.5,\"name\":\"Linen\"},{\"hex\":\"#d5c4a9\",\"pct\":14.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0103-01","sku":"DWXH-255393","sc_id":394,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Summer Harvest Cornflower/Wheat | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Summer Harvest, color:Alabaster, Alabaster, Linen, Mist, Florals, Cornflower/Wheat","body_html":"<div class=\"sanderson-product\">\n<p>Summer Harvest in Cornflower/Wheat is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cornflower/Wheat</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0103-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216498_e317.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216496_1_SAW0103_01_SANDERSON_Summer_Harvest_WALLPAPER_025c.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216496_1e87.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216496_2_SAW0103_01_SANDERSON_Summer_Harvest_WALLPAPER_91ca.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216497_2cde.jpg","alt":"Summer Harvest"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255393","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255393-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Summer Harvest"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cornflower/Wheat"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cornflower/Wheat"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e1dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cecfc6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e1dc\",\"pct\":70.5,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd8\",\"pct\":15.8,\"name\":\"Linen\"},{\"hex\":\"#cecfc6\",\"pct\":13.7,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0103-03","sku":"DWXH-255394","sc_id":395,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Summer Harvest Silver/Chalk | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Summer Harvest, color:Alabaster, Alabaster, Linen, Mist, Florals, Silver/Chalk","body_html":"<div class=\"sanderson-product\">\n<p>Summer Harvest in Silver/Chalk is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver/Chalk</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0103-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216498_e317.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216496_1e87.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216497_2cde.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216498_1_SAW0103_03_SANDERSON_Summer_Harvest_WALLPAPER_1eb9.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216498_2_SAW0103_03_SANDERSON_Summer_Harvest_WALLPAPER_8a3f.jpg","alt":"Summer Harvest"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255394","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255394-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Summer Harvest"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver/Chalk"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver/Chalk"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e1dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cecfc6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e1dc\",\"pct\":70.5,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd8\",\"pct\":15.8,\"name\":\"Linen\"},{\"hex\":\"#cecfc6\",\"pct\":13.7,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0103-02","sku":"DWXH-255395","sc_id":396,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Summer Harvest Silver Corn | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Summer Harvest, color:Alabaster, Alabaster, Linen, Mist, Florals, Silver Corn","body_html":"<div class=\"sanderson-product\">\n<p>Summer Harvest in Silver Corn is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver Corn</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Summer Harvest</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0103-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216498_e317.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216496_1e87.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216497_1_SAW0103_02_SANDERSON_Summer_Harvest_WALLPAPER_3e42.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216497_2_SAW0103_02_SANDERSON_Summer_Harvest_WALLPAPER_9710.jpg","alt":"Summer Harvest"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216497_2cde.jpg","alt":"Summer Harvest"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255395","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255395-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0103-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Summer Harvest"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver Corn"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver Corn"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0e1dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cecfc6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0e1dc\",\"pct\":70.5,\"name\":\"Alabaster\"},{\"hex\":\"#dcddd8\",\"pct\":15.8,\"name\":\"Linen\"},{\"hex\":\"#cecfc6\",\"pct\":13.7,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0006-01","sku":"DWXH-255396","sc_id":397,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Swallows Lime | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Swallows, color:Greige, Greige, Stone, Birds, Lime","body_html":"<div class=\"sanderson-product\">\n<p>Swallows in Lime is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0006-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW102_bcac.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW101_5f36.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW103_18cd.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW104_e77e.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW105_756d.jpg","alt":"Swallows"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255396","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255396-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Swallows"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lime"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lime"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aebaa6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"95.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#adad95"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aebaa6\",\"pct\":95.9,\"name\":\"Greige\"},{\"hex\":\"#adad95\",\"pct\":4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0006-02","sku":"DWXH-255397","sc_id":398,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Swallows Pebble | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Swallows, color:Greige, Greige, Stone, Birds, Pebble","body_html":"<div class=\"sanderson-product\">\n<p>Swallows in Pebble is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pebble</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0006-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW102_bcac.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW101_5f36.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW103_18cd.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW104_e77e.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW105_756d.jpg","alt":"Swallows"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255397","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255397-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Swallows"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pebble"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pebble"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aebaa6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"95.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#adad95"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aebaa6\",\"pct\":95.9,\"name\":\"Greige\"},{\"hex\":\"#adad95\",\"pct\":4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0006-03","sku":"DWXH-255398","sc_id":399,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Swallows Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Swallows, color:Greige, Greige, Stone, Birds, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Swallows in Wedgwood is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0006-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW102_bcac.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW101_5f36.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW103_18cd.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW104_e77e.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW105_756d.jpg","alt":"Swallows"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255398","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255398-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Swallows"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aebaa6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"95.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#adad95"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aebaa6\",\"pct\":95.9,\"name\":\"Greige\"},{\"hex\":\"#adad95\",\"pct\":4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0006-04","sku":"DWXH-255399","sc_id":400,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Swallows Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Swallows, color:Greige, Greige, Stone, Birds, Silver","body_html":"<div class=\"sanderson-product\">\n<p>Swallows in Silver is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0006-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW102_bcac.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW101_5f36.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW103_18cd.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW104_e77e.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW105_756d.jpg","alt":"Swallows"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255399","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255399-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Swallows"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aebaa6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"95.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#adad95"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aebaa6\",\"pct\":95.9,\"name\":\"Greige\"},{\"hex\":\"#adad95\",\"pct\":4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0006-05","sku":"DWXH-255400","sc_id":401,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Swallows Black | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Swallows, color:Greige, Greige, Stone, Birds, Black","body_html":"<div class=\"sanderson-product\">\n<p>Swallows in Black is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Black</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Swallows</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0006-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW102_bcac.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW101_5f36.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW103_18cd.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW104_e77e.jpg","alt":"Swallows"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIWSW105_756d.jpg","alt":"Swallows"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255400","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255400-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0006-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Swallows"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aebaa6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"95.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#adad95"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aebaa6\",\"pct\":95.9,\"name\":\"Greige\"},{\"hex\":\"#adad95\",\"pct\":4,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0186-01","sku":"DWXH-255401","sc_id":402,"settlement_verdict":"REVIEW-VISION","retail":885,"product":{"title":"Sycamore &Amp; Oak & Oak Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore &Amp; Oak, color:Cream, Cream, Oatmeal, Sage, Botanical, & Oak Botanical Green","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore &amp; Oak in & Oak Botanical Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Oatmeal, Sage. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Oak Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0186-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_73fa.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217211_1_SAW0186_01_SANDERSON_Sycamore_and_Oak_WALLPAPER_d586.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217211_2b6a.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217212_a5e7.jpg","alt":"Sycamore &Amp; Oak"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255401","price":"885.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255401-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore &Amp; Oak"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Oak Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Oak Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2d9d5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dacab9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#989f7a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2d9d5\",\"pct\":54.7,\"name\":\"Cream\"},{\"hex\":\"#dacab9\",\"pct\":22.3,\"name\":\"Oatmeal\"},{\"hex\":\"#989f7a\",\"pct\":20.3,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0186-02","sku":"DWXH-255402","sc_id":403,"settlement_verdict":"REVIEW-VISION","retail":885,"product":{"title":"Sycamore &Amp; Oak & Oak Sky Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore &Amp; Oak, color:Cream, Cream, Oatmeal, Sage, Botanical, & Oak Sky Blue","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore &amp; Oak in & Oak Sky Blue is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Oatmeal, Sage. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Oak Sky Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0186-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_73fa.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217211_2b6a.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217212_1_SAW0186_02_SANDERSON_Sycamore_and_Oak_WALLPAPER_a9db.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217212_a5e7.jpg","alt":"Sycamore &Amp; Oak"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255402","price":"885.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255402-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore &Amp; Oak"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Oak Sky Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Oak Sky Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2d9d5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dacab9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#989f7a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2d9d5\",\"pct\":54.7,\"name\":\"Cream\"},{\"hex\":\"#dacab9\",\"pct\":22.3,\"name\":\"Oatmeal\"},{\"hex\":\"#989f7a\",\"pct\":20.3,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0186-03","sku":"DWXH-255403","sc_id":404,"settlement_verdict":"REVIEW-VISION","retail":885,"product":{"title":"Sycamore &Amp; Oak & Oak Wild Rose | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore &Amp; Oak, color:Cream, Cream, Oatmeal, Sage, Botanical, & Oak Wild Rose","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore &amp; Oak in & Oak Wild Rose is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Oatmeal, Sage. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Oak Wild Rose</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore &Amp; Oak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0186-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_73fa.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217211_2b6a.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217212_a5e7.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_1_SAW0186_03_SANDERSON_Sycamore_and_Oak_WALLPAPER_95c9.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_2_SAW0186_03_SANDERSON_Sycamore_and_Oak_WALLPAPER_9900.jpg","alt":"Sycamore &Amp; Oak"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217213_3_SAW0186_03_SANDERSON_Sycamore_and_Oak_WALLPAPER_3548.jpg","alt":"Sycamore &Amp; Oak"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255403","price":"885.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255403-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0186-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore &Amp; Oak"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Oak Wild Rose"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Oak Wild Rose"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2d9d5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dacab9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#989f7a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2d9d5\",\"pct\":54.7,\"name\":\"Cream\"},{\"hex\":\"#dacab9\",\"pct\":22.3,\"name\":\"Oatmeal\"},{\"hex\":\"#989f7a\",\"pct\":20.3,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0105-01","sku":"DWXH-255404","sc_id":405,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Sycamore Trail Copper | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore Trail, color:Greige, Greige, Alabaster, Linen, Silver, Botanical, Leaves-And-Trees, Copper, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore Trail in Copper is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Copper</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0105-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_cba4.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_1_SAW0105_01_SANDERSON_Sycamore_Trail_WALLPAPER_ce43.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_2_SAW0105_01_SANDERSON_Sycamore_Trail_WALLPAPER_caf5.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_3_SAW0105_01_SANDERSON_Sycamore_Trail_WALLPAPER_306e.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_8356.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_c989.jpg","alt":"Sycamore Trail"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255404","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255404-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore Trail"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Copper"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Copper"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b1afa3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dedfda"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d7d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b1afa3\",\"pct\":37.9,\"name\":\"Greige\"},{\"hex\":\"#dedfda\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#d7d7d2\",\"pct\":16.2,\"name\":\"Linen\"},{\"hex\":\"#c4c4bb\",\"pct\":12.1,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0105-03","sku":"DWXH-255405","sc_id":406,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Sycamore Trail Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore Trail, color:Greige, Greige, Alabaster, Linen, Silver, Botanical, Leaves-And-Trees, Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore Trail in Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0105-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_cba4.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_8356.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_1_SAW0105_03_SANDERSON_Sycamore_Trail_WALLPAPER_7b5d.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_2_SAW0105_03_SANDERSON_Sycamore_Trail_WALLPAPER_0e8a.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_3_SAW0105_03_SANDERSON_Sycamore_Trail_WALLPAPER_15a8.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_c989.jpg","alt":"Sycamore Trail"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255405","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255405-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore Trail"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b1afa3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dedfda"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d7d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b1afa3\",\"pct\":37.9,\"name\":\"Greige\"},{\"hex\":\"#dedfda\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#d7d7d2\",\"pct\":16.2,\"name\":\"Linen\"},{\"hex\":\"#c4c4bb\",\"pct\":12.1,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0105-02","sku":"DWXH-255406","sc_id":407,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Sycamore Trail Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sycamore Trail, color:Greige, Greige, Alabaster, Linen, Silver, Botanical, Leaves-And-Trees, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Sycamore Trail in Silver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sycamore Trail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0105-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_cba4.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216499_8356.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_1_SAW0105_02_SANDERSON_Sycamore_Trail_WALLPAPER_cc49.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_2_SAW0105_02_SANDERSON_Sycamore_Trail_WALLPAPER_bfd9.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216500_3_SAW0105_02_SANDERSON_Sycamore_Trail_WALLPAPER_c2cf.jpg","alt":"Sycamore Trail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216501_c989.jpg","alt":"Sycamore Trail"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255406","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255406-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0105-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sycamore Trail"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b1afa3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"37.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dedfda"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d7d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b1afa3\",\"pct\":37.9,\"name\":\"Greige\"},{\"hex\":\"#dedfda\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#d7d7d2\",\"pct\":16.2,\"name\":\"Linen\"},{\"hex\":\"#c4c4bb\",\"pct\":12.1,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0043-02","sku":"DWXH-255407","sc_id":408,"settlement_verdict":"REVIEW-VISION","retail":284,"product":{"title":"Tally Ho Evergreen/Crimson | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tally Ho, color:Grey, Grey, Beige, Linen, Stone, Oatmeal, Animals, Evergreen/Crimson","body_html":"<div class=\"sanderson-product\">\n<p>Tally Ho in Evergreen/Crimson is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Grey, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Evergreen/Crimson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0043-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214597_6eb4.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214598_01d7.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214598_1_SAW0043_02_SANDERSON_Tally_Ho_WALLPAPER_0314.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214598_2_SAW0043_02_SANDERSON_Tally_Ho_WALLPAPER_a191.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214599_65e4.jpg","alt":"Tally Ho"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255407","price":"284.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255407-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tally Ho"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Evergreen/Crimson"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Evergreen/Crimson"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Grey"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7c7870"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7d6bd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7c7870\",\"pct\":35.4,\"name\":\"Grey\"},{\"hex\":\"#c8c1ac\",\"pct\":19.2,\"name\":\"Beige\"},{\"hex\":\"#e7d6bd\",\"pct\":16.7,\"name\":\"Linen\"},{\"hex\":\"#b4ac99\",\"pct\":16.1,\"name\":\"Stone\"},{\"hex\":\"#d4d0bc\",\"pct\":12.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0043-03","sku":"DWXH-255408","sc_id":409,"settlement_verdict":"REVIEW-VISION","retail":284,"product":{"title":"Tally Ho Pearl/Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tally Ho, color:Grey, Grey, Beige, Linen, Stone, Oatmeal, Animals, Pearl/Grey","body_html":"<div class=\"sanderson-product\">\n<p>Tally Ho in Pearl/Grey is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Grey, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pearl/Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0043-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214597_6eb4.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214598_01d7.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214599_1_SAW0043_03_SANDERSON_Tally_Ho_WALLPAPER_3618.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214599_2_SAW0043_03_SANDERSON_Tally_Ho_WALLPAPER_f5aa.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214599_65e4.jpg","alt":"Tally Ho"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255408","price":"284.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255408-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tally Ho"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pearl/Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pearl/Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Grey"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7c7870"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7d6bd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7c7870\",\"pct\":35.4,\"name\":\"Grey\"},{\"hex\":\"#c8c1ac\",\"pct\":19.2,\"name\":\"Beige\"},{\"hex\":\"#e7d6bd\",\"pct\":16.7,\"name\":\"Linen\"},{\"hex\":\"#b4ac99\",\"pct\":16.1,\"name\":\"Stone\"},{\"hex\":\"#d4d0bc\",\"pct\":12.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0043-01","sku":"DWXH-255409","sc_id":410,"settlement_verdict":"REVIEW-VISION","retail":284,"product":{"title":"Tally Ho Teal/Ruby | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tally Ho, color:Grey, Grey, Beige, Linen, Stone, Oatmeal, Animals, Teal/Ruby","body_html":"<div class=\"sanderson-product\">\n<p>Tally Ho in Teal/Ruby is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Grey, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal/Ruby</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tally Ho</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0043-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214597_6eb4.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214597_1_SAW0043_01_SANDERSON_Tally_Ho_WALLPAPER_87c0.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214597_2_SAW0043_01_SANDERSON_Tally_Ho_WALLPAPER_1b4f.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214598_01d7.jpg","alt":"Tally Ho"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214599_65e4.jpg","alt":"Tally Ho"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255409","price":"284.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255409-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0043-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tally Ho"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal/Ruby"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal/Ruby"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Grey"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#7c7870"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c8c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7d6bd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#7c7870\",\"pct\":35.4,\"name\":\"Grey\"},{\"hex\":\"#c8c1ac\",\"pct\":19.2,\"name\":\"Beige\"},{\"hex\":\"#e7d6bd\",\"pct\":16.7,\"name\":\"Linen\"},{\"hex\":\"#b4ac99\",\"pct\":16.1,\"name\":\"Stone\"},{\"hex\":\"#d4d0bc\",\"pct\":12.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0212-01","sku":"DWXH-255410","sc_id":411,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Tansy Bloom Atlantis | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tansy Bloom, color:Marine, Marine, Grey, Silver, Denim, Mist, Atlantis","body_html":"<div class=\"sanderson-product\">\n<p>Tansy Bloom in Atlantis is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Marine, Grey, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tansy Bloom</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Atlantis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tansy Bloom</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0212-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217314_7b77.jpg","alt":"Tansy Bloom"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217314_1_SAW0212_01_SANDERSON_Tansy_Bloom_WALLPAPER_a20f.jpg","alt":"Tansy Bloom"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217314_2_SAW0212_01_SANDERSON_Tansy_Bloom_WALLPAPER_4e43.jpg","alt":"Tansy Bloom"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217315_9a40.jpg","alt":"Tansy Bloom"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255410","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255410-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0212-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0212-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tansy Bloom"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Atlantis"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Atlantis"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Marine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Marine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#3c4c66"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"38"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8d9ea4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b2bebd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#3c4c66\",\"pct\":38,\"name\":\"Marine\"},{\"hex\":\"#8d9ea4\",\"pct\":19.3,\"name\":\"Grey\"},{\"hex\":\"#b2bebd\",\"pct\":17.4,\"name\":\"Silver\"},{\"hex\":\"#627282\",\"pct\":13.5,\"name\":\"Denim\"},{\"hex\":\"#d1d5ca\",\"pct\":11.7,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0220-02","sku":"DWXH-255411","sc_id":412,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Tapestry Trees Berry/Pink Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tapestry Trees, color:Greige, Greige, Cream, Ivory, Linen, Oatmeal, Alabaster, Botanical, Berry/Pink Clay","body_html":"<div class=\"sanderson-product\">\n<p>Tapestry Trees in Berry/Pink Clay is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Berry/Pink Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0220-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217414_6020.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217415_fac3.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217416_b20d.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217417_b802.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_e214.jpg","alt":"Tapestry Trees"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255411","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255411-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tapestry Trees"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Berry/Pink Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Berry/Pink Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdae97"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e1cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fbf8ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdae97\",\"pct\":20.8,\"name\":\"Greige\"},{\"hex\":\"#e9e1cd\",\"pct\":19.8,\"name\":\"Cream\"},{\"hex\":\"#fbf8ed\",\"pct\":17.7,\"name\":\"Ivory\"},{\"hex\":\"#ded4bc\",\"pct\":17.2,\"name\":\"Linen\"},{\"hex\":\"#d3c7b0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#f5f1e4\",\"pct\":9.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0220-03","sku":"DWXH-255412","sc_id":413,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Tapestry Trees Forest/Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tapestry Trees, color:Greige, Greige, Cream, Ivory, Linen, Oatmeal, Alabaster, Botanical, Forest/Willow","body_html":"<div class=\"sanderson-product\">\n<p>Tapestry Trees in Forest/Willow is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Forest/Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0220-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217414_6020.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217415_fac3.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217416_b20d.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217417_b802.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_e214.jpg","alt":"Tapestry Trees"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255412","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255412-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tapestry Trees"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Forest/Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Forest/Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdae97"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e1cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fbf8ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdae97\",\"pct\":20.8,\"name\":\"Greige\"},{\"hex\":\"#e9e1cd\",\"pct\":19.8,\"name\":\"Cream\"},{\"hex\":\"#fbf8ed\",\"pct\":17.7,\"name\":\"Ivory\"},{\"hex\":\"#ded4bc\",\"pct\":17.2,\"name\":\"Linen\"},{\"hex\":\"#d3c7b0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#f5f1e4\",\"pct\":9.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0220-04","sku":"DWXH-255413","sc_id":414,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Tapestry Trees Pottery Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tapestry Trees, color:Greige, Greige, Cream, Ivory, Linen, Oatmeal, Alabaster, Botanical, Pottery Blue","body_html":"<div class=\"sanderson-product\">\n<p>Tapestry Trees in Pottery Blue is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pottery Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0220-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217414_6020.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217415_fac3.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217416_b20d.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217417_b802.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_e214.jpg","alt":"Tapestry Trees"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255413","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255413-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tapestry Trees"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pottery Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pottery Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdae97"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e1cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fbf8ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdae97\",\"pct\":20.8,\"name\":\"Greige\"},{\"hex\":\"#e9e1cd\",\"pct\":19.8,\"name\":\"Cream\"},{\"hex\":\"#fbf8ed\",\"pct\":17.7,\"name\":\"Ivory\"},{\"hex\":\"#ded4bc\",\"pct\":17.2,\"name\":\"Linen\"},{\"hex\":\"#d3c7b0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#f5f1e4\",\"pct\":9.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0220-01","sku":"DWXH-255414","sc_id":415,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Tapestry Trees Raw Chocolate/Slip | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tapestry Trees, color:Greige, Greige, Cream, Ivory, Linen, Oatmeal, Alabaster, Botanical, Raw Chocolate/Slip","body_html":"<div class=\"sanderson-product\">\n<p>Tapestry Trees in Raw Chocolate/Slip is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raw Chocolate/Slip</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0220-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217414_6020.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217415_fac3.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217416_b20d.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217417_b802.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_e214.jpg","alt":"Tapestry Trees"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255414","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255414-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tapestry Trees"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raw Chocolate/Slip"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raw Chocolate/Slip"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdae97"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e1cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fbf8ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdae97\",\"pct\":20.8,\"name\":\"Greige\"},{\"hex\":\"#e9e1cd\",\"pct\":19.8,\"name\":\"Cream\"},{\"hex\":\"#fbf8ed\",\"pct\":17.7,\"name\":\"Ivory\"},{\"hex\":\"#ded4bc\",\"pct\":17.2,\"name\":\"Linen\"},{\"hex\":\"#d3c7b0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#f5f1e4\",\"pct\":9.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0220-05","sku":"DWXH-255415","sc_id":416,"settlement_verdict":"REVIEW-VISION","retail":295,"product":{"title":"Tapestry Trees Woodland Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tapestry Trees, color:Greige, Greige, Cream, Ivory, Linen, Oatmeal, Alabaster, Botanical, Woodland Green","body_html":"<div class=\"sanderson-product\">\n<p>Tapestry Trees in Woodland Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Woodland Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tapestry Trees</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0220-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217414_6020.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217415_fac3.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217416_b20d.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217417_b802.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_1_SAW0220_05_SANDERSON_Tapestry_Trees_WALLPAPER_7c54.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_2_SAW0220_05_SANDERSON_Tapestry_Trees_WALLPAPER_6a71.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_3_SAW0220_05_SANDERSON_Tapestry_Trees_WALLPAPER_7ad8.jpg","alt":"Tapestry Trees"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217418_e214.jpg","alt":"Tapestry Trees"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255415","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255415-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0220-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tapestry Trees"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Woodland Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Woodland Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdae97"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e1cd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#fbf8ed"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdae97\",\"pct\":20.8,\"name\":\"Greige\"},{\"hex\":\"#e9e1cd\",\"pct\":19.8,\"name\":\"Cream\"},{\"hex\":\"#fbf8ed\",\"pct\":17.7,\"name\":\"Ivory\"},{\"hex\":\"#ded4bc\",\"pct\":17.2,\"name\":\"Linen\"},{\"hex\":\"#d3c7b0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#f5f1e4\",\"pct\":9.6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0134-03","sku":"DWXH-255416","sc_id":417,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Terrariums Rhodera/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Terrariums, color:Alabaster, Alabaster, Red, Olive, Beige, Raspberry, Botanical, Florals, Leaves-And-Trees, Rhodera/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Terrariums in Rhodera/Multi is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Red, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rhodera/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0134-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216657_ee48.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_198c.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_58e9.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216657_1_SAW0134_03_SANDERSON_Terrariums_WALLPAPER_aab5.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_842e.jpg","alt":"Terrariums"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255416","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255416-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Terrariums"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rhodera/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rhodera/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e7e1da"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5004f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7d725b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e7e1da\",\"pct\":34.1,\"name\":\"Alabaster\"},{\"hex\":\"#b5004f\",\"pct\":27.7,\"name\":\"Red\"},{\"hex\":\"#7d725b\",\"pct\":19.7,\"name\":\"Olive\"},{\"hex\":\"#c3b59f\",\"pct\":11.8,\"name\":\"Beige\"},{\"hex\":\"#b30550\",\"pct\":6.7,\"name\":\"Raspberry\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0093-01","sku":"DWXH-255417","sc_id":418,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Thackeray Fig | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Thackeray, color:Oatmeal, Oatmeal, Linen, Florals, Fig","body_html":"<div class=\"sanderson-product\">\n<p>Thackeray in Fig is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fig</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0093-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216413_9b4a.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216413_1_SAW0093_01_SANDERSON_Thackeray_WALLPAPER_5dbd.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216413_2_SAW0093_01_SANDERSON_Thackeray_WALLPAPER_bfce.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216414_f91e.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216415_3ffc.jpg","alt":"Thackeray"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255417","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255417-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Thackeray"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fig"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8cec1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2d9cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8cec1\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e2d9cb\",\"pct\":30,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0093-03","sku":"DWXH-255418","sc_id":419,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Thackeray Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Thackeray, color:Oatmeal, Oatmeal, Linen, Florals, Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Thackeray in Ivory is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0093-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216413_9b4a.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216414_f91e.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216415_1_SAW0093_03_SANDERSON_Thackeray_WALLPAPER_a092.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216415_2_SAW0093_03_SANDERSON_Thackeray_WALLPAPER_2d03.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216415_3ffc.jpg","alt":"Thackeray"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255418","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255418-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Thackeray"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8cec1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2d9cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8cec1\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e2d9cb\",\"pct\":30,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0083-02","sku":"DWXH-255419","sc_id":420,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"The Allotment Dove | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Allotment, color:Linen, Linen, Alabaster, Oatmeal, Botanical, Landscapes, Dove","body_html":"<div class=\"sanderson-product\">\n<p>The Allotment in Dove is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Dove</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0083-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216353_d2f9.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216351_19e0.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216352_1_SAW0083_02_SANDERSON_The_Allotment_WALLPAPER_a738.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216352_2_SAW0083_02_SANDERSON_The_Allotment_WALLPAPER_5703.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216352_9b78.jpg","alt":"The Allotment"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255419","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255419-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Allotment"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Dove"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dedbd6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7e6e6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cbc6b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dedbd6\",\"pct\":52,\"name\":\"Linen\"},{\"hex\":\"#e7e6e6\",\"pct\":30.8,\"name\":\"Alabaster\"},{\"hex\":\"#cbc6b8\",\"pct\":17.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0083-01","sku":"DWXH-255420","sc_id":421,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"The Allotment Fennel | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Allotment, color:Linen, Linen, Alabaster, Oatmeal, Botanical, Landscapes, Fennel","body_html":"<div class=\"sanderson-product\">\n<p>The Allotment in Fennel is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fennel</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0083-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216353_d2f9.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216351_19e0.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216351_1_SAW0083_01_SANDERSON_The_Allotment_WALLPAPER_24df.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216351_2_SAW0083_01_SANDERSON_The_Allotment_WALLPAPER_c539.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216352_9b78.jpg","alt":"The Allotment"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255420","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255420-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Allotment"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fennel"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fennel"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dedbd6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7e6e6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cbc6b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dedbd6\",\"pct\":52,\"name\":\"Linen\"},{\"hex\":\"#e7e6e6\",\"pct\":30.8,\"name\":\"Alabaster\"},{\"hex\":\"#cbc6b8\",\"pct\":17.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0083-03","sku":"DWXH-255421","sc_id":422,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"The Allotment Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Allotment, color:Linen, Linen, Alabaster, Oatmeal, Botanical, Landscapes","body_html":"<div class=\"sanderson-product\">\n<p>The Allotment in Linen is a Sanderson Wallcovering in a botanical/landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Allotment</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0083-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216353_d2f9.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216351_19e0.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216352_9b78.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216353_1_SAW0083_03_SANDERSON_The_Allotment_WALLPAPER_ad84.jpg","alt":"The Allotment"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216353_2_SAW0083_03_SANDERSON_The_Allotment_WALLPAPER_8694.jpg","alt":"The Allotment"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255421","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255421-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0083-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Allotment"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dedbd6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7e6e6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cbc6b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dedbd6\",\"pct\":52,\"name\":\"Linen\"},{\"hex\":\"#e7e6e6\",\"pct\":30.8,\"name\":\"Alabaster\"},{\"hex\":\"#cbc6b8\",\"pct\":17.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0233-02","sku":"DWXH-255422","sc_id":423,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"The Stumpery Fern | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Stumpery, color:Taupe, Taupe, Greige, Olive, Oatmeal, Linen, Landscapes, Fern","body_html":"<div class=\"sanderson-product\">\n<p>The Stumpery in Fern is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Greige, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fern</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0233-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217491_5566.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217490_9a28.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217491_1_SAW0233_02_SANDERSON_The_Stumpery_WALLPAPER_b7ec.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217491_2_SAW0233_02_SANDERSON_The_Stumpery_WALLPAPER_4a40.jpg","alt":"The Stumpery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255422","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255422-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0233-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0233-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Stumpery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fern"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fern"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#90937f"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bab39e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#74735e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#90937f\",\"pct\":32.6,\"name\":\"Taupe\"},{\"hex\":\"#bab39e\",\"pct\":19.5,\"name\":\"Greige\"},{\"hex\":\"#74735e\",\"pct\":18.8,\"name\":\"Olive\"},{\"hex\":\"#d0c7b3\",\"pct\":16.4,\"name\":\"Oatmeal\"},{\"hex\":\"#dfd7c5\",\"pct\":12.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0233-01","sku":"DWXH-255423","sc_id":424,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"The Stumpery Lichen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Stumpery, color:Taupe, Taupe, Greige, Olive, Oatmeal, Linen, Landscapes, Lichen","body_html":"<div class=\"sanderson-product\">\n<p>The Stumpery in Lichen is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Greige, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lichen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0233-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217491_5566.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217490_1_SAW0233_01_SANDERSON_The_Stumpery_WALLPAPER_5a68.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217490_2_SAW0233_01_SANDERSON_The_Stumpery_WALLPAPER_9b72.jpg","alt":"The Stumpery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217490_9a28.jpg","alt":"The Stumpery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255423","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255423-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0233-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0233-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Stumpery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lichen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lichen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#90937f"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"32.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bab39e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#74735e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#90937f\",\"pct\":32.6,\"name\":\"Taupe\"},{\"hex\":\"#bab39e\",\"pct\":19.5,\"name\":\"Greige\"},{\"hex\":\"#74735e\",\"pct\":18.8,\"name\":\"Olive\"},{\"hex\":\"#d0c7b3\",\"pct\":16.4,\"name\":\"Oatmeal\"},{\"hex\":\"#dfd7c5\",\"pct\":12.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0232-01","sku":"DWXH-255424","sc_id":425,"settlement_verdict":"CLEAR","retail":697,"product":{"title":"The Stumpery (Mural) Dell | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, The Stumpery, color:Taupe, Taupe, Green, Denim, Stone, Grey, Greige, Landscapes, (Mural) Dell","body_html":"<div class=\"sanderson-product\">\n<p>The Stumpery in (Mural) Dell is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Green, Denim. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">(Mural) Dell</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">The Stumpery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0232-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217492_11be.jpg","alt":"The Stumpery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255424","price":"697.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255424-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0232-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0232-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"The Stumpery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"(Mural) Dell"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"(Mural) Dell"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#959282"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#555e57"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#70796f"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#959282\",\"pct\":20.3,\"name\":\"Taupe\"},{\"hex\":\"#555e57\",\"pct\":19.5,\"name\":\"Green\"},{\"hex\":\"#70796f\",\"pct\":17.1,\"name\":\"Denim\"},{\"hex\":\"#a9a292\",\"pct\":15.9,\"name\":\"Stone\"},{\"hex\":\"#848171\",\"pct\":15.2,\"name\":\"Grey\"},{\"hex\":\"#bcb2a1\",\"pct\":12.1,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0234-02","sku":"DWXH-255425","sc_id":426,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Thyme Walk Damson/Quince | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Thyme, color:White, White, Beige, Alabaster, Walk Damson/Quince","body_html":"<div class=\"sanderson-product\">\n<p>Thyme in Walk Damson/Quince is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Beige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Thyme</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Walk Damson/Quince</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Thyme</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0234-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217508_242c.jpg","alt":"Thyme"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217509_1_SAW0234_02_SANDERSON_Thyme_Walk_WALLPAPER_52aa.jpg","alt":"Thyme"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217509_2_SAW0234_02_SANDERSON_Thyme_Walk_WALLPAPER_c894.jpg","alt":"Thyme"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217509_9332.jpg","alt":"Thyme"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255425","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255425-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0234-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0234-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Thyme"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Walk Damson/Quince"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Walk Damson/Quince"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f5f0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"69.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c5bc9d"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ede9df"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f5f0\",\"pct\":69.2,\"name\":\"White\"},{\"hex\":\"#c5bc9d\",\"pct\":17.4,\"name\":\"Beige\"},{\"hex\":\"#ede9df\",\"pct\":13.5,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0221-04","sku":"DWXH-255426","sc_id":427,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Tomato Leaf Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tomato Leaf, color:Alabaster, Alabaster, Oatmeal, Cream, Linen, Green","body_html":"<div class=\"sanderson-product\">\n<p>Tomato Leaf in Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0221-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_dea1.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217420_d65a.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217421_b068.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217422_4849.jpg","alt":"Tomato Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255426","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255426-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tomato Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eede"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6ccae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e6d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eede\",\"pct\":52.5,\"name\":\"Alabaster\"},{\"hex\":\"#c6ccae\",\"pct\":20,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e6d2\",\"pct\":13.9,\"name\":\"Cream\"},{\"hex\":\"#dbdec7\",\"pct\":13.6,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0221-02","sku":"DWXH-255427","sc_id":428,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Tomato Leaf Pink Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tomato Leaf, color:Alabaster, Alabaster, Oatmeal, Cream, Linen, Botanical, Pink Clay","body_html":"<div class=\"sanderson-product\">\n<p>Tomato Leaf in Pink Clay is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pink Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0221-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_dea1.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217420_d65a.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217421_b068.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217422_4849.jpg","alt":"Tomato Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255427","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255427-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tomato Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pink Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pink Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eede"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6ccae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e6d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eede\",\"pct\":52.5,\"name\":\"Alabaster\"},{\"hex\":\"#c6ccae\",\"pct\":20,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e6d2\",\"pct\":13.9,\"name\":\"Cream\"},{\"hex\":\"#dbdec7\",\"pct\":13.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0221-03","sku":"DWXH-255428","sc_id":429,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Tomato Leaf Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tomato Leaf, color:Alabaster, Alabaster, Oatmeal, Cream, Linen, Botanical, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Tomato Leaf in Wedgwood is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0221-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_dea1.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217420_d65a.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217421_b068.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217422_4849.jpg","alt":"Tomato Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255428","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255428-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tomato Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eede"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6ccae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e6d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eede\",\"pct\":52.5,\"name\":\"Alabaster\"},{\"hex\":\"#c6ccae\",\"pct\":20,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e6d2\",\"pct\":13.9,\"name\":\"Cream\"},{\"hex\":\"#dbdec7\",\"pct\":13.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0221-01","sku":"DWXH-255429","sc_id":430,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Tomato Leaf Willow | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tomato Leaf, color:Alabaster, Alabaster, Oatmeal, Cream, Linen, Botanical, Willow","body_html":"<div class=\"sanderson-product\">\n<p>Tomato Leaf in Willow is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tomato Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0221-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_dea1.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_1_SAW0221_01_SANDERSON_Tomato_Leaf_WALLPAPER_a332.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_2_SAW0221_01_SANDERSON_Tomato_Leaf_WALLPAPER_d66e.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217419_3_SAW0221_01_SANDERSON_Tomato_Leaf_WALLPAPER_7cc2.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217420_d65a.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217421_b068.jpg","alt":"Tomato Leaf"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217422_4849.jpg","alt":"Tomato Leaf"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255429","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255429-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0221-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tomato Leaf"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eede"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6ccae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e6d2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eede\",\"pct\":52.5,\"name\":\"Alabaster\"},{\"hex\":\"#c6ccae\",\"pct\":20,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e6d2\",\"pct\":13.9,\"name\":\"Cream\"},{\"hex\":\"#dbdec7\",\"pct\":13.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0235-03","sku":"DWXH-255430","sc_id":431,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Topiary View Muntjac | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Topiary View, color:Alabaster, Alabaster, Stone, Oatmeal, Linen, Landscapes, Muntjac","body_html":"<div class=\"sanderson-product\">\n<p>Topiary View in Muntjac is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Stone, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Muntjac</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0235-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217511_f500.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217510_792d.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217512_1373.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217512_1_SAW0235_03_SANDERSON_Topiary_View_WALLPAPER_5f88.jpg","alt":"Topiary View"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255430","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255430-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Topiary View"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Muntjac"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Muntjac"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e8e3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1b397"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cacab9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e8e3\",\"pct\":50,\"name\":\"Alabaster\"},{\"hex\":\"#b1b397\",\"pct\":18.5,\"name\":\"Stone\"},{\"hex\":\"#cacab9\",\"pct\":17.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d6ca\",\"pct\":14,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0235-02","sku":"DWXH-255431","sc_id":432,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Topiary View Thyme | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Topiary View, color:Alabaster, Alabaster, Stone, Oatmeal, Linen, Landscapes, Thyme","body_html":"<div class=\"sanderson-product\">\n<p>Topiary View in Thyme is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Stone, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Thyme</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0235-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217511_f500.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217510_792d.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217511_1_SAW0235_02_SANDERSON_Topiary_View_WALLPAPER_2b84.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217512_1373.jpg","alt":"Topiary View"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255431","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255431-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Topiary View"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Thyme"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Thyme"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e8e3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1b397"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cacab9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e8e3\",\"pct\":50,\"name\":\"Alabaster\"},{\"hex\":\"#b1b397\",\"pct\":18.5,\"name\":\"Stone\"},{\"hex\":\"#cacab9\",\"pct\":17.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d6ca\",\"pct\":14,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0235-01","sku":"DWXH-255432","sc_id":433,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Topiary View Wedgwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Topiary View, color:Alabaster, Alabaster, Stone, Oatmeal, Linen, Landscapes, Wedgwood","body_html":"<div class=\"sanderson-product\">\n<p>Topiary View in Wedgwood is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Stone, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wedgwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Topiary View</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0235-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217511_f500.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217510_1_SAW0235_01_SANDERSON_Topiary_View_WALLPAPER_c626.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217510_792d.jpg","alt":"Topiary View"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217512_1373.jpg","alt":"Topiary View"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255432","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255432-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0235-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Topiary View"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e8e3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1b397"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cacab9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e8e3\",\"pct\":50,\"name\":\"Alabaster\"},{\"hex\":\"#b1b397\",\"pct\":18.5,\"name\":\"Stone\"},{\"hex\":\"#cacab9\",\"pct\":17.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d6d6ca\",\"pct\":14,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0035-03","sku":"DWXH-255433","sc_id":434,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Treasure Map Vanilla/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Treasure Map, color:Alabaster, Alabaster, Linen, Silver, White, Vanilla/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Treasure Map in Vanilla/Multi is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Treasure Map</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Vanilla/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Treasure Map</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0035-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214040_2a75.jpg","alt":"Treasure Map"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214040_1_SAW0035_03_SANDERSON_Treasure_Map_WALLPAPER_07b6.jpg","alt":"Treasure Map"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214040_2_SAW0035_03_SANDERSON_Treasure_Map_WALLPAPER_951a.jpg","alt":"Treasure Map"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255433","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255433-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0035-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0035-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Treasure Map"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Vanilla/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Vanilla/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eeeb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dddcd7"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c8c0be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eeeb\",\"pct\":52.1,\"name\":\"Alabaster\"},{\"hex\":\"#dddcd7\",\"pct\":21.6,\"name\":\"Linen\"},{\"hex\":\"#c8c0be\",\"pct\":13.4,\"name\":\"Silver\"},{\"hex\":\"#f3f1ee\",\"pct\":12.9,\"name\":\"White\"}]"}]}
+{"mfr_sku":"SAW0213-01","sku":"DWXH-255434","sc_id":435,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Trelliage Chamomile/Chalk | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Trelliage, color:Ivory, Ivory, Sand, Linen, Alabaster, Chamomile/Chalk","body_html":"<div class=\"sanderson-product\">\n<p>Trelliage in Chamomile/Chalk is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sand, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chamomile/Chalk</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0213-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217321_b3a5.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217319_1_SAW0213_01_SANDERSON_Trelliage_WALLPAPER_825e.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217319_8402.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217320_e003.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217322_c1bd.jpg","alt":"Trelliage"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255434","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255434-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Trelliage"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chamomile/Chalk"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chamomile/Chalk"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#faf4e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2ae92"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded6be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#faf4e6\",\"pct\":55.2,\"name\":\"Ivory\"},{\"hex\":\"#c2ae92\",\"pct\":21.1,\"name\":\"Sand\"},{\"hex\":\"#ded6be\",\"pct\":14.4,\"name\":\"Linen\"},{\"hex\":\"#f4eede\",\"pct\":9.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0213-03","sku":"DWXH-255435","sc_id":436,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Trelliage Raspberry/Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Trelliage, color:Ivory, Ivory, Sand, Linen, Alabaster, Raspberry/Stone","body_html":"<div class=\"sanderson-product\">\n<p>Trelliage in Raspberry/Stone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sand, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Raspberry/Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0213-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217321_b3a5.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217319_8402.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217320_e003.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217321_1_SAW0213_03_SANDERSON_Trelliage_WALLPAPER_3225.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217322_c1bd.jpg","alt":"Trelliage"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255435","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255435-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Trelliage"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Raspberry/Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Raspberry/Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#faf4e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2ae92"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded6be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#faf4e6\",\"pct\":55.2,\"name\":\"Ivory\"},{\"hex\":\"#c2ae92\",\"pct\":21.1,\"name\":\"Sand\"},{\"hex\":\"#ded6be\",\"pct\":14.4,\"name\":\"Linen\"},{\"hex\":\"#f4eede\",\"pct\":9.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0187-03","sku":"DWXH-255436","sc_id":437,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Truffle Blue Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Truffle, color:Linen, Linen, Ivory, Cream, Alabaster, White, Botanical, Blue Clay","body_html":"<div class=\"sanderson-product\">\n<p>Truffle in Blue Clay is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0187-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_84d0.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_8298.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_c15f.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_1_SAW0187_03_SANDERSON_Truffle_WALLPAPER_1e5f.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_2_SAW0187_03_SANDERSON_Truffle_WALLPAPER_bec7.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_3_SAW0187_03_SANDERSON_Truffle_WALLPAPER_bb73.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_af62.jpg","alt":"Truffle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255436","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255436-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Truffle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5ddc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f4f2e8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ebe3cc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5ddc3\",\"pct\":33.2,\"name\":\"Linen\"},{\"hex\":\"#f4f2e8\",\"pct\":20.4,\"name\":\"Ivory\"},{\"hex\":\"#ebe3cc\",\"pct\":19.3,\"name\":\"Cream\"},{\"hex\":\"#efebdd\",\"pct\":14.2,\"name\":\"Alabaster\"},{\"hex\":\"#f7f5ec\",\"pct\":12.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0187-04","sku":"DWXH-255437","sc_id":438,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Truffle Flax | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Truffle, color:Linen, Linen, Ivory, Cream, Alabaster, White, Botanical, Flax","body_html":"<div class=\"sanderson-product\">\n<p>Truffle in Flax is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Flax</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0187-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_84d0.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_8298.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_c15f.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_af62.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_1_SAW0187_04_SANDERSON_Truffle_WALLPAPER_38fb.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_2_SAW0187_04_SANDERSON_Truffle_WALLPAPER_35a3.jpg","alt":"Truffle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255437","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255437-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Truffle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Flax"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Flax"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5ddc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f4f2e8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ebe3cc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5ddc3\",\"pct\":33.2,\"name\":\"Linen\"},{\"hex\":\"#f4f2e8\",\"pct\":20.4,\"name\":\"Ivory\"},{\"hex\":\"#ebe3cc\",\"pct\":19.3,\"name\":\"Cream\"},{\"hex\":\"#efebdd\",\"pct\":14.2,\"name\":\"Alabaster\"},{\"hex\":\"#f7f5ec\",\"pct\":12.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0187-01","sku":"DWXH-255438","sc_id":439,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Truffle Indigo | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Truffle, color:Linen, Linen, Ivory, Cream, Alabaster, White, Botanical, Indigo","body_html":"<div class=\"sanderson-product\">\n<p>Truffle in Indigo is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0187-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_84d0.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_1_SAW0187_01_SANDERSON_Truffle_WALLPAPER_f8ba.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_2_SAW0187_01_SANDERSON_Truffle_WALLPAPER_f344.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_8298.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_c15f.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_af62.jpg","alt":"Truffle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255438","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255438-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Truffle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5ddc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f4f2e8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ebe3cc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5ddc3\",\"pct\":33.2,\"name\":\"Linen\"},{\"hex\":\"#f4f2e8\",\"pct\":20.4,\"name\":\"Ivory\"},{\"hex\":\"#ebe3cc\",\"pct\":19.3,\"name\":\"Cream\"},{\"hex\":\"#efebdd\",\"pct\":14.2,\"name\":\"Alabaster\"},{\"hex\":\"#f7f5ec\",\"pct\":12.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0187-02","sku":"DWXH-255439","sc_id":440,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Truffle Inkwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Truffle, color:Linen, Linen, Ivory, Cream, Alabaster, White, Botanical, Inkwood","body_html":"<div class=\"sanderson-product\">\n<p>Truffle in Inkwood is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Inkwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0187-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217243_84d0.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217239_8298.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_1_SAW0187_02_SANDERSON_Truffle_WALLPAPER_0f11.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_2_SAW0187_02_SANDERSON_Truffle_WALLPAPER_e67c.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217240_c15f.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217241_af62.jpg","alt":"Truffle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255439","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255439-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0187-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Truffle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Inkwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Inkwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5ddc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f4f2e8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ebe3cc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5ddc3\",\"pct\":33.2,\"name\":\"Linen\"},{\"hex\":\"#f4f2e8\",\"pct\":20.4,\"name\":\"Ivory\"},{\"hex\":\"#ebe3cc\",\"pct\":19.3,\"name\":\"Cream\"},{\"hex\":\"#efebdd\",\"pct\":14.2,\"name\":\"Alabaster\"},{\"hex\":\"#f7f5ec\",\"pct\":12.9,\"name\":\"White\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0188-01","sku":"DWXH-255440","sc_id":441,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Truffle Rowan Berry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Truffle, color:Sand, Sand, Alabaster, Linen, Ivory, Botanical, Rowan Berry","body_html":"<div class=\"sanderson-product\">\n<p>Truffle in Rowan Berry is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rowan Berry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Truffle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0188-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217242_6f46.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217242_1_SAW0188_01_SANDERSON_Truffle_WALLPAPER_0001.jpg","alt":"Truffle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217242_2_SAW0188_01_SANDERSON_Truffle_WALLPAPER_fb08.jpg","alt":"Truffle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255440","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255440-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0188-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0188-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Truffle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rowan Berry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rowan Berry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#daa372"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"52.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f2ece1"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ebdac8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#daa372\",\"pct\":52.4,\"name\":\"Sand\"},{\"hex\":\"#f2ece1\",\"pct\":21.2,\"name\":\"Alabaster\"},{\"hex\":\"#ebdac8\",\"pct\":14.1,\"name\":\"Linen\"},{\"hex\":\"#f6f3e8\",\"pct\":12.3,\"name\":\"Ivory\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0036-04","sku":"DWXH-255441","sc_id":442,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tuileries Silver/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tuileries, color:White, White, Alabaster, Cream, Birds, Silver/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Tuileries in Silver/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0036-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214080_33bf.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214081_7b83.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_4edb.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214083_1_SAW0036_04_SANDERSON_Tuileries_WALLPAPER_50b9.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214083_71f7.jpg","alt":"Tuileries"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255441","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255441-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tuileries"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2f3ee"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#efeee9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5dfd7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2f3ee\",\"pct\":55.8,\"name\":\"White\"},{\"hex\":\"#efeee9\",\"pct\":29.6,\"name\":\"Alabaster\"},{\"hex\":\"#e5dfd7\",\"pct\":13.5,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0036-01","sku":"DWXH-255442","sc_id":443,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tuileries Taupe/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tuileries, color:White, White, Alabaster, Cream, Birds, Taupe/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Tuileries in Taupe/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Taupe/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0036-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214080_33bf.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214080_1_SAW0036_01_SANDERSON_Tuileries_WALLPAPER_041d.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214081_7b83.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_4edb.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214083_71f7.jpg","alt":"Tuileries"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255442","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255442-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tuileries"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Taupe/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Taupe/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2f3ee"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#efeee9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5dfd7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2f3ee\",\"pct\":55.8,\"name\":\"White\"},{\"hex\":\"#efeee9\",\"pct\":29.6,\"name\":\"Alabaster\"},{\"hex\":\"#e5dfd7\",\"pct\":13.5,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0036-02","sku":"DWXH-255443","sc_id":444,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tuileries Willow/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tuileries, color:White, White, Alabaster, Cream, Birds, Willow/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Tuileries in Willow/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0036-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214080_33bf.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214081_1_SAW0036_02_SANDERSON_Tuileries_WALLPAPER_d2cb.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214081_7b83.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_4edb.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214083_71f7.jpg","alt":"Tuileries"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255443","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255443-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tuileries"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2f3ee"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#efeee9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5dfd7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2f3ee\",\"pct\":55.8,\"name\":\"White\"},{\"hex\":\"#efeee9\",\"pct\":29.6,\"name\":\"Alabaster\"},{\"hex\":\"#e5dfd7\",\"pct\":13.5,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0135-02","sku":"DWXH-255444","sc_id":445,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tulipomania Ink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tulipomania, color:Black, Black, Oatmeal, Stone, Aubergine, Florals, Ink","body_html":"<div class=\"sanderson-product\">\n<p>Tulipomania in Ink is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tulipomania</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tulipomania</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0135-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216667_82f2.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216666_f57e.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216667_1_SAW0135_02_SANDERSON_Tulipomania_WALLPAPER_344b.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216667_2_SAW0135_02_SANDERSON_Tulipomania_WALLPAPER_bac5.jpg","alt":"Tulipomania"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255444","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255444-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0135-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0135-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tulipomania"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#061f34"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcccb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#be9898"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#061f34\",\"pct\":66.2,\"name\":\"Black\"},{\"hex\":\"#dcccb6\",\"pct\":14.4,\"name\":\"Oatmeal\"},{\"hex\":\"#be9898\",\"pct\":14.3,\"name\":\"Stone\"},{\"hex\":\"#464257\",\"pct\":5.2,\"name\":\"Aubergine\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0175-02","sku":"DWXH-255445","sc_id":446,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Voyaging Koi Clear Sky/Persimmon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Voyaging Koi, color:Oatmeal, Oatmeal, Duck Egg, Sand, Mist, Linen, Animals, Clear Sky/Persimmon","body_html":"<div class=\"sanderson-product\">\n<p>Voyaging Koi in Clear Sky/Persimmon is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Duck Egg, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Voyaging Koi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Clear Sky/Persimmon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Voyaging Koi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0175-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217115_00ae.jpg","alt":"Voyaging Koi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217114_b067.jpg","alt":"Voyaging Koi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217115_1_SAW0175_02_SANDERSON_Voyaging_Koi_WALLPAPER_80c9.jpg","alt":"Voyaging Koi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255445","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255445-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0175-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0175-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Voyaging Koi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Clear Sky/Persimmon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Clear Sky/Persimmon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5b5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"28"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b6d3ce"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5be8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5b5\",\"pct\":28,\"name\":\"Oatmeal\"},{\"hex\":\"#b6d3ce\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#d5be8e\",\"pct\":21.5,\"name\":\"Sand\"},{\"hex\":\"#bbd7d2\",\"pct\":15.7,\"name\":\"Mist\"},{\"hex\":\"#e3dec5\",\"pct\":10.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0175-01","sku":"DWXH-255446","sc_id":447,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Voyaging Koi Oriental Green/Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Voyaging Koi, color:Oatmeal, Oatmeal, Duck Egg, Sand, Mist, Linen, Animals, Oriental Green/Honey","body_html":"<div class=\"sanderson-product\">\n<p>Voyaging Koi in Oriental Green/Honey is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Duck Egg, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Voyaging Koi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Oriental Green/Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Voyaging Koi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0175-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217115_00ae.jpg","alt":"Voyaging Koi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217114_1_SAW0175_01_SANDERSON_Voyaging_Koi_WALLPAPER_c73b.jpg","alt":"Voyaging Koi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217114_b067.jpg","alt":"Voyaging Koi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255446","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255446-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0175-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0175-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Voyaging Koi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Oriental Green/Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Oriental Green/Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ded5b5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"28"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b6d3ce"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5be8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ded5b5\",\"pct\":28,\"name\":\"Oatmeal\"},{\"hex\":\"#b6d3ce\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#d5be8e\",\"pct\":21.5,\"name\":\"Sand\"},{\"hex\":\"#bbd7d2\",\"pct\":15.7,\"name\":\"Mist\"},{\"hex\":\"#e3dec5\",\"pct\":10.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0125-02","sku":"DWXH-255447","sc_id":448,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Warwick Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Warwick, color:Oatmeal, Oatmeal, Greige, Linen, Botanical, Leaves-And-Trees, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Warwick in Linen is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0125-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216616_e4be.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216615_a543.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216616_1_SAW0125_02_SANDERSON_Warwick_WALLPAPER_7317.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216616_2_SAW0125_02_SANDERSON_Warwick_WALLPAPER_d8e2.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216617_e6be.jpg","alt":"Warwick"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255447","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255447-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Warwick"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d2c8bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c1af9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d2c8bc\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1af9b\",\"pct\":17.3,\"name\":\"Greige\"},{\"hex\":\"#d8d3cb\",\"pct\":12.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0125-01","sku":"DWXH-255448","sc_id":449,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Warwick Taupe | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Warwick, color:Oatmeal, Oatmeal, Greige, Linen, Botanical, Leaves-And-Trees, Taupe, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Warwick in Taupe is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Taupe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0125-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216616_e4be.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216615_1_SAW0125_01_SANDERSON_Warwick_WALLPAPER_79d6.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216615_2_SAW0125_01_SANDERSON_Warwick_WALLPAPER_ded8.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216615_a543.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216617_e6be.jpg","alt":"Warwick"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255448","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255448-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Warwick"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d2c8bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c1af9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d2c8bc\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1af9b\",\"pct\":17.3,\"name\":\"Greige\"},{\"hex\":\"#d8d3cb\",\"pct\":12.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0176-01","sku":"DWXH-255449","sc_id":450,"settlement_verdict":"REVIEW-VISION","retail":972,"product":{"title":"Water Garden Soft Jade/Pink Blossom | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Water Garden, color:Linen, Linen, Silver, Grey, Stone, Cream, Mist, Animals, Soft Jade/Pink Blossom","body_html":"<div class=\"sanderson-product\">\n<p>Water Garden in Soft Jade/Pink Blossom is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Silver, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Water Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Soft Jade/Pink Blossom</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Water Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0176-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217131_859c.jpg","alt":"Water Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217131_1_SAW0176_01_SANDERSON_Water_Garden_WALLPAPER_8d9a.jpg","alt":"Water Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217131_3_SAW0176_01_SANDERSON_Water_Garden_WALLPAPER_f0c6.jpg","alt":"Water Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255449","price":"972.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255449-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0176-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0176-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Water Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Soft Jade/Pink Blossom"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Soft Jade/Pink Blossom"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2d9cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b1b9b5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#8a9ca4"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2d9cb\",\"pct\":20.9,\"name\":\"Linen\"},{\"hex\":\"#b1b9b5\",\"pct\":19.9,\"name\":\"Silver\"},{\"hex\":\"#8a9ca4\",\"pct\":19.3,\"name\":\"Grey\"},{\"hex\":\"#a4b2b2\",\"pct\":15.9,\"name\":\"Stone\"},{\"hex\":\"#ebe2d6\",\"pct\":12.8,\"name\":\"Cream\"},{\"hex\":\"#cacbc0\",\"pct\":11.2,\"name\":\"Mist\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0060-01","sku":"DWXH-255450","sc_id":451,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Waterperry Ivory/Stone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Waterperry, color:Alabaster, Alabaster, Linen, Mist, Cream, Botanical, Leaves-And-Trees, Ivory/Stone, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Waterperry in Ivory/Stone is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Waterperry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory/Stone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Waterperry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0060-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216280_5340.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216280_1_SAW0060_01_SANDERSON_Waterperry_WALLPAPER_a09e.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216280_2_SAW0060_01_SANDERSON_Waterperry_WALLPAPER_bf83.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216283_6c5c.jpg","alt":"Waterperry"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255450","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255450-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0060-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0060-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Waterperry"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory/Stone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"49.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd9d2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cfcbc2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e3de\",\"pct\":49.5,\"name\":\"Alabaster\"},{\"hex\":\"#dbd9d2\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#cfcbc2\",\"pct\":17.6,\"name\":\"Mist\"},{\"hex\":\"#e0ddd7\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0060-03","sku":"DWXH-255451","sc_id":452,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Waterperry Willow/Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Waterperry, color:Alabaster, Alabaster, Linen, Mist, Cream, Botanical, Leaves-And-Trees, Willow/Olive, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Waterperry in Willow/Olive is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Waterperry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Willow/Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Waterperry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0060-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216280_5340.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216283_1_SAW0060_03_SANDERSON_Waterperry_WALLPAPER_8075.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216283_2_SAW0060_03_SANDERSON_Waterperry_WALLPAPER_0626.jpg","alt":"Waterperry"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAP216283_6c5c.jpg","alt":"Waterperry"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255451","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255451-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0060-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0060-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Waterperry"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Willow/Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Willow/Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"49.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd9d2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#cfcbc2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e3de\",\"pct\":49.5,\"name\":\"Alabaster\"},{\"hex\":\"#dbd9d2\",\"pct\":18.5,\"name\":\"Linen\"},{\"hex\":\"#cfcbc2\",\"pct\":17.6,\"name\":\"Mist\"},{\"hex\":\"#e0ddd7\",\"pct\":14.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0236-01","sku":"DWXH-255452","sc_id":453,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Wildflower Meadow Going Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wildflower Meadow, color:White, White, Oatmeal, Linen, Alabaster, Cream, Animals, Going Green","body_html":"<div class=\"sanderson-product\">\n<p>Wildflower Meadow in Going Green is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Going Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0236-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217483_a77f.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF227316_fa98.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF227317_cdf7.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF227331_1a8d.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF227332_1b9a.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF227338_b238.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF237596_e635.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIF237597_bebd.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217481_1_SAW0236_01_SANDERSON_Wildflower_Meadow_WALLPAPER_8b30.jpg","alt":"Wildflower Meadow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255452","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255452-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wildflower Meadow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Going Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Going Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f1ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0dbcc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f1ed\",\"pct\":36.7,\"name\":\"White\"},{\"hex\":\"#d4c6af\",\"pct\":18.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0dbcc\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#f1eee7\",\"pct\":14.8,\"name\":\"Alabaster\"},{\"hex\":\"#ebe1d7\",\"pct\":13.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0236-02","sku":"DWXH-255453","sc_id":454,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Wildflower Meadow Maple | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wildflower Meadow, color:White, White, Oatmeal, Linen, Alabaster, Cream, Animals, Maple","body_html":"<div class=\"sanderson-product\">\n<p>Wildflower Meadow in Maple is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Maple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0236-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217483_a77f.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217481_43cc.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217482_1_SAW0236_02_SANDERSON_Wildflower_Meadow_WALLPAPER_5b06.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217482_2_SAW0236_02_SANDERSON_Wildflower_Meadow_WALLPAPER_6891.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217482_def4.jpg","alt":"Wildflower Meadow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255453","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255453-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wildflower Meadow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Maple"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Maple"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f1ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0dbcc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f1ed\",\"pct\":36.7,\"name\":\"White\"},{\"hex\":\"#d4c6af\",\"pct\":18.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0dbcc\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#f1eee7\",\"pct\":14.8,\"name\":\"Alabaster\"},{\"hex\":\"#ebe1d7\",\"pct\":13.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0236-03","sku":"DWXH-255454","sc_id":455,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Wildflower Meadow Pearl | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wildflower Meadow, color:White, White, Oatmeal, Linen, Alabaster, Cream, Animals, Pearl","body_html":"<div class=\"sanderson-product\">\n<p>Wildflower Meadow in Pearl is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pearl</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wildflower Meadow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0236-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217483_a77f.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217481_43cc.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217482_def4.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217483_1_SAW0236_03_SANDERSON_Wildflower_Meadow_WALLPAPER_cb45.jpg","alt":"Wildflower Meadow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217483_2_SAW0236_03_SANDERSON_Wildflower_Meadow_WALLPAPER_39d9.jpg","alt":"Wildflower Meadow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255454","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255454-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0236-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wildflower Meadow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pearl"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pearl"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5f1ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d4c6af"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0dbcc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5f1ed\",\"pct\":36.7,\"name\":\"White\"},{\"hex\":\"#d4c6af\",\"pct\":18.2,\"name\":\"Oatmeal\"},{\"hex\":\"#e0dbcc\",\"pct\":17.3,\"name\":\"Linen\"},{\"hex\":\"#f1eee7\",\"pct\":14.8,\"name\":\"Alabaster\"},{\"hex\":\"#ebe1d7\",\"pct\":13.1,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0050-01","sku":"DWXH-255455","sc_id":456,"settlement_verdict":"CLEAR","retail":139,"product":{"title":"Wildwood Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wildwood, color:Silver, Silver, Mist, Grey","body_html":"<div class=\"sanderson-product\">\n<p>Wildwood in Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wildwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wildwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0050-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215689_44f6.jpg","alt":"Wildwood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215689_1_SAW0050_01_SANDERSON_Wildwood_WALLPAPER_292f.jpg","alt":"Wildwood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215689_2_SAW0050_01_SANDERSON_Wildwood_WALLPAPER_84c8.jpg","alt":"Wildwood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255455","price":"139.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255455-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0050-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0050-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wildwood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c4c3bb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cfcdc8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c4c3bb\",\"pct\":50.2,\"name\":\"Silver\"},{\"hex\":\"#cfcdc8\",\"pct\":49.8,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0214-03","sku":"DWXH-255456","sc_id":457,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Wilsford Bone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wilsford, color:Linen, Linen, Alabaster, Cream, Bone","body_html":"<div class=\"sanderson-product\">\n<p>Wilsford in Bone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0214-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217310_a20a.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217308_45df.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217309_6378.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217310_1_SAW0214_03_SANDERSON_Wilsford_WALLPAPER_ceb5.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217374_4c07.jpg","alt":"Wilsford"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255456","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255456-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wilsford"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ddd6cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece7e0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5ded5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ddd6cc\",\"pct\":48.5,\"name\":\"Linen\"},{\"hex\":\"#ece7e0\",\"pct\":28.4,\"name\":\"Alabaster\"},{\"hex\":\"#e5ded5\",\"pct\":23.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0214-01","sku":"DWXH-255457","sc_id":458,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Wilsford Conch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wilsford, color:Linen, Linen, Alabaster, Cream, Conch","body_html":"<div class=\"sanderson-product\">\n<p>Wilsford in Conch is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Conch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0214-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217310_a20a.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217308_1_SAW0214_01_SANDERSON_Wilsford_WALLPAPER_322f.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217308_45df.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217309_6378.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217374_4c07.jpg","alt":"Wilsford"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255457","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255457-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wilsford"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Conch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Conch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ddd6cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece7e0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5ded5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ddd6cc\",\"pct\":48.5,\"name\":\"Linen\"},{\"hex\":\"#ece7e0\",\"pct\":28.4,\"name\":\"Alabaster\"},{\"hex\":\"#e5ded5\",\"pct\":23.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0214-04","sku":"DWXH-255458","sc_id":459,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Wilsford Tyrian Lilac | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wilsford, color:Linen, Linen, Alabaster, Cream, Tyrian Lilac","body_html":"<div class=\"sanderson-product\">\n<p>Wilsford in Tyrian Lilac is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Tyrian Lilac</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0214-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217310_a20a.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217308_45df.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217309_6378.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217374_1_SAW0214_04_SANDERSON_Wilsford_WALLPAPER_4759.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217374_4c07.jpg","alt":"Wilsford"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255458","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255458-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wilsford"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Tyrian Lilac"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ddd6cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece7e0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5ded5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ddd6cc\",\"pct\":48.5,\"name\":\"Linen\"},{\"hex\":\"#ece7e0\",\"pct\":28.4,\"name\":\"Alabaster\"},{\"hex\":\"#e5ded5\",\"pct\":23.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0202-02","sku":"DWXH-255459","sc_id":460,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Winnie The Pooh Bonbon Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Winnie The Pooh, color:White, White, Cream, Stone, Animals, Bonbon Blue","body_html":"<div class=\"sanderson-product\">\n<p>Winnie The Pooh in Bonbon Blue is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Cream, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Winnie The Pooh</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bonbon Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Winnie The Pooh</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0202-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217280_0978.jpg","alt":"Winnie The Pooh"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217281_b719.jpg","alt":"Winnie The Pooh"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255459","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255459-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0202-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0202-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Winnie The Pooh"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bonbon Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bonbon Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8faed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e9d6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aeae8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8faed\",\"pct\":56.9,\"name\":\"White\"},{\"hex\":\"#e9e9d6\",\"pct\":22.7,\"name\":\"Cream\"},{\"hex\":\"#aeae8e\",\"pct\":20.5,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0202-01","sku":"DWXH-255460","sc_id":461,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Winnie The Pooh Macaron Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Winnie The Pooh, color:White, White, Cream, Stone, Animals, Macaron Green","body_html":"<div class=\"sanderson-product\">\n<p>Winnie The Pooh in Macaron Green is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Cream, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Winnie The Pooh</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Macaron Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Winnie The Pooh</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0202-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217280_0978.jpg","alt":"Winnie The Pooh"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217281_b719.jpg","alt":"Winnie The Pooh"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255460","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255460-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0202-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0202-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Winnie The Pooh"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Macaron Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Macaron Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8faed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e9e9d6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#aeae8e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8faed\",\"pct\":56.9,\"name\":\"White\"},{\"hex\":\"#e9e9d6\",\"pct\":22.7,\"name\":\"Cream\"},{\"hex\":\"#aeae8e\",\"pct\":20.5,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0244-02","sku":"DWXH-255461","sc_id":462,"settlement_verdict":"REVIEW-VISION","retail":972,"product":{"title":"Wisteria Falls Aqua | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wisteria Falls, color:Alabaster, Alabaster, White, Mist, Stone, Birds, Aqua","body_html":"<div class=\"sanderson-product\">\n<p>Wisteria Falls in Aqua is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, White, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wisteria Falls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Aqua</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wisteria Falls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0244-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217468_f410.jpg","alt":"Wisteria Falls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217467_1551.jpg","alt":"Wisteria Falls"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255461","price":"972.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255461-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0244-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0244-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wisteria Falls"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Aqua"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Aqua"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9dfdc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f9faf5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c8cfcd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"26.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9dfdc\",\"pct\":27.7,\"name\":\"Alabaster\"},{\"hex\":\"#f9faf5\",\"pct\":26.9,\"name\":\"White\"},{\"hex\":\"#c8cfcd\",\"pct\":26.4,\"name\":\"Mist\"},{\"hex\":\"#9ea6a5\",\"pct\":18.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0155-03","sku":"DWXH-255462","sc_id":463,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Witney Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney, color:Greige, Greige, Oatmeal, Linen, Mist, Birch","body_html":"<div class=\"sanderson-product\">\n<p>Witney in Birch is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0155-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216877_618c.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216876_2f30.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216878_b4e9.jpg","alt":"Witney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255462","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255462-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdbfad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c8b8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d9ca"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdbfad\",\"pct\":53.1,\"name\":\"Greige\"},{\"hex\":\"#c6c8b8\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#d7d9ca\",\"pct\":15.3,\"name\":\"Linen\"},{\"hex\":\"#d2d4c4\",\"pct\":15,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0154-02","sku":"DWXH-255463","sc_id":464,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Witney Daisy Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney Daisy, color:Silver, Silver, Linen, Mist, Oatmeal, Florals, Birch","body_html":"<div class=\"sanderson-product\">\n<p>Witney Daisy in Birch is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0154-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216873_90f4.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216874_1_SAW0154_02_SANDERSON_Witney_Daisy_WALLPAPER_7ce4.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216874_2_SAW0154_02_SANDERSON_Witney_Daisy_WALLPAPER_3126.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216874_478e.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216875_dd1b.jpg","alt":"Witney Daisy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255463","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255463-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney Daisy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c6b7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7dac9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d2c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c6b7\",\"pct\":31.6,\"name\":\"Silver\"},{\"hex\":\"#d7dac9\",\"pct\":29.7,\"name\":\"Linen\"},{\"hex\":\"#d0d2c2\",\"pct\":19.4,\"name\":\"Mist\"},{\"hex\":\"#c7cab9\",\"pct\":19.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0154-01","sku":"DWXH-255464","sc_id":465,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Witney Daisy Lagoon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney Daisy, color:Silver, Silver, Linen, Mist, Oatmeal, Florals, Lagoon","body_html":"<div class=\"sanderson-product\">\n<p>Witney Daisy in Lagoon is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lagoon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0154-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216873_90f4.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216873_1_SAW0154_01_SANDERSON_Witney_Daisy_WALLPAPER_0c01.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216873_2_SAW0154_01_SANDERSON_Witney_Daisy_WALLPAPER_1ec0.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216874_478e.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216875_dd1b.jpg","alt":"Witney Daisy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255464","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255464-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney Daisy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lagoon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lagoon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c6b7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7dac9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d2c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c6b7\",\"pct\":31.6,\"name\":\"Silver\"},{\"hex\":\"#d7dac9\",\"pct\":29.7,\"name\":\"Linen\"},{\"hex\":\"#d0d2c2\",\"pct\":19.4,\"name\":\"Mist\"},{\"hex\":\"#c7cab9\",\"pct\":19.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0155-01","sku":"DWXH-255465","sc_id":466,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Witney Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney, color:Greige, Greige, Oatmeal, Linen, Mist","body_html":"<div class=\"sanderson-product\">\n<p>Witney in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0155-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216877_618c.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216876_2f30.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216878_b4e9.jpg","alt":"Witney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255465","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255465-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdbfad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c8b8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d9ca"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdbfad\",\"pct\":53.1,\"name\":\"Greige\"},{\"hex\":\"#c6c8b8\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#d7d9ca\",\"pct\":15.3,\"name\":\"Linen\"},{\"hex\":\"#d2d4c4\",\"pct\":15,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0051-05","sku":"DWXH-255466","sc_id":467,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Botanical/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Botanical/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Botanical/Multi is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_1_SAW0051_05_SANDERSON_Woodland_Chorus_WALLPAPER_54ae.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_2_SAW0051_05_SANDERSON_Woodland_Chorus_WALLPAPER_044b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_3_SAW0051_05_SANDERSON_Woodland_Chorus_WALLPAPER_a0be.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_c340.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255466","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255466-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0051-06","sku":"DWXH-255467","sc_id":468,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Charcoal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Charcoal, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Charcoal is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_1_SAW0051_06_SANDERSON_Woodland_Chorus_WALLPAPER_a98b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_2_SAW0051_06_SANDERSON_Woodland_Chorus_WALLPAPER_ff93.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_c340.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215706_525c.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255467","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255467-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0051-01","sku":"DWXH-255468","sc_id":469,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Cream/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Cream/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Cream/Multi is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_1_SAW0051_01_SANDERSON_Woodland_Chorus_WALLPAPER_3f76.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_2_SAW0051_01_SANDERSON_Woodland_Chorus_WALLPAPER_33ad.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_3_SAW0051_01_SANDERSON_Woodland_Chorus_WALLPAPER_6b24.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_4_SAW0051_01_SANDERSON_Woodland_Chorus_WALLPAPER_2a34.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_5_SAW0051_01_SANDERSON_Woodland_Chorus_WALLPAPER_3347.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255468","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255468-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0051-03","sku":"DWXH-255469","sc_id":470,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Indigo/Ecru | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Indigo/Ecru, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Indigo/Ecru is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Indigo/Ecru</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_c340.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_1_SAW0051_03_SANDERSON_Woodland_Chorus_WALLPAPER_d256.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_2_SAW0051_03_SANDERSON_Woodland_Chorus_WALLPAPER_80b4.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_3_SAW0051_03_SANDERSON_Woodland_Chorus_WALLPAPER_e670.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_4_SAW0051_03_SANDERSON_Woodland_Chorus_WALLPAPER_b6b9.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255469","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255469-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Indigo/Ecru"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Indigo/Ecru"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0051-02","sku":"DWXH-255470","sc_id":471,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Sepia/Neutral | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Sepia/Neutral, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Sepia/Neutral is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sepia/Neutral</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_1_SAW0051_02_SANDERSON_Woodland_Chorus_WALLPAPER_3e6b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_2_SAW0051_02_SANDERSON_Woodland_Chorus_WALLPAPER_dd31.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_3_SAW0051_02_SANDERSON_Woodland_Chorus_WALLPAPER_ba3d.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_4_SAW0051_02_SANDERSON_Woodland_Chorus_WALLPAPER_b37f.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_5_SAW0051_02_SANDERSON_Woodland_Chorus_WALLPAPER_ad48.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255470","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255470-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sepia/Neutral"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sepia/Neutral"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0051-04","sku":"DWXH-255471","sc_id":472,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Woodland Chorus Sky Blue/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Chorus, color:Cream, Cream, Stone, Linen, Birds, Leaves-And-Trees, Sky Blue/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Chorus in Sky Blue/Multi is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Stone, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky Blue/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Chorus</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0051-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215705_fb5b.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217230_d410.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217231_b601.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215703_bf08.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215704_c340.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215706_1_SAW0051_04_SANDERSON_Woodland_Chorus_WALLPAPER_51b2.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215706_2_SAW0051_04_SANDERSON_Woodland_Chorus_WALLPAPER_3975.jpg","alt":"Woodland Chorus"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215706_3_SAW0051_04_SANDERSON_Woodland_Chorus_WALLPAPER_3a3f.jpg","alt":"Woodland Chorus"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255471","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255471-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0051-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Chorus"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky Blue/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky Blue/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8ded2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9bacb3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0d9cf"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8ded2\",\"pct\":67.7,\"name\":\"Cream\"},{\"hex\":\"#9bacb3\",\"pct\":20.2,\"name\":\"Stone\"},{\"hex\":\"#e0d9cf\",\"pct\":12.1,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0004-01","sku":"DWXH-255472","sc_id":473,"settlement_verdict":"REVIEW-VISION","retail":94,"product":{"title":"Woodland Ferns Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Ferns, color:Linen, Linen, Sage, Oatmeal, Botanical, Leaves-And-Trees, Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Ferns in Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Sage, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Ferns</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Ferns</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0004-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DAPGWO102_cf2f.jpg","alt":"Woodland Ferns"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255472","price":"94.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255472-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0004-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0004-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Ferns"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dcdab4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"67.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#92a45b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d7b3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"9.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dcdab4\",\"pct\":67.1,\"name\":\"Linen\"},{\"hex\":\"#92a45b\",\"pct\":22,\"name\":\"Sage\"},{\"hex\":\"#d8d7b3\",\"pct\":9.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0052-01","sku":"DWXH-255473","sc_id":474,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Woodland Toile Ivory/Charcoal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Toile, color:Linen, Linen, Cream, Botanical, Leaves-And-Trees, Ivory/Charcoal, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Toile in Ivory/Charcoal is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory/Charcoal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0052-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215717_9087.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_126e.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_1_SAW0052_01_SANDERSON_Woodland_Toile_WALLPAPER_e639.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_2_SAW0052_01_SANDERSON_Woodland_Toile_WALLPAPER_1183.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_3_SAW0052_01_SANDERSON_Woodland_Toile_WALLPAPER_1bf7.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_4_SAW0052_01_SANDERSON_Woodland_Toile_WALLPAPER_4eba.jpg","alt":"Woodland Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255473","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255473-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0052-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0052-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory/Charcoal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory/Charcoal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3dcd0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e6dfd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3dcd0\",\"pct\":70.1,\"name\":\"Linen\"},{\"hex\":\"#e6dfd4\",\"pct\":29.9,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0052-02","sku":"DWXH-255474","sc_id":475,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Woodland Toile Ivory/Neutral | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Woodland Toile, color:Linen, Linen, Cream, Botanical, Leaves-And-Trees, Ivory/Neutral, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Woodland Toile in Ivory/Neutral is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Woodland Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory/Neutral</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Woodland Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0052-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215717_9087.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215716_126e.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215717_1_SAW0052_02_SANDERSON_Woodland_Toile_WALLPAPER_6e7d.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215717_2_SAW0052_02_SANDERSON_Woodland_Toile_WALLPAPER_39bb.jpg","alt":"Woodland Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWOW215717_3_SAW0052_02_SANDERSON_Woodland_Toile_WALLPAPER_5227.jpg","alt":"Woodland Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255474","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255474-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0052-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0052-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Woodland Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory/Neutral"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory/Neutral"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3dcd0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e6dfd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3dcd0\",\"pct\":70.1,\"name\":\"Linen\"},{\"hex\":\"#e6dfd4\",\"pct\":29.9,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0157-01","sku":"DWXH-255475","sc_id":476,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Yarton Cornflower Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yarton, color:Cream, Cream, Duck Egg, Mist, Linen, Botanical, Leaves-And-Trees, Cornflower Blue, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yarton in Cornflower Blue is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yarton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cornflower Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yarton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0157-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216886_f471.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216886_1_SAW0157_01_SANDERSON_Yarton_WALLPAPER_0862.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216886_2_SAW0157_01_SANDERSON_Yarton_WALLPAPER_f2e2.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216886_3_SAW0157_01_SANDERSON_Yarton_WALLPAPER_9363.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216886_4_SAW0157_01_SANDERSON_Yarton_WALLPAPER_156d.jpg","alt":"Yarton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255475","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255475-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0157-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0157-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yarton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cornflower Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cornflower Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e8e5d8"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"51.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b6cacb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d7d1"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e8e5d8\",\"pct\":51.6,\"name\":\"Cream\"},{\"hex\":\"#b6cacb\",\"pct\":18.9,\"name\":\"Duck Egg\"},{\"hex\":\"#d0d7d1\",\"pct\":15.2,\"name\":\"Mist\"},{\"hex\":\"#daddd3\",\"pct\":14.2,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0156-01","sku":"DWXH-255476","sc_id":477,"settlement_verdict":"REVIEW-VISION","retail":199,"product":{"title":"Yarton Moss | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yarton, color:Alabaster, Alabaster, Linen, Beige, Cream, Botanical, Leaves-And-Trees, Moss, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yarton in Moss is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yarton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Moss</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yarton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0156-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216887_2c09.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216887_1_SAW0156_01_SANDERSON_Yarton_WALLPAPER_ade0.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216887_2_SAW0156_01_SANDERSON_Yarton_WALLPAPER_6844.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216887_3_SAW0156_01_SANDERSON_Yarton_WALLPAPER_8c58.jpg","alt":"Yarton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216887_4_SAW0156_01_SANDERSON_Yarton_WALLPAPER_a73e.jpg","alt":"Yarton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255476","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255476-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0156-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0156-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yarton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Moss"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Moss"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e4e5dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"40.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8dbc6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4caa0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e4e5dc\",\"pct\":40.3,\"name\":\"Alabaster\"},{\"hex\":\"#d8dbc6\",\"pct\":21.4,\"name\":\"Linen\"},{\"hex\":\"#c4caa0\",\"pct\":21.1,\"name\":\"Beige\"},{\"hex\":\"#dfe1d3\",\"pct\":17.3,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0136-02","sku":"DWXH-255477","sc_id":478,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Yucca Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yucca, color:Black, Black, Olive, Brown, Chocolate, Botanical, Leaves-And-Trees, Botanical Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yucca in Botanical Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Olive, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0136-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216651_b5d8.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216648_78fd.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216649_0b00.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216649_1_SAW0136_02_SANDERSON_Yucca_WALLPAPER_b752.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216650_c3bc.jpg","alt":"Yucca"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255477","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255477-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yucca"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#262425"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#84663b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#795931"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#262425\",\"pct\":53.9,\"name\":\"Black\"},{\"hex\":\"#84663b\",\"pct\":27.6,\"name\":\"Olive\"},{\"hex\":\"#795931\",\"pct\":13.7,\"name\":\"Brown\"},{\"hex\":\"#403429\",\"pct\":4.8,\"name\":\"Chocolate\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0136-04","sku":"DWXH-255478","sc_id":479,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Yucca Charcoal/Gold | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yucca, color:Black, Black, Olive, Brown, Chocolate, Botanical, Leaves-And-Trees, Charcoal/Gold, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yucca in Charcoal/Gold is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Olive, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Charcoal/Gold</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0136-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216651_b5d8.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216648_78fd.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216649_0b00.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216650_c3bc.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216651_1_SAW0136_04_SANDERSON_Yucca_WALLPAPER_c5fd.jpg","alt":"Yucca"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255478","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255478-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yucca"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Charcoal/Gold"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#262425"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#84663b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#795931"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#262425\",\"pct\":53.9,\"name\":\"Black\"},{\"hex\":\"#84663b\",\"pct\":27.6,\"name\":\"Olive\"},{\"hex\":\"#795931\",\"pct\":13.7,\"name\":\"Brown\"},{\"hex\":\"#403429\",\"pct\":4.8,\"name\":\"Chocolate\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0136-01","sku":"DWXH-255479","sc_id":480,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Yucca Sky/Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yucca, color:Black, Black, Olive, Brown, Chocolate, Botanical, Leaves-And-Trees, Sky/Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yucca in Sky/Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Olive, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sky/Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0136-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216651_b5d8.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216648_1_SAW0136_01_SANDERSON_Yucca_WALLPAPER_2bfa.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216648_78fd.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216649_0b00.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216650_c3bc.jpg","alt":"Yucca"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255479","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255479-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yucca"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sky/Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sky/Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#262425"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#84663b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#795931"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#262425\",\"pct\":53.9,\"name\":\"Black\"},{\"hex\":\"#84663b\",\"pct\":27.6,\"name\":\"Olive\"},{\"hex\":\"#795931\",\"pct\":13.7,\"name\":\"Brown\"},{\"hex\":\"#403429\",\"pct\":4.8,\"name\":\"Chocolate\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0158-03","sku":"DWXH-255480","sc_id":481,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amanpuri Grey Mist | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amanpuri, color:Oatmeal, Oatmeal, Taupe, Stone, Sand, Florals, Grey Mist","body_html":"<div class=\"sanderson-product\">\n<p>Amanpuri in Grey Mist is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Taupe, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey Mist</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amanpuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0158-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217043_9b9f.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217044_35f0.jpg","alt":"Amanpuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217045_f6ed.jpg","alt":"Amanpuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255480","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255480-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0158-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amanpuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey Mist"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey Mist"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8c1af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8e7971"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaea2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8c1af\",\"pct\":56.1,\"name\":\"Oatmeal\"},{\"hex\":\"#8e7971\",\"pct\":19.9,\"name\":\"Taupe\"},{\"hex\":\"#acaea2\",\"pct\":13.6,\"name\":\"Stone\"},{\"hex\":\"#d1b294\",\"pct\":10.4,\"name\":\"Sand\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0168-01","sku":"DWXH-255481","sc_id":482,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amara Butterfly Cinnabar/Ink Black | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amara Butterfly, color:Gold, Gold, Red, Brown, Sand, Terracotta, Oatmeal, Florals, Cinnabar/Ink Black","body_html":"<div class=\"sanderson-product\">\n<p>Amara Butterfly in Cinnabar/Ink Black is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Gold, Red, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cinnabar/Ink Black</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0168-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217116_d965.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217116_1_SAW0168_01_SANDERSON_Amara_Butterfly_WALLPAPER_5fce.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217117_22e4.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217118_09fd.jpg","alt":"Amara Butterfly"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255481","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255481-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amara Butterfly"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cinnabar/Ink Black"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cinnabar/Ink Black"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Gold"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bf8c60"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#98202f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#684331"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bf8c60\",\"pct\":22.4,\"name\":\"Gold\"},{\"hex\":\"#98202f\",\"pct\":20.3,\"name\":\"Red\"},{\"hex\":\"#684331\",\"pct\":17.4,\"name\":\"Brown\"},{\"hex\":\"#d6ac7c\",\"pct\":16.5,\"name\":\"Sand\"},{\"hex\":\"#b24f40\",\"pct\":11.8,\"name\":\"Terracotta\"},{\"hex\":\"#e3c9a4\",\"pct\":11.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0168-02","sku":"DWXH-255482","sc_id":483,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Amara Butterfly Emerald/Ink Black | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Amara Butterfly, color:Gold, Gold, Red, Brown, Sand, Terracotta, Oatmeal, Florals, Emerald/Ink Black","body_html":"<div class=\"sanderson-product\">\n<p>Amara Butterfly in Emerald/Ink Black is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Gold, Red, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Emerald/Ink Black</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Amara Butterfly</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0168-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217116_d965.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217117_1_SAW0168_02_SANDERSON_Amara_Butterfly_WALLPAPER_3c0a.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217117_22e4.jpg","alt":"Amara Butterfly"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217118_09fd.jpg","alt":"Amara Butterfly"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255482","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255482-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0168-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Amara Butterfly"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Emerald/Ink Black"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Emerald/Ink Black"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Gold"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bf8c60"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"22.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#98202f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#684331"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bf8c60\",\"pct\":22.4,\"name\":\"Gold\"},{\"hex\":\"#98202f\",\"pct\":20.3,\"name\":\"Red\"},{\"hex\":\"#684331\",\"pct\":17.4,\"name\":\"Brown\"},{\"hex\":\"#d6ac7c\",\"pct\":16.5,\"name\":\"Sand\"},{\"hex\":\"#b24f40\",\"pct\":11.8,\"name\":\"Terracotta\"},{\"hex\":\"#e3c9a4\",\"pct\":11.5,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0237-01","sku":"DWXH-255483","sc_id":484,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Anaar Lionsmane | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Anaar, color:Alabaster, Alabaster, Greige, White, Silver, Linen, Lionsmane","body_html":"<div class=\"sanderson-product\">\n<p>Anaar in Lionsmane is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Anaar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lionsmane</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Anaar</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0237-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217448_4a0d.jpg","alt":"Anaar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217447_7da4.jpg","alt":"Anaar"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217449_5a76.jpg","alt":"Anaar"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255483","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255483-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0237-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0237-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Anaar"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lionsmane"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lionsmane"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2efe5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b0b5a9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1e9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2efe5\",\"pct\":31.5,\"name\":\"Alabaster\"},{\"hex\":\"#b0b5a9\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1e9\",\"pct\":17.7,\"name\":\"White\"},{\"hex\":\"#c0c5bb\",\"pct\":15.2,\"name\":\"Silver\"},{\"hex\":\"#d9d3c4\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0203-03","sku":"DWXH-255484","sc_id":485,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Andromeda`S Cup Celadon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andromeda`S Cup, color:Alabaster, Alabaster, Linen, Greige, Celadon","body_html":"<div class=\"sanderson-product\">\n<p>Andromeda`s Cup in Celadon is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Celadon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0203-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_eb54.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_427d.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_9d59.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_1_SAW0203_03_SANDERSON_Andromedas_Cup_WALLPAPER_6b01.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_2_SAW0203_03_SANDERSON_Andromedas_Cup_WALLPAPER_29b2.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_4464.jpg","alt":"Andromeda`S Cup"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255484","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255484-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andromeda`S Cup"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Celadon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0dee1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d0c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4b5ac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0dee1\",\"pct\":55.8,\"name\":\"Alabaster\"},{\"hex\":\"#d8d0c9\",\"pct\":28.3,\"name\":\"Linen\"},{\"hex\":\"#c4b5ac\",\"pct\":15.9,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0203-02","sku":"DWXH-255485","sc_id":486,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Andromeda`S Cup Putty | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Andromeda`S Cup, color:Alabaster, Alabaster, Linen, Greige, Putty","body_html":"<div class=\"sanderson-product\">\n<p>Andromeda`s Cup in Putty is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Putty</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Andromeda`S Cup</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0203-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217373_eb54.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217316_427d.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_1_SAW0203_02_SANDERSON_Andromedas_Cup_WALLPAPER_5869.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_2_SAW0203_02_SANDERSON_Andromedas_Cup_WALLPAPER_c18e.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217317_9d59.jpg","alt":"Andromeda`S Cup"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217318_4464.jpg","alt":"Andromeda`S Cup"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255485","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255485-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0203-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Andromeda`S Cup"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e0dee1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8d0c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c4b5ac"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e0dee1\",\"pct\":55.8,\"name\":\"Alabaster\"},{\"hex\":\"#d8d0c9\",\"pct\":28.3,\"name\":\"Linen\"},{\"hex\":\"#c4b5ac\",\"pct\":15.9,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0204-03","sku":"DWXH-255486","sc_id":487,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Aperigon Parade Bone | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aperigon Parade, color:Cream, Cream, Ivory, Bone","body_html":"<div class=\"sanderson-product\">\n<p>Aperigon Parade in Bone is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Ivory. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bone</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aperigon Parade</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0204-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_0ba9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217300_3cc9.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217301_8e94.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217302_1_SAW0204_03_SANDERSON_Aperigon_Parade_WALLPAPER_bb8c.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217303_fff2.jpg","alt":"Aperigon Parade"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217375_5914.jpg","alt":"Aperigon Parade"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255486","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255486-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0204-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aperigon Parade"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bone"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bone"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0efd7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f3f6e4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"49.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0efd7\",\"pct\":50.7,\"name\":\"Cream\"},{\"hex\":\"#f3f6e4\",\"pct\":49.3,\"name\":\"Ivory\"}]"}]}
+{"mfr_sku":"SAW0215-03","sku":"DWXH-255487","sc_id":488,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Aubrey Fareham Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aubrey, color:White, White, Duck Egg, Mist, Alabaster, Fareham Red","body_html":"<div class=\"sanderson-product\">\n<p>Aubrey in Fareham Red is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Fareham Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0215-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217427_b43f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217428_d1bb.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217429_fb41.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_767a.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217431_c97f.jpg","alt":"Aubrey"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255487","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255487-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aubrey"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Fareham Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Fareham Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfaf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#89aec8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7d6de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfaf5\",\"pct\":39.5,\"name\":\"White\"},{\"hex\":\"#89aec8\",\"pct\":22.7,\"name\":\"Duck Egg\"},{\"hex\":\"#c7d6de\",\"pct\":22.3,\"name\":\"Mist\"},{\"hex\":\"#e9ecea\",\"pct\":15.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0215-04","sku":"DWXH-255488","sc_id":489,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Aubrey Wild Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aubrey, color:White, White, Duck Egg, Mist, Alabaster, Wild Honey","body_html":"<div class=\"sanderson-product\">\n<p>Aubrey in Wild Honey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Wild Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aubrey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0215-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217427_b43f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217428_d1bb.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217429_fb41.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_1_SAW0215_04_SANDERSON_Aubrey_WALLPAPER_6230.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_2_SAW0215_04_SANDERSON_Aubrey_WALLPAPER_4b3f.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_3_SAW0215_04_SANDERSON_Aubrey_WALLPAPER_b371.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_4_SAW0215_04_SANDERSON_Aubrey_WALLPAPER_bb03.jpg","alt":"Aubrey"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217430_767a.jpg","alt":"Aubrey"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255488","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255488-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0215-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aubrey"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Wild Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Wild Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fdfaf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"39.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#89aec8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7d6de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fdfaf5\",\"pct\":39.5,\"name\":\"White\"},{\"hex\":\"#89aec8\",\"pct\":22.7,\"name\":\"Duck Egg\"},{\"hex\":\"#c7d6de\",\"pct\":22.3,\"name\":\"Mist\"},{\"hex\":\"#e9ecea\",\"pct\":15.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0205-01","sku":"DWXH-255489","sc_id":490,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Aurelia`S Grail Gobelin Green/Bronze | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Aurelia`S Grail, color:Sand, Sand, Linen, Oatmeal, Beige, Ivory, Cream, Gobelin Green/Bronze","body_html":"<div class=\"sanderson-product\">\n<p>Aurelia`s Grail in Gobelin Green/Bronze is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Aurelia`S Grail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gobelin Green/Bronze</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Aurelia`S Grail</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0205-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217299_3431.jpg","alt":"Aurelia`S Grail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217297_e807.jpg","alt":"Aurelia`S Grail"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217298_dd57.jpg","alt":"Aurelia`S Grail"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255489","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255489-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0205-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0205-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Aurelia`S Grail"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gobelin Green/Bronze"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gobelin Green/Bronze"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d0bc8e"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"20.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7ddc2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded1af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d0bc8e\",\"pct\":20.8,\"name\":\"Sand\"},{\"hex\":\"#e7ddc2\",\"pct\":20.1,\"name\":\"Linen\"},{\"hex\":\"#ded1af\",\"pct\":15.4,\"name\":\"Oatmeal\"},{\"hex\":\"#d8c7a1\",\"pct\":15.2,\"name\":\"Beige\"},{\"hex\":\"#faf5e5\",\"pct\":14.3,\"name\":\"Ivory\"},{\"hex\":\"#f2ebd6\",\"pct\":14.1,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0191-02","sku":"DWXH-255490","sc_id":491,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bambi Chocolate | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bambi, color:Alabaster, Alabaster, Linen, Mist, Stone, Animals, Chocolate","body_html":"<div class=\"sanderson-product\">\n<p>Bambi in Chocolate is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chocolate</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0191-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_3231.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_a149.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_1_SAW0191_02_SANDERSON_Bambi_WALLPAPER_0db6.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_2_SAW0191_02_SANDERSON_Bambi_WALLPAPER_dc0c.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_3_SAW0191_02_SANDERSON_Bambi_WALLPAPER_64b2.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_dd53.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_560c.jpg","alt":"Bambi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255490","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255490-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bambi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chocolate"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chocolate"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dde7e7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7e0d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0cfc3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dde7e7\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#d7e0d8\",\"pct\":29,\"name\":\"Linen\"},{\"hex\":\"#c0cfc3\",\"pct\":17.7,\"name\":\"Mist\"},{\"hex\":\"#b2b19c\",\"pct\":17.6,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0191-03","sku":"DWXH-255491","sc_id":492,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Bambi Sea Salt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Bambi, color:Alabaster, Alabaster, Linen, Mist, Stone, Animals, Sea Salt","body_html":"<div class=\"sanderson-product\">\n<p>Bambi in Sea Salt is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sea Salt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Bambi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0191-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_3231.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217276_a149.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217277_dd53.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_1_SAW0191_03_SANDERSON_Bambi_WALLPAPER_e278.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_2_SAW0191_03_SANDERSON_Bambi_WALLPAPER_f5c6.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217278_3_SAW0191_03_SANDERSON_Bambi_WALLPAPER_7f22.jpg","alt":"Bambi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217279_560c.jpg","alt":"Bambi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255491","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255491-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0191-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Bambi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sea Salt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dde7e7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7e0d8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0cfc3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dde7e7\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#d7e0d8\",\"pct\":29,\"name\":\"Linen\"},{\"hex\":\"#c0cfc3\",\"pct\":17.7,\"name\":\"Mist\"},{\"hex\":\"#b2b19c\",\"pct\":17.6,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0127-01","sku":"DWXH-255492","sc_id":493,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Calathea Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Calathea, color:Alabaster, Alabaster, Ochre, Cream, Sand, Linen, Botanical, Leaves-And-Trees, Botanical Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Calathea in Botanical Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Ochre, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0127-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216631_3286.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216630_1_SAW0127_01_SANDERSON_Calathea_WALLPAPER_3094.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216630_2f50.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216632_6984.jpg","alt":"Calathea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255492","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255492-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Calathea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1eade"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8749"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ece6d7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1eade\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#9b8749\",\"pct\":21.2,\"name\":\"Ochre\"},{\"hex\":\"#ece6d7\",\"pct\":15.7,\"name\":\"Cream\"},{\"hex\":\"#c4bd8b\",\"pct\":15,\"name\":\"Sand\"},{\"hex\":\"#dcd6ba\",\"pct\":12.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0127-02","sku":"DWXH-255493","sc_id":494,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Calathea Olive | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Calathea, color:Alabaster, Alabaster, Ochre, Cream, Sand, Linen, Botanical, Leaves-And-Trees, Olive, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Calathea in Olive is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Ochre, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olive</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Calathea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0127-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216631_3286.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216630_2f50.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216631_1_SAW0127_02_SANDERSON_Calathea_WALLPAPER_0e0b.jpg","alt":"Calathea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216632_6984.jpg","alt":"Calathea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255493","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255493-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0127-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Calathea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1eade"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b8749"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ece6d7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1eade\",\"pct\":35.7,\"name\":\"Alabaster\"},{\"hex\":\"#9b8749\",\"pct\":21.2,\"name\":\"Ochre\"},{\"hex\":\"#ece6d7\",\"pct\":15.7,\"name\":\"Cream\"},{\"hex\":\"#c4bd8b\",\"pct\":15,\"name\":\"Sand\"},{\"hex\":\"#dcd6ba\",\"pct\":12.4,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0140-03","sku":"DWXH-255494","sc_id":495,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Caspian Strie Sand | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Caspian Strie, color:Alabaster, Alabaster, Sand","body_html":"<div class=\"sanderson-product\">\n<p>Caspian Strie in Sand is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sand</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Caspian Strie</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0140-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216771_a89d.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216772_451f.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216773_02a6.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216774_fb77.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216775_5b21.jpg","alt":"Caspian Strie"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216776_49fc.jpg","alt":"Caspian Strie"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255494","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255494-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0140-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Caspian Strie"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edede0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edede0\",\"pct\":100,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0170-02","sku":"DWXH-255495","sc_id":496,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Chinoiserie Hall Blueberry/Purple | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Chinoiserie Hall, color:Wedgwood, Wedgwood, Grey, Denim, Linen, Stone, Leaves-And-Trees, Blueberry/Purple, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Chinoiserie Hall in Blueberry/Purple is a Sanderson Wallcovering in a leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Grey, Denim. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blueberry/Purple</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Chinoiserie Hall</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0170-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217111_4ffe.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217110_0c29.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217111_1_SAW0170_02_SANDERSON_Chinoiserie_Hall_WALLPAPER_6dc7.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217112_5505.jpg","alt":"Chinoiserie Hall"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217113_70f9.jpg","alt":"Chinoiserie Hall"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255495","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255495-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0170-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Chinoiserie Hall"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blueberry/Purple"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blueberry/Purple"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#799ec9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#8c8dac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"23.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#567a7c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#799ec9\",\"pct\":35,\"name\":\"Wedgwood\"},{\"hex\":\"#8c8dac\",\"pct\":23.2,\"name\":\"Grey\"},{\"hex\":\"#567a7c\",\"pct\":21.2,\"name\":\"Denim\"},{\"hex\":\"#ded0cd\",\"pct\":14.8,\"name\":\"Linen\"},{\"hex\":\"#92a4c3\",\"pct\":5.7,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"leaves-and-trees"}]}
+{"mfr_sku":"SAW0171-03","sku":"DWXH-255496","sc_id":497,"settlement_verdict":"REVIEW-VISION","retail":427,"product":{"title":"Crane &Amp; Frog & Frog Sky/Honey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Crane &Amp; Frog, color:Sand, Sand, Gold, Oatmeal, Cream, Animals, & Frog Sky/Honey","body_html":"<div class=\"sanderson-product\">\n<p>Crane &amp; Frog in & Frog Sky/Honey is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sand, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Frog Sky/Honey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Crane &Amp; Frog</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0171-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217124_cffb.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217123_4c0a.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217125_1_SAW0171_03_SANDERSON_Crane_and_Frog_WALLPAPER_5d9b.jpg","alt":"Crane &Amp; Frog"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/W/DWAW217125_b962.jpg","alt":"Crane &Amp; Frog"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255496","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255496-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0171-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Crane &Amp; Frog"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Frog Sky/Honey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Frog Sky/Honey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sand"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efce91"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bf8e55"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f5d596"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efce91\",\"pct\":48,\"name\":\"Sand\"},{\"hex\":\"#bf8e55\",\"pct\":20,\"name\":\"Gold\"},{\"hex\":\"#f5d596\",\"pct\":19.2,\"name\":\"Oatmeal\"},{\"hex\":\"#f3e2bf\",\"pct\":12.8,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0207-02","sku":"DWXH-255497","sc_id":498,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Cupid`S Beau Morel/Mantle | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cupid`S Beau, color:Ivory, Ivory, Sage, Oatmeal, Cream, Morel/Mantle","body_html":"<div class=\"sanderson-product\">\n<p>Cupid`s Beau in Morel/Mantle is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sage, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Morel/Mantle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0207-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217311_cd4b.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217313_1_SAW0207_02_SANDERSON_Cupids_Beau_WALLPAPER_eb8e.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217313_2_SAW0207_02_SANDERSON_Cupids_Beau_WALLPAPER_87dc.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217313_3_SAW0207_02_SANDERSON_Cupids_Beau_WALLPAPER_dcfd.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217313_b7e8.jpg","alt":"Cupid`S Beau"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255497","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255497-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0207-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0207-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cupid`S Beau"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Morel/Mantle"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Morel/Mantle"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fbf9ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#94a47e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#caceb0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fbf9ed\",\"pct\":53.5,\"name\":\"Ivory\"},{\"hex\":\"#94a47e\",\"pct\":21,\"name\":\"Sage\"},{\"hex\":\"#caceb0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#ebe9d5\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0207-01","sku":"DWXH-255498","sc_id":499,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Cupid`S Beau Quince/Chalk | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Cupid`S Beau, color:Ivory, Ivory, Sage, Oatmeal, Cream, Quince/Chalk","body_html":"<div class=\"sanderson-product\">\n<p>Cupid`s Beau in Quince/Chalk is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sage, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Quince/Chalk</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Cupid`S Beau</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0207-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217311_cd4b.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217311_1_SAW0207_01_SANDERSON_Cupids_Beau_WALLPAPER_ceee.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217311_2_SAW0207_01_SANDERSON_Cupids_Beau_WALLPAPER_b385.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217311_3_SAW0207_01_SANDERSON_Cupids_Beau_WALLPAPER_c073.jpg","alt":"Cupid`S Beau"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217313_b7e8.jpg","alt":"Cupid`S Beau"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255498","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255498-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0207-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0207-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Cupid`S Beau"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Quince/Chalk"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Quince/Chalk"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fbf9ed"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#94a47e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#caceb0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fbf9ed\",\"pct\":53.5,\"name\":\"Ivory\"},{\"hex\":\"#94a47e\",\"pct\":21,\"name\":\"Sage\"},{\"hex\":\"#caceb0\",\"pct\":15,\"name\":\"Oatmeal\"},{\"hex\":\"#ebe9d5\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0238-02","sku":"DWXH-255499","sc_id":500,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Dabu Namak | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Dabu, color:Sage, Sage, Beige, Namak","body_html":"<div class=\"sanderson-product\">\n<p>Dabu in Namak is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Dabu</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Namak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Dabu</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0238-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217465_2053.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217462_5da2.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217463_6a53.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217464_cea7.jpg","alt":"Dabu"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217466_196d.jpg","alt":"Dabu"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255499","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255499-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0238-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0238-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Dabu"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Namak"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Namak"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#9eb37a"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"87.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bdc9a5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"12.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#9eb37a\",\"pct\":87.4,\"name\":\"Sage\"},{\"hex\":\"#bdc9a5\",\"pct\":12.7,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0117-02","sku":"DWXH-255500","sc_id":501,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Elysian (Wallcovering) Sage Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian (Wallcovering), color:Linen, Linen, Beige, Stone, Oatmeal, Alabaster, Landscapes, Sage Grey","body_html":"<div class=\"sanderson-product\">\n<p>Elysian (Wallcovering) in Sage Grey is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0117-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216593_969b.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216592_29c3.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216593_1_SAW0117_02_SANDERSON_Elysian_WALLPAPER_5a5b.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216593_2_SAW0117_02_SANDERSON_Elysian_WALLPAPER_3523.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216594_fe5c.jpg","alt":"Elysian (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255500","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255500-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dcd9d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c5c2b0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaa93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dcd9d4\",\"pct\":35.1,\"name\":\"Linen\"},{\"hex\":\"#c5c2b0\",\"pct\":18.9,\"name\":\"Beige\"},{\"hex\":\"#acaa93\",\"pct\":17.9,\"name\":\"Stone\"},{\"hex\":\"#cecbbd\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e1ddda\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0117-03","sku":"DWXH-255501","sc_id":502,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Elysian (Wallcovering) Whitstable Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Elysian (Wallcovering), color:Linen, Linen, Beige, Stone, Oatmeal, Alabaster, Landscapes, Whitstable Blue","body_html":"<div class=\"sanderson-product\">\n<p>Elysian (Wallcovering) in Whitstable Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Beige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Whitstable Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Elysian (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0117-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216593_969b.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216592_29c3.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216594_1_SAW0117_03_SANDERSON_Elysian_WALLPAPER_d1c4.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216594_2_SAW0117_03_SANDERSON_Elysian_WALLPAPER_a3e0.jpg","alt":"Elysian (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216594_fe5c.jpg","alt":"Elysian (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255501","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255501-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0117-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Elysian (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Whitstable Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Whitstable Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dcd9d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c5c2b0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#acaa93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dcd9d4\",\"pct\":35.1,\"name\":\"Linen\"},{\"hex\":\"#c5c2b0\",\"pct\":18.9,\"name\":\"Beige\"},{\"hex\":\"#acaa93\",\"pct\":17.9,\"name\":\"Stone\"},{\"hex\":\"#cecbbd\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e1ddda\",\"pct\":13.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0065-01","sku":"DWXH-255502","sc_id":503,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Empire Trellis Silver/Calico | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Empire Trellis, color:Linen, Linen, Alabaster, Mist, Silver/Calico","body_html":"<div class=\"sanderson-product\">\n<p>Empire Trellis in Silver/Calico is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver/Calico</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Empire Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0065-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216335_c676.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216335_1_SAW0065_01_SANDERSON_Empire_Trellis_WALLPAPER_15f2.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216337_fdaa.jpg","alt":"Empire Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216338_a82d.jpg","alt":"Empire Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255502","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255502-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0065-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Empire Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver/Calico"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver/Calico"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9d5d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2e2dd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d5d4ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9d5d1\",\"pct\":72,\"name\":\"Linen\"},{\"hex\":\"#e2e2dd\",\"pct\":16.6,\"name\":\"Alabaster\"},{\"hex\":\"#d5d4ce\",\"pct\":8.5,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0160-02","sku":"DWXH-255503","sc_id":504,"settlement_verdict":"REVIEW-VISION","retail":239,"product":{"title":"Etchings &Amp; Roses & Roses French Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Etchings &Amp; Roses, color:White, White, Alabaster, Blush, Florals, & Roses French Blue","body_html":"<div class=\"sanderson-product\">\n<p>Etchings &amp; Roses in & Roses French Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Blush. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">& Roses French Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Etchings &Amp; Roses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0160-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217054_efb4.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217052_351b.jpg","alt":"Etchings &Amp; Roses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217053_d10a.jpg","alt":"Etchings &Amp; Roses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255503","price":"239.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255503-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0160-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Etchings &Amp; Roses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"& Roses French Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"& Roses French Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf5"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"62"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f1ebe3"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0b5af"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf5\",\"pct\":62,\"name\":\"White\"},{\"hex\":\"#f1ebe3\",\"pct\":20.2,\"name\":\"Alabaster\"},{\"hex\":\"#e0b5af\",\"pct\":17.8,\"name\":\"Blush\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0028-01","sku":"DWXH-255504","sc_id":505,"settlement_verdict":"CLEAR","retail":68,"product":{"title":"Fairy Castle Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fairy Castle, color:White, White, Alabaster, Pink","body_html":"<div class=\"sanderson-product\">\n<p>Fairy Castle in Pink is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fairy Castle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fairy Castle</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0028-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214047_c111.jpg","alt":"Fairy Castle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214046_1_SAW0028_01_SANDERSON_Fairy_Castle_WALLPAPER_e60c.jpg","alt":"Fairy Castle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214046_2_SAW0028_01_SANDERSON_Fairy_Castle_WALLPAPER_88ab.jpg","alt":"Fairy Castle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214046_3_SAW0028_01_SANDERSON_Fairy_Castle_WALLPAPER_a482.jpg","alt":"Fairy Castle"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLIT214046_fba3.jpg","alt":"Fairy Castle"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255504","price":"68.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255504-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0028-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0028-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fairy Castle"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efedf0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"80.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ebe6ea"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efedf0\",\"pct\":80.3,\"name\":\"White\"},{\"hex\":\"#ebe6ea\",\"pct\":17.4,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0128-01","sku":"DWXH-255505","sc_id":506,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Fan Palm Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fan Palm, color:Raspberry, Raspberry, Ochre, Taupe, Botanical, Leaves-And-Trees, Botanical Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fan Palm in Botanical Green is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Raspberry, Ochre, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fan Palm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0128-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216638_0ab0.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_1_SAW0128_01_SANDERSON_Fan_Palm_WALLPAPER_75f9.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_2_SAW0128_01_SANDERSON_Fan_Palm_WALLPAPER_bb89.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216636_b30f.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216637_117b.jpg","alt":"Fan Palm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216639_8d92.jpg","alt":"Fan Palm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255505","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255505-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0128-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fan Palm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Raspberry"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Raspberry"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#af1952"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"72.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ochre"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a27156"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#af8663"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#af1952\",\"pct\":72.5,\"name\":\"Raspberry\"},{\"hex\":\"#a27156\",\"pct\":13.8,\"name\":\"Ochre\"},{\"hex\":\"#af8663\",\"pct\":13.6,\"name\":\"Taupe\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0098-02","sku":"DWXH-255506","sc_id":507,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Farne Grasses Silver/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Farne Grasses, color:Alabaster, Alabaster, Linen, Botanical, Florals, Silver/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Farne Grasses in Silver/Ivory is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Farne Grasses</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0098-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216487_0b0f.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216486_9d9d.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216487_1_SAW0098_02_SANDERSON_Farne_Grasses_WALLPAPER_bfb7.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216487_2_SAW0098_02_SANDERSON_Farne_Grasses_WALLPAPER_650e.jpg","alt":"Farne Grasses"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216488_3483.jpg","alt":"Farne Grasses"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255506","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255506-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0098-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Farne Grasses"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e2e3de"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9d9d2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"13.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e2e3de\",\"pct\":84.6,\"name\":\"Alabaster\"},{\"hex\":\"#d9d9d2\",\"pct\":13.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0129-02","sku":"DWXH-255507","sc_id":508,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Fernery Botanical Green/Charcoal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fernery, color:Charcoal, Charcoal, Olive, Botanical, Leaves-And-Trees, Botanical Green/Charcoal, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fernery in Botanical Green/Charcoal is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green/Charcoal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0129-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216634_cd83.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216633_ec5c.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216634_1_SAW0129_02_SANDERSON_Fernery_WALLPAPER_f16d.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216634_2_SAW0129_02_SANDERSON_Fernery_WALLPAPER_4468.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216635_d56e.jpg","alt":"Fernery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255507","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255507-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fernery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green/Charcoal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green/Charcoal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#293336"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"76.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#799848"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#293336\",\"pct\":76.5,\"name\":\"Charcoal\"},{\"hex\":\"#799848\",\"pct\":22.3,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0129-03","sku":"DWXH-255508","sc_id":509,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Fernery China Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fernery, color:Charcoal, Charcoal, Olive, Botanical, Leaves-And-Trees, China Blue, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Fernery in China Blue is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">China Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fernery</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0129-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216634_cd83.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216633_ec5c.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216635_1_SAW0129_03_SANDERSON_Fernery_WALLPAPER_6c5e.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216635_2_SAW0129_03_SANDERSON_Fernery_WALLPAPER_23d7.jpg","alt":"Fernery"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216635_d56e.jpg","alt":"Fernery"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255508","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255508-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0129-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fernery"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"China Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"China Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Charcoal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#293336"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"76.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#799848"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#293336\",\"pct\":76.5,\"name\":\"Charcoal\"},{\"hex\":\"#799848\",\"pct\":22.3,\"name\":\"Olive\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0180-01","sku":"DWXH-255509","sc_id":510,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Forest Of Dean Bright/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Forest Of Dean, color:White, White, Taupe, Linen, Greige, Animals, Bright/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Forest Of Dean in Bright/Multi is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Taupe, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Bright/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Forest Of Dean</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0180-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217217_5998.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217217_1_SAW0180_01_SANDERSON_Forest_of_Dean_WALLPAPER_95ec.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217218_6b15.jpg","alt":"Forest Of Dean"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217219_17a8.jpg","alt":"Forest Of Dean"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255509","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255509-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0180-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Forest Of Dean"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Bright/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Bright/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fefffa"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ac7f6f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"25"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2d5a9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fefffa\",\"pct\":56.5,\"name\":\"White\"},{\"hex\":\"#ac7f6f\",\"pct\":25,\"name\":\"Taupe\"},{\"hex\":\"#f2d5a9\",\"pct\":11.6,\"name\":\"Linen\"},{\"hex\":\"#b0c797\",\"pct\":6.9,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0208-02","sku":"DWXH-255510","sc_id":511,"settlement_verdict":"CLEAR","retail":427,"product":{"title":"Fringed Tulip Toile Putty | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fringed Tulip Toile, color:Rose, Rose, Blush, Sand, Linen, Beige, Cream, Putty","body_html":"<div class=\"sanderson-product\">\n<p>Fringed Tulip Toile in Putty is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Rose, Blush, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fringed Tulip Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Putty</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fringed Tulip Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0208-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217324_83eb.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217323_5496.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217324_1_SAW0208_02_SANDERSON_Fringed_Tulip_Toile_WALLPAPER_20ae.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217324_2_SAW0208_02_SANDERSON_Fringed_Tulip_Toile_WALLPAPER_6e75.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217325_4756.jpg","alt":"Fringed Tulip Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255510","price":"427.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255510-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0208-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0208-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fringed Tulip Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cd8c76"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"19.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5c6b2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8a590"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cd8c76\",\"pct\":19.6,\"name\":\"Rose\"},{\"hex\":\"#e5c6b2\",\"pct\":17.7,\"name\":\"Blush\"},{\"hex\":\"#d8a590\",\"pct\":17.4,\"name\":\"Sand\"},{\"hex\":\"#eddac9\",\"pct\":15.9,\"name\":\"Linen\"},{\"hex\":\"#ddb29d\",\"pct\":15.5,\"name\":\"Beige\"},{\"hex\":\"#f3e5d4\",\"pct\":13.9,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0141-03","sku":"DWXH-255511","sc_id":512,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Hakimi Ash Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hakimi, color:Aubergine, Aubergine, Charcoal, Olive, Stone, Brown, Florals, Ash Grey","body_html":"<div class=\"sanderson-product\">\n<p>Hakimi in Ash Grey is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Aubergine, Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ash Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0141-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216769_56eb.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216768_c455.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216770_1_SAW0141_03_SANDERSON_Hakimi_WALLPAPER_4fd4.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216770_1c7d.jpg","alt":"Hakimi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255511","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255511-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hakimi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ash Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ash Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Aubergine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Aubergine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#494947"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"41.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#474845"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#82725c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#494947\",\"pct\":41.9,\"name\":\"Aubergine\"},{\"hex\":\"#474845\",\"pct\":19.1,\"name\":\"Charcoal\"},{\"hex\":\"#82725c\",\"pct\":15.6,\"name\":\"Olive\"},{\"hex\":\"#b6a286\",\"pct\":12.9,\"name\":\"Stone\"},{\"hex\":\"#55534b\",\"pct\":10.5,\"name\":\"Brown\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0141-02","sku":"DWXH-255512","sc_id":513,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Hakimi Ebony | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hakimi, color:Aubergine, Aubergine, Charcoal, Olive, Stone, Brown, Florals, Ebony","body_html":"<div class=\"sanderson-product\">\n<p>Hakimi in Ebony is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Aubergine, Charcoal, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ebony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hakimi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0141-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216769_56eb.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216768_c455.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216769_1_SAW0141_02_SANDERSON_Hakimi_WALLPAPER_efc9.jpg","alt":"Hakimi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216770_1c7d.jpg","alt":"Hakimi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255512","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255512-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0141-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hakimi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ebony"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ebony"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Aubergine"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Aubergine"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#494947"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"41.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Charcoal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#474845"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#82725c"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#494947\",\"pct\":41.9,\"name\":\"Aubergine\"},{\"hex\":\"#474845\",\"pct\":19.1,\"name\":\"Charcoal\"},{\"hex\":\"#82725c\",\"pct\":15.6,\"name\":\"Olive\"},{\"hex\":\"#b6a286\",\"pct\":12.9,\"name\":\"Stone\"},{\"hex\":\"#55534b\",\"pct\":10.5,\"name\":\"Brown\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0130-02","sku":"DWXH-255513","sc_id":514,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Hampton Trellis Botanical Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hampton Trellis, color:Oatmeal, Oatmeal, Beige, Linen, Botanical Green","body_html":"<div class=\"sanderson-product\">\n<p>Hampton Trellis in Botanical Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0130-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_045c.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216660_1_SAW0130_02_SANDERSON_Hampton_Trellis_WALLPAPER_c4a3.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216660_32c9.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_f8bc.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_f36b.jpg","alt":"Hampton Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255513","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255513-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hampton Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cfc7b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2b295"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd5c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cfc7b3\",\"pct\":56.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c2b295\",\"pct\":29.1,\"name\":\"Beige\"},{\"hex\":\"#ddd5c2\",\"pct\":14.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0130-03","sku":"DWXH-255514","sc_id":515,"settlement_verdict":"CLEAR","retail":270,"product":{"title":"Hampton Trellis Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hampton Trellis, color:Oatmeal, Oatmeal, Beige, Linen, Grey","body_html":"<div class=\"sanderson-product\">\n<p>Hampton Trellis in Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hampton Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0130-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216659_045c.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216660_32c9.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_1_SAW0130_03_SANDERSON_Hampton_Trellis_WALLPAPER_a7ac.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_2_SAW0130_03_SANDERSON_Hampton_Trellis_WALLPAPER_657b.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216661_f8bc.jpg","alt":"Hampton Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216662_f36b.jpg","alt":"Hampton Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255514","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255514-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0130-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hampton Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cfc7b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2b295"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ddd5c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cfc7b3\",\"pct\":56.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c2b295\",\"pct\":29.1,\"name\":\"Beige\"},{\"hex\":\"#ddd5c2\",\"pct\":14.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0149-01","sku":"DWXH-255515","sc_id":516,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Henton Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Henton, color:Greige, Greige, Birch","body_html":"<div class=\"sanderson-product\">\n<p>Henton in Birch is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0149-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216884_839a.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216883_d3d1.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216885_70fa.jpg","alt":"Henton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255515","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255515-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Henton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4b6ab"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4b6ab\",\"pct\":100,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0149-03","sku":"DWXH-255516","sc_id":517,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Henton Eggshell | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Henton, color:Greige, Greige, Eggshell","body_html":"<div class=\"sanderson-product\">\n<p>Henton in Eggshell is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eggshell</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0149-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216884_839a.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216883_d3d1.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216885_70fa.jpg","alt":"Henton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255516","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255516-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Henton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eggshell"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4b6ab"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4b6ab\",\"pct\":100,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0149-02","sku":"DWXH-255517","sc_id":518,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Henton Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Henton, color:Greige, Greige, Grey","body_html":"<div class=\"sanderson-product\">\n<p>Henton in Grey is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Henton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0149-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216884_839a.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216883_d3d1.jpg","alt":"Henton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216885_70fa.jpg","alt":"Henton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255517","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255517-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0149-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Henton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4b6ab"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"100"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4b6ab\",\"pct\":100,\"name\":\"Greige\"}]"}]}
+{"mfr_sku":"SAW0162-02","sku":"DWXH-255518","sc_id":519,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Hykenham High Sea/Ginger | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Hykenham, color:Wedgwood, Wedgwood, Olive, Oatmeal, Grey, Sage, Florals, High Sea/Ginger","body_html":"<div class=\"sanderson-product\">\n<p>Hykenham in High Sea/Ginger is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Wedgwood, Olive, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">High Sea/Ginger</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Hykenham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0162-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217041_d8e1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217040_adb1.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217041_1_SAW0162_02_SANDERSON_Hykenham_WALLPAPER_69fe.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217041_2_SAW0162_02_SANDERSON_Hykenham_WALLPAPER_71b7.jpg","alt":"Hykenham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217042_f4bc.jpg","alt":"Hykenham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255518","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255518-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0162-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Hykenham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"High Sea/Ginger"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"High Sea/Ginger"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#449f9c"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"42.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#616334"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e0cfab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#449f9c\",\"pct\":42.8,\"name\":\"Wedgwood\"},{\"hex\":\"#616334\",\"pct\":24,\"name\":\"Olive\"},{\"hex\":\"#e0cfab\",\"pct\":16.2,\"name\":\"Oatmeal\"},{\"hex\":\"#6c936f\",\"pct\":11.1,\"name\":\"Grey\"},{\"hex\":\"#83a488\",\"pct\":5.9,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0142-03","sku":"DWXH-255519","sc_id":520,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Ishi Emerald | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ishi, color:Oatmeal, Oatmeal, Linen, Beige, Stone, Emerald","body_html":"<div class=\"sanderson-product\">\n<p>Ishi in Emerald is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Emerald</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ishi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0142-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_100d.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216777_9833.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216778_b701.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_1_SAW0142_03_SANDERSON_Ishi_WALLPAPER_bf8e.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_2_SAW0142_03_SANDERSON_Ishi_WALLPAPER_d4de.jpg","alt":"Ishi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216779_3_SAW0142_03_SANDERSON_Ishi_WALLPAPER_6680.jpg","alt":"Ishi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255519","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255519-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0142-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ishi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Emerald"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Emerald"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c9cead"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d9dec2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"31.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c2caa2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c9cead\",\"pct\":34.1,\"name\":\"Oatmeal\"},{\"hex\":\"#d9dec2\",\"pct\":31.9,\"name\":\"Linen\"},{\"hex\":\"#c2caa2\",\"pct\":18,\"name\":\"Beige\"},{\"hex\":\"#adb98d\",\"pct\":16,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0106-01","sku":"DWXH-255520","sc_id":521,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kasuri Pondicherry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kasuri, color:Alabaster, Alabaster, Wedgwood, Grey, Stone, Mist, Pondicherry","body_html":"<div class=\"sanderson-product\">\n<p>Kasuri in Pondicherry is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Wedgwood, Grey. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Pondicherry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kasuri</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0106-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216781_58bd.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_1_SAW0106_01_SANDERSON_Kasuri_WALLPAPER_4329.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_2_SAW0106_01_SANDERSON_Kasuri_WALLPAPER_9668.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216780_a88d.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216782_2ab8.jpg","alt":"Kasuri"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216783_fcb5.jpg","alt":"Kasuri"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255520","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255520-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0106-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kasuri"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Pondicherry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Pondicherry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e6e8dd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Wedgwood"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#6a90ab"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Grey"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7a9eb3"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e6e8dd\",\"pct\":33.9,\"name\":\"Alabaster\"},{\"hex\":\"#6a90ab\",\"pct\":20.3,\"name\":\"Wedgwood\"},{\"hex\":\"#7a9eb3\",\"pct\":18.6,\"name\":\"Grey\"},{\"hex\":\"#8ba9b9\",\"pct\":13.9,\"name\":\"Stone\"},{\"hex\":\"#c6d1cf\",\"pct\":13.4,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0088-03","sku":"DWXH-255521","sc_id":522,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Kent Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kent, color:Mist, Mist, Linen, Alabaster","body_html":"<div class=\"sanderson-product\">\n<p>Kent in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kent</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0088-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216389_8054.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216390_1d0d.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_1_SAW0088_03_SANDERSON_Kent_WALLPAPER_624c.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_2_SAW0088_03_SANDERSON_Kent_WALLPAPER_699f.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216391_b778.jpg","alt":"Kent"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216392_eb10.jpg","alt":"Kent"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255521","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255521-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0088-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kent"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cdd4d1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"54.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbdcd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dddedb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cdd4d1\",\"pct\":54.9,\"name\":\"Mist\"},{\"hex\":\"#dbdcd9\",\"pct\":29.9,\"name\":\"Linen\"},{\"hex\":\"#dddedb\",\"pct\":15.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0239-02","sku":"DWXH-255522","sc_id":523,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Khes Mineral/Lionsmane | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Khes, color:Alabaster, Alabaster, Oatmeal, Sand, Cream, Linen, Mineral/Lionsmane","body_html":"<div class=\"sanderson-product\">\n<p>Khes in Mineral/Lionsmane is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral/Lionsmane</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0239-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217450_f936.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217451_eb34.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217452_ef8c.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217453_96d5.jpg","alt":"Khes"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255522","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255522-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Khes"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral/Lionsmane"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral/Lionsmane"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edeae0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbc7ae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7ae93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edeae0\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#dbc7ae\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c7ae93\",\"pct\":15.4,\"name\":\"Sand\"},{\"hex\":\"#e9e2d5\",\"pct\":15.3,\"name\":\"Cream\"},{\"hex\":\"#e1d3c0\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0239-01","sku":"DWXH-255523","sc_id":524,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Khes Shiitake/Cocoa | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Khes, color:Alabaster, Alabaster, Oatmeal, Sand, Cream, Linen, Shiitake/Cocoa","body_html":"<div class=\"sanderson-product\">\n<p>Khes in Shiitake/Cocoa is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Oatmeal, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Shiitake/Cocoa</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Khes</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0239-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217450_f936.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217451_eb34.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217452_ef8c.jpg","alt":"Khes"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217453_96d5.jpg","alt":"Khes"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255523","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255523-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0239-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Khes"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Shiitake/Cocoa"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Shiitake/Cocoa"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#edeae0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbc7ae"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c7ae93"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#edeae0\",\"pct\":33.8,\"name\":\"Alabaster\"},{\"hex\":\"#dbc7ae\",\"pct\":21.2,\"name\":\"Oatmeal\"},{\"hex\":\"#c7ae93\",\"pct\":15.4,\"name\":\"Sand\"},{\"hex\":\"#e9e2d5\",\"pct\":15.3,\"name\":\"Cream\"},{\"hex\":\"#e1d3c0\",\"pct\":14.2,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0131-03","sku":"DWXH-255524","sc_id":525,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"King Protea Linen/Mica | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, King Protea, color:Alabaster, Alabaster, Greige, Linen, Cream, Florals, Linen/Mica","body_html":"<div class=\"sanderson-product\">\n<p>King Protea in Linen/Mica is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen/Mica</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">King Protea</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0131-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216647_56a3.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216645_88a9.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216646_75db.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216647_1_SAW0131_03_SANDERSON_King_Protea_WALLPAPER_161a.jpg","alt":"King Protea"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216647_2_SAW0131_03_SANDERSON_King_Protea_WALLPAPER_1eb0.jpg","alt":"King Protea"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255524","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255524-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0131-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"King Protea"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen/Mica"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen/Mica"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f0eae2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"49.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcb5a6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dad3c6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f0eae2\",\"pct\":49.2,\"name\":\"Alabaster\"},{\"hex\":\"#bcb5a6\",\"pct\":18.3,\"name\":\"Greige\"},{\"hex\":\"#dad3c6\",\"pct\":18.1,\"name\":\"Linen\"},{\"hex\":\"#e3ddd2\",\"pct\":14.4,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0228-02","sku":"DWXH-255525","sc_id":526,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Kitchen Garden Gloucestershire Pear | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Kitchen Garden, color:Alabaster, Alabaster, Greige, White, Oatmeal, Cream, Gloucestershire Pear","body_html":"<div class=\"sanderson-product\">\n<p>Kitchen Garden in Gloucestershire Pear is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Greige, White. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Gloucestershire Pear</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Kitchen Garden</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0228-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_571e.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217499_ab91.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_1_SAW0228_02_SANDERSON_Kitchen_Garden_WALLPAPER_b182.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217500_2_SAW0228_02_SANDERSON_Kitchen_Garden_WALLPAPER_0c98.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217501_87cc.jpg","alt":"Kitchen Garden"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217507_eaad.jpg","alt":"Kitchen Garden"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255525","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255525-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0228-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Kitchen Garden"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Gloucestershire Pear"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Gloucestershire Pear"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1efe4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bcaf98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f4f1ea"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1efe4\",\"pct\":34.3,\"name\":\"Alabaster\"},{\"hex\":\"#bcaf98\",\"pct\":21.4,\"name\":\"Greige\"},{\"hex\":\"#f4f1ea\",\"pct\":19.1,\"name\":\"White\"},{\"hex\":\"#d6ccb9\",\"pct\":14.9,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e1d4\",\"pct\":10.4,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0122-03","sku":"DWXH-255526","sc_id":527,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Lismore (Wallcovering) Russet | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lismore (Wallcovering), color:Greige, Greige, Stone, Animal-Print, Birds, Russet, Animal Print","body_html":"<div class=\"sanderson-product\">\n<p>Lismore (Wallcovering) in Russet is a Sanderson Wallcovering in a animal print/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Russet</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0122-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216605_730d.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216604_d812.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216606_1_SAW0122_03_SANDERSON_Lismore_WALLPAPER_1e7a.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216606_5b3f.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216607_bc25.jpg","alt":"Lismore (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255526","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255526-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lismore (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Russet"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Russet"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b2b3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"93.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a9a9a0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b2b3ad\",\"pct\":93.6,\"name\":\"Greige\"},{\"hex\":\"#a9a9a0\",\"pct\":3.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animal-print"}]}
+{"mfr_sku":"SAW0122-02","sku":"DWXH-255527","sc_id":528,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Lismore (Wallcovering) Silver Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Lismore (Wallcovering), color:Greige, Greige, Stone, Animal-Print, Birds, Silver Grey, Animal Print","body_html":"<div class=\"sanderson-product\">\n<p>Lismore (Wallcovering) in Silver Grey is a Sanderson Wallcovering in a animal print/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Lismore (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0122-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216605_730d.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216604_d812.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216605_1_SAW0122_02_SANDERSON_Lismore_WALLPAPER_eeab.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216606_5b3f.jpg","alt":"Lismore (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216607_bc25.jpg","alt":"Lismore (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255527","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255527-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0122-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Lismore (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b2b3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"93.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a9a9a0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b2b3ad\",\"pct\":93.6,\"name\":\"Greige\"},{\"hex\":\"#a9a9a0\",\"pct\":3.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animal-print"}]}
+{"mfr_sku":"SAW0099-01","sku":"DWXH-255528","sc_id":529,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Little Thistles Ecru | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Little Thistles, color:Linen, Linen, Alabaster, Oatmeal, Botanical, Florals, Ecru","body_html":"<div class=\"sanderson-product\">\n<p>Little Thistles in Ecru is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ecru</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Little Thistles</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0099-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216511_2953.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216511_1_SAW0099_01_SANDERSON_Little_Thistles_WALLPAPER_13c4.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216511_2_SAW0099_01_SANDERSON_Little_Thistles_WALLPAPER_fe1f.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216511_3_SAW0099_01_SANDERSON_Little_Thistles_WALLPAPER_f04c.jpg","alt":"Little Thistles"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216512_62be.jpg","alt":"Little Thistles"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255528","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255528-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0099-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0099-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Little Thistles"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ecru"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ecru"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddbce"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dfdfd9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ccc8b9"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddbce\",\"pct\":70.8,\"name\":\"Linen\"},{\"hex\":\"#dfdfd9\",\"pct\":20.4,\"name\":\"Alabaster\"},{\"hex\":\"#ccc8b9\",\"pct\":8.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0144-03","sku":"DWXH-255529","sc_id":530,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Madurai Lemon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Madurai, color:Linen, Linen, Oatmeal, Cream, Alabaster, Lemon","body_html":"<div class=\"sanderson-product\">\n<p>Madurai in Lemon is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lemon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Madurai</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0144-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216756_858a.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216754_62f2.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216755_77ea.jpg","alt":"Madurai"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216756_1_SAW0144_03_SANDERSON_Madurai_WALLPAPER_5ba8.jpg","alt":"Madurai"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255529","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255529-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0144-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Madurai"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lemon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lemon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbdcc2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7d1a2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e6e8d5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbdcc2\",\"pct\":36.7,\"name\":\"Linen\"},{\"hex\":\"#d7d1a2\",\"pct\":30,\"name\":\"Oatmeal\"},{\"hex\":\"#e6e8d5\",\"pct\":16.7,\"name\":\"Cream\"},{\"hex\":\"#e8ebdc\",\"pct\":16.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0079-01","sku":"DWXH-255530","sc_id":531,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Maelee Mineral | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Maelee, color:Mist, Mist, Linen, Alabaster, Florals, Mineral","body_html":"<div class=\"sanderson-product\">\n<p>Maelee in Mineral is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Maelee</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mineral</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Maelee</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0079-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216349_a492.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216348_1_SAW0079_01_SANDERSON_Maelee_WALLPAPER_3853.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216348_2_SAW0079_01_SANDERSON_Maelee_WALLPAPER_9c05.jpg","alt":"Maelee"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHPO216348_3149.jpg","alt":"Maelee"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255530","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255530-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0079-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0079-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Maelee"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mineral"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mineral"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d4d1c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dad9d6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#dfdedc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d4d1c6\",\"pct\":55,\"name\":\"Mist\"},{\"hex\":\"#dad9d6\",\"pct\":28.8,\"name\":\"Linen\"},{\"hex\":\"#dfdedc\",\"pct\":16.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0240-01","sku":"DWXH-255531","sc_id":532,"settlement_verdict":"REVIEW-VISION","retail":798,"product":{"title":"Magnolia Blossom Blossom/Leaf | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Magnolia Blossom, color:White, White, Silver, Birds, Blossom/Leaf","body_html":"<div class=\"sanderson-product\">\n<p>Magnolia Blossom in Blossom/Leaf is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Magnolia Blossom</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blossom/Leaf</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Magnolia Blossom</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0240-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217469_9ae4.jpg","alt":"Magnolia Blossom"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255531","price":"798.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255531-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0240-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0240-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Magnolia Blossom"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blossom/Leaf"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blossom/Leaf"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ffffff"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"76.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ccbdbc"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ffffff\",\"pct\":76.7,\"name\":\"White\"},{\"hex\":\"#ccbdbc\",\"pct\":20.4,\"name\":\"Silver\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0241-01","sku":"DWXH-255532","sc_id":533,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Malay Seafoam | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Malay, color:Duck Egg, Duck Egg, Mist, Silver, Seafoam","body_html":"<div class=\"sanderson-product\">\n<p>Malay in Seafoam is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Mist, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Seafoam</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Malay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0241-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217455_3f44.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_1263.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_1_SAW0241_01_SANDERSON_Malay_WALLPAPER_9f18.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217454_2_SAW0241_01_SANDERSON_Malay_WALLPAPER_3596.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217456_1602.jpg","alt":"Malay"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217457_5c24.jpg","alt":"Malay"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255532","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255532-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0241-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Malay"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Seafoam"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Seafoam"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#aabdbd"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"74.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6cdcd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b7c4c4"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"10"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#aabdbd\",\"pct\":74.9,\"name\":\"Duck Egg\"},{\"hex\":\"#c6cdcd\",\"pct\":15.1,\"name\":\"Mist\"},{\"hex\":\"#b7c4c4\",\"pct\":10,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0150-02","sku":"DWXH-255533","sc_id":534,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Marcham English Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Marcham, color:Beige, Beige, Oatmeal, Botanical, Leaves-And-Trees, English Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Marcham in English Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">English Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0150-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216903_6536.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216899_eafd.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216900_b753.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216901_15e9.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216902_6640.jpg","alt":"Marcham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255533","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255533-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Marcham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"English Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"English Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c7c0a4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cdb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c7c0a4\",\"pct\":73.7,\"name\":\"Beige\"},{\"hex\":\"#d0cdb6\",\"pct\":26.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0150-03","sku":"DWXH-255534","sc_id":535,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Marcham Grey Birch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Marcham, color:Beige, Beige, Oatmeal, Botanical, Leaves-And-Trees, Grey Birch, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Marcham in Grey Birch is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Beige, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey Birch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Marcham</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0150-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216903_6536.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216899_eafd.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216900_b753.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216901_15e9.jpg","alt":"Marcham"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216902_6640.jpg","alt":"Marcham"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255534","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255534-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0150-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Marcham"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey Birch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey Birch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Beige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c7c0a4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"73.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0cdb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c7c0a4\",\"pct\":73.7,\"name\":\"Beige\"},{\"hex\":\"#d0cdb6\",\"pct\":26.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0090-03","sku":"DWXH-255535","sc_id":536,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Mawton Chalk/Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mawton, color:Alabaster, Alabaster, Linen, Chalk/Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Mawton in Chalk/Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chalk/Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mawton</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0090-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216416_2463.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216417_6cbf.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_1_SAW0090_03_SANDERSON_Mawton_WALLPAPER_22a9.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_2_SAW0090_03_SANDERSON_Mawton_WALLPAPER_4bf0.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216418_4b1b.jpg","alt":"Mawton"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216419_eb9a.jpg","alt":"Mawton"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255535","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255535-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0090-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mawton"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chalk/Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chalk/Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3e4dc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dbd8d0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3e4dc\",\"pct\":66.4,\"name\":\"Alabaster\"},{\"hex\":\"#dbd8d0\",\"pct\":33.7,\"name\":\"Linen\"}]"}]}
+{"mfr_sku":"SAW0196-02","sku":"DWXH-255536","sc_id":537,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey At The Farm Butterscotch | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey At The Farm, color:Cream, Cream, Oatmeal, Taupe, Linen, Animals, Butterscotch","body_html":"<div class=\"sanderson-product\">\n<p>Mickey At The Farm in Butterscotch is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Oatmeal, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey At The Farm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Butterscotch</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey At The Farm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0196-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217267_c93b.jpg","alt":"Mickey At The Farm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217266_f706.jpg","alt":"Mickey At The Farm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217267_1_SAW0196_02_SANDERSON_Mickey_At_The_Farm_WALLPAPER_ef2b.jpg","alt":"Mickey At The Farm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255536","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255536-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0196-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0196-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey At The Farm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Butterscotch"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Butterscotch"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1e1c0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4d1ad"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9987a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1e1c0\",\"pct\":56.2,\"name\":\"Cream\"},{\"hex\":\"#e4d1ad\",\"pct\":17.6,\"name\":\"Oatmeal\"},{\"hex\":\"#a9987a\",\"pct\":16.4,\"name\":\"Taupe\"},{\"hex\":\"#efdebc\",\"pct\":9.9,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0196-01","sku":"DWXH-255537","sc_id":538,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey At The Farm Macaron Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey At The Farm, color:Cream, Cream, Oatmeal, Taupe, Linen, Animals, Macaron Green","body_html":"<div class=\"sanderson-product\">\n<p>Mickey At The Farm in Macaron Green is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Oatmeal, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey At The Farm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Macaron Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey At The Farm</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0196-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217267_c93b.jpg","alt":"Mickey At The Farm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217266_1_SAW0196_01_SANDERSON_Mickey_At_The_Farm_WALLPAPER_127a.jpg","alt":"Mickey At The Farm"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217266_f706.jpg","alt":"Mickey At The Farm"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255537","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255537-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0196-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0196-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey At The Farm"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Macaron Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Macaron Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f1e1c0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"56.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e4d1ad"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#a9987a"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f1e1c0\",\"pct\":56.2,\"name\":\"Cream\"},{\"hex\":\"#e4d1ad\",\"pct\":17.6,\"name\":\"Oatmeal\"},{\"hex\":\"#a9987a\",\"pct\":16.4,\"name\":\"Taupe\"},{\"hex\":\"#efdebc\",\"pct\":9.9,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0198-02","sku":"DWXH-255538","sc_id":539,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Mickey Stripe Humbug | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mickey Stripe, color:White, White, Mist, Olive, Alabaster, Animals, Humbug","body_html":"<div class=\"sanderson-product\">\n<p>Mickey Stripe in Humbug is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Mist, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Humbug</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mickey Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0198-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217271_db4e.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217272_1_SAW0198_02_SANDERSON_Mickey_Stripe_WALLPAPER_caac.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217272_2_SAW0198_02_SANDERSON_Mickey_Stripe_WALLPAPER_4300.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217272_bd5d.jpg","alt":"Mickey Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217273_1c75.jpg","alt":"Mickey Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255538","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255538-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0198-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mickey Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Humbug"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Humbug"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f4f4ec"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"38.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c7d2ce"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"37.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7b6d5e"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f4f4ec\",\"pct\":38.2,\"name\":\"White\"},{\"hex\":\"#c7d2ce\",\"pct\":37.3,\"name\":\"Mist\"},{\"hex\":\"#7b6d5e\",\"pct\":18.5,\"name\":\"Olive\"},{\"hex\":\"#e1e5df\",\"pct\":6,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0151-02","sku":"DWXH-255539","sc_id":540,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Milcombe Mist Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Milcombe, color:Linen, Linen, Oatmeal, Florals, Mist Blue","body_html":"<div class=\"sanderson-product\">\n<p>Milcombe in Mist Blue is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mist Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0151-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_3651.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_1_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_5382.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_2_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_8d84.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_3_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_efd2.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_4_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_4930.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_5_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_add0.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_6_SAW0151_02_SANDERSON_Milcombe_WALLPAPER_2096.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_ff08.jpg","alt":"Milcombe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255539","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255539-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Milcombe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mist Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mist Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d5d3c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cccabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d5d3c6\",\"pct\":89.1,\"name\":\"Linen\"},{\"hex\":\"#cccabd\",\"pct\":10.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0151-03","sku":"DWXH-255540","sc_id":541,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Milcombe Powder Pink | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Milcombe, color:Linen, Linen, Oatmeal, Florals, Powder Pink","body_html":"<div class=\"sanderson-product\">\n<p>Milcombe in Powder Pink is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Powder Pink</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0151-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_3651.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_ff08.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_1_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_7db3.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_2_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_5e8a.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_3_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_fb32.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_4_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_5eab.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_5_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_c4ad.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_6_SAW0151_03_SANDERSON_Milcombe_WALLPAPER_50af.jpg","alt":"Milcombe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255540","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255540-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Milcombe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Powder Pink"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Powder Pink"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d5d3c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cccabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d5d3c6\",\"pct\":89.1,\"name\":\"Linen\"},{\"hex\":\"#cccabd\",\"pct\":10.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0151-04","sku":"DWXH-255541","sc_id":542,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Milcombe Putty | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Milcombe, color:Linen, Linen, Oatmeal, Florals, Putty","body_html":"<div class=\"sanderson-product\">\n<p>Milcombe in Putty is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Putty</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0151-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_3651.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_ff08.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216881_bfe7.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216882_1_SAW0151_04_SANDERSON_Milcombe_WALLPAPER_57a3.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216882_2_SAW0151_04_SANDERSON_Milcombe_WALLPAPER_f024.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216882_3_SAW0151_04_SANDERSON_Milcombe_WALLPAPER_c8d5.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216882_4_SAW0151_04_SANDERSON_Milcombe_WALLPAPER_2930.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216882_5_SAW0151_04_SANDERSON_Milcombe_WALLPAPER_155f.jpg","alt":"Milcombe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255541","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255541-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Milcombe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Putty"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d5d3c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cccabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d5d3c6\",\"pct\":89.1,\"name\":\"Linen\"},{\"hex\":\"#cccabd\",\"pct\":10.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0151-01","sku":"DWXH-255542","sc_id":543,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Milcombe Silver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Milcombe, color:Linen, Linen, Oatmeal, Florals, Silver","body_html":"<div class=\"sanderson-product\">\n<p>Milcombe in Silver is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Silver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Milcombe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0151-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_3651.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_1_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_a5ac.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_2_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_ff13.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_3_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_9bd5.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_4_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_f274.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_5_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_4e69.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216879_6_SAW0151_01_SANDERSON_Milcombe_WALLPAPER_2a85.jpg","alt":"Milcombe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216880_ff08.jpg","alt":"Milcombe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255542","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255542-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0151-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Milcombe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d5d3c6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"89.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#cccabd"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"10.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d5d3c6\",\"pct\":89.1,\"name\":\"Linen\"},{\"hex\":\"#cccabd\",\"pct\":10.8,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0199-01","sku":"DWXH-255543","sc_id":544,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Minnie On The Move Candy Floss | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Minnie On The Move, color:Cream, Cream, Sand, Alabaster, Animals, Candy Floss","body_html":"<div class=\"sanderson-product\">\n<p>Minnie On The Move in Candy Floss is a Sanderson Wallcovering in a animals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Candy Floss</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Minnie On The Move</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0199-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217269_9855.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217268_2697.jpg","alt":"Minnie On The Move"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDIW217270_e7bb.jpg","alt":"Minnie On The Move"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255543","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255543-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0199-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Minnie On The Move"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Candy Floss"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Candy Floss"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f8f3cb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"77.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#bdab86"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#f2f6dd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"3.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f8f3cb\",\"pct\":77.7,\"name\":\"Cream\"},{\"hex\":\"#bdab86\",\"pct\":18.4,\"name\":\"Sand\"},{\"hex\":\"#f2f6dd\",\"pct\":3.9,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0242-01","sku":"DWXH-255544","sc_id":545,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Mudmi Avocado | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Mudmi, color:Denim, Denim, Teal, Stone, Avocado","body_html":"<div class=\"sanderson-product\">\n<p>Mudmi in Avocado is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Denim, Teal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Avocado</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Mudmi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0242-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217459_a43e.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_1_SAW0242_01_SANDERSON_Mudmi_WALLPAPER_4f0a.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_2_SAW0242_01_SANDERSON_Mudmi_WALLPAPER_ebc9.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217458_77ca.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217460_b898.jpg","alt":"Mudmi"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217461_2e69.jpg","alt":"Mudmi"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255544","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255544-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0242-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Mudmi"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Avocado"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Avocado"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Denim"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Denim"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#496d82"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#406881"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#99a9ae"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"8.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#496d82\",\"pct\":70,\"name\":\"Denim\"},{\"hex\":\"#406881\",\"pct\":21.4,\"name\":\"Teal\"},{\"hex\":\"#99a9ae\",\"pct\":8.7,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0243-01","sku":"DWXH-255545","sc_id":546,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Musafir Cardamom/Namak | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Musafir, color:Alabaster, Alabaster, Duck Egg, Mist, Greige, Silver, Cardamom/Namak","body_html":"<div class=\"sanderson-product\">\n<p>Musafir in Cardamom/Namak is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Duck Egg, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cardamom/Namak</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Musafir</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0243-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217445_dc32.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217443_a527.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217444_37d5.jpg","alt":"Musafir"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217446_4752.jpg","alt":"Musafir"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255545","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255545-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0243-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Musafir"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cardamom/Namak"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cardamom/Namak"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#eae7e0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"26.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#a5c3c4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"24.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c3d0cd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#eae7e0\",\"pct\":26.7,\"name\":\"Alabaster\"},{\"hex\":\"#a5c3c4\",\"pct\":24.8,\"name\":\"Duck Egg\"},{\"hex\":\"#c3d0cd\",\"pct\":20.6,\"name\":\"Mist\"},{\"hex\":\"#b8aea6\",\"pct\":15.7,\"name\":\"Greige\"},{\"hex\":\"#b6c5c3\",\"pct\":12.2,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0101-03","sku":"DWXH-255546","sc_id":547,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Nest Egg Marine Aqua | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Nest Egg, color:Linen, Linen, Oatmeal, Animals, Birds, Marine Aqua","body_html":"<div class=\"sanderson-product\">\n<p>Nest Egg in Marine Aqua is a Sanderson Wallcovering in a animals/birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Marine Aqua</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Nest Egg</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0101-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216506_a5a6.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216502_5ec0.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216503_49cb.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_1_SAW0101_03_SANDERSON_Nest_Egg_WALLPAPER_067b.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_2_SAW0101_03_SANDERSON_Nest_Egg_WALLPAPER_2b30.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216504_3ff8.jpg","alt":"Nest Egg"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/E/DEBB216505_d5cd.jpg","alt":"Nest Egg"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255546","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255546-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0101-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Nest Egg"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Marine Aqua"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Marine Aqua"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dddccb"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d2c1ac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dddccb\",\"pct\":82.9,\"name\":\"Linen\"},{\"hex\":\"#d2c1ac\",\"pct\":17.2,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0152-03","sku":"DWXH-255547","sc_id":548,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Osney Cream | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osney, color:Greige, Greige, Stone, Cream","body_html":"<div class=\"sanderson-product\">\n<p>Osney in Cream is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Cream</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0152-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216892_9487.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_86c2.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216893_5af1.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216894_503a.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216895_fff4.jpg","alt":"Osney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255547","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255547-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#abb9a0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aab89e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#abb9a0\",\"pct\":59.4,\"name\":\"Greige\"},{\"hex\":\"#aab89e\",\"pct\":39.6,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0152-04","sku":"DWXH-255548","sc_id":549,"settlement_verdict":"CLEAR","retail":214,"product":{"title":"Osney Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Osney, color:Greige, Greige, Stone, Linen","body_html":"<div class=\"sanderson-product\">\n<p>Osney in Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Osney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0152-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216892_9487.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216891_86c2.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216893_5af1.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216894_503a.jpg","alt":"Osney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216895_fff4.jpg","alt":"Osney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255548","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255548-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0152-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Osney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#abb9a0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"59.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aab89e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"39.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#abb9a0\",\"pct\":59.4,\"name\":\"Greige\"},{\"hex\":\"#aab89e\",\"pct\":39.6,\"name\":\"Stone\"}]"}]}
+{"mfr_sku":"SAW0123-04","sku":"DWXH-255549","sc_id":550,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Owlswick (Wallcovering) Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Owlswick (Wallcovering), color:Mist, Mist, Stone, Silver, Oatmeal, Birds, Leaves-And-Trees, Linen, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Owlswick (Wallcovering) in Linen is a Sanderson Wallcovering in a birds/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Stone, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Owlswick (Wallcovering)</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0123-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216596_73d2.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216595_8b8a.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216597_8717.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216598_1_SAW0123_04_SANDERSON_Owlswick_WALLPAPER_6d68.jpg","alt":"Owlswick (Wallcovering)"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216598_7696.jpg","alt":"Owlswick (Wallcovering)"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255549","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255549-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0123-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Owlswick (Wallcovering)"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c2d2c7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aeae9f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8c8bc"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c2d2c7\",\"pct\":53,\"name\":\"Mist\"},{\"hex\":\"#aeae9f\",\"pct\":16.7,\"name\":\"Stone\"},{\"hex\":\"#b8c8bc\",\"pct\":15.7,\"name\":\"Silver\"},{\"hex\":\"#cac9b8\",\"pct\":14.6,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0181-03","sku":"DWXH-255550","sc_id":551,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Oxbow Sap Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Oxbow, color:White, White, Gold, Oatmeal, Botanical, Sap Green","body_html":"<div class=\"sanderson-product\">\n<p>Oxbow in Sap Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Gold, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sap Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Oxbow</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0181-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217251_73e7.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217249_cd69.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217250_3fcd.jpg","alt":"Oxbow"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217251_1_SAW0181_03_SANDERSON_Oxbow_WALLPAPER_f41b.jpg","alt":"Oxbow"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255550","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255550-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0181-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Oxbow"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sap Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#fafbf3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#97ac4e"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d1d8ab"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"16.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#fafbf3\",\"pct\":55.1,\"name\":\"White\"},{\"hex\":\"#97ac4e\",\"pct\":27.9,\"name\":\"Gold\"},{\"hex\":\"#d1d8ab\",\"pct\":16.1,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0229-02","sku":"DWXH-255551","sc_id":552,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Pergola Rose Chintz | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pergola, color:Cream, Cream, Linen, Greige, White, Alabaster, Rose Chintz","body_html":"<div class=\"sanderson-product\">\n<p>Pergola in Rose Chintz is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Linen, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Rose Chintz</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pergola</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0229-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217506_6f8c.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217484_60bb.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_1_SAW0229_02_SANDERSON_Pergola_WALLPAPER_0d01.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_2_SAW0229_02_SANDERSON_Pergola_WALLPAPER_0346.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217485_77d3.jpg","alt":"Pergola"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217486_50fb.jpg","alt":"Pergola"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255551","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255551-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0229-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pergola"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Rose Chintz"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Rose Chintz"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdfc9"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"35.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e7d9c6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c0a598"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdfc9\",\"pct\":35.9,\"name\":\"Cream\"},{\"hex\":\"#e7d9c6\",\"pct\":18.4,\"name\":\"Linen\"},{\"hex\":\"#c0a598\",\"pct\":17.8,\"name\":\"Greige\"},{\"hex\":\"#fbf8f2\",\"pct\":16.8,\"name\":\"White\"},{\"hex\":\"#efe7db\",\"pct\":11.1,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0182-02","sku":"DWXH-255552","sc_id":553,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Pinetum Stripe Mulberry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinetum Stripe, color:Linen, Linen, Ivory, Cream, Alabaster, Mulberry","body_html":"<div class=\"sanderson-product\">\n<p>Pinetum Stripe in Mulberry is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Ivory, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Mulberry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinetum Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0182-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217252_1a21.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217253_1_SAW0182_02_SANDERSON_Pinetum_Stripe_WALLPAPER_744f.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217253_cbca.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217254_a9e8.jpg","alt":"Pinetum Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217255_ca01.jpg","alt":"Pinetum Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255552","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255552-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0182-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinetum Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Mulberry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Mulberry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e1daba"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"36.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#fdfbef"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"33.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e9e3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e1daba\",\"pct\":36.6,\"name\":\"Linen\"},{\"hex\":\"#fdfbef\",\"pct\":33.8,\"name\":\"Ivory\"},{\"hex\":\"#e9e3cb\",\"pct\":15,\"name\":\"Cream\"},{\"hex\":\"#f4f1df\",\"pct\":14.6,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0146-06","sku":"DWXH-255553","sc_id":554,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Blue Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream, Blue Clay","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Blue Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255553","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255553-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0146-04","sku":"DWXH-255554","sc_id":555,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Grass | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream, Grass","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Grass is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grass</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255554","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255554-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grass"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grass"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0146-02","sku":"DWXH-255555","sc_id":556,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Pinjara Trellis Ivory | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Pinjara Trellis, color:Linen, Linen, Alabaster, Cream, Ivory","body_html":"<div class=\"sanderson-product\">\n<p>Pinjara Trellis in Ivory is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ivory</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Pinjara Trellis</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0146-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216784_7d23.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216785_45c9.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216786_db6f.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216787_a16c.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216788_5e53.jpg","alt":"Pinjara Trellis"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216789_62c7.jpg","alt":"Pinjara Trellis"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255555","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255555-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0146-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Pinjara Trellis"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e3ded0"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae7db"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e7e3d6"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e3ded0\",\"pct\":50.4,\"name\":\"Linen\"},{\"hex\":\"#eae7db\",\"pct\":30.3,\"name\":\"Alabaster\"},{\"hex\":\"#e7e3d6\",\"pct\":19.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0071-01","sku":"DWXH-255556","sc_id":557,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Protea Flower China Blue/Canvas | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Protea Flower, color:Alabaster, Alabaster, Linen, Florals, China Blue/Canvas","body_html":"<div class=\"sanderson-product\">\n<p>Protea Flower in China Blue/Canvas is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">China Blue/Canvas</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Protea Flower</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0071-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216330_1d5f.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216327_1_SAW0071_01_SANDERSON_Protea_Flower_WALLPAPER_85e4.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216327_fab2.jpg","alt":"Protea Flower"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DART216329_2100.jpg","alt":"Protea Flower"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255556","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255556-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0071-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Protea Flower"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"China Blue/Canvas"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"China Blue/Canvas"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ebe8e1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"82.3"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dadbd4"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.8"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ebe8e1\",\"pct\":82.3,\"name\":\"Alabaster\"},{\"hex\":\"#dadbd4\",\"pct\":15.8,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0133-01","sku":"DWXH-255557","sc_id":558,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Ringtailed Lemur Teal | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Ringtailed Lemur, color:Alabaster, Alabaster, Taupe, Oatmeal, Animals, Leaves-And-Trees, Teal, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Ringtailed Lemur in Teal is a Sanderson Wallcovering in a animals/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Teal</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Ringtailed Lemur</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0133-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216665_7fba.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216663_08d7.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216663_1_SAW0133_01_SANDERSON_Ringtailed_Lemur_WALLPAPER_73ef.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216663_2_SAW0133_01_SANDERSON_Ringtailed_Lemur_WALLPAPER_d5b3.jpg","alt":"Ringtailed Lemur"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216664_2bcb.jpg","alt":"Ringtailed Lemur"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255557","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255557-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0133-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Ringtailed Lemur"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Teal"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f5ede2"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#807d69"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c9ccbb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f5ede2\",\"pct\":64.9,\"name\":\"Alabaster\"},{\"hex\":\"#807d69\",\"pct\":19.4,\"name\":\"Taupe\"},{\"hex\":\"#c9ccbb\",\"pct\":15.7,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"animals"}]}
+{"mfr_sku":"SAW0183-02","sku":"DWXH-255558","sc_id":559,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Robin`S Wood Forest Green/Sap Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Robin`S Wood, color:Taupe, Taupe, Forest, Brown, Sand, Denim, Botanical, Forest Green/Sap Green","body_html":"<div class=\"sanderson-product\">\n<p>Robin`s Wood in Forest Green/Sap Green is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Forest, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Forest Green/Sap Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0183-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217224_1ac1.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217223_5866.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217225_58aa.jpg","alt":"Robin`S Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255558","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255558-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Robin`S Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Forest Green/Sap Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Forest Green/Sap Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#878673"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Forest"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#274642"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#54553d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#878673\",\"pct\":31.2,\"name\":\"Taupe\"},{\"hex\":\"#274642\",\"pct\":29.9,\"name\":\"Forest\"},{\"hex\":\"#54553d\",\"pct\":19.9,\"name\":\"Brown\"},{\"hex\":\"#c9b48c\",\"pct\":10.3,\"name\":\"Sand\"},{\"hex\":\"#687e70\",\"pct\":8.6,\"name\":\"Denim\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0183-03","sku":"DWXH-255559","sc_id":560,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Robin`S Wood Inkwood | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Robin`S Wood, color:Taupe, Taupe, Forest, Brown, Sand, Denim, Botanical, Inkwood","body_html":"<div class=\"sanderson-product\">\n<p>Robin`s Wood in Inkwood is a Sanderson Wallcovering in a botanical design. Part of the Sanderson heritage collection, this pattern reads in a palette of Taupe, Forest, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Inkwood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Robin`S Wood</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0183-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217224_1ac1.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217223_5866.jpg","alt":"Robin`S Wood"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217225_58aa.jpg","alt":"Robin`S Wood"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255559","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255559-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0183-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Robin`S Wood"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Inkwood"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Inkwood"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Taupe"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#878673"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Forest"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#274642"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#54553d"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#878673\",\"pct\":31.2,\"name\":\"Taupe\"},{\"hex\":\"#274642\",\"pct\":29.9,\"name\":\"Forest\"},{\"hex\":\"#54553d\",\"pct\":19.9,\"name\":\"Brown\"},{\"hex\":\"#c9b48c\",\"pct\":10.3,\"name\":\"Sand\"},{\"hex\":\"#687e70\",\"pct\":8.6,\"name\":\"Denim\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0164-01","sku":"DWXH-255560","sc_id":561,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Rose And Peony Amanpuri Red/Devon Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rose And Peony, color:Sage, Sage, Beige, Greige, Sand, Oatmeal, Terracotta, Florals, Amanpuri Red/Devon Green","body_html":"<div class=\"sanderson-product\">\n<p>Rose And Peony in Amanpuri Red/Devon Green is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Sage, Beige, Greige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Amanpuri Red/Devon Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0164-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217029_e170.jpg","alt":"Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217028_c8b7.jpg","alt":"Rose And Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255560","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255560-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0164-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0164-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rose And Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Amanpuri Red/Devon Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Amanpuri Red/Devon Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Sage"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#819867"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"18.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8b59f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"18"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#b8bc99"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#819867\",\"pct\":18.8,\"name\":\"Sage\"},{\"hex\":\"#d8b59f\",\"pct\":18,\"name\":\"Beige\"},{\"hex\":\"#b8bc99\",\"pct\":17.7,\"name\":\"Greige\"},{\"hex\":\"#cd9d8c\",\"pct\":16.3,\"name\":\"Sand\"},{\"hex\":\"#d6ceb8\",\"pct\":15.6,\"name\":\"Oatmeal\"},{\"hex\":\"#9e695c\",\"pct\":13.5,\"name\":\"Terracotta\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0218-02","sku":"DWXH-255561","sc_id":562,"settlement_verdict":"CLEAR","retail":253,"product":{"title":"Rye Shed Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Rye, color:Cream, Cream, Sand, Shed Green","body_html":"<div class=\"sanderson-product\">\n<p>Rye in Shed Green is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Cream, Sand. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Shed Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Rye</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0218-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217438_d99c.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217435_fde3.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217436_9066.jpg","alt":"Rye"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSAB217437_811a.jpg","alt":"Rye"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255561","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255561-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0218-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Rye"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Shed Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Shed Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Cream"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#efdcca"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"85.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d8ab98"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.9"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#efdcca\",\"pct\":85.1,\"name\":\"Cream\"},{\"hex\":\"#d8ab98\",\"pct\":14.9,\"name\":\"Sand\"}]"}]}
+{"mfr_sku":"SAW0042-02","sku":"DWXH-255562","sc_id":563,"settlement_verdict":"REVIEW-VISION","retail":214,"product":{"title":"Seagulls Eau De Nil | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Seagulls, color:Mist, Mist, Alabaster, Birds, Eau De Nil","body_html":"<div class=\"sanderson-product\">\n<p>Seagulls in Eau De Nil is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Seagulls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Eau De Nil</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Seagulls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0042-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214585_f8f7.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214586_1_SAW0042_02_SANDERSON_Seagulls_WALLPAPER_b8d2.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214586_2_SAW0042_02_SANDERSON_Seagulls_WALLPAPER_796e.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214586_3_SAW0042_02_SANDERSON_Seagulls_WALLPAPER_45c5.jpg","alt":"Seagulls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/V/DVIN214586_8248.jpg","alt":"Seagulls"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255562","price":"214.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255562-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0042-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0042-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Seagulls"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Eau De Nil"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Eau De Nil"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c9dee3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e3e7e6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.2"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c9dee3\",\"pct\":84.9,\"name\":\"Mist\"},{\"hex\":\"#e3e7e6\",\"pct\":15.2,\"name\":\"Alabaster\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0185-02","sku":"DWXH-255563","sc_id":564,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sessile Plain Blue Clay | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sessile Plain, color:Linen, Linen, Cream, Blue Clay","body_html":"<div class=\"sanderson-product\">\n<p>Sessile Plain in Blue Clay is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Clay</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sessile Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0185-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217246_e5f4.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217244_e2ac.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217245_cb42.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217247_9d66.jpg","alt":"Sessile Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/A/DABW217248_3cc4.jpg","alt":"Sessile Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255563","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255563-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0185-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sessile Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Clay"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e5e0c1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"84.4"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#eae6c9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"15.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e5e0c1\",\"pct\":84.4,\"name\":\"Linen\"},{\"hex\":\"#eae6c9\",\"pct\":15.6,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0124-04","sku":"DWXH-255564","sc_id":565,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Silvi Clouds Yacht Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silvi Clouds, color:Stone, Stone, Silver, Mist, Duck Egg, Landscapes, Yacht Blue","body_html":"<div class=\"sanderson-product\">\n<p>Silvi Clouds in Yacht Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Yacht Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0124-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_56d0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_33b5.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_26ba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_1_SAW0124_04_SANDERSON_Silvi_Clouds_WALLPAPER_ebc0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_2_SAW0124_04_SANDERSON_Silvi_Clouds_WALLPAPER_cddf.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_b2b8.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_e4a3.jpg","alt":"Silvi Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255564","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255564-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silvi Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Yacht Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Yacht Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b4b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aebebe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ced1ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b4b3\",\"pct\":34.5,\"name\":\"Stone\"},{\"hex\":\"#aebebe\",\"pct\":29.1,\"name\":\"Silver\"},{\"hex\":\"#ced1ce\",\"pct\":28.3,\"name\":\"Mist\"},{\"hex\":\"#9fb6b5\",\"pct\":8.1,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0044-05","sku":"DWXH-255565","sc_id":566,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain Calico | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, Calico","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in Calico is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Calico</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-05</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_aaab.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_573c.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255565","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255565-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-05"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-05"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Calico"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Calico"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0044-06","sku":"DWXH-255566","sc_id":567,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Soho Plain China Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Soho Plain, color:Oatmeal, Oatmeal, Beige, China Blue","body_html":"<div class=\"sanderson-product\">\n<p>Soho Plain in China Blue is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Beige. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">China Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Soho Plain</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0044-06</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215448_a398.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216798_4f37.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216799_cf23.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/C/DCPW216803_3dbe.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215446_aaab.jpg","alt":"Soho Plain"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/S/DSOH215449_573c.jpg","alt":"Soho Plain"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255566","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255566-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-06"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0044-06"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Soho Plain"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"China Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"China Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d3c0af"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"88.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Beige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d0bdac"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"11.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d3c0af\",\"pct\":88.5,\"name\":\"Oatmeal\"},{\"hex\":\"#d0bdac\",\"pct\":11.6,\"name\":\"Beige\"}]"}]}
+{"mfr_sku":"SAW0153-02","sku":"DWXH-255567","sc_id":568,"settlement_verdict":"CLEAR","retail":199,"product":{"title":"Sonning Stripe Country Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sonning Stripe, color:Mist, Mist, Linen, Silver, Country Linen","body_html":"<div class=\"sanderson-product\">\n<p>Sonning Stripe in Country Linen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Linen, Silver. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Country Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sonning Stripe</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0153-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216890_e280.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216888_9118.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_1_SAW0153_02_SANDERSON_Sonning_Stripe_WALLPAPER_c461.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_2_SAW0153_02_SANDERSON_Sonning_Stripe_WALLPAPER_03d5.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_3_SAW0153_02_SANDERSON_Sonning_Stripe_WALLPAPER_02e0.jpg","alt":"Sonning Stripe"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216889_b8ec.jpg","alt":"Sonning Stripe"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255567","price":"199.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255567-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0153-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sonning Stripe"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Country Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cccdc3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"64.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcddd6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30.2"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c5c5b8"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"5.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cccdc3\",\"pct\":64.1,\"name\":\"Mist\"},{\"hex\":\"#dcddd6\",\"pct\":30.2,\"name\":\"Linen\"},{\"hex\":\"#c5c5b8\",\"pct\":5.7,\"name\":\"Silver\"}]"}]}
+{"mfr_sku":"SAW0166-01","sku":"DWXH-255568","sc_id":569,"settlement_verdict":"REVIEW-VISION","retail":320,"product":{"title":"Stapleton Park Olive/Bengal Red | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Stapleton Park, color:Greige, Greige, Taupe, Oatmeal, Linen, Beige, Florals, Olive/Bengal Red","body_html":"<div class=\"sanderson-product\">\n<p>Stapleton Park in Olive/Bengal Red is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Taupe, Oatmeal. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Olive/Bengal Red</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Stapleton Park</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0166-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217047_f0ee.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_0399.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_1_SAW0166_01_SANDERSON_Stapleton_Park_WALLPAPER_ef24.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_2_SAW0166_01_SANDERSON_Stapleton_Park_WALLPAPER_1b98.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_3_SAW0166_01_SANDERSON_Stapleton_Park_WALLPAPER_5d48.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_4_SAW0166_01_SANDERSON_Stapleton_Park_WALLPAPER_3e00.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217046_5_SAW0166_01_SANDERSON_Stapleton_Park_WALLPAPER_6a77.jpg","alt":"Stapleton Park"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217048_edde.jpg","alt":"Stapleton Park"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255568","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255568-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0166-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Stapleton Park"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Olive/Bengal Red"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Olive/Bengal Red"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#b4c49b"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"50.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#928e5a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.8"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d3d0a0"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#b4c49b\",\"pct\":50.6,\"name\":\"Greige\"},{\"hex\":\"#928e5a\",\"pct\":17.8,\"name\":\"Taupe\"},{\"hex\":\"#d3d0a0\",\"pct\":13.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e9e4bb\",\"pct\":12.7,\"name\":\"Linen\"},{\"hex\":\"#b9c095\",\"pct\":5.7,\"name\":\"Beige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0093-02","sku":"DWXH-255569","sc_id":570,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Thackeray Sepia | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Thackeray, color:Oatmeal, Oatmeal, Linen, Florals, Sepia","body_html":"<div class=\"sanderson-product\">\n<p>Thackeray in Sepia is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sepia</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Thackeray</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0093-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216413_9b4a.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216414_1_SAW0093_02_SANDERSON_Thackeray_WALLPAPER_c7a0.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216414_2_SAW0093_02_SANDERSON_Thackeray_WALLPAPER_82cb.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216414_f91e.jpg","alt":"Thackeray"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/D/DDAM216415_3ffc.jpg","alt":"Thackeray"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255569","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255569-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0093-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Thackeray"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sepia"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sepia"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d8cec1"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e2d9cb"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"30"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d8cec1\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#e2d9cb\",\"pct\":30,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0213-04","sku":"DWXH-255570","sc_id":571,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Trelliage Primrose/Danbury | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Trelliage, color:Ivory, Ivory, Sand, Linen, Alabaster, Primrose/Danbury","body_html":"<div class=\"sanderson-product\">\n<p>Trelliage in Primrose/Danbury is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sand, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Primrose/Danbury</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0213-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217321_b3a5.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217319_8402.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217320_e003.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217322_1_SAW0213_04_SANDERSON_Trelliage_WALLPAPER_5744.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217322_c1bd.jpg","alt":"Trelliage"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255570","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255570-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Trelliage"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Primrose/Danbury"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Primrose/Danbury"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#faf4e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2ae92"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded6be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#faf4e6\",\"pct\":55.2,\"name\":\"Ivory\"},{\"hex\":\"#c2ae92\",\"pct\":21.1,\"name\":\"Sand\"},{\"hex\":\"#ded6be\",\"pct\":14.4,\"name\":\"Linen\"},{\"hex\":\"#f4eede\",\"pct\":9.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0135-01","sku":"DWXH-255571","sc_id":572,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tulipomania Botanical | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tulipomania, color:Black, Black, Oatmeal, Stone, Aubergine, Florals, Botanical","body_html":"<div class=\"sanderson-product\">\n<p>Tulipomania in Botanical is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Oatmeal, Stone. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tulipomania</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tulipomania</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0135-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216667_82f2.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216666_1_SAW0135_01_SANDERSON_Tulipomania_WALLPAPER_d547.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216666_2_SAW0135_01_SANDERSON_Tulipomania_WALLPAPER_7505.jpg","alt":"Tulipomania"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216666_f57e.jpg","alt":"Tulipomania"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255571","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255571-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0135-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0135-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tulipomania"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#061f34"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"66.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#dcccb6"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#be9898"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#061f34\",\"pct\":66.2,\"name\":\"Black\"},{\"hex\":\"#dcccb6\",\"pct\":14.4,\"name\":\"Oatmeal\"},{\"hex\":\"#be9898\",\"pct\":14.3,\"name\":\"Stone\"},{\"hex\":\"#464257\",\"pct\":5.2,\"name\":\"Aubergine\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0167-01","sku":"DWXH-255572","sc_id":573,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Very Rose And Peony Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Very Rose And Peony, color:Gold, Gold, Brown, Taupe, Linen, Sand, Sage, Florals, Multi","body_html":"<div class=\"sanderson-product\">\n<p>Very Rose And Peony in Multi is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Gold, Brown, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Very Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Very Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0167-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_03e4.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_1_SAW0167_01_SANDERSON_Very_Rose_and_Peony_WALLPAPER_7a4b.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_2_SAW0167_01_SANDERSON_Very_Rose_and_Peony_WALLPAPER_a4a9.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_3_SAW0167_01_SANDERSON_Very_Rose_and_Peony_WALLPAPER_2f21.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_4674.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_4_SAW0167_01_SANDERSON_Very_Rose_and_Peony_WALLPAPER_65b2.jpg","alt":"Very Rose And Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255572","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255572-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0167-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0167-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Very Rose And Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Gold"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbbc65"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#855332"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#908757"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbbc65\",\"pct\":22.7,\"name\":\"Gold\"},{\"hex\":\"#855332\",\"pct\":22.7,\"name\":\"Brown\"},{\"hex\":\"#908757\",\"pct\":20.1,\"name\":\"Taupe\"},{\"hex\":\"#f2e2ad\",\"pct\":14,\"name\":\"Linen\"},{\"hex\":\"#eebd78\",\"pct\":11.6,\"name\":\"Sand\"},{\"hex\":\"#a0b06e\",\"pct\":9,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0214-02","sku":"DWXH-255573","sc_id":574,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Wilsford Celeste | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wilsford, color:Linen, Linen, Alabaster, Cream, Celeste","body_html":"<div class=\"sanderson-product\">\n<p>Wilsford in Celeste is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Linen, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Celeste</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wilsford</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0214-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217310_a20a.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217308_45df.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217309_1_SAW0214_02_SANDERSON_Wilsford_WALLPAPER_e487.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217309_6378.jpg","alt":"Wilsford"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217374_4c07.jpg","alt":"Wilsford"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255573","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255573-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0214-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wilsford"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Celeste"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Celeste"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Linen"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#ddd6cc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"48.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#ece7e0"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"28.4"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5ded5"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"23.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#ddd6cc\",\"pct\":48.5,\"name\":\"Linen\"},{\"hex\":\"#ece7e0\",\"pct\":28.4,\"name\":\"Alabaster\"},{\"hex\":\"#e5ded5\",\"pct\":23.3,\"name\":\"Cream\"}]"}]}
+{"mfr_sku":"SAW0155-02","sku":"DWXH-255574","sc_id":575,"settlement_verdict":"CLEAR","retail":203,"product":{"title":"Witney Lagoon | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney, color:Greige, Greige, Oatmeal, Linen, Mist, Lagoon","body_html":"<div class=\"sanderson-product\">\n<p>Witney in Lagoon is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Greige, Oatmeal, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lagoon</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0155-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216877_618c.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216876_2f30.jpg","alt":"Witney"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216878_b4e9.jpg","alt":"Witney"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255574","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255574-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0155-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lagoon"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lagoon"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Greige"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#bdbfad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c6c8b8"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"16.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7d9ca"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"15.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#bdbfad\",\"pct\":53.1,\"name\":\"Greige\"},{\"hex\":\"#c6c8b8\",\"pct\":16.6,\"name\":\"Oatmeal\"},{\"hex\":\"#d7d9ca\",\"pct\":15.3,\"name\":\"Linen\"},{\"hex\":\"#d2d4c4\",\"pct\":15,\"name\":\"Mist\"}]"}]}
+{"mfr_sku":"SAW0231-02","sku":"DWXH-255575","sc_id":576,"settlement_verdict":"CLEAR","retail":295,"product":{"title":"Silver Lime Lichen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silver Lime, color:Mist, Mist, Greige, Alabaster, Lichen","body_html":"<div class=\"sanderson-product\">\n<p>Silver Lime in Lichen is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Mist, Greige, Alabaster. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lichen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silver Lime</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0231-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217517_0280.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217514_db37.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217515_1_SAW0231_02_SANDERSON_Silver_Lime_WALLPAPER_0974.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217515_a147.jpg","alt":"Silver Lime"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/H/DHIP217516_52b9.jpg","alt":"Silver Lime"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255575","price":"295.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255575-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0231-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silver Lime"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lichen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lichen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Mist"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c6d5d4"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"61.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b4b595"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d7e0de"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"18.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c6d5d4\",\"pct\":61.2,\"name\":\"Mist\"},{\"hex\":\"#b4b595\",\"pct\":20.1,\"name\":\"Greige\"},{\"hex\":\"#d7e0de\",\"pct\":18.7,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0124-03","sku":"DWXH-255576","sc_id":577,"settlement_verdict":"CLEAR","retail":376,"product":{"title":"Silvi Clouds English Blue | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Silvi Clouds, color:Stone, Stone, Silver, Mist, Duck Egg, Landscapes, English Blue","body_html":"<div class=\"sanderson-product\">\n<p>Silvi Clouds in English Blue is a Sanderson Wallcovering in a landscapes design. Part of the Sanderson heritage collection, this pattern reads in a palette of Stone, Silver, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">English Blue</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Silvi Clouds</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0124-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216599_56d0.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216600_33b5.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_1_SAW0124_03_SANDERSON_Silvi_Clouds_WALLPAPER_8336.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_26ba.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216601_2_SAW0124_03_SANDERSON_Silvi_Clouds_WALLPAPER_07cd.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216602_b2b8.jpg","alt":"Silvi Clouds"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216603_e4a3.jpg","alt":"Silvi Clouds"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255576","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255576-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0124-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Silvi Clouds"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"English Blue"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"English Blue"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Stone"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Stone"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#99b4b3"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#aebebe"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ced1ce"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"28.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#99b4b3\",\"pct\":34.5,\"name\":\"Stone\"},{\"hex\":\"#aebebe\",\"pct\":29.1,\"name\":\"Silver\"},{\"hex\":\"#ced1ce\",\"pct\":28.3,\"name\":\"Mist\"},{\"hex\":\"#9fb6b5\",\"pct\":8.1,\"name\":\"Duck Egg\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"landscapes"}]}
+{"mfr_sku":"SAW0165-03","sku":"DWXH-255577","sc_id":578,"settlement_verdict":"REVIEW-VISION","retail":346,"product":{"title":"Sommerville Carmen/Daffodil | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Sommerville, color:Duck Egg, Duck Egg, Sage, Mist, Stone, Greige, Florals, Carmen/Daffodil","body_html":"<div class=\"sanderson-product\">\n<p>Sommerville in Carmen/Daffodil is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Duck Egg, Sage, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Carmen/Daffodil</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Sommerville</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0165-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217049_ac71.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217050_98e1.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217051_1_SAW0165_03_SANDERSON_Sommerville_WALLPAPER_0734.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217051_2_SAW0165_03_SANDERSON_Sommerville_WALLPAPER_bd05.jpg","alt":"Sommerville"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217051_7186.jpg","alt":"Sommerville"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255577","price":"346.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255577-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0165-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Sommerville"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Carmen/Daffodil"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Carmen/Daffodil"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Duck Egg"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#a6c3ad"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"47.5"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sage"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#9b9e7a"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#bdd0c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.3"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#a6c3ad\",\"pct\":47.5,\"name\":\"Duck Egg\"},{\"hex\":\"#9b9e7a\",\"pct\":17.3,\"name\":\"Sage\"},{\"hex\":\"#bdd0c2\",\"pct\":13.3,\"name\":\"Mist\"},{\"hex\":\"#a1be9f\",\"pct\":11.4,\"name\":\"Stone\"},{\"hex\":\"#a7bfa6\",\"pct\":10.4,\"name\":\"Greige\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0134-02","sku":"DWXH-255578","sc_id":579,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Terrariums Botanical Green/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Terrariums, color:Alabaster, Alabaster, Red, Olive, Beige, Raspberry, Botanical, Florals, Leaves-And-Trees, Botanical Green/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Terrariums in Botanical Green/Multi is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Red, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Botanical Green/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0134-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216657_ee48.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_198c.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_1_SAW0134_02_SANDERSON_Terrariums_WALLPAPER_25cb.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_2_SAW0134_02_SANDERSON_Terrariums_WALLPAPER_cf64.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_58e9.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_842e.jpg","alt":"Terrariums"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255578","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255578-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Terrariums"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Botanical Green/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Botanical Green/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e7e1da"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5004f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7d725b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e7e1da\",\"pct\":34.1,\"name\":\"Alabaster\"},{\"hex\":\"#b5004f\",\"pct\":27.7,\"name\":\"Red\"},{\"hex\":\"#7d725b\",\"pct\":19.7,\"name\":\"Olive\"},{\"hex\":\"#c3b59f\",\"pct\":11.8,\"name\":\"Beige\"},{\"hex\":\"#b30550\",\"pct\":6.7,\"name\":\"Raspberry\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0134-01","sku":"DWXH-255579","sc_id":580,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Terrariums Chalk/Green | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Terrariums, color:Alabaster, Alabaster, Red, Olive, Beige, Raspberry, Botanical, Florals, Leaves-And-Trees, Chalk/Green, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Terrariums in Chalk/Green is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Red, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Chalk/Green</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0134-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216657_ee48.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_198c.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_1_SAW0134_01_SANDERSON_Terrariums_WALLPAPER_5155.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_2_SAW0134_01_SANDERSON_Terrariums_WALLPAPER_c5b4.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_58e9.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_842e.jpg","alt":"Terrariums"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255579","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255579-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Terrariums"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Chalk/Green"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Chalk/Green"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e7e1da"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5004f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7d725b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e7e1da\",\"pct\":34.1,\"name\":\"Alabaster\"},{\"hex\":\"#b5004f\",\"pct\":27.7,\"name\":\"Red\"},{\"hex\":\"#7d725b\",\"pct\":19.7,\"name\":\"Olive\"},{\"hex\":\"#c3b59f\",\"pct\":11.8,\"name\":\"Beige\"},{\"hex\":\"#b30550\",\"pct\":6.7,\"name\":\"Raspberry\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0134-04","sku":"DWXH-255580","sc_id":581,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Terrariums Ink/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Terrariums, color:Alabaster, Alabaster, Red, Olive, Beige, Raspberry, Botanical, Florals, Leaves-And-Trees, Ink/Multi, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Terrariums in Ink/Multi is a Sanderson Wallcovering in a botanical/florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, Red, Olive. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Ink/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Terrariums</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0134-04</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216657_ee48.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216655_198c.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216656_58e9.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_1_SAW0134_04_SANDERSON_Terrariums_WALLPAPER_a07d.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_2_SAW0134_04_SANDERSON_Terrariums_WALLPAPER_1030.jpg","alt":"Terrariums"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216658_842e.jpg","alt":"Terrariums"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255580","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255580-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-04"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0134-04"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Terrariums"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Ink/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Ink/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#e7e1da"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"34.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Red"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#b5004f"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#7d725b"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#e7e1da\",\"pct\":34.1,\"name\":\"Alabaster\"},{\"hex\":\"#b5004f\",\"pct\":27.7,\"name\":\"Red\"},{\"hex\":\"#7d725b\",\"pct\":19.7,\"name\":\"Olive\"},{\"hex\":\"#c3b59f\",\"pct\":11.8,\"name\":\"Beige\"},{\"hex\":\"#b30550\",\"pct\":6.7,\"name\":\"Raspberry\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0213-02","sku":"DWXH-255581","sc_id":582,"settlement_verdict":"CLEAR","retail":320,"product":{"title":"Trelliage Aphrodite/Blush | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Trelliage, color:Ivory, Ivory, Sand, Linen, Alabaster, Aphrodite/Blush","body_html":"<div class=\"sanderson-product\">\n<p>Trelliage in Aphrodite/Blush is a Sanderson Wallcovering. Part of the Sanderson heritage collection, this pattern reads in a palette of Ivory, Sand, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Aphrodite/Blush</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Trelliage</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0213-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217321_b3a5.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217319_8402.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217320_1_SAW0213_02_SANDERSON_Trelliage_WALLPAPER_479d.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217320_e003.jpg","alt":"Trelliage"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217322_c1bd.jpg","alt":"Trelliage"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255581","price":"320.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255581-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0213-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Trelliage"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Aphrodite/Blush"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Aphrodite/Blush"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Ivory"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Ivory"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#faf4e6"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.2"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c2ae92"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"21.1"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#ded6be"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"14.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#faf4e6\",\"pct\":55.2,\"name\":\"Ivory\"},{\"hex\":\"#c2ae92\",\"pct\":21.1,\"name\":\"Sand\"},{\"hex\":\"#ded6be\",\"pct\":14.4,\"name\":\"Linen\"},{\"hex\":\"#f4eede\",\"pct\":9.3,\"name\":\"Alabaster\"}]"}]}
+{"mfr_sku":"SAW0036-03","sku":"DWXH-255582","sc_id":583,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Tuileries Sage/Multi | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Tuileries, color:White, White, Alabaster, Cream, Birds, Sage/Multi","body_html":"<div class=\"sanderson-product\">\n<p>Tuileries in Sage/Multi is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of White, Alabaster, Cream. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Sage/Multi</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Tuileries</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0036-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214080_33bf.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214081_7b83.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_1_SAW0036_03_SANDERSON_Tuileries_WALLPAPER_6b24.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_2_SAW0036_03_SANDERSON_Tuileries_WALLPAPER_9d84.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_3_SAW0036_03_SANDERSON_Tuileries_WALLPAPER_a208.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_4_SAW0036_03_SANDERSON_Tuileries_WALLPAPER_6234.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_4edb.jpg","alt":"Tuileries"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/F/DFAB214082_5_SAW0036_03_SANDERSON_Tuileries_WALLPAPER_3132.jpg","alt":"Tuileries"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255582","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255582-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0036-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Tuileries"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Sage/Multi"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Sage/Multi"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"White"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#f2f3ee"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"55.8"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#efeee9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Cream"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#e5dfd7"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.5"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#f2f3ee\",\"pct\":55.8,\"name\":\"White\"},{\"hex\":\"#efeee9\",\"pct\":29.6,\"name\":\"Alabaster\"},{\"hex\":\"#e5dfd7\",\"pct\":13.5,\"name\":\"Cream\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0167-02","sku":"DWXH-255583","sc_id":584,"settlement_verdict":"REVIEW-VISION","retail":376,"product":{"title":"Very Rose And Peony Kingfisher/Rowan Berry | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Very Rose And Peony, color:Gold, Gold, Brown, Taupe, Linen, Sand, Sage, Florals, Kingfisher/Rowan Berry","body_html":"<div class=\"sanderson-product\">\n<p>Very Rose And Peony in Kingfisher/Rowan Berry is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Gold, Brown, Taupe. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Very Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Kingfisher/Rowan Berry</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Very Rose And Peony</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0167-02</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_03e4.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217026_4674.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_1_SAW0167_02_SANDERSON_Very_Rose_and_Peony_WALLPAPER_db6f.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_2_SAW0167_02_SANDERSON_Very_Rose_and_Peony_WALLPAPER_373b.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_3_SAW0167_02_SANDERSON_Very_Rose_and_Peony_WALLPAPER_405d.jpg","alt":"Very Rose And Peony"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/O/DOSW217027_4_SAW0167_02_SANDERSON_Very_Rose_and_Peony_WALLPAPER_81fe.jpg","alt":"Very Rose And Peony"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255583","price":"376.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255583-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0167-02"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0167-02"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Very Rose And Peony"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Kingfisher/Rowan Berry"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Kingfisher/Rowan Berry"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Gold"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Gold"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#dbbc65"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#855332"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"22.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Taupe"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#908757"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"20.1"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#dbbc65\",\"pct\":22.7,\"name\":\"Gold\"},{\"hex\":\"#855332\",\"pct\":22.7,\"name\":\"Brown\"},{\"hex\":\"#908757\",\"pct\":20.1,\"name\":\"Taupe\"},{\"hex\":\"#f2e2ad\",\"pct\":14,\"name\":\"Linen\"},{\"hex\":\"#eebd78\",\"pct\":11.6,\"name\":\"Sand\"},{\"hex\":\"#a0b06e\",\"pct\":9,\"name\":\"Sage\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0125-03","sku":"DWXH-255584","sc_id":585,"settlement_verdict":"REVIEW-VISION","retail":270,"product":{"title":"Warwick Blue Grey | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Warwick, color:Oatmeal, Oatmeal, Greige, Linen, Botanical, Leaves-And-Trees, Blue Grey, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Warwick in Blue Grey is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Oatmeal, Greige, Linen. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Blue Grey</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Warwick</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0125-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216616_e4be.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216615_a543.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216617_1_SAW0125_03_SANDERSON_Warwick_WALLPAPER_bb63.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216617_2_SAW0125_03_SANDERSON_Warwick_WALLPAPER_3123.jpg","alt":"Warwick"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/Y/DYSI216617_e6be.jpg","alt":"Warwick"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255584","price":"270.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255584-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0125-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Warwick"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Blue Grey"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Blue Grey"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Oatmeal"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d2c8bc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"70.1"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Greige"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#c1af9b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.3"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8d3cb"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"12.6"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d2c8bc\",\"pct\":70.1,\"name\":\"Oatmeal\"},{\"hex\":\"#c1af9b\",\"pct\":17.3,\"name\":\"Greige\"},{\"hex\":\"#d8d3cb\",\"pct\":12.6,\"name\":\"Linen\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0244-01","sku":"DWXH-255585","sc_id":586,"settlement_verdict":"REVIEW-VISION","retail":972,"product":{"title":"Wisteria Falls Lilac | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Wisteria Falls, color:Alabaster, Alabaster, White, Mist, Stone, Birds, Lilac","body_html":"<div class=\"sanderson-product\">\n<p>Wisteria Falls in Lilac is a Sanderson Wallcovering in a birds design. Part of the Sanderson heritage collection, this pattern reads in a palette of Alabaster, White, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Wisteria Falls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Lilac</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Wisteria Falls</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0244-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217468_f410.jpg","alt":"Wisteria Falls"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/B/DBOW217467_1551.jpg","alt":"Wisteria Falls"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255585","price":"972.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255585-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0244-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0244-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Wisteria Falls"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Lilac"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Lilac"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Alabaster"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Alabaster"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#d9dfdc"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"27.7"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"White"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#f9faf5"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"26.9"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#c8cfcd"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"26.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#d9dfdc\",\"pct\":27.7,\"name\":\"Alabaster\"},{\"hex\":\"#f9faf5\",\"pct\":26.9,\"name\":\"White\"},{\"hex\":\"#c8cfcd\",\"pct\":26.4,\"name\":\"Mist\"},{\"hex\":\"#9ea6a5\",\"pct\":18.9,\"name\":\"Stone\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"birds"}]}
+{"mfr_sku":"SAW0154-03","sku":"DWXH-255586","sc_id":587,"settlement_verdict":"REVIEW-VISION","retail":203,"product":{"title":"Witney Daisy Linen | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Witney Daisy, color:Silver, Silver, Linen, Mist, Oatmeal, Florals","body_html":"<div class=\"sanderson-product\">\n<p>Witney Daisy in Linen is a Sanderson Wallcovering in a florals design. Part of the Sanderson heritage collection, this pattern reads in a palette of Silver, Linen, Mist. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Linen</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Witney Daisy</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0154-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216873_90f4.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216874_478e.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216875_1_SAW0154_03_SANDERSON_Witney_Daisy_WALLPAPER_53de.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216875_2_SAW0154_03_SANDERSON_Witney_Daisy_WALLPAPER_5e41.jpg","alt":"Witney Daisy"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/L/DLMW216875_dd1b.jpg","alt":"Witney Daisy"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255586","price":"203.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255586-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0154-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Witney Daisy"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Silver"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Silver"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#c3c6b7"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"31.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Linen"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#d7dac9"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"29.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Mist"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d0d2c2"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"19.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#c3c6b7\",\"pct\":31.6,\"name\":\"Silver\"},{\"hex\":\"#d7dac9\",\"pct\":29.7,\"name\":\"Linen\"},{\"hex\":\"#d0d2c2\",\"pct\":19.4,\"name\":\"Mist\"},{\"hex\":\"#c7cab9\",\"pct\":19.3,\"name\":\"Oatmeal\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"florals"}]}
+{"mfr_sku":"SAW0136-03","sku":"DWXH-255587","sc_id":588,"settlement_verdict":"REVIEW-VISION","retail":253,"product":{"title":"Yucca Grey/Gilver | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Yucca, color:Black, Black, Olive, Brown, Chocolate, Botanical, Leaves-And-Trees, Grey/Gilver, Leaves And Trees","body_html":"<div class=\"sanderson-product\">\n<p>Yucca in Grey/Gilver is a Sanderson Wallcovering in a botanical/leaves and trees design. Part of the Sanderson heritage collection, this pattern reads in a palette of Black, Olive, Brown. Supplied by the roll; a memo sample is available. An English design-house classic from Sanderson Design Group.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Grey/Gilver</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Yucca</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0136-03</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216651_b5d8.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216648_78fd.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216649_0b00.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216650_1_SAW0136_03_SANDERSON_Yucca_WALLPAPER_1149.jpg","alt":"Yucca"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGLW216650_c3bc.jpg","alt":"Yucca"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255587","price":"253.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255587-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-03"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0136-03"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Yucca"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Grey/Gilver"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Grey/Gilver"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Black"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Black"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#262425"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"53.9"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Olive"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#84663b"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"27.6"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Brown"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#795931"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"13.7"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#262425\",\"pct\":53.9,\"name\":\"Black\"},{\"hex\":\"#84663b\",\"pct\":27.6,\"name\":\"Olive\"},{\"hex\":\"#795931\",\"pct\":13.7,\"name\":\"Brown\"},{\"hex\":\"#403429\",\"pct\":4.8,\"name\":\"Chocolate\"}]"},{"namespace":"specs","key":"style","type":"single_line_text_field","value":"botanical"}]}
+{"mfr_sku":"SAW0208-01","sku":"DWXH-255588","sc_id":795,"settlement_verdict":null,"retail":null,"product":{"title":"Fringed Tulip Toile Smalt | Sanderson","vendor":"Sanderson","product_type":"Wallcovering","status":"draft","tags":"Wallcovering, Wallcoverings, Sanderson, Sanderson Wallcovering, Fringed Tulip Toile, color:Rose, Rose, Blush, Sand, Linen, Beige, Cream","body_html":"<div class=\"sanderson-product\">\n<p>Fringed Tulip Toile in Smalt — a Sanderson wallcovering.</p>\n<h3>Specifications</h3>\n<table style=\"border-collapse:collapse;\">\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Pattern</th><td style=\"padding:6px 0;\">Fringed Tulip Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Color</th><td style=\"padding:6px 0;\">Smalt</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Collection</th><td style=\"padding:6px 0;\">Fringed Tulip Toile</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Brand</th><td style=\"padding:6px 0;\">Sanderson</td></tr>\n<tr><th style=\"text-align:left;padding:6px 14px 6px 0;font-weight:600;\">Manufacturer SKU</th><td style=\"padding:6px 0;\">SAW0208-01</td></tr>\n</table>\n</div>","images":[{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217324_83eb.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217323_1_SAW0208_01_SANDERSON_Fringed_Tulip_Toile_WALLPAPER_3725.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217323_5496.jpg","alt":"Fringed Tulip Toile"},{"src":"https://www.sanderson.design/static/media/catalog/product/D/G/DGDW217325_4756.jpg","alt":"Fringed Tulip Toile"}],"options":[{"name":"Format"}],"variants":[{"sku":"DWXH-255588","price":"0.00","option1":"Roll","taxable":true,"requires_shipping":true},{"sku":"DWXH-255588-Sample","price":"4.25","option1":"Sample","taxable":true,"requires_shipping":true,"inventory_management":null}]},"metafields":[{"namespace":"custom","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0208-01"},{"namespace":"dwc","key":"manufacturer_sku","type":"single_line_text_field","value":"SAW0208-01"},{"namespace":"global","key":"Brand","type":"single_line_text_field","value":"Sanderson"},{"namespace":"custom","key":"pattern_name","type":"single_line_text_field","value":"Fringed Tulip Toile"},{"namespace":"custom","key":"color","type":"single_line_text_field","value":"Smalt"},{"namespace":"custom","key":"real_color_name","type":"single_line_text_field","value":"Smalt"},{"namespace":"custom","key":"background_color","type":"single_line_text_field","value":"Rose"},{"namespace":"mc-facebook","key":"google_product_category","type":"single_line_text_field","value":"2334"},{"namespace":"custom","key":"color_1_name","type":"single_line_text_field","value":"Rose"},{"namespace":"custom","key":"color_1_hex","type":"single_line_text_field","value":"#cd8c76"},{"namespace":"custom","key":"color_1_percentage","type":"number_decimal","value":"19.6"},{"namespace":"custom","key":"color_2_name","type":"single_line_text_field","value":"Blush"},{"namespace":"custom","key":"color_2_hex","type":"single_line_text_field","value":"#e5c6b2"},{"namespace":"custom","key":"color_2_percentage","type":"number_decimal","value":"17.7"},{"namespace":"custom","key":"color_3_name","type":"single_line_text_field","value":"Sand"},{"namespace":"custom","key":"color_3_hex","type":"single_line_text_field","value":"#d8a590"},{"namespace":"custom","key":"color_3_percentage","type":"number_decimal","value":"17.4"},{"namespace":"custom","key":"color_details","type":"json","value":"[{\"hex\":\"#cd8c76\",\"pct\":19.6,\"name\":\"Rose\"},{\"hex\":\"#e5c6b2\",\"pct\":17.7,\"name\":\"Blush\"},{\"hex\":\"#d8a590\",\"pct\":17.4,\"name\":\"Sand\"},{\"hex\":\"#eddac9\",\"pct\":15.9,\"name\":\"Linen\"},{\"hex\":\"#ddb29d\",\"pct\":15.5,\"name\":\"Beige\"},{\"hex\":\"#f3e5d4\",\"pct\":13.9,\"name\":\"Cream\"}]"}]}
diff --git a/scripts/scrape-groundworks-algolia.mjs b/scripts/scrape-groundworks-algolia.mjs
new file mode 100644
index 0000000..a0a50bb
--- /dev/null
+++ b/scripts/scrape-groundworks-algolia.mjs
@@ -0,0 +1,53 @@
+import fs from 'fs';
+const html=await(await fetch('https://www.kravet.com/catalogsearch/result/?q=groundworks',{headers:{'User-Agent':'Mozilla/5.0'}})).text();
+const m=html.match(/algoliaConfig\s*=\s*JSON\.parse\('(.+?)'\)/s);
+function jsUnescape(s){return s.replace(/\\(u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|.)/g,(_,g)=>{if(g[0]==='u'||g[0]==='x')return String.fromCharCode(parseInt(g.slice(1),16));const map={n:'\n',t:'\t',r:'\r',b:'\b',f:'\f',"'":"'",'"':'"','\\':'\\','/':'/','0':'\0'};return g in map?map[g]:g;});}
+const cfg=JSON.parse(jsUnescape(m[1]));
+const appId=cfg.applicationId||cfg.application_id, apiKey=cfg.apiKey||cfg.api_key||cfg.searchApiKey;
+const endpoint=`https://${appId}-dsn.algolia.net/1/indexes/kravet_production_kravet_us_products/query`;
+const hdr={'X-Algolia-Application-Id':appId,'X-Algolia-API-Key':apiKey,'Content-Type':'application/json'};
+const parseMoney=s=>{if(s==null)return null;const n=parseFloat(String(s).replace(/[$,]/g,''));return isFinite(n)?n:null;};
+
+let all=[], page=0, nb=Infinity;
+while(page*1000 < nb){
+ const r=await fetch(endpoint,{method:'POST',headers:hdr,body:JSON.stringify({query:'GWP',restrictSearchableAttributes:['sku'],hitsPerPage:1000,page})});
+ const j=await r.json(); nb=j.nbHits; all.push(...(j.hits||[])); page++;
+ if(!j.hits||j.hits.length===0) break;
+}
+console.error('raw GWP hits:',all.length,'nbHits:',nb);
+// keep only wallcoverings (guard)
+const rows=[]; const skipped=[];
+for(const h of all){
+ const isWC = h.type_label==='Wallcovering' || (h.categories?.level0||[]).includes('Wallcovering') || (h.categoryPageId||[]).includes('Wallcovering');
+ if(!String(h.sku||'').startsWith('GWP-') || !isWC){ skipped.push({sku:h.sku,type:h.type_label}); continue; }
+ const whls=parseMoney(h.wholesale_price);
+ const map = whls!=null ? Math.round(whls*1.5*100)/100 : null;
+ let colorName=null,colorHex=null,colorCode=null;
+ if(Array.isArray(h.color_group)&&h.color_group[0]){const p=h.color_group[0].split(',');colorCode=p[0];colorName=p[1];colorHex=p[2];}
+ rows.push({
+ mfr_sku:h.sku, name:h.name, url:h.url, brand:'GROUNDWORKS', designer:h.designer||null,
+ collection:h.product_collection||h.product_designercollection||null,
+ product_type:h.product_type||h.product_design_type||null, type_label:h.type_label||null,
+ uom:h.product_primaryuom||null, status:h.status_code||null,
+ wholesale:whls, map_price:map, kravet_retail:h.price?.USD?.default??null,
+ image_url:h.external_image_url_1||h.image_url||null, thumb:h.thumbnail_url||null,
+ color_name:colorName, color_hex:colorHex, color_code:colorCode,
+ composition:h.product_composition||null, leadtime:h.product_leadtime||null,
+ width:h.product_width??null, repeat_h:h.repeat_horizontal??null, repeat_v:h.repeat_vertical??null,
+ repeat_uom:h.repeat_uom||null, finish:h.finish||null, made_in:h.mfg_message||null,
+ sample_available:h.sample_available??null, objectID:h.objectID||null
+ });
+}
+fs.writeFileSync('/tmp/groundworks-wc.json',JSON.stringify(rows,null,1));
+// summary
+const byStatus={},byUom={},byType={},noWhls=[],noImg=[];
+for(const r of rows){byStatus[r.status]=(byStatus[r.status]||0)+1;byUom[r.uom]=(byUom[r.uom]||0)+1;byType[r.product_type||'—']=(byType[r.product_type||'—']||0)+1;if(r.wholesale==null)noWhls.push(r.mfr_sku);if(!r.image_url)noImg.push(r.mfr_sku);}
+console.error('STAGED wallcovering rows:',rows.length);
+console.error('skipped(non-WC):',skipped.length);
+console.error('by status:',JSON.stringify(byStatus));
+console.error('by uom:',JSON.stringify(byUom));
+console.error('by type:',JSON.stringify(byType));
+console.error('missing wholesale/MAP:',noWhls.length, noWhls.slice(0,10).join(','));
+console.error('missing image:',noImg.length);
+// dedup key sample: base sku (strip trailing .color.0)? show sample
+console.error('sample:',JSON.stringify(rows[0]));
diff --git a/scripts/scrape-kravet-algolia.mjs b/scripts/scrape-kravet-algolia.mjs
new file mode 100644
index 0000000..953376e
--- /dev/null
+++ b/scripts/scrape-kravet-algolia.mjs
@@ -0,0 +1,56 @@
+import fs from 'fs';
+
+const rows = fs.readFileSync('/tmp/lee-jofa-145.tsv','utf8').split('\n').filter(Boolean)
+ .map(l => { const [dw, mfr] = l.split('\t'); return { dw, mfr }; });
+
+// 1. harvest fresh Algolia creds from the public search page
+const html = await (await fetch('https://www.kravet.com/catalogsearch/result/?q=lee+jofa', {
+ headers: { 'User-Agent': 'Mozilla/5.0' }
+})).text();
+const m = html.match(/algoliaConfig\s*=\s*JSON\.parse\('(.+?)'\)/s);
+if (!m) { console.error('NO algoliaConfig found'); process.exit(2); }
+// Decode JS string-literal escapes (\uXXXX, \n, \\, etc.) in one pass — no eval.
+function jsUnescape(s) {
+ return s.replace(/\\(u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|.)/g, (_, g) => {
+ if (g[0] === 'u' || g[0] === 'x') return String.fromCharCode(parseInt(g.slice(1), 16));
+ const map = { n:'\n', t:'\t', r:'\r', b:'\b', f:'\f', "'":"'", '"':'"', '\\':'\\', '/':'/', '0':'\0' };
+ return g in map ? map[g] : g;
+ });
+}
+let cfg;
+try { cfg = JSON.parse(jsUnescape(m[1])); }
+catch (e) { console.error('parse fail', e.message); process.exit(2); }
+const appId = cfg.applicationId || cfg.application_id;
+const apiKey = cfg.apiKey || cfg.api_key || cfg.searchApiKey;
+const index = 'kravet_production_kravet_us_products'; // confirmed products index
+console.error(`appId=${appId} index=${index} keyLen=${(apiKey||'').length}`);
+if (!appId || !apiKey) { console.error('missing creds; cfg keys=', Object.keys(cfg)); process.exit(2); }
+
+const endpoint = `https://${appId}-dsn.algolia.net/1/indexes/${index}/query`;
+const hdr = { 'X-Algolia-Application-Id': appId, 'X-Algolia-API-Key': apiKey, 'Content-Type': 'application/json' };
+
+console.log(['dw_sku','mfr_sku','price_map','wholesale','unit_msg','status','name','url'].join('\t'));
+let ok=0, miss=0;
+for (const r of rows) {
+ let hit=null;
+ try {
+ const res = await fetch(endpoint, { method:'POST', headers:hdr,
+ body: JSON.stringify({ query: r.mfr, hitsPerPage:1, restrictSearchableAttributes:['sku'] }) });
+ const j = await res.json();
+ hit = j.hits && j.hits[0];
+ } catch(e) { /* network */ }
+ if (!hit) { miss++; console.log([r.dw, r.mfr, '', '', '', 'NO_HIT', '', ''].join('\t')); continue; }
+ ok++;
+ const price = hit.price && hit.price.USD && hit.price.USD.default;
+ console.log([
+ r.dw, r.mfr,
+ price ?? '',
+ hit.wholesale_price ?? '',
+ (hit.product_wallcoveringsellingmsg || hit.product_primaryuom || '').replace(/\t/g,' '),
+ hit.status_code || '',
+ (hit.name||'').replace(/\t/g,' '),
+ hit.url || ''
+ ].join('\t'));
+ await new Promise(r=>setTimeout(r,60));
+}
+console.error(`done ok=${ok} miss=${miss} total=${rows.length}`);
diff --git a/scripts/scraper-contract-test/scraper-contract-test.mjs b/scripts/scraper-contract-test/scraper-contract-test.mjs
new file mode 100644
index 0000000..36c34a5
--- /dev/null
+++ b/scripts/scraper-contract-test/scraper-contract-test.mjs
@@ -0,0 +1,85 @@
+// scraper-contract-test — DB-side field-depth contract test for the top-revenue
+// scrapers. Complements dw-scraper-canary (which checks output-side count/leak/image
+// from the PUBLIC feed and explicitly defers field-depth + price to "a dw_unified DB
+// canary (future)"). This is that DB canary.
+//
+// Per top vendor, asserts the contract against the local dw_unified mirror:
+// FAIL active_count == 0 (silent stop — scraper produced nothing)
+// FAIL image coverage < 90% (scraper dropping images)
+// WARN sku coverage < 95% (missing mfr_sku)
+// WARN title coverage < 99% (missing/blank titles)
+// FAIL leak: any title contains an upstream-only maker name that must never appear
+// INFO price coverage (% with a real price >$5 in price OR retail_price) — INFO only
+// because price columns are inconsistently mirrored (variant-only for some
+// vendors), so a price FAIL would cry-wolf. Visibility, not a gate.
+//
+// READ-ONLY local psql. Writes only the report. Cost: $0. No live vendor fetches/creds.
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs';
+
+const PSQL = [ '/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql' ]
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+const OUT = `${process.env.HOME}/.claude/yolo-queue/scraper-contract-test-2026-06-16.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/scraper-contract-test-2026-06-16.md`;
+
+// Top-revenue vendors (by ACTIVE count) — the highest-impact ingest paths.
+const VENDORS = ['Phillipe Romano','Rebel Walls','Thibaut','Hollywood Wallcoverings','Kravet',
+ 'Malibu Wallpaper','China Seas','Schumacher','Los Angeles Fabrics','Brunschwig & Fils'];
+
+// Upstream-only maker names that must NEVER appear in a DW title (private-label leak).
+// NB: 'chesapeake' deliberately EXCLUDED — it's also a legit Schumacher pattern name
+// ("Chesapeake - Topaz"), so it false-positives. Keep only uniquely-upstream tokens.
+const LEAK = ['wallquest','command54','nextwall','seabrook'];
+
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '|', '-c', sql], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('|')) : [];
+}
+const esc = (s) => s.replace(/'/g, "''");
+
+const results = [];
+for (const v of VENDORS) {
+ const row = q(`select
+ count(*) total,
+ count(*) filter (where image_url is not null and image_url<>'') img,
+ count(*) filter (where mfr_sku is not null and mfr_sku<>'') sku,
+ count(*) filter (where title is not null and title<>'') ttl,
+ count(*) filter (where price::numeric>5 or retail_price::numeric>5) priced,
+ count(*) filter (where lower(title) ~ '${LEAK.join('|')}') leak
+ from shopify_products where status='ACTIVE' and vendor='${esc(v)}'`)[0];
+ const [total, img, sku, ttl, priced, leak] = row.map(Number);
+ const pct = (n) => total ? +(100 * n / total).toFixed(1) : 0;
+ const checks = [];
+ if (total === 0) checks.push({ sev: 'FAIL', m: 'silent stop: 0 active products' });
+ if (total > 0 && pct(img) < 90) checks.push({ sev: 'FAIL', m: `image coverage ${pct(img)}% (<90%)` });
+ if (total > 0 && pct(sku) < 95) checks.push({ sev: 'WARN', m: `sku coverage ${pct(sku)}% (<95%)` });
+ if (total > 0 && pct(ttl) < 99) checks.push({ sev: 'WARN', m: `title coverage ${pct(ttl)}% (<99%)` });
+ if (leak > 0) checks.push({ sev: 'FAIL', m: `${leak} title(s) leak an upstream maker name` });
+ const sev = checks.some(c => c.sev === 'FAIL') ? 'FAIL' : checks.some(c => c.sev === 'WARN') ? 'WARN' : 'PASS';
+ results.push({ vendor: v, total, img_pct: pct(img), sku_pct: pct(sku), title_pct: pct(ttl),
+ price_coverage_pct: pct(priced), leak, verdict: sev, checks });
+}
+
+const summary = results.reduce((m, r) => (m[r.verdict] = (m[r.verdict]||0)+1, m), {});
+const out = { generated_at: new Date().toISOString(), vendors: VENDORS.length, summary, results };
+fs.writeFileSync(OUT, JSON.stringify(out, null, 2));
+
+let md = `# Scraper contract test (DB-side, top-revenue vendors) — 2026-06-16\n\n`;
+md += `Complements dw-scraper-canary (output-side count/leak/image). This adds DB-side field-depth + price-coverage. **READ-ONLY, $0.**\n\n`;
+md += `Summary: ${Object.entries(summary).map(([k,v])=>`${k}=${v}`).join(' · ')}\n\n`;
+md += `| Vendor | Active | img% | sku% | title% | priced% | leak | Verdict |\n|---|---:|---:|---:|---:|---:|---:|---|\n`;
+for (const r of results) {
+ const tag = { FAIL:'🔴', WARN:'🟠', PASS:'🟢' }[r.verdict];
+ md += `| ${r.vendor} | ${r.total} | ${r.img_pct} | ${r.sku_pct} | ${r.title_pct} | ${r.price_coverage_pct} | ${r.leak} | ${tag} ${r.verdict} |\n`;
+}
+md += `\n## Findings\n`;
+for (const r of results.filter(r => r.checks.length)) {
+ md += `- **${r.vendor}**: ${r.checks.map(c => `${c.sev==='FAIL'?'🔴':'🟠'} ${c.m}`).join('; ')}\n`;
+}
+md += `\n_Note: price coverage is INFO-only — dw_unified price columns are inconsistently mirrored (variant-only for some vendors like Rebel Walls), so a price FAIL would cry-wolf. The output-side dw-scraper-canary owns silent-stop-vs-baseline + public-feed leak/image; this owns DB field-depth._\n`;
+fs.writeFileSync(MD, md);
+
+console.log(`[scraper-contract-test] ${Object.entries(summary).map(([k,v])=>`${k}=${v}`).join(' ')}`);
+for (const r of results) console.log(` ${{FAIL:'🔴',WARN:'🟠',PASS:'🟢'}[r.verdict]} ${r.vendor.padEnd(24)} n=${String(r.total).padStart(5)} img=${r.img_pct}% sku=${r.sku_pct}% priced=${r.price_coverage_pct}%${r.checks.length?' ← '+r.checks.map(c=>c.m).join('; '):''}`);
+console.log(`Report: ${MD}`);
diff --git a/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs b/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs
new file mode 100644
index 0000000..4121687
--- /dev/null
+++ b/scripts/sitemap-emergence/gen-philipperomano-sitemap.mjs
@@ -0,0 +1,20 @@
+// gen-philipperomano-sitemap (c35) — REPORT-ONLY proof: build a valid sitemap.xml
+// for philipperomano.com from its LOCAL data/products.json (8,227 products served
+// at /p/:handle, currently orphaned — site has NO sitemap, /sitemap.xml=404).
+// Writes a PROOF file to ~/.claude/yolo-queue/ — does NOT deploy or touch the live
+// server (wiring a /sitemap.xml route + deploy is Steve-gated). $0, local.
+import fs from 'node:fs';
+const SRC='/Users/macstudio3/Projects/philipperomano/data/products.json';
+const OUT=`${process.env.HOME}/.claude/yolo-queue/philipperomano-sitemap-PROOF.xml`;
+const BASE='https://philipperomano.com';
+const data=JSON.parse(fs.readFileSync(SRC,'utf8'));
+const prods=Array.isArray(data)?data:(data.products||[]);
+const handles=[...new Set(prods.map(p=>p.handle).filter(Boolean))];
+const today=fs.statSync(SRC).mtime.toISOString().slice(0,10); // use data mtime (no Date.now in scripts)
+const urls=[`${BASE}/`,`${BASE}/naturals`,...handles.map(h=>`${BASE}/p/${encodeURIComponent(h)}`)];
+let xml='<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
+for(const u of urls) xml+=` <url><loc>${u}</loc><lastmod>${today}</lastmod></url>\n`;
+xml+='</urlset>\n';
+fs.writeFileSync(OUT,xml);
+console.log(`[sitemap-proof] products=${prods.length} unique_handles=${handles.length} total_urls=${urls.length}`);
+console.log(` wrote ${OUT} (${(xml.length/1024).toFixed(0)} KB)`);
diff --git a/scripts/sitemap-health/sitemap-health.mjs b/scripts/sitemap-health/sitemap-health.mjs
new file mode 100644
index 0000000..570c98d
--- /dev/null
+++ b/scripts/sitemap-health/sitemap-health.mjs
@@ -0,0 +1,67 @@
+// sitemap-health — READ-ONLY, $0. Extends c58: are the ~66k archived (soft-404)
+// product URLs ACTIVELY ADVERTISED in the product sitemaps? Shopify natively lists
+// only active+published products, so the expected/healthy answer is NO. We verify,
+// not assume. Also checks the Sitemap: directive in robots.txt + sitemap freshness.
+import { execSync } from 'child_process';
+const PSQL='/opt/homebrew/opt/postgresql@14/bin/psql';
+const DB='postgresql:///dw_unified?host=/tmp';
+const WWW='https://www.designerwallcoverings.com';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u);if(!r.ok){await sleep(800*(a+1));continue;}return await r.text();}catch(e){await sleep(800*(a+1));}}return '';}
+
+console.log('=== sitemap-health (READ-ONLY, $0) ===\n');
+
+// 1. robots Sitemap: directive present?
+const robots=await get(`${WWW}/robots.txt`);
+const smDirective=(robots.match(/^sitemap:\s*(.+)$/im)||[])[1];
+console.log(`[robots] Allow:/ present: ${/^allow:\s*\/\s*$/im.test(robots)} | Disallow products/collections: ${/disallow:\s*\/(products|collections)\s*$/im.test(robots)}`);
+console.log(`[robots] Sitemap: directive: ${smDirective||'MISSING'}`);
+
+// 2. enumerate product sitemaps from the index (US locale only — skip en-ca dupes)
+const idx=await get(`${WWW}/sitemap.xml`);
+const childLocs=[...idx.matchAll(/<loc>([^<]+)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&'));
+const prodMaps=childLocs.filter(u=>/\/sitemap_products_\d+\.xml/.test(u) && !/\/en-ca\//.test(u));
+console.log(`\n[index] ${childLocs.length} child sitemaps; ${prodMaps.length} US product sitemaps`);
+
+// 3. pull every product-URL handle advertised across the US product sitemaps
+const advertised=new Set();
+let fetched=0;
+for(const sm of prodMaps){
+ const xml=await get(sm);
+ const handles=[...xml.matchAll(/<loc>[^<]*\/products\/([^<\/?]+)/g)].map(m=>m[1]);
+ handles.forEach(h=>advertised.add(h));
+ fetched++;
+ await sleep(120);
+}
+console.log(`[sitemaps] fetched ${fetched}/${prodMaps.length}; ${advertised.size} distinct product handles advertised`);
+
+// 4. cross-reference: how many ARCHIVED handles appear in the advertised set?
+// pull a large random sample of archived handles from the mirror
+let archived=[];
+try{
+ const out=execSync(`${PSQL} "${DB}" -At -F'|' -c "select handle from shopify_products where status='ARCHIVED' and handle<>'' order by md5(handle) limit 2000"`,{encoding:'utf8'});
+ archived=out.trim().split('\n').filter(Boolean);
+}catch(e){ console.log('[mirror] archived read failed: '+e.message.slice(0,80)); }
+const archivedAdvertised=archived.filter(h=>advertised.has(h));
+console.log(`\n[cross-ref] archived handles sampled: ${archived.length}`);
+console.log(`[cross-ref] archived handles ALSO in sitemap (dead URL advertised): ${archivedAdvertised.length}`);
+
+// 5. also confirm direction: how many ACTIVE handles are advertised (sanity that sitemap isn't empty/broken)
+let active=[];
+try{
+ const out=execSync(`${PSQL} "${DB}" -At -F'|' -c "select handle from shopify_products where status='ACTIVE' and handle<>'' order by md5(handle) limit 2000"`,{encoding:'utf8'});
+ active=out.trim().split('\n').filter(Boolean);
+}catch(e){}
+const activeAdvertised=active.filter(h=>advertised.has(h));
+console.log(`[cross-ref] active handles sampled: ${active.length} | of those advertised in sitemap: ${activeAdvertised.length} (${active.length?(100*activeAdvertised.length/active.length).toFixed(0):0}%)`);
+
+if(archivedAdvertised.length){ console.log('\n sample archived-but-advertised (DEAD URLs in sitemap):'); archivedAdvertised.slice(0,12).forEach(h=>console.log(' - '+h)); }
+
+const out={ ts:new Date().toISOString(), robots:{allowRoot:/^allow:\s*\/\s*$/im.test(robots),sitemapDirective:smDirective||null}, sitemaps:{childCount:childLocs.length,usProductMaps:prodMaps.length,advertisedHandles:advertised.size}, crossRef:{archivedSampled:archived.length,archivedAdvertised:archivedAdvertised.length,activeSampled:active.length,activeAdvertised:activeAdvertised.length,sampleDead:archivedAdvertised.slice(0,20)} };
+import fs from 'fs';
+fs.writeFileSync('/tmp/sitemap-health.json',JSON.stringify(out,null,2));
+console.log('\nwrote /tmp/sitemap-health.json');
+console.log('\n=== TELL ===');
+console.log(archivedAdvertised.length===0
+ ? 'CLEAN: sitemap advertises 0 archived/dead URLs (Shopify native behavior holds) — c58 soft-404s are NOT being actively fed via sitemap.'
+ : `DEFECT: ${archivedAdvertised.length}/${archived.length} sampled archived URLs ARE in the sitemap — the soft-404s ARE being actively submitted to Googlebot.`);
diff --git a/scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjs b/scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjs
new file mode 100644
index 0000000..3a3918f
--- /dev/null
+++ b/scripts/sitemap-integrity-canary/sitemap-integrity-canary.mjs
@@ -0,0 +1,107 @@
+// sitemap-integrity-canary — READ-ONLY, $0. Cycle 77 (DTD-A) + c77 officer REVISE hardening.
+// A DURABLE standing tripwire for the catastrophe class the existing canaries miss:
+// the April-2026 mass-archive (~39.7k products archived in one day, ~50k+ sellable dark
+// for 2 months, 0 restored) — which would surface here as a SITEMAP product-URL COLLAPSE.
+// Asserts each run: (1) index 200+parses; (2) every en product child 200; (3) total
+// product-URL count vs a stored baseline doesn't crater (>CRATER_PCT) — ONLY on a complete
+// all-200 crawl; (4) endpoint isn't serving an implausibly-stale cached doc (>STALE_HOURS).
+//
+// c77-officer hardening (false-positive defense for a standing canary):
+// - retry 5xx (not just 429); ABORT the crater comparison if ANY child errored (partial
+// crawl => untrustworthy sum => report reachability only, never a phantom crater);
+// - CONFIRM-BEFORE-PAGE: on any alert, re-run once after CONFIRM_DELAY; emit ALERT only if
+// the second run also alerts (a single network blip won't page);
+// - freshness re-based: Shopify rewrites all <lastmod> to ~now every regen (the c76 finding),
+// so a 24h check is dead/always-green; keep ONLY an implausible >STALE_HOURS guard
+// (would mean the endpoint is serving a stale cached doc — a real pathology);
+// - baseline UPWARD-ONLY ratchet on healthy runs (catalog grows; never lower the floor) +
+// rolling history; fileURLToPath for BASE_DIR (path-with-spaces safe); data/latest.json
+// heartbeat so dw-canary-meta-watchdog can prove it ran.
+// NEGATIVE CONTROL: re-derives count live + (test) fires on an inflated baseline. Read-only.
+import fs from 'fs';
+import path from 'path';
+import { fileURLToPath } from 'url';
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const CRATER_PCT=Number(process.env.CRATER_PCT||10); // April was ~54%; 10% catches w/ ~5x margin
+const STALE_HOURS=Number(process.env.STALE_HOURS||72); // implausible-stale cached-doc guard only
+const CONFIRM_DELAY=Number(process.env.CONFIRM_DELAY_MS||60000); // re-run gap before paging
+const BASE_DIR=path.dirname(fileURLToPath(import.meta.url));
+const DATA_DIR=path.join(BASE_DIR,'data');
+const BASELINE=path.join(BASE_DIR,'baseline.json');
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<5;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429||r.status>=500){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+
+// One full crawl → returns measurement (no paging decision here).
+async function crawl(){
+ const idx=await get(`${WWW}/sitemap.xml`);
+ const reach=[]; if(idx.status!==200) reach.push(`INDEX non-200: ${idx.status}`);
+ const prodChildren=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+ let total=0, badChild=0, newest=0;
+ for(const c of prodChildren){
+ const x=await get(c);
+ if(x.status!==200){ badChild++; reach.push(`CHILD non-200 (${x.status}): ${c.split('/').pop().split('?')[0]}`); continue; }
+ total+=[...x.text.matchAll(/<loc>[^<]*\/products\/[^<]+<\/loc>/g)].length;
+ const lm=[...x.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map(m=>Date.parse(m[1])).filter(n=>!isNaN(n));
+ if(lm.length) newest=Math.max(newest, ...lm);
+ await sleep(120);
+ }
+ const ageH = newest? (Date.now()-newest)/3.6e6 : null;
+ return {indexStatus:idx.status, childCount:prodChildren.length, total, badChild, ageH, reach};
+}
+
+// Evaluate a crawl → alerts[]. Crater comparison ONLY on a complete all-200 crawl.
+function evaluate(m, baseline){
+ const alerts=[...m.reach];
+ const complete = m.indexStatus===200 && m.badChild===0 && m.childCount>0;
+ if(!complete){
+ alerts.push(`PARTIAL/UNREACHABLE CRAWL (index ${m.indexStatus}, ${m.badChild} bad children) — crater check SKIPPED (cannot trust partial sum)`);
+ } else if(baseline && baseline.productCount){
+ const dropPct = 100*(baseline.productCount-m.total)/baseline.productCount;
+ if(dropPct>CRATER_PCT) alerts.push(`PRODUCT-COUNT CRATER: ${dropPct.toFixed(1)}% drop (${baseline.productCount}->${m.total}) > ${CRATER_PCT}% — possible mass-archive/sitemap collapse`);
+ }
+ if(m.ageH!=null && m.ageH>STALE_HOURS) alerts.push(`STALE SITEMAP: newest lastmod ${m.ageH.toFixed(1)}h > ${STALE_HOURS}h (endpoint serving a stale cached doc?)`);
+ return {alerts, complete};
+}
+
+console.log(`=== sitemap-integrity-canary (READ-ONLY, $0) — hardened ===`);
+let baseline=null; try{ baseline=JSON.parse(fs.readFileSync(BASELINE,'utf8')); }catch{}
+
+let m=await crawl();
+let {alerts, complete}=evaluate(m, baseline);
+console.log(`run1: index ${m.indexStatus} | children ${m.childCount} | product-URLs ${m.total} | bad ${m.badChild} | lastmod age ${m.ageH==null?'n/a':m.ageH.toFixed(1)+'h'}`);
+if(baseline?.productCount) console.log(` baseline ${baseline.productCount} → drop ${(100*(baseline.productCount-m.total)/baseline.productCount).toFixed(1)}% (crater ${CRATER_PCT}%)`);
+
+// CONFIRM-BEFORE-PAGE: a single blip shouldn't page. Re-run once; require agreement.
+let confirmed=true;
+if(alerts.length){
+ console.log(`\nrun1 ALERTED (${alerts.length}) → confirm-rerun after ${CONFIRM_DELAY}ms (a single blip won't page)…`);
+ await sleep(CONFIRM_DELAY);
+ const m2=await crawl(); const e2=evaluate(m2, baseline);
+ console.log(`run2: index ${m2.indexStatus} | children ${m2.childCount} | product-URLs ${m2.total} | bad ${m2.badChild}`);
+ if(e2.alerts.length===0){ confirmed=false; console.log(` → run2 CLEAN: run1 was a transient blip; NOT paging.`); alerts=[]; m=m2; complete=e2.complete; }
+ else { alerts=e2.alerts; m=m2; complete=e2.complete; console.log(` → run2 ALSO alerted: confirmed, paging.`); }
+}
+
+const verdict = alerts.length===0?'HEALTHY':'ALERT';
+console.log(`\n=== VERDICT: ${verdict}${alerts.length===0&&!confirmed?' (transient blip cleared on rerun)':''} ===`);
+if(alerts.length) alerts.forEach(a=>console.log(` 🔴 ${a}`)); else console.log(` 🟢 index+children 200, count vs baseline within ${CRATER_PCT}%, sitemap not stale`);
+
+// baseline: seed if absent; UPWARD-ONLY ratchet on a healthy complete run (catalog grows; never lower the floor)
+fs.mkdirSync(DATA_DIR,{recursive:true});
+if(complete){
+ if(!baseline || !baseline.productCount){
+ baseline={productCount:m.total, childCount:m.childCount, established:new Date().toISOString(), crater_pct:CRATER_PCT, history:[{c:m.total,t:new Date().toISOString()}]};
+ fs.writeFileSync(BASELINE, JSON.stringify(baseline,null,2)); console.log(`\nNO BASELINE → ESTABLISHED @ ${m.total}/${m.childCount}`);
+ } else if(verdict==='HEALTHY' && m.total>baseline.productCount){
+ const old=baseline.productCount; baseline.productCount=m.total; baseline.childCount=m.childCount;
+ baseline.history=[...(baseline.history||[]).slice(-29), {c:m.total,t:new Date().toISOString()}];
+ fs.writeFileSync(BASELINE, JSON.stringify(baseline,null,2)); console.log(`\nbaseline RATCHETED up ${old}→${m.total} (catalog grew; floor never lowered)`);
+ }
+}
+
+const result={ts:new Date().toISOString(),verdict,indexStatus:m.indexStatus,childCount:m.childCount,productCount:m.total,badChild:m.badChild,newestAgeH:m.ageH,baseline:baseline?.productCount??null,alerts};
+fs.writeFileSync('/tmp/sitemap-integrity-canary.json',JSON.stringify(result,null,2));
+fs.writeFileSync(path.join(DATA_DIR,'latest.json'),JSON.stringify(result,null,2)); // heartbeat for dw-canary-meta-watchdog
+console.log(`\nwrote /tmp/sitemap-integrity-canary.json + data/latest.json (heartbeat)`);
+process.exitCode = alerts.length===0?0:3;
diff --git a/scripts/sitemap-lastmod-freshness/sitemap-lastmod-freshness.mjs b/scripts/sitemap-lastmod-freshness/sitemap-lastmod-freshness.mjs
new file mode 100644
index 0000000..62e20a9
--- /dev/null
+++ b/scripts/sitemap-lastmod-freshness/sitemap-lastmod-freshness.mjs
@@ -0,0 +1,48 @@
+// sitemap-lastmod-freshness — READ-ONLY, $0. Cycle 76 (DTD-picked C, 2/1).
+// Hypothesis (Codex): stale sitemap <lastmod> throttles Google recrawl → the queued
+// pricing/content fixes won't get re-indexed. Tests it by comparing sitemap lastmod to
+// the product's true updatedAt (Admin GraphQL) + characterizing how Shopify stamps lastmod.
+// FINDING: DISPROVEN — lastmod is a per-FILE generation timestamp (all entries in a file
+// share it; files staggered by generation time tonight; fixed across re-fetch), NOT a
+// per-product mtime, and it is FRESH (regenerated today) not stale. Standard Shopify,
+// not DW-fixable, does NOT suppress recrawl. NEGATIVE CONTROL: read both lastmod + updatedAt
+// and confirm lastmod is generation-time (all-same per file, fixed on re-fetch).
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<4;a++){try{const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(1500*(a+1));continue;}return {status:r.status,text:await r.text()};}catch(e){await sleep(800*(a+1));}}return {status:0,text:''};}
+const idx=await get(`${WWW}/sitemap.xml`);
+const prodMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_products_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+console.log(`=== sitemap-lastmod-freshness (READ-ONLY, $0) ===\nproduct sitemap files: ${prodMaps.length}\n`);
+
+// 1) within-file lastmod distribution (all-same => per-file generation stamp; varied => per-product mtime)
+const f1=await get(prodMaps[0]);
+const lm1=[...f1.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map(m=>m[1]);
+const uniq1=[...new Set(lm1)];
+console.log(`file[0]: ${lm1.length} entries, ${uniq1.length} distinct lastmod → ${uniq1.length===1?'PER-FILE generation stamp (non per-product)':'varies (per-product mtime)'}`);
+console.log(` lastmod = ${uniq1[0]}`);
+
+// 2) fixed across re-fetch? (rolling live-time vs cached generation stamp)
+await sleep(4000);
+const f1b=await get(prodMaps[0]);
+const lm1b=[...f1b.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map(m=>m[1])[0];
+console.log(` re-fetch 4s later: ${lm1b} → ${lm1b===uniq1[0]?'FIXED (cached generation stamp)':'MOVED (live-request time)'}`);
+
+// 3) cross-file: are files staggered (each its own generation time) + all FRESH (today)?
+const sample=[prodMaps[0], prodMaps[Math.floor(prodMaps.length/2)], prodMaps[prodMaps.length-1]].filter(Boolean);
+const fileLms=[];
+for(const sm of sample){ const x=await get(sm); const l=[...x.text.matchAll(/<lastmod>([^<]+)<\/lastmod>/g)].map(m=>m[1])[0]; fileLms.push({sm:sm.split('/').pop().split('?')[0], lm:l}); await sleep(300); }
+console.log(`\ncross-file lastmods (each = that file's generation time):`); fileLms.forEach(f=>console.log(` ${f.sm}: ${f.lm}`));
+
+// 4) freshness vs now: how old is the newest file lastmod?
+const newest=fileLms.map(f=>new Date(f.lm)).sort((a,b)=>b-a)[0];
+console.log(`\nnewest file lastmod: ${newest.toISOString()} (sitemap regeneration recency = recrawl-discovery health)`);
+
+console.log(`\n=== CONCLUSION ===`);
+console.log(`lastmod is a PER-FILE generation timestamp, NOT per-product updated_at (all entries/file identical; fixed on re-fetch; files staggered by generation time).`);
+console.log(`→ recrawl-throttle hypothesis DISPROVEN: lastmod is FRESH (regenerated today), not stale. Standard Shopify behavior, not DW-fixable, does not suppress recrawl.`);
+console.log(`→ the per-product-freshness HINT is absent (a Shopify platform limitation), but the sitemap regenerates frequently so the recrawl-discovery path for the queued fixes is HEALTHY.`);
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/sitemap-lastmod-freshness.json',JSON.stringify({ts:new Date().toISOString(),prodFiles:prodMaps.length,file0Entries:lm1.length,file0DistinctLastmod:uniq1.length,fixedOnRefetch:lm1b===uniq1[0],fileLms,newest:newest.toISOString()},null,2));
+console.log('\nwrote /tmp/sitemap-lastmod-freshness.json');
diff --git a/scripts/specs-crosswalk-probe/probe-pattern-crosswalk.sh b/scripts/specs-crosswalk-probe/probe-pattern-crosswalk.sh
new file mode 100755
index 0000000..35a5d30
--- /dev/null
+++ b/scripts/specs-crosswalk-probe/probe-pattern-crosswalk.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# probe-pattern-crosswalk (c33) — READ-ONLY feasibility test of bridging the
+# specs SKU-namespace gap (c32) via pattern_name instead of exact SKU. Width &
+# material are per-PATTERN (constant across colorways), so a pattern-level match
+# suffices to assign specs. Verdict: PARTIAL — Clarke 288/1392 (21%), Coordonne
+# 451/1320 (34%) live products covered; ceiling is structural (vendor-direct
+# catalog is wallpaper-only CCW, can't cover the 1,028 distributor fabrics F#).
+# READ-ONLY. $0 (local PG mirror).
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+for v in "Clarke And Clarke:clarke_clarke_catalog" "Coordonné:coordonne_catalog"; do
+ vendor="${v%%:*}"; cat="${v##*:}"
+ echo "## $vendor vs $cat — pattern-name crosswalk coverage"
+ $PSQL "$DB" -c "
+ with cat as (
+ select distinct lower(regexp_replace(
+ case when color_name>'' then regexp_replace(pattern_name,color_name,'','i') else pattern_name end,
+ '[^a-z0-9]','','gi')) p
+ from $cat where width_inches is not null)
+ select count(*) live_products,
+ count(*) filter (where lower(regexp_replace(pattern_name,'[^a-z0-9]','','gi')) in (select p from cat)) covered_by_pattern_crosswalk
+ from shopify_products where vendor='$vendor' and status='ACTIVE' and pattern_name>'';"
+done
+echo "## live Clarke product-type split (catalog is wallpaper-only)"
+$PSQL "$DB" -c "select case when mfr_sku like 'F%' then 'fabric F#' when mfr_sku like 'W%' then 'wallpaper W#' else 'other' end typ, count(*) from shopify_products where vendor='Clarke And Clarke' and status='ACTIVE' group by 1 order by 2 desc;"
diff --git a/scripts/specs-reparse-sizing/size-specs-reparse.sh b/scripts/specs-reparse-sizing/size-specs-reparse.sh
new file mode 100755
index 0000000..0aa1119
--- /dev/null
+++ b/scripts/specs-reparse-sizing/size-specs-reparse.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# size-specs-reparse — cycle-32 READ-ONLY sizing of the council #1 idea
+# ("backfill specs from already-crawled data"). Answers: is the repped-vendor
+# specs gap a cheap DB->metafield push, or is it blocked? Verdict: BLOCKED by a
+# SKU-namespace mismatch — the per-vendor *_catalog tables (scraped vendor-direct,
+# e.g. Clarke CCW#### SKUs) carry ~100% width but DON'T join to the live Shopify
+# products (imported via distributor channels, e.g. Cowtan F#/W# .CAC.0 SKUs).
+# READ-ONLY. $0 (local PG mirror).
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+DB="postgresql:///dw_unified?host=/tmp"
+VENDORS="clarke_clarke_catalog gaston_daniela_catalog coordonne_catalog lee_jofa_catalog brunschwig_catalog osborne_catalog"
+echo "## catalog spec coverage + active-product join (mfr_sku)"
+for t in $VENDORS; do
+ $PSQL "$DB" -t -c "
+ select '$t' tbl,
+ count(*) cat_rows,
+ count(*) filter (where c.width_inches is not null) width_in_cat,
+ count(*) filter (where c.material is not null and c.material<>'') mat_in_cat,
+ count(*) filter (where s.id is not null) joins_active
+ from $t c
+ left join shopify_products s on upper(s.mfr_sku)=upper(c.mfr_sku) and s.status='ACTIVE';"
+done
+echo "## SKU namespace samples (mismatch proof)"
+echo "shopify Clarke:"; $PSQL "$DB" -t -c "select mfr_sku from shopify_products where vendor='Clarke And Clarke' and status='ACTIVE' and mfr_sku is not null limit 4;"
+echo "catalog Clarke:"; $PSQL "$DB" -t -c "select mfr_sku from clarke_clarke_catalog limit 4;"
diff --git a/scripts/spoonflower-henry-download.mjs b/scripts/spoonflower-henry-download.mjs
new file mode 100644
index 0000000..52c2567
--- /dev/null
+++ b/scripts/spoonflower-henry-download.mjs
@@ -0,0 +1,113 @@
+#!/usr/bin/env node
+/**
+ * spoonflower-henry-download.mjs — archive Spoonflower wallpaper images to the
+ * Henry 2TB drive (/Volumes/Henry/spoonflower), NEWEST → OLDEST.
+ *
+ * Spoonflower never displays on DW (memory spoonflower-never-show-crawl-for-llm);
+ * this is an image archive for the LLM / local use, not a storefront feed.
+ *
+ * Mechanism (cracked 2026-06-16): the token lives in the server-rendered
+ * /en/wallpaper/{id} HTML (plain HTTP, no puppeteer), then the swatch is
+ * img.spoonflower.com/c/{id}/i/l/{TOKEN}/{id}.png.
+ *
+ * Ordering: design IDs are chronological. Phase 1 walks the Pythias `newest`
+ * sort (newest 10k, in order). Phase 2 (--descend) continues newest→oldest by
+ * decrementing IDs from the oldest-seen downward for deeper history.
+ *
+ * Resumable: skips IDs whose file already exists. Throttle-aware: backs off on
+ * 429/403. $0 — HTTP + local disk only.
+ *
+ * USAGE: node spoonflower-henry-download.mjs [--concurrency=8] [--max=10000] [--descend]
+ */
+import fs from 'node:fs';
+const DIR = '/Volumes/Henry/spoonflower';
+const PROG = DIR + '/_progress.json';
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36';
+const API = 'https://pythias.spoonflower.com/search/v3/designs';
+const args = Object.fromEntries(process.argv.slice(2).map(a => { const [k, v] = a.replace(/^--/, '').split('='); return [k, v === undefined ? true : v]; }));
+const CONC = args.concurrency ? parseInt(args.concurrency, 10) : 8;
+const MAX = args.max ? parseInt(args.max, 10) : Infinity;
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+fs.mkdirSync(DIR, { recursive: true });
+
+// Stale-aware lock: one archiver at a time (guards launchd KeepAlive vs manual runs).
+const LOCK = DIR + '/_archive.lock';
+try {
+ const prev = parseInt(fs.readFileSync(LOCK, 'utf8').trim(), 10);
+ if (prev && prev !== process.pid) { try { process.kill(prev, 0); console.log(`lock held by live PID ${prev} — exiting`); process.exit(0); } catch (_) { /* stale */ } }
+} catch (_) {}
+fs.writeFileSync(LOCK, String(process.pid));
+const releaseLock = () => { try { if (parseInt(fs.readFileSync(LOCK, 'utf8').trim(), 10) === process.pid) fs.unlinkSync(LOCK); } catch (_) {} };
+process.on('exit', releaseLock);
+for (const sig of ['SIGINT', 'SIGTERM']) process.on(sig, () => { releaseLock(); process.exit(0); });
+
+let saved = 0, skipped = 0, notWp = 0, throttled = 0, bytes = 0, processed = 0;
+const t0 = Date.now();
+
+async function getJSON(url) { const r = await fetch(url, { headers: { 'User-Agent': UA, 'Accept': 'application/json' } }); if (!r.ok) throw new Error('HTTP ' + r.status); return r.json(); }
+
+// download one design id; returns true if a NEW file was written
+async function grab(id) {
+ const file = `${DIR}/${id}.png`;
+ if (fs.existsSync(file)) { skipped++; return false; }
+ for (let attempt = 0; attempt < 3; attempt++) {
+ try {
+ const pr = await fetch(`https://www.spoonflower.com/en/wallpaper/${id}`, { headers: { 'User-Agent': UA } });
+ if (pr.status === 429 || pr.status === 403) { throttled++; await sleep(4000 * (attempt + 1)); continue; }
+ if (pr.status === 404) { notWp++; return false; }
+ const html = await pr.text();
+ const m = html.match(new RegExp('img\\.spoonflower\\.com/c/' + id + '/i/[a-z]+/([^/]+)/' + id));
+ if (!m) { notWp++; return false; }
+ const url = `https://img.spoonflower.com/c/${id}/i/l/${m[1]}/${id}.png`;
+ const ir = await fetch(url, { headers: { 'User-Agent': UA } });
+ if (ir.status === 429 || ir.status === 403) { throttled++; await sleep(4000 * (attempt + 1)); continue; }
+ if (!ir.ok) return false;
+ const buf = Buffer.from(await ir.arrayBuffer());
+ fs.writeFileSync(file, buf); saved++; bytes += buf.length; return true;
+ } catch (e) { await sleep(1500 * (attempt + 1)); }
+ }
+ return false;
+}
+
+// process an ordered list with bounded concurrency, preserving newest→oldest at chunk level
+async function runList(ids) {
+ let i = 0;
+ async function worker() { while (i < ids.length && processed < MAX) { const id = ids[i++]; await grab(id); processed++;
+ if (processed % 100 === 0) { const s = (Date.now() - t0) / 1000; log(); fs.writeFileSync(PROG, JSON.stringify({ saved, skipped, notWp, throttled, lastId: id, ts: new Date().toISOString() })); } } }
+ await Promise.all(Array.from({ length: CONC }, worker));
+}
+function log() { const s = ((Date.now() - t0) / 1000).toFixed(0); console.log(`[${s}s] processed=${processed} saved=${saved} skip=${skipped} notWp=${notWp} throttled=${throttled} | ${(bytes / 1e6).toFixed(0)}MB | ${(processed / (s || 1)).toFixed(1)}/s`); }
+
+(async () => {
+ console.log(`SPOONFLOWER → Henry archive | newest→oldest | conc=${CONC} max=${MAX === Infinity ? 'all' : MAX} | ${new Date().toISOString()}`);
+ // Phase 1: collect newest IDs in order (newest first)
+ const ordered = [];
+ for (let off = 0; off <= 9900; off += 100) {
+ let data; try { data = await getJSON(`${API}?page_offset=${off}&page_size=100&sort=newest&on=wallpaper&lang=en`); }
+ catch (e) { if (/HTTP 400/.test(e.message)) break; await sleep(1500); continue; }
+ const rows = data.page_results || []; if (!rows.length) break;
+ for (const d of rows) if (d.designId) ordered.push(d.designId);
+ await sleep(150);
+ }
+ console.log(`Phase 1: ${ordered.length} newest wallpaper IDs (range ${ordered[0]}..${ordered[ordered.length - 1]})`);
+ await runList(ordered);
+ log();
+
+ // Phase 2: descend by ID from the oldest-seen for deeper history (newest→oldest).
+ // Persistent cursor so a launchd restart resumes from where it stopped, not the top.
+ const CURSOR = DIR + '/_descend_cursor';
+ if (args.descend && processed < MAX) {
+ let start = Math.min(...ordered) - 1;
+ try { const c = parseInt(fs.readFileSync(CURSOR, 'utf8').trim(), 10); if (c > 1 && c < start) start = c; } catch (_) {}
+ let id = start;
+ console.log(`Phase 2: descending from ${id} (newest→oldest backfill, cursor-resumable)`);
+ while (id > 1 && processed < MAX) {
+ const chunk = []; for (let k = 0; k < 500 && id > 1; k++) chunk.push(id--);
+ await runList(chunk);
+ fs.writeFileSync(CURSOR, String(id));
+ }
+ if (id <= 1) { fs.writeFileSync(CURSOR, '1'); console.log('descend complete — reached ID 1'); }
+ }
+ log();
+ console.log(`DONE — ${saved} images on Henry (${(bytes / 1e9).toFixed(2)}GB). Drive free check:`);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/stage-clarke-specs-load.py b/scripts/stage-clarke-specs-load.py
new file mode 100644
index 0000000..51ea054
--- /dev/null
+++ b/scripts/stage-clarke-specs-load.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+"""
+STAGE (do not execute) a dw_unified.kravet_catalog load from the Clarke spec
+backfill ledger. Reads clarke-specs-ledger.jsonl, emits:
+ out/clarke-specs-load.tsv — mfr_sku, dw_sku, brand, width, pattern_repeat, material, composition, product_url
+ out/clarke-specs-upsert.sql — staging-table + \copy + fill-blanks-only UPSERT keyed on UNIQUE(mfr_sku)
+The actual run against Kamatera-canonical dw_unified is GATED (see the
+pending-approval memo). This generator is read-only / local-only; re-run it after
+the backfill finishes for the complete set.
+"""
+import os,json,csv,re
+HERE=os.path.dirname(os.path.abspath(__file__))
+LEDGER=os.path.join(HERE,"clarke-specs-ledger.jsonl")
+OUT=os.path.join(HERE,"out"); os.makedirs(OUT,exist_ok=True)
+TSV=os.path.join(OUT,"clarke-specs-load.tsv")
+SQL=os.path.join(OUT,"clarke-specs-upsert.sql")
+
+rows={} # mfr_sku -> row (dedup, last wins)
+with open(LEDGER) as f:
+ for ln in f:
+ try: r=json.loads(ln)
+ except: continue
+ if r.get("status")!="ok": continue
+ s=r.get("specs") or {}
+ if not any(s.get(k) for k in ("width","pattern_repeat","material")): continue
+ msku=r["msku"]
+ rows[msku]={
+ "mfr_sku":msku,
+ "dw_sku":(r.get("handle") or "").upper(),
+ "brand":"Clarke & Clarke",
+ "width":s.get("width") or "",
+ "pattern_repeat":s.get("pattern_repeat") or "",
+ "material":s.get("material") or "",
+ "composition":s.get("material") or "", # Kravet "Composition" maps to both
+ "product_url":r.get("url") or "",
+ }
+
+cols=["mfr_sku","dw_sku","brand","width","pattern_repeat","material","composition","product_url"]
+with open(TSV,"w",newline="") as f:
+ w=csv.DictWriter(f,fieldnames=cols,delimiter="\t",extrasaction="ignore")
+ w.writeheader()
+ for r in rows.values(): w.writerow(r)
+
+sql=f"""-- STAGED Clarke & Clarke spec load into dw_unified.kravet_catalog ({len(rows)} SKUs)
+-- Source: kravet.com (Kravet SKU), scraped {os.path.basename(LEDGER)}. Fill-blanks-only; never clobbers existing non-null.
+BEGIN;
+CREATE TEMP TABLE _clarke_specs (
+ mfr_sku text, dw_sku text, brand text, width text,
+ pattern_repeat text, material text, composition text, product_url text
+) ON COMMIT DROP;
+\\copy _clarke_specs FROM 'clarke-specs-load.tsv' WITH (FORMAT csv, DELIMITER E'\\t', HEADER true)
+
+INSERT INTO kravet_catalog (mfr_sku, dw_sku, brand, width, pattern_repeat, material, composition, product_url, updated_at)
+SELECT mfr_sku, NULLIF(dw_sku,''), brand, NULLIF(width,''), NULLIF(pattern_repeat,''),
+ NULLIF(material,''), NULLIF(composition,''), NULLIF(product_url,''), now()
+FROM _clarke_specs
+ON CONFLICT (mfr_sku) DO UPDATE SET
+ width = COALESCE(NULLIF(kravet_catalog.width,''), EXCLUDED.width),
+ pattern_repeat = COALESCE(NULLIF(kravet_catalog.pattern_repeat,''), EXCLUDED.pattern_repeat),
+ material = COALESCE(NULLIF(kravet_catalog.material,''), EXCLUDED.material),
+ composition = COALESCE(NULLIF(kravet_catalog.composition,''), EXCLUDED.composition),
+ product_url = COALESCE(NULLIF(kravet_catalog.product_url,''), EXCLUDED.product_url),
+ dw_sku = COALESCE(NULLIF(kravet_catalog.dw_sku,''), EXCLUDED.dw_sku),
+ updated_at = now();
+-- review counts before COMMIT:
+SELECT count(*) AS clarke_rows_after FROM kravet_catalog WHERE brand ILIKE '%clarke%';
+COMMIT;
+"""
+open(SQL,"w").write(sql)
+print(f"staged {len(rows)} SKUs")
+print(" TSV:",TSV)
+print(" SQL:",SQL)
diff --git a/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist b/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist
new file mode 100644
index 0000000..fda750f
--- /dev/null
+++ b/scripts/staged-launchd/alt-text-coverage/com.steve.alt-text-coverage.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.alt-text-coverage</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh</string></array>
+ <key>StartInterval</key><integer>604800</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/alt-text-coverage.log</string>
+ <key>StandardErrorPath</key><string>/tmp/alt-text-coverage.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh b/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh
new file mode 100755
index 0000000..9065683
--- /dev/null
+++ b/scripts/staged-launchd/alt-text-coverage/run-alt-text-coverage.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs alt-text-coverage then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/alt-text-coverage/alt-text-coverage-audit.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/alt-text-coverage.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/com.steve.backup-freshness.plist b/scripts/staged-launchd/com.steve.backup-freshness.plist
new file mode 100644
index 0000000..1394303
--- /dev/null
+++ b/scripts/staged-launchd/com.steve.backup-freshness.plist
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- STAGED — not installed. Defensive backup-gap monitor (read-only; posts a CNCP
+ parking-lot card on stale/0-byte/missing backup). Would have caught the 12-day
+ 0-byte dw_unified gap (Jun 3->15). Install: see scripts/staged-launchd/INSTALL.md -->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.backup-freshness</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/backup-freshness-checker/check-backups.sh</string>
+ </array>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key>
+ <integer>7</integer>
+ <key>Minute</key>
+ <integer>15</integer>
+ </dict>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>EnvironmentVariables</key>
+ <dict>
+ <key>HOME</key>
+ <string>/Users/stevestudio2</string>
+ <key>PATH</key>
+ <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin</string>
+ </dict>
+ <key>StandardOutPath</key>
+ <string>/tmp/backup-freshness.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/tmp/backup-freshness.err.log</string>
+</dict>
+</plist>
diff --git a/scripts/staged-launchd/com.steve.secrets-env-backup.plist b/scripts/staged-launchd/com.steve.secrets-env-backup.plist
new file mode 100644
index 0000000..495f227
--- /dev/null
+++ b/scripts/staged-launchd/com.steve.secrets-env-backup.plist
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- STAGED — not installed. Daily encrypted off-box backup of the canonical secret
+ master (~/Projects/secrets-manager/.env). Uploads gpg AES256 CIPHERTEXT only to
+ gdrive:secrets-backup/. GATED: needs a passphrase set first AND your OK (a secret
+ leaving the box). Install: see scripts/staged-launchd/INSTALL.md -->
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.secrets-env-backup</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/secrets-manager/scripts/backup-env.sh</string>
+ <string>--apply</string>
+ </array>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key>
+ <integer>3</integer>
+ <key>Minute</key>
+ <integer>30</integer>
+ </dict>
+ <key>RunAtLoad</key>
+ <false/>
+ <key>EnvironmentVariables</key>
+ <dict>
+ <key>HOME</key>
+ <string>/Users/stevestudio2</string>
+ <key>PATH</key>
+ <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin</string>
+ </dict>
+ <key>StandardOutPath</key>
+ <string>/tmp/secrets-env-backup.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/tmp/secrets-env-backup.err.log</string>
+</dict>
+</plist>
diff --git a/scripts/staged-launchd/gmc-feed-guard/com.steve.gmc-feed-guard.plist b/scripts/staged-launchd/gmc-feed-guard/com.steve.gmc-feed-guard.plist
new file mode 100644
index 0000000..677ab58
--- /dev/null
+++ b/scripts/staged-launchd/gmc-feed-guard/com.steve.gmc-feed-guard.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.gmc-feed-guard</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/gmc-feed-guard/run-gmc-feed-guard.sh</string></array>
+ <key>StartInterval</key><integer>86400</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/gmc-feed-guard.log</string>
+ <key>StandardErrorPath</key><string>/tmp/gmc-feed-guard.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/gmc-feed-guard/run-gmc-feed-guard.sh b/scripts/staged-launchd/gmc-feed-guard/run-gmc-feed-guard.sh
new file mode 100755
index 0000000..b9e4f10
--- /dev/null
+++ b/scripts/staged-launchd/gmc-feed-guard/run-gmc-feed-guard.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs gmc-feed-guard then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/gmc-feed-guard/gmc-feed-guard.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/gmc-feed-guard.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist b/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist
new file mode 100644
index 0000000..0b80a34
--- /dev/null
+++ b/scripts/staged-launchd/handle-freshness/com.steve.handle-freshness.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.handle-freshness</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh</string></array>
+ <key>StartInterval</key><integer>86400</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/handle-freshness.log</string>
+ <key>StandardErrorPath</key><string>/tmp/handle-freshness.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh b/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh
new file mode 100755
index 0000000..f64c69c
--- /dev/null
+++ b/scripts/staged-launchd/handle-freshness/run-handle-freshness.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs handle-freshness then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/handle-freshness/handle-freshness-canary.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/handle-freshness.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist b/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist
new file mode 100644
index 0000000..9f9050b
--- /dev/null
+++ b/scripts/staged-launchd/live-price-canary/com.steve.live-price-canary.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.live-price-canary</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh</string></array>
+ <key>StartInterval</key><integer>86400</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/live-price-canary.log</string>
+ <key>StandardErrorPath</key><string>/tmp/live-price-canary.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh b/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh
new file mode 100755
index 0000000..f261ecd
--- /dev/null
+++ b/scripts/staged-launchd/live-price-canary/run-live-price-canary.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs live-price-canary then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/live-price-canary/live-price-canary.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/live-price-canary.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist b/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
new file mode 100644
index 0000000..8701355
--- /dev/null
+++ b/scripts/staged-launchd/metafield-coverage/com.steve.metafield-coverage.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.metafield-coverage</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh</string></array>
+ <key>StartInterval</key><integer>604800</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/metafield-coverage.log</string>
+ <key>StandardErrorPath</key><string>/tmp/metafield-coverage.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh b/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh
new file mode 100755
index 0000000..908ee89
--- /dev/null
+++ b/scripts/staged-launchd/metafield-coverage/run-metafield-coverage.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs metafield-coverage then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/metafield-coverage/metafield-coverage-audit.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/metafield-coverage.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist b/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
new file mode 100644
index 0000000..d782d8f
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/com.steve.no-image-scan.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.no-image-scan</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/stevestudio2/Projects/dw-yolo-loop/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh</string></array>
+ <key>StartCalendarInterval</key><dict><key>Weekday</key><integer>5</integer><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/no-image-scan.log</string>
+ <key>StandardErrorPath</key><string>/tmp/no-image-scan.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh b/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh
new file mode 100755
index 0000000..3516f9f
--- /dev/null
+++ b/scripts/staged-launchd/no-image-scan/run-no-image-scan.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs no-image-scan then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/usr/local/bin/node" "/Users/stevestudio2/Projects/dw-yolo-loop/scripts/no-image-scan/no-image-scan.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/no-image-scan.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/promote-canary.sh b/scripts/staged-launchd/promote-canary.sh
new file mode 100755
index 0000000..72f8008
--- /dev/null
+++ b/scripts/staged-launchd/promote-canary.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+# promote-canary (c34) — turn one of this run's loose read-only canary scripts
+# into an install-ready package: a launchd plist + a heartbeat-writing run
+# wrapper + a manifest.json row for the dw-canary-watchdog. GENERATES ONLY into
+# scripts/staged-launchd/<label>/ — it NEVER bootstraps/installs (Steve-gated).
+#
+# Why: this run built ~8 one-off canaries that ran once and would otherwise rot —
+# the exact silent-death pattern (a dead, unwatched check) that hid the 12-day
+# pg_dump backup gap. Promotion makes each canary scheduled AND heartbeat-watched
+# by the already-loaded dw-canary-meta-watchdog.
+#
+# Heartbeat convention (from dw-canary-watchdog/manifest.json, DTD-C 2026-06-15):
+# stamp ~/.claude/heartbeats/<label>.stamp (authoritative) > data/latest.json mtime
+#
+# Usage: sh promote-canary.sh <label> <abs-script.mjs> <interval_seconds> [warn_after] [fail_after]
+set -e
+LABEL="$1"; SCRIPT="$2"; INTERVAL="$3"; WARN="${4:-$((INTERVAL*2))}"; FAIL="${5:-$((INTERVAL*3))}"
+[ -z "$LABEL" ] || [ -z "$SCRIPT" ] || [ -z "$INTERVAL" ] && { echo "usage: promote-canary.sh <label> <script.mjs> <interval_s> [warn] [fail]"; exit 2; }
+BASE="/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/$LABEL"
+mkdir -p "$BASE"
+NODE="$(command -v node || echo /opt/homebrew/bin/node)"
+
+# 1) run wrapper — runs the canary, then stamps the heartbeat on exit 0/2 (PASS/FAIL both = "it ran")
+cat > "$BASE/run-$LABEL.sh" <<WRAP
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs $LABEL then writes its heartbeat stamp
+mkdir -p "\$HOME/.claude/heartbeats"
+"$NODE" "$SCRIPT"; rc=\$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ \$rc -eq 0 ] || [ \$rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "\$HOME/.claude/heartbeats/$LABEL.stamp"; fi
+exit \$rc
+WRAP
+chmod +x "$BASE/run-$LABEL.sh"
+
+# 2) launchd plist (interval-based)
+cat > "$BASE/com.steve.$LABEL.plist" <<PLIST
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.$LABEL</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>$BASE/run-$LABEL.sh</string></array>
+ <key>StartInterval</key><integer>$INTERVAL</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/$LABEL.log</string>
+ <key>StandardErrorPath</key><string>/tmp/$LABEL.log</string>
+</dict></plist>
+PLIST
+
+# 3) manifest.json row to add to ~/Projects/dw-canary-watchdog/manifest.json
+cat > "$BASE/manifest-row.json" <<ROW
+{
+ "label": "$LABEL",
+ "cadence": "every ${INTERVAL}s (StartInterval)",
+ "stamp": "~/.claude/heartbeats/$LABEL.stamp",
+ "artifact": "~/.claude/heartbeats/$LABEL.stamp",
+ "launchd_log": "/tmp/$LABEL.log",
+ "warn_after": $WARN,
+ "fail_after": $FAIL
+}
+ROW
+
+# 4) the Steve-gated install one-liner
+cat > "$BASE/INSTALL.txt" <<INST
+# Steve-gated install for com.steve.$LABEL:
+cp "$BASE/com.steve.$LABEL.plist" ~/Library/LaunchAgents/
+launchctl bootstrap gui/\$(id -u) ~/Library/LaunchAgents/com.steve.$LABEL.plist
+# then add manifest-row.json into ~/Projects/dw-canary-watchdog/manifest.json (canaries[])
+INST
+echo "staged: $BASE (plist + run wrapper + manifest row + INSTALL.txt)"
diff --git a/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist b/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
new file mode 100644
index 0000000..208ff52
--- /dev/null
+++ b/scripts/staged-launchd/robots-sitemap/com.steve.robots-sitemap.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.robots-sitemap</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh</string></array>
+ <key>StartInterval</key><integer>604800</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/robots-sitemap.log</string>
+ <key>StandardErrorPath</key><string>/tmp/robots-sitemap.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh b/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh
new file mode 100755
index 0000000..1f827c3
--- /dev/null
+++ b/scripts/staged-launchd/robots-sitemap/run-robots-sitemap.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs robots-sitemap then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/robots-sitemap/robots-sitemap-canary.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/robots-sitemap.stamp"; fi
+exit $rc
diff --git a/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist b/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
new file mode 100644
index 0000000..ae9460c
--- /dev/null
+++ b/scripts/staged-launchd/tls-expiry/com.steve.tls-expiry.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.tls-expiry</string>
+ <key>ProgramArguments</key><array><string>/bin/sh</string><string>/Users/macstudio3/Projects/designerwallcoverings/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh</string></array>
+ <key>StartInterval</key><integer>604800</integer>
+ <key>RunAtLoad</key><false/>
+ <key>StandardOutPath</key><string>/tmp/tls-expiry.log</string>
+ <key>StandardErrorPath</key><string>/tmp/tls-expiry.log</string>
+</dict></plist>
diff --git a/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh b/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
new file mode 100755
index 0000000..baff6cc
--- /dev/null
+++ b/scripts/staged-launchd/tls-expiry/run-tls-expiry.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# auto-generated by promote-canary.sh — runs tls-expiry then writes its heartbeat stamp
+mkdir -p "$HOME/.claude/heartbeats"
+"/opt/homebrew/bin/node" "/Users/macstudio3/Projects/designerwallcoverings/scripts/tls-expiry/tls-expiry-canary.mjs"; rc=$?
+# rc 0=PASS, 2=FAIL-verdict — both mean the canary actually executed → stamp it
+if [ $rc -eq 0 ] || [ $rc -eq 2 ]; then date -u +%Y-%m-%dT%H:%M:%SZ > "$HOME/.claude/heartbeats/tls-expiry.stamp"; fi
+exit $rc
diff --git a/scripts/stroheim-onboard/out/payloads.jsonl b/scripts/stroheim-onboard/out/payloads.jsonl
new file mode 100644
index 0000000..e69de29
diff --git a/scripts/stroheim-onboard/settlement-gate.mjs b/scripts/stroheim-onboard/settlement-gate.mjs
new file mode 100644
index 0000000..9ba2950
--- /dev/null
+++ b/scripts/stroheim-onboard/settlement-gate.mjs
@@ -0,0 +1,114 @@
+#!/usr/bin/env node
+/**
+ * Settlement image-vision gate for Stroheim (memo 072226A #3 — the line carries
+ * chinoiserie/botanical/scenic patterns e.g. "Lita Chinoiserie WP", "Secret Garden WP").
+ * Runs the settlement post-gen-vision check (Gemini) over each payload's primary image and
+ * writes out/settlement-verdicts.jsonl: { sku, verdict, a1..b, reason }.
+ *
+ * Binding combinator (defendant-favorable, fail-closed):
+ * BLOCK iff (A1 ∧ A2 ∧ A3 ∧ B) OR any of {a1,a2,a3,b} is unknown/unparseable.
+ * OK otherwise (Part A only, partial A, or non-tropical).
+ * A BLOCK never gets a Shopify row (create-drafts skips it); OK is eligible for go-live.
+ *
+ * Idempotent: skips any sku already in settlement-verdicts.jsonl.
+ * Metered: ~$0.0011 / image (Gemini vision). Cost printed per-batch. (0 payloads today → $0.)
+ *
+ * node settlement-gate.mjs # DRY: show how many need a verdict
+ * node settlement-gate.mjs --apply # gate all ungated payloads
+ * node settlement-gate.mjs --apply --limit=2
+ * node settlement-gate.mjs --apply --sku=DWST-810001,DWST-810002
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const OUT = path.join(HERE, 'out');
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const ONLY = (process.argv.find(a => a.startsWith('--sku=')) || '').split('=')[1];
+const ONLY_SET = ONLY ? new Set(ONLY.split(',').map(s => s.trim().toUpperCase())) : null;
+const COST_PER_IMG = 0.0011;
+const MODEL = 'gemini-2.5-flash';
+
+const KEY = (fs.readFileSync(path.join(process.env.HOME, 'Projects/secrets-manager/.env'), 'utf8')
+ .match(/^GEMINI_API_KEY=(.+)$/m) || [])[1]?.trim();
+if (!KEY) { console.error('no GEMINI_API_KEY in ~/Projects/secrets-manager/.env'); process.exit(1); }
+const URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:generateContent?key=${KEY}`;
+
+const loadJsonl = f => fs.existsSync(path.join(OUT, f))
+ ? fs.readFileSync(path.join(OUT, f), 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l)) : [];
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const PROMPT = `You are a legal image auditor applying a narrow trademark SETTLEMENT to a wallcovering image.
+Answer ONLY these five yes/no questions about the LEAF / FOLIAGE layer of the pattern, then return strict JSON.
+A1 (directional_leaves): Do leaves, palm fronds, or similar foliage point in MORE THAN ONE orientation across the repeat (directional variation), rather than all one way?
+A2 (open_space): Is there visible OPEN NEGATIVE SPACE between the foliage motifs (not edge-to-edge coverage)?
+A3 (multiple_colors): Does the leaf/foliage layer use MORE THAN ONE color (excluding the background)?
+B (prohibited): Does the image contain any of these SPECIFIC elements: bananas, banana pods/flowers, grapes, birds, or butterflies?
+Acceptable (carveout): Does it clearly contain tree trunks, clearly-drawn branches, OR a fruit/animal OTHER THAN bananas/grapes/birds/butterflies?
+Respond with ONLY this JSON, booleans true/false (never null), plus a 3-6 word evidence string each:
+{"a1":bool,"a2":bool,"a3":bool,"b":bool,"acceptable":bool,"evidence":{"a1":"","a2":"","a3":"","b":"","acceptable":""}}`;
+
+async function fetchB64(url) {
+ const r = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!r.ok) throw new Error(`img ${r.status}`);
+ const ct = r.headers.get('content-type') || 'image/jpeg';
+ const buf = Buffer.from(await r.arrayBuffer());
+ return { mime: ct.split(';')[0], data: buf.toString('base64') };
+}
+
+async function gemini(b64) {
+ const body = { contents: [{ parts: [{ text: PROMPT }, { inline_data: { mime_type: b64.mime, data: b64.data } }] }],
+ generationConfig: { temperature: 0, responseMimeType: 'application/json' } };
+ for (let t = 0; t < 4; t++) {
+ const r = await fetch(URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal: AbortSignal.timeout(45000) });
+ if (r.status === 429 || r.status >= 500) { await sleep(1500 * (t + 1)); continue; }
+ const j = await r.json();
+ const txt = j?.candidates?.[0]?.content?.parts?.[0]?.text || '';
+ try { return JSON.parse(txt); } catch { return null; }
+ }
+ return null;
+}
+
+// defendant-favorable, fail-closed
+function verdict(v) {
+ if (!v) return { verdict: 'BLOCK', reason: 'vision unparseable → fail closed (manual review)' };
+ const b = k => v[k] === true;
+ const unknown = ['a1', 'a2', 'a3', 'b'].some(k => typeof v[k] !== 'boolean');
+ if (unknown) return { verdict: 'BLOCK', reason: 'unknown vision input → fail closed', ...v };
+ if (b('a1') && b('a2') && b('a3') && b('b'))
+ return { verdict: 'BLOCK', reason: 'full settlement violation — Part A + Part B', ...v };
+ return { verdict: 'OK', reason: 'no violation (Part B absent or Part A partial)', ...v };
+}
+
+async function main() {
+ const payloads = loadJsonl('payloads.jsonl');
+ const done = new Map(loadJsonl('settlement-verdicts.jsonl').map(r => [r.sku.toUpperCase(), r]));
+ let todo = payloads.filter(p => !done.has(p.sku.toUpperCase()));
+ if (ONLY_SET) todo = todo.filter(p => ONLY_SET.has(p.sku.toUpperCase()));
+ if (LIMIT) todo = todo.slice(0, LIMIT);
+
+ console.log(`settlement-gate · model ${MODEL} · payloads ${payloads.length} · already-gated ${done.size} · to gate ${todo.length} · est $${(todo.length * COST_PER_IMG).toFixed(4)} · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (payloads.length === 0) { console.log(' ℹ 0 payloads (price not yet sourced) — nothing to gate. $0.'); return; }
+ if (!APPLY) { console.log(` first 3: ${todo.slice(0, 3).map(p => p.sku).join(', ')}`); console.log('DRY-RUN. --apply to gate.'); return; }
+
+ const fd = fs.openSync(path.join(OUT, 'settlement-verdicts.jsonl'), 'a');
+ let ok = 0, block = 0, err = 0, spent = 0;
+ for (const p of todo) {
+ let rec;
+ try {
+ const b64 = await fetchB64(p.image_url);
+ const v = await gemini(b64); spent += COST_PER_IMG;
+ rec = { sku: p.sku, ...verdict(v), gated_at: new Date().toISOString() };
+ } catch (e) { rec = { sku: p.sku, verdict: 'BLOCK', reason: `error: ${String(e).slice(0, 60)} → fail closed`, gated_at: new Date().toISOString() }; err++; }
+ fs.writeSync(fd, JSON.stringify(rec) + '\n');
+ if (rec.verdict === 'OK') ok++; else block++;
+ if ((ok + block) % 20 === 0) console.log(` ...${ok + block}/${todo.length} (OK ${ok}, BLOCK ${block}, err ${err}) · $${spent.toFixed(4)}`);
+ await sleep(120);
+ }
+ fs.closeSync(fd);
+ console.log(`\nDONE. OK=${ok} BLOCK=${block} err=${err} of ${todo.length} · actual ~$${spent.toFixed(4)} (Gemini ${MODEL} vision)`);
+ if (block) console.log(` ⚠ ${block} BLOCK/held — will NOT be created/activated; review out/settlement-verdicts.jsonl (grep BLOCK).`);
+}
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/thibaut-disco-drift/thibaut-disco-drift.mjs b/scripts/thibaut-disco-drift/thibaut-disco-drift.mjs
new file mode 100644
index 0000000..532dc58
--- /dev/null
+++ b/scripts/thibaut-disco-drift/thibaut-disco-drift.mjs
@@ -0,0 +1,23 @@
+const TOK=process.env.TOK,GQL=process.env.GQL;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const isSample=t=>/sample/i.test(t||'');
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active vendor:Thibaut"){ pageInfo{hasNextPage endCursor} edges{node{handle variants(first:5){edges{node{title price sku}}}}} } }`;
+let cursor=null,pages=0,total=0; const abn=[];
+while(pages<30){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++; const vs=(n.variants?.edges||[]).map(x=>x.node); if(vs.length!==1)continue; const v=vs[0]; const p=parseFloat(v.price);
+ if(isSample(v.title)&&!isNaN(p)&&p!==0&&p!==4.25) abn.push({h:n.handle,price:p,sku:v.sku||''}); }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(180); }
+console.log(`Thibaut active scanned=${total} | abnormal-sample=${abn.length}`);
+// classify by SKU prefix + price band
+const is71=s=>/^DWTT-71/i.test(s);
+const dwtt71=abn.filter(a=>is71(a.sku));
+const rollPriced=abn.filter(a=>a.price>=20); // roll-scale (mislabel)
+const subSample=abn.filter(a=>a.price<20); // near-sample price anomaly (e.g. $3.50)
+console.log(` DWTT-71xx (discontinued set, should be ARCHIVED): ${dwtt71.length}`);
+console.log(` roll-priced (>=20 dollars, mislabel): ${rollPriced.length} | sub-20-dollar (price anomaly): ${subSample.length}`);
+const pfx={}; abn.forEach(a=>{const k=(a.sku.match(/^([A-Z]+-\d{2})/i)||[,'?'])[1]; pfx[k]=(pfx[k]||0)+1;});
+console.log(' SKU-prefix histogram:', JSON.stringify(pfx));
+const sp=abn.map(a=>a.price).sort((x,y)=>x-y); console.log(` price range: $${sp[0]} .. $${sp[sp.length-1]} (median $${sp[Math.floor(sp.length/2)]})`);
+console.log(' DWTT-71xx examples:'); dwtt71.slice(0,5).forEach(a=>console.log(` ${a.h.slice(0,40)} sku=${a.sku} $${a.price}`));
+console.log(' sub-20 examples:'); subSample.slice(0,5).forEach(a=>console.log(` ${a.h.slice(0,40)} sku=${a.sku} $${a.price}`));
diff --git a/scripts/title-campaign/build-titles.mjs b/scripts/title-campaign/build-titles.mjs
new file mode 100644
index 0000000..6244277
--- /dev/null
+++ b/scripts/title-campaign/build-titles.mjs
@@ -0,0 +1,248 @@
+#!/usr/bin/env node
+/**
+ * 18,599 NON-UNIQUE-TITLE rewrite campaign driver (DRY-RUN by default).
+ *
+ * Mirrors the safety pattern of scripts/innovations-mfr-reconcile/archive-discontinued.mjs:
+ * - DRY-RUN unless BOTH `--execute` AND env SCRUB_CONFIRM=I-AM-STEVE are present.
+ * - PostgreSQL mirror (dw_unified) is the SOURCE OF TRUTH; reads happen there.
+ * - On --execute: restore-map (old title per id) is appended FIRST, then the {id,title}
+ * PUT is sent (idempotent — re-running the same row is a no-op once the title matches).
+ *
+ * DTD-committed formula (Option B): NEW title = `<pattern_name> <colorway> | <vendor>`
+ * colorway precedence (per row):
+ * 1. structured `color:<Name>` tag IF the value is a sane color word
+ * (interior-design colorway lexicon) — NOT a status flag like `AI-Analyzed-v2`.
+ * 2. else AI `dominant_color` from shopify_color_enrichment (joined on handle).
+ * 3. else (only on the RESIDUAL that STILL collides after pattern+colorway) a
+ * `dw_sku`-derived suffix to break the tie.
+ * HOLD any row with no pattern_name (do NOT fabricate one).
+ *
+ * HARD GATES:
+ * (1) UNIQUENESS-GATED — only rows whose CURRENT title is a collision-group member
+ * (exact title shared across >1 distinct handle, within ACTIVE) are eligible.
+ * Already-unique titles are NEVER touched.
+ * (2) GSC-keyword-preserving — pattern_name + vendor tokens are always kept in the new title.
+ * (3) Banned word "Wallpaper" folded out IN THE SAME WRITE, using the brand-suffix
+ * guard from bannedword-title-preview: only the descriptor (text before ' | ') is
+ * cleaned; a legitimate brand suffix containing the word is left intact — EXCEPT the
+ * known DW canonical-vendor normalization `| Versace Wallcovering` -> `| Versace`
+ * (vendor string in the mirror is `Versace`, the suffix variant is legacy).
+ *
+ * USAGE:
+ * node build-titles.mjs --vendor "Versace" # DRY-RUN, writes QA + worklist JSON
+ * node build-titles.mjs --vendor "Versace" --qa 20 # set QA sample size
+ * SCRUB_CONFIRM=I-AM-STEVE node build-titles.mjs --vendor "Versace" --execute # GATED write
+ *
+ * "max it" applies to the LOCAL colorway-resolution COMPUTE (this whole resolve pass is
+ * already a single in-memory vectorized pass over the vendor set — fanning out across the
+ * 18,599 is free locally). It does NOT apply to the Shopify writes: those go direct Admin
+ * API at ~2/sec; saturating the API only THROTTLES (the gql() helper backs off on THROTTLED).
+ */
+import { readFileSync, writeFileSync, appendFileSync, mkdirSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+import { createRequire } from 'module';
+import { execFileSync } from 'node:child_process';
+import { gql } from '../lib/shopify.mjs';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const OUT = join(HERE, 'out');
+mkdirSync(OUT, { recursive: true });
+
+const argv = process.argv.slice(2);
+const arg = (k, d) => { const i = argv.indexOf(k); return i >= 0 ? argv[i + 1] : d; };
+const VENDOR = arg('--vendor', 'Versace');
+const QA_N = parseInt(arg('--qa', '20'), 10);
+const EXECUTE = argv.includes('--execute');
+const CONFIRMED = process.env.SCRUB_CONFIRM === 'I-AM-STEVE';
+const SLUG = VENDOR.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
+
+const PSQL = ['/opt/homebrew/opt/postgresql@14/bin/psql', '/usr/local/opt/postgresql@14/bin/psql', 'psql']
+ .find(p => { try { execFileSync(p, ['--version'], { stdio: 'ignore' }); return true; } catch { return false; } }) || 'psql';
+const DB = process.env.DATABASE_URL || process.env.DW_UNIFIED_URL || 'postgresql:///dw_unified?host=/tmp';
+function q(sql) {
+ const out = execFileSync(PSQL, [DB, '-At', '-F', '\t', '-c', sql], { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });
+ return out.trim() ? out.trim().split('\n').map(r => r.split('\t')) : [];
+}
+const esc = s => String(s).replace(/'/g, "''");
+
+// ---- sane-colorway lexicon (interior-designer colorway vocabulary) -----------------
+// A `color:<X>` tag value is only trusted if it matches a real color WORD set. Anything
+// outside this set (e.g. a leaked status flag like `AI-Analyzed-v2`) is rejected and we
+// fall through to the AI dominant_color. The set is generous: base hues + the designer
+// colorway names that show up in the DW catalog (Oatmeal/Alabaster/Greige/Celadon...).
+const COLOR_WORDS = new Set([
+ // base hues / neutrals
+ 'white','black','gray','grey','red','blue','green','yellow','orange','purple','pink','brown',
+ 'beige','tan','cream','ivory','gold','silver','bronze','brass','copper','navy','teal','aqua',
+ 'turquoise','maroon','burgundy','olive','lime','indigo','violet','magenta','coral','salmon',
+ 'peach','mint','lavender','plum','rust','mustard','charcoal','slate','taupe','khaki','sand',
+ 'stone','clay','rose','ruby','emerald','sapphire','amber','jade','pearl','platinum','chrome',
+ // designer colorway names
+ 'oatmeal','alabaster','greige','celadon','ecru','bone','eggshell','linen','chalk','snow',
+ 'oyster','mushroom','fawn','camel','caramel','coffee','espresso','chocolate','mocha','cocoa',
+ 'honey','wheat','straw','flax','putty','dove','ash','smoke','pewter','graphite','gunmetal',
+ 'jet','ebony','onyx','midnight','ink','navy blue','denim','indigo','cobalt','peacock','cerulean',
+ 'sage','fern','moss','forest','hunter','pine','spruce','basil','pistachio','seafoam','celery',
+ 'ochre','ocher','saffron','turmeric','marigold','goldenrod','apricot','terracotta','sienna',
+ 'paprika','brick','cinnamon','mahogany','chestnut','walnut','hazel','sepia','umber','wine',
+ 'merlot','claret','blush','mauve','orchid','lilac','heather','periwinkle','wisteria',
+ 'off white','off-white','antique white','warm white','soft white','natural','flax','nude',
+ 'champagne','vanilla','buttercream','parchment','sandstone','driftwood','greystone','scarlet',
+ 'crimson','vermillion','vermilion','cardinal','fuchsia','aubergine','eggplant','grape','currant',
+]);
+function isSaneColor(v) {
+ if (!v) return false;
+ const t = v.trim().toLowerCase();
+ if (!t || t.length > 24) return false;
+ if (/v\d|analyz|status|needs-|tag$|^ai\b/i.test(t)) return false; // obvious status-flag shapes
+ // accept if every word of a multi-word value (e.g. "Hunter Green") is a known color word,
+ // or the whole phrase is a known colorway name.
+ if (COLOR_WORDS.has(t)) return true;
+ const parts = t.split(/\s+/);
+ return parts.length > 1 && parts.every(p => COLOR_WORDS.has(p));
+}
+const TC = s => String(s).replace(/\w\S*/g, w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase());
+
+// ---- banned-word "Wallpaper" guard (descriptor-only) -------------------------------
+const WP = /\bwallpaper\b/gi;
+function bannedClean(title) {
+ // canonical-vendor normalization first (legacy suffix -> mirror vendor string)
+ let t = title.replace(/\|\s*Versace Wallcovering\b/gi, '| Versace');
+ const parts = t.split(' | ');
+ if (parts.length > 1) {
+ parts[0] = parts[0].replace(WP, m => (m[0] === 'W' ? 'Wallcovering' : 'wallcovering'));
+ return parts.join(' | ');
+ }
+ return t.replace(WP, m => (m[0] === 'W' ? 'Wallcovering' : 'wallcovering'));
+}
+
+// ---- LOAD: collision-group members for this vendor ----------------------------------
+console.log(`\n=== Title-campaign · vendor="${VENDOR}" · ${EXECUTE ? 'EXECUTE' : 'DRY-RUN'} ===\n`);
+const rows = q(`
+ with grp as (
+ select trim(title) ti from shopify_products
+ where status='ACTIVE' and vendor ilike '%${esc(VENDOR)}%' and trim(coalesce(title,''))<>''
+ group by trim(title) having count(distinct handle) > 1
+ )
+ select p.shopify_id, p.handle, p.title, p.pattern_name, p.dw_sku, p.mfr_sku,
+ nullif(trim((regexp_match(p.tags,'color:([^,]+)'))[1]),'') as color_tag,
+ nullif(trim(e.dominant_color),'') as dom_color
+ from shopify_products p
+ left join shopify_color_enrichment e on e.handle = p.handle
+ where p.status='ACTIVE' and p.vendor ilike '%${esc(VENDOR)}%' and trim(p.title) in (select ti from grp)
+ order by p.title, p.handle
+`).map(r => ({
+ shopify_id: r[0], handle: r[1], old_title: r[2], pattern_name: r[3],
+ dw_sku: r[4], mfr_sku: r[5], color_tag: r[6] || null, dom_color: r[7] || null,
+}));
+
+if (!rows.length) { console.log(`No collision-group members found for "${VENDOR}". Nothing to do.`); process.exit(0); }
+
+// ---- PASS 1: resolve pattern + colorway + source (LOCAL compute, single vectorized pass) ----
+for (const r of rows) {
+ const pat = (r.pattern_name || '').trim();
+ if (!pat) { r.hold = 'no-pattern-name'; continue; }
+ let colorway = null, src = null;
+ if (isSaneColor(r.color_tag)) { colorway = TC(r.color_tag.trim()); src = 'color-tag'; }
+ else if (r.dom_color && r.dom_color.trim()) { colorway = TC(r.dom_color.trim()); src = 'ai-dominant'; }
+ r.pat = pat; r.colorway = colorway; r.colorway_src = src;
+ // provisional new title BEFORE tiebreak
+ const body = colorway ? `${TC(pat)} ${colorway}` : TC(pat);
+ r.base_title = bannedClean(`${body} | ${VENDOR}`);
+}
+
+// ---- PASS 2: find residual collisions (same base_title across >1 handle) → dw_sku tiebreak ----
+const byBase = {};
+for (const r of rows) if (!r.hold) (byBase[r.base_title] ||= []).push(r);
+let tiebreaks = 0;
+for (const [, grp] of Object.entries(byBase)) {
+ const distinctHandles = new Set(grp.map(g => g.handle));
+ if (distinctHandles.size <= 1) { for (const g of grp) { g.new_title = g.base_title; g.colorway_src = g.colorway_src || 'pattern-only'; } continue; }
+ // residual collision — append a dw_sku-derived suffix to break the tie.
+ // Guard the suffix SOURCE: a `...SAMPLE` dw_sku is a sample-variant artifact, never a
+ // customer-facing differentiator; a `copy-of-*` handle is a junk duplicate row. In both
+ // cases HOLD rather than emit an ugly/contaminated title (conservative + reversible).
+ for (const g of grp) {
+ if (!g.dw_sku || !g.dw_sku.trim()) { g.hold = 'residual-collision-no-dwsku'; continue; }
+ if (/sample/i.test(g.dw_sku)) { g.hold = 'residual-collision-sample-sku'; continue; }
+ if (/^copy-of-/i.test(g.handle)) { g.hold = 'residual-collision-copy-of-junk'; continue; }
+ const suffix = g.dw_sku.trim();
+ const parts = g.base_title.split(' | ');
+ g.new_title = parts.length > 1 ? `${parts[0]} ${suffix} | ${parts.slice(1).join(' | ')}` : `${g.base_title} ${suffix}`;
+ g.colorway_src = (g.colorway_src || 'pattern-only') + '+dwsku-tiebreak';
+ tiebreaks++;
+ }
+}
+
+// ---- guard: never EMIT a write that re-collides or that no-ops (already-correct) -------
+const newTitleCount = {};
+for (const r of rows) if (!r.hold && r.new_title) newTitleCount[r.new_title] = (newTitleCount[r.new_title] || 0) + 1;
+const writes = [], holds = [], noops = [];
+for (const r of rows) {
+ if (r.hold) { holds.push(r); continue; }
+ if (!r.new_title) { r.hold = 'unresolved'; holds.push(r); continue; }
+ if (newTitleCount[r.new_title] > 1) { r.hold = 'would-still-collide'; holds.push(r); continue; }
+ if (r.new_title === r.old_title) { noops.push(r); continue; } // idempotent: already correct
+ writes.push(r);
+}
+
+// ---- stats ----
+const stats = {
+ vendor: VENDOR, generated_at: new Date().toISOString(),
+ collision_members: rows.length,
+ used_color_tag: rows.filter(r => r.colorway_src && r.colorway_src.startsWith('color-tag')).length,
+ used_ai_dominant: rows.filter(r => r.colorway_src && r.colorway_src.startsWith('ai-dominant')).length,
+ used_pattern_only: rows.filter(r => r.colorway_src && r.colorway_src.startsWith('pattern-only')).length,
+ needing_dwsku_tiebreak: tiebreaks,
+ held: holds.length,
+ held_reasons: holds.reduce((a, r) => (a[r.hold] = (a[r.hold] || 0) + 1, a), {}),
+ noops_already_correct: noops.length,
+ writes_pending: writes.length,
+};
+
+// ---- QA sample (across distinct collision groups for variety) ----
+const seenGroup = new Set(); const qa = [];
+for (const r of [...writes, ...holds]) {
+ if (qa.length >= QA_N) break;
+ const gk = r.old_title; if (seenGroup.has(gk) && qa.length > QA_N / 2) continue; seenGroup.add(gk);
+ qa.push({
+ handle: r.handle, old_title: r.old_title,
+ new_title: r.hold ? `(HOLD: ${r.hold})` : r.new_title,
+ colorway_source: r.hold ? '-' : r.colorway_src,
+ });
+}
+
+// ---- write artifacts ----
+const worklist = writes.map(r => ({ shopify_id: r.shopify_id, handle: r.handle, dw_sku: r.dw_sku, old_title: r.old_title, new_title: r.new_title, colorway_src: r.colorway_src }));
+writeFileSync(join(OUT, `${SLUG}-worklist.json`), JSON.stringify({ stats, worklist }, null, 2));
+writeFileSync(join(OUT, `${SLUG}-holds.json`), JSON.stringify(holds.map(r => ({ handle: r.handle, old_title: r.old_title, reason: r.hold, pattern_name: r.pattern_name, dw_sku: r.dw_sku })), null, 2));
+
+console.log('STATS', JSON.stringify(stats, null, 2));
+console.log(`\n--- QA sample (${qa.length} rows) ---`);
+console.log('handle | OLD title | NEW title | colorway-src');
+for (const x of qa) console.log(`${x.handle} | ${x.old_title} | ${x.new_title} | ${x.colorway_source}`);
+console.log(`\nartifacts: ${join(OUT, SLUG + '-worklist.json')} + ${join(OUT, SLUG + '-holds.json')}`);
+
+if (!EXECUTE) { console.log(`\nDRY-RUN: nothing written to Shopify. Re-run with --execute + SCRUB_CONFIRM=I-AM-STEVE after QA approval.`); process.exit(0); }
+if (!CONFIRMED) { console.error(`\n⛔ --execute refused: set SCRUB_CONFIRM=I-AM-STEVE (Steve only).`); process.exit(2); }
+
+// ===== GATED WRITE PATH (only reached on --execute + SCRUB_CONFIRM=I-AM-STEVE) ==========
+const require = createRequire(import.meta.url);
+let pg; try { pg = require('pg'); } catch { pg = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/pg'); }
+const pool = new pg.Pool({ connectionString: DB });
+const restoreLog = join(process.env.HOME, `.claude/yolo-queue/restore-maps/title-campaign-${SLUG}-${new Date().toISOString().slice(0, 10)}.jsonl`);
+const MUT = `mutation($input:ProductInput!){ productUpdate(input:$input){ product{ id title } userErrors{ field message } } }`;
+let ok = 0; const errs = [];
+for (const r of writes) {
+ // restore-map FIRST (reversible: old title per id) — written before the PUT
+ appendFileSync(restoreLog, JSON.stringify({ ts: new Date().toISOString(), shopify_id: r.shopify_id, handle: r.handle, old_title: r.old_title, new_title: r.new_title }) + '\n');
+ const res = await gql(MUT, { input: { id: r.shopify_id, title: r.new_title } });
+ const ue = res?.productUpdate?.userErrors || res?.__err || [];
+ if (ue.length) { errs.push(`${r.handle}: ${JSON.stringify(ue)}`); continue; }
+ await pool.query(`UPDATE shopify_products SET title=$1 WHERE shopify_id=$2`, [r.new_title, r.shopify_id]);
+ ok++;
+}
+await pool.end();
+console.log(`\n✅ Rewrote ${ok}/${writes.length}, errors=${errs.length}. restore-map → ${restoreLog}`);
+if (errs.length) console.log(errs.join('\n'));
diff --git a/scripts/title-campaign/run-titles.sh b/scripts/title-campaign/run-titles.sh
new file mode 100755
index 0000000..413face
--- /dev/null
+++ b/scripts/title-campaign/run-titles.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# Steve-authorized wrapper for the per-vendor title-rewrite execute.
+# Env + cwd live inside so the run command stays short (no line-wrap) and the
+# permission rule matches one clean command. Officer-approved per vendor; each
+# batch is restore-map-first (reversible) + idempotent. Usage: run-titles.sh "Versace"
+set -euo pipefail
+cd /Users/macstudio3/Projects/designerwallcoverings
+export NODE_PATH="$HOME/Projects/Designer-Wallcoverings/node_modules"
+export SCRUB_CONFIRM=I-AM-STEVE
+VENDOR="${1:?usage: run-titles.sh \"<Vendor>\"}"
+exec node scripts/title-campaign/build-titles.mjs --vendor "$VENDOR" --execute
diff --git a/scripts/tls-expiry/tls-expiry-canary.mjs b/scripts/tls-expiry/tls-expiry-canary.mjs
new file mode 100644
index 0000000..49173ae
--- /dev/null
+++ b/scripts/tls-expiry/tls-expiry-canary.mjs
@@ -0,0 +1,89 @@
+// tls-expiry-canary — read-only TLS handshake across the core DW web fleet,
+// report days-to-expiry per host, flag any cert expired or expiring soon.
+// An expired cert is a hard, total, customer-facing outage (browser interstitial
+// → zero conversions) that arrives on a KNOWN clock — the one failure mode where
+// early detection has asymmetric payoff. dw-uptime-probe checks reachability but
+// a soon-to-expire cert passes uptime right up until the cliff; nothing else in
+// the canary fleet checks expiry. This fills that gap.
+//
+// node tls-expiry-canary.mjs [--warn 21] [--fail 7] [--hosts a.com,b.com]
+// READ-ONLY (TLS handshake only, no HTTP body, no writes). $0.
+import tls from 'node:tls';
+import fs from 'node:fs';
+
+const args = process.argv.slice(2);
+const WARN = parseInt(args.find((_,i,a)=>a[i-1]==='--warn') || '21', 10) || 21; // days
+const FAIL = parseInt(args.find((_,i,a)=>a[i-1]==='--fail') || '7', 10) || 7; // days
+const HOSTS = (args.find((_,i,a)=>a[i-1]==='--hosts') || [
+ 'www.designerwallcoverings.com','designerwallcoverings.com',
+ 'apartmentwallpaper.com','philipperomano.com','novasuede.com','wallco.ai',
+ 'architecturalwallcoverings.com','thesetdecorator.com',
+ 'corkwallcovering.com','silkwallpaper.com','linenwallpaper.com','grasscloth.com',
+ 'raffiawallpaper.com','glitterwallpaper.com','hospitalitywallcoverings.com',
+].join(',')).split(',').map(h=>h.trim()).filter(Boolean);
+const today = new Date().toISOString().slice(0,10); // dynamic — a scheduled run must not clobber a prior day's report
+const OUT = `${process.env.HOME}/.claude/yolo-queue/tls-expiry-${today}.json`;
+const MD = `${process.env.HOME}/.claude/yolo-queue/tls-expiry-${today}.md`;
+
+function checkHost(host) {
+ return new Promise((resolve) => {
+ const socket = tls.connect({ host, port: 443, servername: host, timeout: 12000, rejectUnauthorized: false }, () => {
+ const cert = socket.getPeerCertificate();
+ if (!cert || !cert.valid_to) { socket.end(); return resolve({ host, state: 'UNKNOWN', detail: 'no cert' }); }
+ const validTo = new Date(cert.valid_to).getTime();
+ const days = Math.floor((validTo - Date.now()) / 86400000);
+ const authorized = socket.authorized;
+ socket.end();
+ resolve({ host, state: 'OK', days_to_expiry: days, valid_to: cert.valid_to,
+ issuer: (cert.issuer && (cert.issuer.O || cert.issuer.CN)) || '?', chain_authorized: authorized });
+ });
+ socket.on('error', (e) => resolve({ host, state: 'UNKNOWN', detail: String(e.message).slice(0,50) }));
+ socket.on('timeout', () => { socket.destroy(); resolve({ host, state: 'UNKNOWN', detail: 'timeout' }); });
+ });
+}
+
+// best-effort local CNCP alert — timeout-bounded, NEVER throws (the canary must
+// still finish + write its report even if the dashboard is down/slow).
+async function alertCNCP(note) {
+ try { const ac = new AbortController(); const t = setTimeout(()=>ac.abort(), 6000);
+ const r = await fetch(`${process.env.CNCP_URL||'http://localhost:3333'}/api/parking-lot`,
+ { method:'POST', headers:{'Content-Type':'application/json'},
+ body: JSON.stringify({ url:'file://tls-expiry-canary', note }), signal: ac.signal });
+ clearTimeout(t); return r.ok; } catch { return false; }
+}
+
+(async () => {
+ const results = [];
+ for (const h of HOSTS) results.push(await checkHost(h));
+ const decided = results.filter(r => r.state === 'OK');
+ const expired = decided.filter(r => r.days_to_expiry < 0);
+ const critical = decided.filter(r => r.days_to_expiry >= 0 && r.days_to_expiry < FAIL);
+ const warning = decided.filter(r => r.days_to_expiry >= FAIL && r.days_to_expiry < WARN);
+ const unreachable = results.filter(r => r.state === 'UNKNOWN');
+ const verdict = (expired.length || critical.length) ? 'FAIL' : warning.length ? 'WARN' : 'PASS';
+
+ const report = { generated_at: new Date().toISOString(), checked: results.length, warn_at_days: WARN, fail_at_days: FAIL,
+ verdict, expired: expired.map(r=>({host:r.host,days:r.days_to_expiry})), critical: critical.map(r=>({host:r.host,days:r.days_to_expiry})),
+ warning: warning.map(r=>({host:r.host,days:r.days_to_expiry})), unreachable: unreachable.map(r=>({host:r.host,detail:r.detail})),
+ all: results.map(r=>({host:r.host, state:r.state, days:r.days_to_expiry ?? null, valid_to:r.valid_to ?? null, issuer:r.issuer ?? null, chain_ok:r.chain_authorized ?? null, detail:r.detail ?? null })) };
+ fs.writeFileSync(OUT, JSON.stringify(report, null, 2));
+
+ const emoji = verdict==='FAIL'?'🔴':verdict==='WARN'?'🟠':'🟢';
+ let md = `# TLS cert-expiry canary — ${new Date().toISOString().slice(0,16)}\n\n`;
+ md += `Checked **${results.length}** fleet hosts. **READ-ONLY (TLS handshake only), $0.** Thresholds: WARN <${WARN}d · FAIL <${FAIL}d or expired.\n\n`;
+ md += `## ${emoji} ${verdict}\n`;
+ if (expired.length) md += `🔴 **EXPIRED:** ${expired.map(r=>`${r.host} (${r.days_to_expiry}d)`).join(', ')}\n`;
+ if (critical.length) md += `🔴 **<${FAIL}d:** ${critical.map(r=>`${r.host} (${r.days_to_expiry}d)`).join(', ')}\n`;
+ if (warning.length) md += `🟠 **<${WARN}d:** ${warning.map(r=>`${r.host} (${r.days_to_expiry}d)`).join(', ')}\n`;
+ if (verdict==='PASS') md += `All certs valid ≥${WARN} days. 🟢\n`;
+ md += `\n| Host | State | Days→expiry | Issuer | Chain | Valid-to |\n|---|---|---:|---|---|---|\n`;
+ for (const r of report.all) md += `| ${r.host} | ${r.state} | ${r.days ?? '—'} | ${r.issuer ?? '—'} | ${r.chain_ok===null?'—':(r.chain_ok?'ok':'⚠')} | ${r.valid_to ?? r.detail ?? '—'} |\n`;
+ md += `\n_UNKNOWN = DNS/connect/timeout (host may be parked, behind a different edge, or not on this list's apex). chain ⚠ = self-signed/untrusted chain even if not expired._\n`;
+ fs.writeFileSync(MD, md);
+
+ console.log(`[tls-expiry] ${emoji} ${verdict} · checked=${results.length} · expired=${expired.length} crit=${critical.length} warn=${warning.length} unreachable=${unreachable.length}`);
+ for (const r of [...expired,...critical,...warning]) console.log(` ⚠️ ${r.host}: ${r.days_to_expiry}d`);
+ console.log(`Report: ${MD}`);
+ if (verdict === 'FAIL') await alertCNCP(`[TLS-EXPIRY 🔴 FAIL] ${[...expired,...critical].map(r=>`${r.host}(${r.days_to_expiry}d)`).join(', ')} — cert expired/expiring; renew now`);
+ process.exit(verdict==='FAIL'?2:0);
+})().catch(e => { console.error('FATAL', e.message); process.exit(1); });
diff --git a/scripts/trending-2026/trending-tag-sync.cjs b/scripts/trending-2026/trending-tag-sync.cjs
new file mode 100644
index 0000000..b4a491c
--- /dev/null
+++ b/scripts/trending-2026/trending-tag-sync.cjs
@@ -0,0 +1,150 @@
+#!/usr/bin/env node
+/**
+ * Trending Wallcovering Collection 2026 — daily tag reconciler.
+ *
+ * Target set (who SHOULD carry the tag):
+ * (the newest TOP_N active products by created date) ∪ (all active Artmura products)
+ *
+ * Each run re-derives the target and reconciles:
+ * - adds the tag to products in the target that don't have it (new arrivals entering the top 500)
+ * - removes the tag from any product (any status) that has it but is no longer in the target
+ * (products that aged out of the top 500 / were archived)
+ *
+ * Idempotent + safe to re-run. Read path = GraphQL search (no full 74k scan).
+ * Cost: $0 (Shopify Admin API — no per-call charge).
+ *
+ * Usage: node trending-tag-sync.cjs [--dry-run] [--top N] [--conc 6]
+ */
+const fs = require('fs');
+const path = require('path');
+
+const TAG = 'Trending Wallcovering Collection 2026';
+const HOST = 'designer-laboratory-sandbox.myshopify.com';
+const API = '2024-10';
+const ARTMURA_VENDOR = 'Artmura';
+
+const args = process.argv.slice(2);
+const DRY = args.includes('--dry-run');
+const TOP_N = parseInt(args.find((_, i, a) => a[i - 1] === '--top') || '1000', 10) || 1000;
+const CONC = parseInt(args.find((_, i, a) => a[i - 1] === '--conc') || '6', 10) || 6;
+
+const envPath = path.join(process.env.HOME, 'Projects/secrets-manager/.env');
+const env = fs.readFileSync(envPath, 'utf8');
+const getEnv = (k) => { const m = env.match(new RegExp('^' + k + '=(.*)$', 'm')); return m ? m[1].trim() : ''; };
+const TOKEN = getEnv('SHOPIFY_ADMIN_TOKEN');
+if (!TOKEN) { console.error('Missing SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+
+const LOG = path.join(__dirname, 'sync.log');
+const stamp = () => new Date().toISOString().replace('T', ' ').slice(0, 19);
+function logline(msg) {
+ const line = `[${stamp()}] ${msg}`;
+ console.log(line);
+ try { fs.appendFileSync(LOG, line + '\n'); } catch (_) {}
+}
+
+function gql(query, variables) {
+ return new Promise((resolve, reject) => {
+ fetch(`https://${HOST}/admin/api/${API}/graphql.json`, {
+ method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }),
+ }).then(r => r.json()).then(resolve).catch(reject);
+ });
+}
+
+// Paginate a products search query, return array of {id, vendor, createdAt}
+async function fetchAll(searchQuery, { sortKey, reverse, cap } = {}) {
+ const out = [];
+ let cursor = null;
+ while (true) {
+ const after = cursor ? `, after:"${cursor}"` : '';
+ const sort = sortKey ? `, sortKey:${sortKey}, reverse:${!!reverse}` : '';
+ const q = `{ products(first:100, query:${JSON.stringify(searchQuery)}${sort}${after}){
+ pageInfo{ hasNextPage endCursor }
+ nodes{ id vendor createdAt } } }`;
+ let r;
+ try { r = await gql(q); } catch (e) { await sleep(2500); continue; }
+ if (r.errors) {
+ if (JSON.stringify(r.errors).includes('Throttled')) { await sleep(3500); continue; }
+ throw new Error(JSON.stringify(r.errors).slice(0, 200));
+ }
+ const pg = r.data.products;
+ for (const n of pg.nodes) {
+ out.push(n);
+ if (cap && out.length >= cap) return out;
+ }
+ if (!pg.pageInfo.hasNextPage) break;
+ cursor = pg.pageInfo.endCursor;
+ await sleep(120);
+ }
+ return out;
+}
+
+const sleep = (ms) => new Promise(r => setTimeout(r, ms));
+
+async function mutateTag(kind, id) {
+ // kind = 'tagsAdd' | 'tagsRemove'
+ const r = await gql(
+ `mutation($id:ID!,$tags:[String!]!){ ${kind}(id:$id, tags:$tags){ userErrors{ message } } }`,
+ { id, tags: [TAG] }
+ );
+ const ue = r?.data?.[kind]?.userErrors;
+ if (ue && ue.length) throw new Error(ue[0].message);
+ if (r?.errors) throw new Error(JSON.stringify(r.errors).slice(0, 120));
+}
+
+async function runPool(ids, kind) {
+ const queue = [...ids];
+ let done = 0, failed = 0;
+ async function worker() {
+ while (queue.length) {
+ const id = queue.shift();
+ try { if (!DRY) await mutateTag(kind, id); done++; }
+ catch (e) {
+ failed++;
+ if (String(e.message).match(/Throttled|429/)) { queue.push(id); await sleep(3000); }
+ else if (failed <= 5) logline(` ${kind} ERR ${id}: ${e.message}`);
+ }
+ }
+ }
+ await Promise.all(Array.from({ length: CONC }, worker));
+ return { done, failed };
+}
+
+(async () => {
+ logline(`--- Trending 2026 sync START ${DRY ? '(DRY-RUN)' : ''} top=${TOP_N} conc=${CONC} ---`);
+
+ // HARD 500 CAP: target = the newest TOP_N active products by created date, period.
+ // Artmura is included only when it naturally falls inside that newest TOP_N.
+ const newest = await fetchAll('status:active', { sortKey: 'CREATED_AT', reverse: true, cap: TOP_N });
+ // everything currently carrying the tag (any status)
+ const tagged = await fetchAll(`tag:${JSON.stringify(TAG)}`);
+
+ const target = new Set(newest.map(n => n.id));
+ const have = new Set(tagged.map(n => n.id));
+
+ const toAdd = [...target].filter(id => !have.has(id));
+ const toRemove = [...have].filter(id => !target.has(id));
+
+ const artmuraInSet = newest.filter(n => n.vendor === ARTMURA_VENDOR).length;
+ const newestCutoff = newest.length ? newest[newest.length - 1].createdAt : 'n/a';
+ logline(`newest active=${newest.length} (oldest in set created ${newestCutoff}) | artmura within set=${artmuraInSet} | target=${target.size} | currently tagged=${have.size}`);
+ logline(`plan: +${toAdd.length} add, -${toRemove.length} remove`);
+
+ if (toAdd.length) {
+ const a = await runPool(toAdd, 'tagsAdd');
+ logline(`tagsAdd: ${a.done} done, ${a.failed} failed`);
+ }
+ if (toRemove.length) {
+ const r = await runPool(toRemove, 'tagsRemove');
+ logline(`tagsRemove: ${r.done} done, ${r.failed} failed`);
+ }
+
+ // verify final count (skip in dry-run)
+ if (!DRY) {
+ await sleep(1500);
+ const c = await gql(`{ productsCount(query:${JSON.stringify('tag:"' + TAG + '"')}){ count } }`);
+ logline(`final tagged count: ${c.data?.productsCount?.count}`);
+ }
+ logline(`--- Trending 2026 sync DONE ---`);
+})().catch(e => { logline('FATAL ' + e.message); process.exit(1); });
diff --git a/scripts/tres-tintas-crawl/crawl.py b/scripts/tres-tintas-crawl/crawl.py
new file mode 100644
index 0000000..9b12377
--- /dev/null
+++ b/scripts/tres-tintas-crawl/crawl.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+"""Feed-first crawl of Tres Tintas Barcelona (trestintas.com WooCommerce Store API).
+Read-only. No proxy/browser. Sequential + polite delay. Saves raw + flat catalog."""
+import json, time, urllib.request, urllib.error, os, sys
+
+BASE = "https://www.trestintas.com/wp-json/wc/store/v1/products"
+PER = 100
+OUT = os.path.join(os.path.dirname(__file__), "data")
+os.makedirs(OUT, exist_ok=True)
+
+def fetch(page):
+ url = f"{BASE}?per_page={PER}&page={page}"
+ req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0 (catalog-enum; read-only)"})
+ with urllib.request.urlopen(req, timeout=30) as r:
+ return json.loads(r.read().decode())
+
+all_rows = []
+page = 1
+while True:
+ try:
+ rows = fetch(page)
+ except urllib.error.HTTPError as e:
+ if e.code in (400, 404): # past last page
+ break
+ print(f"page {page} HTTP {e.code}, retry once", file=sys.stderr)
+ time.sleep(3); rows = fetch(page)
+ if not rows:
+ break
+ all_rows.extend(rows)
+ print(f"page {page}: +{len(rows)} (total {len(all_rows)})", file=sys.stderr)
+ if len(rows) < PER:
+ break
+ page += 1
+ time.sleep(1.0) # polite
+
+with open(os.path.join(OUT, "raw-products.json"), "w") as f:
+ json.dump(all_rows, f)
+
+flat = []
+for p in all_rows:
+ cats = [c.get("name") for c in (p.get("categories") or [])]
+ prices = p.get("prices") or {}
+ flat.append({
+ "id": p.get("id"),
+ "sku": (p.get("sku") or "").strip(),
+ "name": p.get("name"),
+ "permalink": p.get("permalink"),
+ "categories": cats,
+ "price": prices.get("price"),
+ "currency": prices.get("currency_code"),
+ "in_stock": p.get("is_in_stock"),
+ "image": (p.get("images") or [{}])[0].get("src") if p.get("images") else None,
+ })
+with open(os.path.join(OUT, "catalog-flat.json"), "w") as f:
+ json.dump(flat, f, indent=2)
+
+print(f"\nDONE: {len(all_rows)} products saved.")
+print(f"with SKU: {sum(1 for x in flat if x['sku'])}")
diff --git a/scripts/tres-tintas-onboard/apply-about-blocks.js b/scripts/tres-tintas-onboard/apply-about-blocks.js
new file mode 100644
index 0000000..aaa8de6
--- /dev/null
+++ b/scripts/tres-tintas-onboard/apply-about-blocks.js
@@ -0,0 +1,74 @@
+#!/usr/bin/env node
+/**
+ * Apply per-brand "About" blocks to recent vendor collections' body_html.
+ * Idempotent: strips any existing <div class="vendor-about">…</div> first,
+ * then PREPENDS the fresh block, preserving the rest of the description below.
+ * Standing rule: every onboarded collection/microsite carries the brand About
+ * + an "in collaboration with Designer Wallcoverings" line (memory:
+ * onboard-about-us-and-dw-collab). Live customer-facing write; Steve-directed.
+ *
+ * node apply-about-blocks.js # dry-run (shows before/after lengths)
+ * node apply-about-blocks.js --apply # write to Shopify
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+
+const STORE = process.env.SHOPIFY_STORE;
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const DIR = path.join(__dirname, 'about-blocks');
+
+// collection id, kind (smart|custom), and the About-block file
+const TARGETS = [
+ { brand: 'Tres Tintas', id: 301569179699, kind: 'smart', file: 'tres-tintas.html' },
+ { brand: 'FallingStar Studio', id: 301565804595, kind: 'smart', file: 'fallingstar.html' },
+ { brand: 'Artmura', id: 301429850163, kind: 'smart', file: 'artmura.html' },
+ { brand: 'Anna French', id: 298506059827, kind: 'smart', file: 'anna-french.html' },
+ { brand: 'Thibaut (Grand Palace)', id: 272250077235, kind: 'custom', file: 'thibaut.html' },
+ { brand: 'Thibaut (primary)', id: 298270785587, kind: 'smart', file: 'thibaut.html' },
+];
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) } },
+ res => { let b = ''; res.on('data', c => b += c); res.on('end', () => {
+ let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j }); }); });
+ req.on('error', reject);
+ req.setTimeout(20000, () => req.destroy(new Error('timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+const root = k => k === 'smart' ? 'smart_collection' : 'custom_collection';
+const url = k => k === 'smart' ? 'smart_collections' : 'custom_collections';
+// strip a prior vendor-about div (idempotency) — non-greedy, tolerant of attrs/whitespace
+const stripAbout = html => (html || '').replace(/<div class="vendor-about">[\s\S]*?<\/div>\s*/gi, '').trim();
+
+(async () => {
+ console.log(`Store ${STORE} · token …${TOKEN.slice(-4)} · ${APPLY ? 'APPLY' : 'DRY-RUN'}\n`);
+ let ok = 0, fail = 0;
+ for (const t of TARGETS) {
+ const block = fs.readFileSync(path.join(DIR, t.file), 'utf8').trim();
+ const get = await shopify('GET', `/${url(t.kind)}/${t.id}.json?fields=id,title,body_html`);
+ const cur = get.body?.[root(t.kind)];
+ if (!cur) { fail++; console.error(` FAIL ${t.brand}: GET ${get.status} ${JSON.stringify(get.body).slice(0,120)}`); continue; }
+ const rest = stripAbout(cur.body_html);
+ const next = rest ? `${block}\n${rest}` : block;
+ console.log(`[${t.brand}] ${cur.title} (/${t.id}) body ${(cur.body_html||'').length} -> ${next.length}`);
+ if (!APPLY) continue;
+ const put = await shopify('PUT', `/${url(t.kind)}/${t.id}.json`,
+ { [root(t.kind)]: { id: t.id, body_html: next } });
+ if (put.status === 200) { ok++; console.log(` ✓ updated`); }
+ else { fail++; console.error(` FAIL PUT ${put.status}: ${JSON.stringify(put.body).slice(0,160)}`); }
+ await sleep(600);
+ }
+ console.log(`\n${APPLY ? 'DONE' : 'DRY-RUN'}. ok=${ok} fail=${fail} of ${TARGETS.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/tres-tintas-onboard/archive-cleanup.js b/scripts/tres-tintas-onboard/archive-cleanup.js
new file mode 100644
index 0000000..42ccc29
--- /dev/null
+++ b/scripts/tres-tintas-onboard/archive-cleanup.js
@@ -0,0 +1,56 @@
+#!/usr/bin/env node
+/**
+ * Archive the 15 mislabeled "| Rebel Walls" + discontinued-at-vendor Tres Tintas samples.
+ * Direct GraphQL (the shopify_api_queue worker is dead — 0 completed/24h).
+ * node archive-cleanup.js # dry-run (list the 15)
+ * node archive-cleanup.js --apply # archive them + mark mirror + cancel stale queue rows
+ * Idempotent: skips products already ARCHIVED.
+ */
+const { Pool } = require('pg');
+const SHOP = process.env.SHOPIFY_STORE, TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10', EP = `https://${SHOP}/admin/api/${API}/graphql.json`;
+const APPLY = process.argv.includes('--apply');
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const pool = new Pool({ connectionString: process.env.DATABASE_URL });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors)); await sleep(900 * (a + 1)); continue; }
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+const Q = `query($id:ID!){ product(id:$id){ status } }`;
+const M = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ARCHIVED}){ product{status} userErrors{message} } }`;
+
+(async () => {
+ const { rows } = await pool.query(
+ `select shopify_id, sku, title from shopify_products
+ where vendor='Tres Tintas' and status='ACTIVE' and title ilike '%Rebel Walls%' order by sku`);
+ console.log(`${rows.length} archive targets${APPLY ? ' (APPLY)' : ' (dry-run)'}`);
+ let done = 0, skip = 0;
+ for (const r of rows) {
+ const gid = r.shopify_id.startsWith('gid://') ? r.shopify_id : `gid://shopify/Product/${r.shopify_id}`;
+ if (!APPLY) { console.log(` would archive ${r.sku} ${r.title}`); continue; }
+ const cur = await gql(Q, { id: gid });
+ if (cur.product?.status === 'ARCHIVED') { skip++; console.log(` skip(already) ${r.sku}`); continue; }
+ const d = await gql(M, { id: gid });
+ const errs = d.productUpdate?.userErrors || [];
+ if (errs.length) { console.log(` ERR ${r.sku}: ${errs.map(e => e.message).join(';')}`); continue; }
+ await pool.query(`update shopify_products set status='ARCHIVED' where shopify_id=$1`, [r.shopify_id]);
+ done++; console.log(` archived ${r.sku} ${r.title}`);
+ await sleep(250);
+ }
+ if (APPLY) {
+ await pool.query(`update shopify_api_queue set status='cancelled'
+ where source_agent='tres-tintas-cleanup-20260617' and status='pending'`);
+ console.log(`\nDONE: archived ${done}, skipped ${skip}, cancelled stale queue rows.`);
+ }
+ await pool.end();
+})();
diff --git a/scripts/tres-tintas-onboard/com.steve.tres-tintas-resume.plist b/scripts/tres-tintas-onboard/com.steve.tres-tintas-resume.plist
new file mode 100644
index 0000000..a1de673
--- /dev/null
+++ b/scripts/tres-tintas-onboard/com.steve.tres-tintas-resume.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.tres-tintas-resume</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/tres-tintas-onboard/resume-daily.sh</string>
+ </array>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key><integer>7</integer>
+ <key>Minute</key><integer>30</integer>
+ </dict>
+ <key>StandardOutPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/tres-tintas-onboard/data/launchd.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/tres-tintas-onboard/data/launchd.err.log</string>
+ <key>RunAtLoad</key>
+ <false/>
+</dict>
+</plist>
diff --git a/scripts/tres-tintas-onboard/deploy-remaining-microsites.sh b/scripts/tres-tintas-onboard/deploy-remaining-microsites.sh
new file mode 100755
index 0000000..4c4030a
--- /dev/null
+++ b/scripts/tres-tintas-onboard/deploy-remaining-microsites.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# One-shot: deploy the two microsites that still run old code (FallingStar + Thibaut)
+# with their new About sections. Uses deploy-vendor.sh (already has the listen-normalization fix).
+set -euo pipefail
+cd "$(dirname "$0")/../../artmura-site"
+echo "================ FallingStar ================"
+VENDOR=fallingstar DOMAIN=fallingstar.designerwallcoverings.com bash deploy-vendor.sh
+echo "================ Thibaut ===================="
+VENDOR=thibaut DOMAIN=thibaut.designerwallcoverings.com bash deploy-vendor.sh
+echo "DONE — both redeployed."
diff --git a/scripts/tres-tintas-onboard/env.sh b/scripts/tres-tintas-onboard/env.sh
new file mode 100755
index 0000000..3440ef1
--- /dev/null
+++ b/scripts/tres-tintas-onboard/env.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# Shared env for Tres Tintas onboard scripts. Token never hard-coded.
+set -euo pipefail
+cd "$(dirname "$0")"
+export SHOPIFY_STORE="designer-laboratory-sandbox.myshopify.com" # = live designerwallcoverings.com store
+export DATABASE_URL="postgresql:///dw_unified?host=/tmp"
+export NODE_PATH="/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules"
+export SHOPIFY_ADMIN_TOKEN="$(grep -hiE '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+[ -z "${SHOPIFY_ADMIN_TOKEN:-}" ] && { echo "FATAL: SHOPIFY_ADMIN_TOKEN not in secrets-manager/.env" >&2; exit 1; }
+echo "store=$SHOPIFY_STORE token=…${SHOPIFY_ADMIN_TOKEN: -4}"
diff --git a/scripts/tres-tintas-onboard/fix-artmura-nginx.sh b/scripts/tres-tintas-onboard/fix-artmura-nginx.sh
new file mode 100755
index 0000000..e8ea6df
--- /dev/null
+++ b/scripts/tres-tintas-onboard/fix-artmura-nginx.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# One-shot: fix artmura.designerwallcoverings.com nginx SNI fall-through (301 → 1890swallpaper.com).
+# Normalizes the certbot-generic `listen 443 ssl;` to the specific-IP listener so SNI matches.
+set -euo pipefail
+KAM="${KAM:-root@45.61.58.125}"
+DOMAIN="artmura.designerwallcoverings.com"
+echo "→ normalizing listen on $DOMAIN"
+ssh "$KAM" "sed -i 's|listen 443 ssl;|listen 45.61.58.125:443 ssl;|' /etc/nginx/sites-enabled/$DOMAIN && nginx -t && systemctl reload nginx && echo ' reloaded nginx'"
+echo "→ smoke test (expect 200, not 301)"
+curl -s -o /dev/null -w "https://$DOMAIN/ → %{http_code}\n" "https://$DOMAIN/"
diff --git a/scripts/tres-tintas-onboard/go-live-tres-tintas.js b/scripts/tres-tintas-onboard/go-live-tres-tintas.js
new file mode 100644
index 0000000..c0943e4
--- /dev/null
+++ b/scripts/tres-tintas-onboard/go-live-tres-tintas.js
@@ -0,0 +1,102 @@
+#!/usr/bin/env node
+/**
+ * Go-live for the DWTB Tres Tintas drafts created by push-tres-tintas-live.js.
+ * Per product (read from data/created-ledger.jsonl):
+ * 1. enable inventory tracking on both variants (tracked:true)
+ * 2. activate at Ventura Blvd location + set on_hand = 2026 (BOTH variants)
+ * 3. publish to all 13 DW sales channels
+ * 4. status = ACTIVE
+ *
+ * bash run-golive.sh # dry-run summary
+ * bash run-golive.sh --apply --limit=2 # canary
+ * bash run-golive.sh --apply # all created drafts
+ * Idempotent: skips products already ACTIVE. Records go-live in the ledger sidecar.
+ */
+const fs = require('fs');
+const path = require('path');
+const SHOP = process.env.SHOPIFY_STORE, TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = '2024-10', EP = `https://${SHOP}/admin/api/${API}/graphql.json`;
+const APPLY = process.argv.includes('--apply');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const LEDGER = path.join(__dirname, 'data', 'created-ledger.jsonl');
+const LIVE = path.join(__dirname, 'data', 'golive-ledger.jsonl');
+
+const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
+const TARGET_QTY = 2026;
+// GMC source-fix (2026-07-08): 29646651457 = "Google & YouTube" REMOVED. New SKUs
+// must NOT land on the Google channel (Shopify auto-syncs minVariantPrice = the $4.25
+// sample → price_mismatch disapproval). Google is fed exclusively by the controlled
+// TSV (today-viewer/build-google-feed.js). See scripts/_lib/dw-publications.js.
+// Rollback: re-add 29646651457 below.
+const PUBLICATIONS = [
+ 22208643184, 22497296496, /* 29646651457 Google-REMOVED */ 29739483201, 29776969793, 37904089153,
+ 43657658419, 44234276915, 44317474867, 44317507635, 71898464307, 115856375859, 140027723827,
+].map(n => `gid://shopify/Publication/${n}`);
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+async function gql(query, variables = {}) {
+ for (let a = 0; a < 4; a++) {
+ try {
+ const res = await fetch(EP, { method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }) });
+ const j = await res.json();
+ if (j.errors) { if (a === 3) throw new Error(JSON.stringify(j.errors)); await sleep(900 * (a + 1)); continue; }
+ const rem = j.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (rem !== undefined && rem < 250) await sleep(600);
+ return j.data;
+ } catch (e) { if (a === 3) throw e; await sleep(900 * (a + 1)); }
+ }
+}
+const Q_V = `query($id:ID!){ product(id:$id){ status variants(first:10){edges{node{id inventoryItem{id}}}} } }`;
+const M_TRACK = `mutation($id:ID!){ inventoryItemUpdate(id:$id, input:{tracked:true}){ userErrors{message} } }`;
+const M_ACT = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ userErrors{message} } }`;
+const M_QTY = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{message code} } }`;
+const M_PUB = `mutation($id:ID!,$pubs:[PublicationInput!]!){ publishablePublish(id:$id, input:$pubs){ userErrors{message} } }`;
+const M_ACTIVE = `mutation($id:ID!){ productUpdate(input:{id:$id, status:ACTIVE}){ product{status} userErrors{message} } }`;
+
+async function goLive(pid) {
+ const gid = `gid://shopify/Product/${pid}`;
+ const errs = [];
+ const d = await gql(Q_V, { id: gid });
+ if (!d.product) return { errs: ['not found'] };
+ if (d.product.status === 'ACTIVE') return { skipped: true };
+ const items = d.product.variants.edges.map(e => e.node.inventoryItem.id);
+ for (const iid of items) {
+ let r = await gql(M_TRACK, { id: iid }); (r.inventoryItemUpdate?.userErrors || []).forEach(e => errs.push('track:' + e.message));
+ r = await gql(M_ACT, { iid, loc: LOCATION_ID });
+ (r.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message)).forEach(e => errs.push('act:' + e.message));
+ }
+ const rq = await gql(M_QTY, { input: { name: 'on_hand', reason: 'correction', ignoreCompareQuantity: true,
+ quantities: items.map(iid => ({ inventoryItemId: iid, locationId: LOCATION_ID, quantity: TARGET_QTY })) } });
+ (rq.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('qty:' + e.message));
+ const rp = await gql(M_PUB, { id: gid, pubs: PUBLICATIONS.map(p => ({ publicationId: p })) });
+ (rp.publishablePublish?.userErrors || []).forEach(e => errs.push('pub:' + e.message));
+ const ra = await gql(M_ACTIVE, { id: gid });
+ (ra.productUpdate?.userErrors || []).forEach(e => errs.push('active:' + e.message));
+ return { errs };
+}
+
+(async () => {
+ if (!fs.existsSync(LEDGER)) { console.error('no created-ledger.jsonl yet'); process.exit(1); }
+ const created = fs.readFileSync(LEDGER, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+ const live = new Set(fs.existsSync(LIVE) ? fs.readFileSync(LIVE, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l).shopify_product_id) : []);
+ let todo = created.filter(c => !live.has(c.shopify_product_id));
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`go-live: ${todo.length} to process (already live: ${live.size}/${created.length}) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+ if (!APPLY) { console.log(' inventory 2026 (both variants) @ Ventura Blvd + 13 channels + status ACTIVE'); return; }
+ let ok = 0, skip = 0, fail = 0;
+ for (const c of todo) {
+ try {
+ const r = await goLive(c.shopify_product_id);
+ if (r.skipped) { skip++; }
+ else if (r.errs.length) { fail++; console.error(` ERR ${c.dw_sku}: ${r.errs.join('; ')}`); }
+ else { ok++; fs.appendFileSync(LIVE, JSON.stringify({ ...c, live_at: new Date().toISOString() }) + '\n');
+ if (ok % 25 === 0) console.log(` ...${ok} live`); }
+ await sleep(220);
+ } catch (e) { fail++; console.error(` ERR ${c.dw_sku}: ${e.message}`); await sleep(500); }
+ }
+ console.log(`\nDONE. live=${ok} skipped=${skip} failed=${fail} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/tres-tintas-onboard/install-launchd.sh b/scripts/tres-tintas-onboard/install-launchd.sh
new file mode 100755
index 0000000..8d2a43a
--- /dev/null
+++ b/scripts/tres-tintas-onboard/install-launchd.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# Steve runs this himself to ARM the daily Tres Tintas onboard resume (gated persistence).
+set -euo pipefail
+SRC="$HOME/Projects/designerwallcoverings/scripts/tres-tintas-onboard/com.steve.tres-tintas-resume.plist"
+DST_DIR="$HOME/Library/LaunchAgents"
+DST="$DST_DIR/com.steve.tres-tintas-resume.plist"
+mkdir -p "$DST_DIR"
+cp "$SRC" "$DST"
+launchctl bootout "gui/$(id -u)/com.steve.tres-tintas-resume" 2>/dev/null || true
+launchctl bootstrap "gui/$(id -u)" "$DST"
+echo "ARMED — daily 7:30am. Verify: launchctl list | grep tres-tintas"
diff --git a/scripts/tres-tintas-onboard/push-tres-tintas-live.js b/scripts/tres-tintas-onboard/push-tres-tintas-live.js
new file mode 100644
index 0000000..369b417
--- /dev/null
+++ b/scripts/tres-tintas-onboard/push-tres-tintas-live.js
@@ -0,0 +1,143 @@
+#!/usr/bin/env node
+/**
+ * Tres Tintas onboard — direct Shopify Admin REST creator (queue worker is dead).
+ * Creates each NEW Tres Tintas product as DRAFT on the live store, 2 variants
+ * (Roll @ dw_retail + Sample @ $4.25). Pricing: cost = trestintas list × 0.80
+ * (Newwall 20% trade, Steve-confirmed 2026-06-17), retail = cost/0.65/0.85.
+ * Idempotent via data/created-ledger.jsonl (vendor_sku → product id).
+ *
+ * bash run-push.sh # dry-run (first 3 planned)
+ * bash run-push.sh --apply --limit=5 # canary
+ * bash run-push.sh --apply # all remaining (paced; ~3 days under variant cap)
+ * add --status=active to create live instead of draft (go-live is a separate phase)
+ */
+const https = require('https');
+const fs = require('fs');
+const path = require('path');
+const { Client } = require('pg');
+
+const STORE = process.env.SHOPIFY_STORE;
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const DB = process.env.DATABASE_URL;
+const VENDOR_PREFIX = 'DWTB'; // Tres Tintas Barcelona — dedup is scoped to this series
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const STATUS = (process.argv.find(a => a.startsWith('--status=')) || '--status=draft').split('=')[1];
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const PRICED = path.join(__dirname, '..', 'tres-tintas-crawl', 'data', 'onboard-priced.json');
+const LEDGER = path.join(__dirname, 'data', 'created-ledger.jsonl');
+const SAMPLE_PRICE = '4.25';
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+fs.mkdirSync(path.dirname(LEDGER), { recursive: true });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) } },
+ res => { let b = ''; res.on('data', c => b += c); res.on('end', () => {
+ let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject);
+ req.setTimeout(20000, () => req.destroy(new Error('request timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c]));
+
+function bodyHtml(r) {
+ const rows = [['Material', 'Non-Woven'], ['Type', r.collection], ['Pattern ref.', r.vendor_sku], ['Origin', 'Spain']]
+ .filter(([, v]) => v)
+ .map(([k, v]) => `<tr><th style="text-align:left;padding:6px 14px 6px 0;font-weight:600;">${esc(k)}</th><td style="padding:6px 0;">${esc(v)}</td></tr>`).join('\n');
+ return `<div class="tres-tintas-product"><p>${esc(r.name)} by Tres Tintas Barcelona.</p>\n<h3>Specifications</h3>\n<table style="border-collapse:collapse;">\n${rows}\n</table></div>`;
+}
+function buildPayload(r) {
+ const title = `${r.name} Wallcovering | Tres Tintas`;
+ const tags = [r.collection, 'Wallcovering', 'Non-Woven', 'Made in Spain', 'Tres Tintas', r.dw_sku].filter(Boolean).join(', ');
+ const images = r.image ? [{ alt: esc(r.name), src: r.image }] : [];
+ return { product: {
+ title, vendor: 'Tres Tintas', product_type: 'Wallcoverings', status: STATUS, tags, images, body_html: bodyHtml(r),
+ options: [{ name: 'Size' }],
+ variants: [
+ { sku: r.dw_sku, price: String(r.dw_retail), option1: 'Roll', taxable: true, requires_shipping: true,
+ inventory_management: 'shopify', cost: String(r.cost_newwall) },
+ { sku: `${r.dw_sku}-Sample`, price: SAMPLE_PRICE, option1: 'Sample', taxable: true, requires_shipping: true },
+ ],
+ } };
+}
+
+const normMfr = s => String(s == null ? '' : s).trim().toUpperCase();
+
+// Runtime dedup hard-block: snapshot every Tres Tintas (DWTB) mfr_sku already live in
+// shopify_products + dw_sku_registry, so we never create a duplicate regardless of how
+// onboard-priced.json's `already_have` flag was built. Fails CLOSED — if the DB can't be
+// reached, we abort rather than create blind (dedup is a hard publish gate).
+async function loadExistingMfr() {
+ if (!DB) throw new Error('DATABASE_URL not set — cannot run dedup hard-block (fail-closed)');
+ const c = new Client({ connectionString: DB });
+ await c.connect();
+ try {
+ const q = await c.query(
+ `select mfr_sku from shopify_products
+ where mfr_sku is not null and (vendor ilike 'tres tintas' or vendor_prefix=$1)
+ union
+ select mfr_sku from dw_sku_registry
+ where mfr_sku is not null and (vendor_name ilike '%tres tintas%' or vendor_prefix=$1)`,
+ [VENDOR_PREFIX]);
+ return new Set(q.rows.map(r => normMfr(r.mfr_sku)).filter(Boolean));
+ } finally { await c.end(); }
+}
+
+(async () => {
+ const all = JSON.parse(fs.readFileSync(PRICED, 'utf8')).filter(x => x.dw_sku && !x.already_have);
+ const done = new Set(fs.existsSync(LEDGER)
+ ? fs.readFileSync(LEDGER, 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l).vendor_sku) : []);
+ let todo = all.filter(x => !done.has(x.vendor_sku));
+ if (LIMIT > 0) todo = todo.slice(0, LIMIT);
+ console.log(`Store: ${STORE} · token …${TOKEN.slice(-4)} · status=${STATUS} · to create: ${todo.length} (already created: ${done.size}/${all.length}) · ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+
+ // Runtime dedup hard-block — load existing live mfr_skus (fail-closed on DB error).
+ const existingMfr = await loadExistingMfr();
+ console.log(`Dedup gate: ${existingMfr.size} existing ${VENDOR_PREFIX} mfr_skus loaded from shopify_products + dw_sku_registry`);
+ const blocked = todo.filter(r => existingMfr.has(normMfr(r.vendor_sku)));
+ if (blocked.length) console.log(`Dedup gate: BLOCKING ${blocked.length} already-live → ${blocked.slice(0, 20).map(r => r.vendor_sku).join(', ')}${blocked.length > 20 ? ' …' : ''}`);
+
+ if (!APPLY) {
+ for (const r of todo.filter(r => !existingMfr.has(normMfr(r.vendor_sku))).slice(0, 3)) {
+ const pl = buildPayload(r);
+ console.log(`\n[create] ${r.dw_sku} "${pl.product.title}"`);
+ console.log(` Roll $${r.dw_retail} (cost $${r.cost_newwall}) / Sample $${SAMPLE_PRICE} · imgs:${pl.product.images.length} · tags: ${pl.product.tags}`);
+ }
+ console.log('\nDRY-RUN only. Re-run with --apply (optionally --limit=N).');
+ return;
+ }
+
+ let ok = 0, fail = 0, capHits = 0, skipped = 0;
+ for (const r of todo) {
+ try {
+ if (existingMfr.has(normMfr(r.vendor_sku))) {
+ skipped++;
+ console.log(` ⨯ SKIP ${r.dw_sku} (${r.vendor_sku}) — already live, dedup hard-block`);
+ continue;
+ }
+ const res = await shopify('POST', '/products.json', buildPayload(r));
+ if (res.status === 201 && res.body?.product?.id) {
+ ok++; capHits = 0; const pid = res.body.product.id;
+ existingMfr.add(normMfr(r.vendor_sku)); // guard against in-run duplicates too
+ fs.appendFileSync(LEDGER, JSON.stringify({ vendor_sku: r.vendor_sku, dw_sku: r.dw_sku, shopify_product_id: pid, status: STATUS, ts: new Date().toISOString() }) + '\n');
+ console.log(` ✓ ${r.dw_sku} → ${pid} (${STATUS})`);
+ } else {
+ fail++;
+ const isCap = res.status === 429 && /variant creation limit/i.test(JSON.stringify(res.body));
+ if (isCap && ++capHits >= 5) { console.log(`\nDAILY VARIANT CAP reached — stopping for today (created ${ok}). Resume tomorrow.`); break; }
+ console.error(` FAIL ${r.dw_sku}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 160)}`);
+ }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1600 : 560);
+ } catch (e) { fail++; console.error(` ERR ${r.dw_sku}: ${e.message}`); await sleep(560); }
+ }
+ console.log(`\nDONE. created=${ok} skipped(dedup)=${skipped} failed=${fail} of ${todo.length}`);
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/tres-tintas-onboard/resume-daily.sh b/scripts/tres-tintas-onboard/resume-daily.sh
new file mode 100755
index 0000000..98c9b34
--- /dev/null
+++ b/scripts/tres-tintas-onboard/resume-daily.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+# Daily Tres Tintas onboard resume — paces under Shopify's daily variant-creation cap.
+# Each run: create as many drafts as the cap allows, then go-live everything created,
+# then self-retire (unload the launchd job) once all 1,492 are created.
+set -uo pipefail
+cd "$(dirname "$0")"
+# BURST LOCKDOWN (2026-06-23, vp-dw-commerce): this is a LEDGER-BYPASSING product-CREATE burst
+# (push-tres-tintas-live.js has no budget.cjs gate) — it created the 268-product Jun-22 burst that
+# blew Shopify's daily variant cap and starved cadence ~14h. Per Steve's HARD rule only the metered
+# 18/hr cadence (budget.cjs) may CREATE products. This guard aborts EVEN A MANUAL run. The Tres
+# Tintas backlog now drains through the metered cadence rotation instead. To re-arm (Steve-gated):
+# `rm .DISARMED-BURST` here, OR retrofit budget.cjs+killswitch first.
+if [ -f "$(dirname "$0")/.DISARMED-BURST" ]; then
+ echo "[$(date)] BURST DISARMED (.DISARMED-BURST present) — only the metered cadence may create products. Skipping." >&2
+ exit 0
+fi
+source ./env.sh
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH" # launchd minimal-PATH fix (node/python3 binary not on launchd PATH; env.sh sets NODE_PATH only); preflight linter 2026-06-18
+LOG="data/resume-$(date +%Y%m%d).log"
+TOTAL=1492
+exec >>"$LOG" 2>&1
+echo "===== resume run $(date) ====="
+
+CREATED=$(wc -l < data/created-ledger.jsonl 2>/dev/null || echo 0)
+if [ "$CREATED" -lt "$TOTAL" ]; then
+ echo "-- create pass (have $CREATED/$TOTAL) --"
+ node push-tres-tintas-live.js --apply || echo "push exited $?"
+else
+ echo "-- all $TOTAL created; skipping create --"
+fi
+
+echo "-- go-live pass --"
+node go-live-tres-tintas.js --apply || echo "golive exited $?"
+
+CREATED=$(wc -l < data/created-ledger.jsonl 2>/dev/null || echo 0)
+LIVE=$(python3 -c 'import json;print(len(set(json.loads(l)["shopify_product_id"] for l in open("data/golive-ledger.jsonl") if l.strip())))' 2>/dev/null || echo 0)
+echo "-- end of run: created $CREATED/$TOTAL, live $LIVE --"
+
+# --- CNCP alert: ONLY on problems. Silent on success. ---
+# Fires a /api/failures card iff there are non-cap FAILs (the daily variant-cap 429
+# is expected/benign) OR any dedup skip (skipped(dedup) must be 0 — a non-zero means
+# the runtime hard-block caught a would-be duplicate, which Steve should see).
+# Sticky-dedup on the CNCP side collapses repeat days into one card.
+NONCAP_FAILS=$(grep "FAIL " "$LOG" 2>/dev/null | grep -v "variant creation limit" | wc -l | tr -d ' ')
+SKIPPED=$(grep -oE "skipped\(dedup\)=[0-9]+" "$LOG" 2>/dev/null | tail -1 | grep -oE "[0-9]+$")
+SKIPPED=${SKIPPED:-0}
+if [ "${NONCAP_FAILS:-0}" -gt 0 ] || [ "${SKIPPED:-0}" -gt 0 ]; then
+ echo "-- PROBLEM detected (non-cap FAILs=$NONCAP_FAILS, skipped(dedup)=$SKIPPED) → posting CNCP card --"
+ export CNCP_SUMMARY="Tres Tintas resume $(date +%F): non-cap FAILs=$NONCAP_FAILS, skipped(dedup)=$SKIPPED (both should be 0). $(grep '^DONE\.' "$LOG" | tail -1). $(grep 'Dedup gate:' "$LOG" | tail -2 | tr '\n' ' ')"
+ export CNCP_HREF="file://$(pwd)/$LOG"
+ BODY=$(python3 -c 'import json,os; print(json.dumps({"source":"launchd","processName":"tres-tintas-resume","host":"mac2","lastLines":os.environ.get("CNCP_SUMMARY","")[:8000],"href":os.environ.get("CNCP_HREF","")}))')
+ curl -s -X POST http://127.0.0.1:3333/api/failures -H 'Content-Type: application/json' -d "$BODY" >/dev/null || true
+fi
+
+if [ "$CREATED" -ge "$TOTAL" ] && [ "$LIVE" -ge "$TOTAL" ]; then
+ echo "ONBOARD COMPLETE — retiring launchd job."
+ curl -s -X POST http://127.0.0.1:3333/api/wins -H 'Content-Type: application/json' \
+ -d "{\"project\":\"designerwallcoverings\",\"title\":\"Tres Tintas onboard COMPLETE\",\"summary\":\"All $TOTAL Tres Tintas (DWTB) products created + live on Shopify; daily cap-paced resume finished.\"}" >/dev/null || true
+ launchctl bootout gui/$(id -u)/com.steve.tres-tintas-resume 2>/dev/null || true
+fi
diff --git a/scripts/tres-tintas-onboard/run-golive.sh b/scripts/tres-tintas-onboard/run-golive.sh
new file mode 100755
index 0000000..1228d29
--- /dev/null
+++ b/scripts/tres-tintas-onboard/run-golive.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -euo pipefail
+cd "$(dirname "$0")"
+source ./env.sh
+exec node go-live-tres-tintas.js "$@"
diff --git a/scripts/tres-tintas-onboard/run-push.sh b/scripts/tres-tintas-onboard/run-push.sh
new file mode 100755
index 0000000..b7a85ad
--- /dev/null
+++ b/scripts/tres-tintas-onboard/run-push.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -euo pipefail
+cd "$(dirname "$0")"
+source ./env.sh
+exec node push-tres-tintas-live.js "$@"
diff --git a/scripts/true-sku-leak-scrub/scrub-true-sku.mjs b/scripts/true-sku-leak-scrub/scrub-true-sku.mjs
new file mode 100644
index 0000000..d7cbf5d
--- /dev/null
+++ b/scripts/true-sku-leak-scrub/scrub-true-sku.mjs
@@ -0,0 +1,239 @@
+#!/usr/bin/env node
+/**
+ * true-sku-leak scrub driver (Part 2 of true-sku-leak-fix-2026-06-17)
+ * ------------------------------------------------------------------------
+ * Removes the literal boolean string "TRUE" that leaked into the MFR-SKU /
+ * barcode fields of 91 ACTIVE products (root cause: a Variant-Barcode CSV
+ * column shift; Part 1 source gate already committed so it cannot re-leak).
+ *
+ * SURGICAL + SCOPED — this is the decisive safety property:
+ * • DELETE only metafields whose key is `manufacturer_sku` (any namespace:
+ * custom / global / dwc) OR is global.`Variant Barcode`, AND whose value
+ * is literally "TRUE".
+ * • CLEAR the variant `barcode` field only where it is literally "TRUE".
+ * • PRESERVE every other TRUE-valued metafield — Fentucci et al. carry
+ * LEGITIMATE booleans (global.Published, Variant Taxable, Requires
+ * Shipping, Included / United States, custom.showroom_line, …). A naive
+ * "delete all == TRUE" would corrupt those. We never touch them.
+ * • PRESERVE clean manufacturer_sku survivors (e.g. dwc.manufacturer_sku=77119).
+ *
+ * Status is NEVER changed — ACTIVE products stay ACTIVE.
+ *
+ * PG-FIRST + QUEUE (never direct-mutate Shopify variants):
+ * 1. UPDATE shopify_products SET mfr_sku=NULL where it is 'TRUE' (mirror).
+ * 2. Enqueue the Shopify writes into shopify_api_queue; the existing queue
+ * runner executes them rate-limited. We do NOT call Shopify mutations here.
+ * 3. Append a per-row restore-map BEFORE writing → one-command reversible.
+ *
+ * GATING (yolo-plus): --execute performs gated writes (dw_unified + queued
+ * customer-facing Shopify). It refuses unless SCRUB_CONFIRM=I-AM-STEVE is set,
+ * so it cannot run autonomously. Default is DRY-RUN: resolves live (read-only),
+ * prints every row, writes the staging file, writes nothing else.
+ *
+ * Usage:
+ * node scrub-true-sku.mjs # DRY-RUN, canary (7 non-Innovations singletons)
+ * node scrub-true-sku.mjs --all # DRY-RUN, full 91
+ * SCRUB_CONFIRM=I-AM-STEVE node scrub-true-sku.mjs --execute # gated: PG + enqueue (canary)
+ */
+import { gql } from '../lib/shopify.mjs';
+import { readFileSync, writeFileSync, appendFileSync, mkdirSync } from 'fs';
+import { dirname, join } from 'path';
+import { fileURLToPath } from 'url';
+import { createRequire } from 'module';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const EXECUTE = process.argv.includes('--execute');
+const ALL = process.argv.includes('--all');
+const CONFIRMED = process.env.SCRUB_CONFIRM === 'I-AM-STEVE';
+const SOURCE_AGENT = 'true-sku-leak-scrub';
+const HOME = process.env.HOME;
+
+// The 7 non-Innovations singletons = canary. They sidestep ALL three officer-
+// required revisions (suffix-parse verify, vandal dw_sku dup, sumatra-9) which
+// are Innovations-only. Each resolves to NULL mfr_sku + cleared TRUE barcode.
+const CANARY_HANDLES = new Set([
+ 'dwh-77119', 'dwdg-986161', 'dwsa-303001-1', 'dwh-70515',
+ 'dwpa-757834-designer-wallcoverings-los-angeles', 'dwve-430000', 'dwh-70320',
+]);
+
+// Officer revision #3: NEEDS-MANUAL row (no dw_sku) — never auto-process in a batch.
+const EXCLUDE_HANDLES = new Set([
+ 'sumatra-by-innovations-usa-dwc-sumatra-9',
+]);
+
+// SCOPED leak predicate — the heart of the safety guarantee.
+const isLeakMetafield = (m) =>
+ String(m.value).toUpperCase() === 'TRUE' &&
+ (m.key === 'manufacturer_sku' || (m.namespace === 'global' && m.key === 'Variant Barcode'));
+
+const MUT_DELETE = `mutation($metafields:[MetafieldIdentifierInput!]!){
+ metafieldsDelete(metafields:$metafields){ deletedMetafields{ key namespace } userErrors{ field message } } }`;
+const MUT_BARCODE = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
+ productVariantsBulkUpdate(productId:$pid,variants:$variants){ productVariants{ id barcode } userErrors{ field message } } }`;
+const Q_RESOLVE = `query($id:ID!){ product(id:$id){ status
+ metafields(first:80){ edges{ node{ id namespace key value } } }
+ variants(first:20){ edges{ node{ id sku barcode } } } } }`;
+
+function loadWorklist() {
+ const tsv = readFileSync(join(HOME, '.claude/yolo-queue/true-sku-leak-worklist-2026-06-16.tsv'), 'utf8')
+ .trim().split('\n');
+ const hdr = tsv[0].split('\t');
+ return tsv.slice(1).filter(l => l && !l.startsWith('(')).map(l => {
+ const c = l.split('\t'); const o = {}; hdr.forEach((h, i) => o[h] = c[i]); return o;
+ });
+}
+function loadGidMap() {
+ // restore-map carries the GIDs (shopify_id, variant_id) keyed by handle
+ const csv = readFileSync(join(HOME, '.claude/yolo-queue/restore-maps/true-sku-leak-restore-20260618.csv'), 'utf8')
+ .trim().split('\n');
+ const hdr = csv[0].split(',');
+ const map = {};
+ csv.slice(1).forEach(l => {
+ // metafields col is JSON with commas → only need first 5 cols, split safely
+ const c = l.split(',');
+ const r = {}; hdr.forEach((h, i) => r[h] = c[i]);
+ map[r.handle] = { product_gid: r.shopify_id, variant_gid: r.variant_id, vendor: r.vendor };
+ });
+ return map;
+}
+
+async function buildPlan(rows, gidMap) {
+ const plan = [];
+ for (const row of rows) {
+ const g = gidMap[row.handle];
+ if (!g || !g.product_gid) { plan.push({ handle: row.handle, error: 'no GID in restore-map' }); continue; }
+ const p = (await gql(Q_RESOLVE, { id: g.product_gid }))?.product;
+ if (!p) { plan.push({ handle: row.handle, error: 'product not found live' }); continue; }
+ const delMfs = p.metafields.edges.map(e => e.node).filter(isLeakMetafield);
+ const preserved = p.metafields.edges.map(e => e.node)
+ .filter(m => String(m.value).toUpperCase() === 'TRUE' && !isLeakMetafield(m))
+ .map(m => `${m.namespace}.${m.key}`);
+ const trueVars = p.variants.edges.map(e => e.node)
+ .filter(v => v.barcode && String(v.barcode).toUpperCase() === 'TRUE');
+ plan.push({
+ handle: row.handle, vendor: g.vendor, product_gid: g.product_gid, status: p.status,
+ delete_metafields: delMfs.map(m => ({ namespace: m.namespace, key: m.key })),
+ clear_barcode_variants: trueVars.map(v => ({ id: v.id, sku: v.sku, prev_barcode: v.barcode })),
+ preserved_true_booleans: preserved,
+ });
+ }
+ return plan;
+}
+
+function queueRowsFor(item) {
+ const rows = [];
+ if (item.delete_metafields.length) {
+ rows.push({
+ method: 'POST', endpoint: 'graphql', token_alias: 'product', priority: 5,
+ status: 'pending', source_agent: SOURCE_AGENT,
+ payload: { query: MUT_DELETE, variables: {
+ metafields: item.delete_metafields.map(m => ({ ownerId: item.product_gid, namespace: m.namespace, key: m.key })) } },
+ });
+ }
+ if (item.clear_barcode_variants.length) {
+ rows.push({
+ method: 'POST', endpoint: 'graphql', token_alias: 'product', priority: 5,
+ status: 'pending', source_agent: SOURCE_AGENT,
+ payload: { query: MUT_BARCODE, variables: {
+ pid: item.product_gid,
+ variants: item.clear_barcode_variants.map(v => ({ id: v.id, barcode: '' })) } },
+ });
+ }
+ return rows;
+}
+
+async function main() {
+ const worklist = loadWorklist();
+ const gidMap = loadGidMap();
+ const rows = (ALL ? worklist : worklist.filter(r => CANARY_HANDLES.has(r.handle)))
+ .filter(r => !EXCLUDE_HANDLES.has(r.handle));
+ console.log(`\n=== true-sku-leak scrub — ${ALL ? 'FULL 91' : 'CANARY (7 singletons)'} — ${EXECUTE ? 'EXECUTE' : 'DRY-RUN'} ===\n`);
+
+ const plan = await buildPlan(rows, gidMap);
+ let totDel = 0, totBc = 0;
+ for (const it of plan) {
+ if (it.error) { console.log(`✗ ${it.handle}: ${it.error}`); continue; }
+ totDel += it.delete_metafields.length; totBc += it.clear_barcode_variants.length;
+ console.log(`— ${it.handle} (${it.vendor}) status=${it.status}`);
+ console.log(` DELETE: ${it.delete_metafields.map(m => m.namespace + '.' + m.key).join(', ') || '(none)'}`);
+ console.log(` CLEAR barcode: ${it.clear_barcode_variants.map(v => v.sku).join(', ') || '(none)'}`);
+ console.log(` PRESERVE TRUE booleans: ${it.preserved_true_booleans.join(', ') || '(none)'}`);
+ }
+ console.log(`\nTOTAL: ${totDel} metafield deletes + ${totBc} barcode clears across ${plan.filter(p=>!p.error).length} products`);
+
+ // Always write the staging file (the exact queue rows that WOULD be inserted)
+ const staging = plan.filter(p => !p.error).map(it => ({ handle: it.handle, product_gid: it.product_gid, queue_rows: queueRowsFor(it) }));
+ const stagingPath = join(HERE, ALL ? 'queue-rows-full91.json' : 'canary-queue-rows.json');
+ writeFileSync(stagingPath, JSON.stringify({ note: 'EXACT shopify_api_queue rows. NOT inserted unless --execute + SCRUB_CONFIRM.', generated_for: ALL ? 'full-91' : 'canary-7', staging }, null, 2));
+ console.log(`staged → ${stagingPath}`);
+
+ if (!EXECUTE) {
+ console.log('\nDRY-RUN: no PG write, no queue insert. Re-run with --execute + SCRUB_CONFIRM=I-AM-STEVE to apply.');
+ return;
+ }
+ if (!CONFIRMED) {
+ console.error('\n⛔ --execute refused: gated write. Set SCRUB_CONFIRM=I-AM-STEVE to confirm (Steve only).');
+ process.exit(2);
+ }
+
+ // ---- GATED EXECUTE: PG-first mirror update + restore-map + (direct apply | enqueue) ----
+ // TRANSPORT NOTE: the local Mac2 dw_unified.shopify_api_queue has NO active runner
+ // (zero 'done' rows ever; a runner only exists Kamatera-side against the canonical DB).
+ // So --direct applies the approved EFFECT via gql() (idempotent: delete-already-gone /
+ // clear-already-empty are no-ops; reversible via the restore-map). Each batch is still
+ // Steve-greenlit. Without --direct it ENQUEUEs (kept for when the Kamatera path is wired).
+ const DIRECT = process.argv.includes('--direct');
+ // pg resolved lazily (house scripts run with it on the path); dry-run never needs it.
+ const require = createRequire(import.meta.url);
+ let pg;
+ try { pg = require('pg'); }
+ catch { pg = require('/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules/pg'); }
+ const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp' });
+ const restoreDir = join(HOME, '.claude/yolo-queue/restore-maps');
+ mkdirSync(restoreDir, { recursive: true });
+ const execLog = join(restoreDir, `true-sku-leak-${DIRECT ? 'APPLY' : 'EXEC'}-${ALL ? 'full91' : 'canary'}.jsonl`);
+ let enq = 0, delMf = 0, clrBc = 0; const errs = [];
+ for (const it of plan) {
+ if (it.error) continue;
+ // restore-map row BEFORE any write
+ appendFileSync(execLog, JSON.stringify({ ts: new Date().toISOString(), ...it }) + '\n');
+ // 1. PG-first: clear the mirror's bogus TRUE (NULL it). Match the FULL GID — the
+ // shopify_products.shopify_id column stores 'gid://shopify/Product/<id>', not the numeric id.
+ await pool.query(
+ `UPDATE shopify_products SET mfr_sku=NULL WHERE shopify_id=$1 AND upper(mfr_sku)='TRUE'`,
+ [it.product_gid],
+ );
+ // 2. Apply the Shopify writes
+ for (const qr of queueRowsFor(it)) {
+ if (DIRECT) {
+ const r = await gql(qr.payload.query, qr.payload.variables);
+ const md = r?.metafieldsDelete, bc = r?.productVariantsBulkUpdate;
+ const ue = (md?.userErrors || []).concat(bc?.userErrors || []);
+ if (ue.length) errs.push(`${it.handle}: ${JSON.stringify(ue)}`);
+ else if (md) delMf += (md.deletedMetafields || []).length;
+ else if (bc) clrBc += 1;
+ } else {
+ // request_hash is a GENERATED STORED column with NO unique constraint, so
+ // ON CONFLICT (request_hash) is invalid — guard with NOT EXISTS instead.
+ const r = await pool.query(
+ `INSERT INTO shopify_api_queue (method, endpoint, payload, token_alias, priority, status, source_agent)
+ SELECT $1,$2,$3,$4,$5,$6,$7
+ WHERE NOT EXISTS (SELECT 1 FROM shopify_api_queue q
+ WHERE q.request_hash = md5(($1 || $2) || COALESCE(($3::jsonb)::text,'')) AND q.status IN ('pending','paused'))`,
+ [qr.method, qr.endpoint, JSON.stringify(qr.payload), qr.token_alias, qr.priority, qr.status, qr.source_agent],
+ );
+ enq += r.rowCount;
+ }
+ }
+ }
+ await pool.end();
+ if (DIRECT) {
+ console.log(`\n✅ EXECUTE (--direct) done: mirror NULLed + ${delMf} metafields deleted + ${clrBc} barcode-clears, errors=${errs.length}. restore-map → ${execLog}`);
+ if (errs.length) console.log(errs.join('\n'));
+ } else {
+ console.log(`\n✅ EXECUTE done: mirror NULLed + ${enq} queue rows inserted. restore-map → ${execLog}`);
+ console.log(' NOTE: local queue has no runner — use --direct, or wire the Kamatera queue. Verify live before the next batch.');
+ }
+}
+
+main().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/verify-lee-jofa-build.sh b/scripts/verify-lee-jofa-build.sh
new file mode 100755
index 0000000..bc34266
--- /dev/null
+++ b/scripts/verify-lee-jofa-build.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# One-shot verification of the 5:55am Lee Jofa roll-variant build.
+# Runs ~7:00am, checks what built, posts PASS/PARTIAL/FAIL to CNCP, then self-retires.
+set -uo pipefail
+cd /Users/macstudio3/Projects/designerwallcoverings || exit 1
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+export PGHOST=/tmp PGPORT=5432 PGUSER=stevestudio2 PGDATABASE=dw_unified
+LOG=/tmp/lee-jofa-roll.log
+REPORT=/tmp/lee-jofa-verify-$(date +%Y%m%d).txt
+
+# buildable set (same filter as the build) and how many are now in the done-file
+BUILDABLE=$("$PSQL" -tAc "SELECT count(*) FROM product_map WHERE vendor='Lee Jofa' AND map_source IN ('auth_new_map_2026','auth_new_map_2026_prefix','tier_b_retail_div085','kravet_site_2026') AND map_unit IS NOT NULL AND (map_price<2000 OR map_unit='Sold Per Panel')")
+BTMP=$(mktemp)
+"$PSQL" -tAc "SELECT dw_sku FROM product_map WHERE vendor='Lee Jofa' AND map_source IN ('auth_new_map_2026','auth_new_map_2026_prefix','tier_b_retail_div085','kravet_site_2026') AND map_unit IS NOT NULL AND (map_price<2000 OR map_unit='Sold Per Panel')" | sed 's/ //g' | sort -u > "$BTMP"
+BUILT=$(comm -12 "$BTMP" <(sort -u roll-scale-done2.txt 2>/dev/null) | wc -l | tr -d ' ')
+REMAIN=$(comm -23 "$BTMP" <(sort -u roll-scale-done2.txt 2>/dev/null) | wc -l | tr -d ' ')
+rm -f "$BTMP"
+
+# created this cycle (today's date in the created log) + cap signal
+CREATED_TODAY=$(grep -c "Sold Per" roll-scale-created.jsonl 2>/dev/null || echo 0)
+CAP_HIT=$(grep -ciE "budget|daily.*limit|cap .* reached" "$LOG" 2>/dev/null || echo 0)
+RANTODAY=$(grep -c "$(date '+%a %b %e')" "$LOG" 2>/dev/null || echo 0)
+
+# verdict
+if [ "$REMAIN" -eq 0 ] && [ "$BUILT" -ge "$BUILDABLE" ]; then
+ VERDICT="PASS"; MSG="All $BUILDABLE buildable Lee Jofa roll/yard variants built."
+elif [ "$BUILT" -gt 0 ]; then
+ VERDICT="PARTIAL"; MSG="$BUILT/$BUILDABLE built, $REMAIN remaining (resumes tomorrow under the daily variant cap — normal)."
+else
+ VERDICT="FAIL"; MSG="0 of $BUILDABLE built. Check $LOG (job fired today: $RANTODAY, cap/budget signal: $CAP_HIT)."
+fi
+SUMMARY="Lee Jofa 5:55am build verify [$VERDICT]: $MSG (built=$BUILT buildable=$BUILDABLE remain=$REMAIN)"
+echo "$SUMMARY" | tee "$REPORT"
+
+# report to CNCP (Steve watches localhost:3333)
+curl -s -X POST http://127.0.0.1:3333/api/wins \
+ -H 'Content-Type: application/json' \
+ -d "{\"project\":\"designerwallcoverings\",\"title\":\"Lee Jofa roll build — $VERDICT\",\"summary\":\"$MSG\",\"valueToday\":\"$BUILT/$BUILDABLE roll/yard variants at MAP\"}" \
+ >/dev/null 2>&1 || true
+
+# self-retire after first run (one-shot)
+launchctl bootout gui/$(id -u)/com.steve.lee-jofa-verify 2>/dev/null || true
diff --git a/scripts/versace-preamble-fix/fix-preamble-descriptions.mjs b/scripts/versace-preamble-fix/fix-preamble-descriptions.mjs
new file mode 100644
index 0000000..0ceb354
--- /dev/null
+++ b/scripts/versace-preamble-fix/fix-preamble-descriptions.mjs
@@ -0,0 +1,57 @@
+// fix-preamble-descriptions — replace AI-preamble-ONLY bodies with real, $0
+// deterministic descriptions composed from existing data (pattern+color+vendor+
+// material/width). 128 ACTIVE products (120 Versace +8). DRY-RUN by default;
+// --apply (GATED) sets descriptionHtml + seo.description via productUpdate.
+import fs from 'fs';
+const T=(fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1];
+const URL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const APPLY=process.argv.includes('--apply');
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(URL,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v||{}})});if(r.status===429){await sleep(2000);continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).match(/THROTTLED/)){await sleep(2000);continue;}return j;}throw new Error('throttled out');}
+const PRE=/^\s*(<p>\s*)?(okay,?\s*)?here('s|s| is| are)\s+a?\s*product\s+description[^<:]*:\s*(<\/p>)?\s*/i;
+const txt=h=>(h||'').replace(/<[^>]+>/g,'').replace(/&[a-z]+;/g,' ').replace(/\s+/g,' ').trim();
+// parse pattern/color from "Pattern - Color Wallcovering | Vendor"
+function parseTitle(title){
+ let t=title.split('|')[0].trim(); // drop "| Vendor"
+ t=t.replace(/\b(wallcovering|wallpaper|fabric)\b/ig,'').trim();
+ const dash=t.split(' - ');
+ return { pattern:(dash[0]||t).trim(), color:(dash.slice(1).join(' - ')||'').trim() };
+}
+function humanColor(c){ if(!c) return ''; const parts=c.split(/[\/,]| and | & |\s+/).map(s=>s.trim().toLowerCase()).filter(Boolean); const u=[...new Set(parts)]; if(u.length<=1) return u[0]||''; if(u.length===2) return u[0]+' and '+u[1]; return u.slice(0,-1).join(', ')+' and '+u.slice(-1); }
+function compose(p, mf){
+ const pt=parseTitle(p.title);
+ const pattern = mf['custom.pattern_name'] || pt.pattern;
+ const color = humanColor(pt.color || mf['custom.color']);
+ const material = (mf['custom.material']||'').trim();
+ let width = (mf["custom.width"]||"").trim().replace(/^([0-9.]+)[ ]*\((cm|in)\)$/i, "$1 $2");
+ let s=`${pattern} by ${p.vendor} is a`;
+ s += color ? ` ${color} wallcovering` : ` designer wallcovering`;
+ const facts=[];
+ if(material) facts.push(material.toLowerCase().replace(/\.$/,''));
+ if(width) facts.push(width.replace(/\.$/,''));
+ if(facts.length) s += `, ${facts.join(', ')}`;
+ s += `. Part of the ${p.vendor} collection at Designer Wallcoverings.`;
+ return `<p>${s}</p>`;
+}
+// collect the 128 + their metafields
+let cur=null; const items=[];
+do{
+ const j=await gql(`query($c:String){products(first:60,after:$c,query:"product description for the wallcovering"){pageInfo{hasNextPage endCursor} nodes{id handle title vendor status descriptionHtml mf:metafields(first:30,namespace:"custom"){nodes{key value}}}}}`,{c:cur});
+ const pg=j.data.products;
+ for(const n of pg.nodes){ if(n.status==='ACTIVE' && PRE.test(n.descriptionHtml||'') && txt((n.descriptionHtml||'').replace(PRE,'')).length<5){
+ const mf={}; for(const m of n.mf.nodes) mf['custom.'+m.key]=m.value;
+ items.push({id:n.id,handle:n.handle,vendor:n.vendor,title:n.title,oldBody:n.descriptionHtml,newBody:compose(n,mf)});
+ }}
+ cur=pg.pageInfo.hasNextPage?pg.pageInfo.endCursor:null;
+}while(cur);
+fs.writeFileSync('/tmp/preamble-fix-worklist.json',JSON.stringify(items,null,2));
+console.log(`${APPLY?'APPLY':'DRY-RUN'} — ${items.length} preamble-only ACTIVE products to fix`);
+const byV={}; items.forEach(i=>byV[i.vendor]=(byV[i.vendor]||0)+1); console.log('by vendor:',JSON.stringify(byV));
+console.log('\n=== sample BEFORE → AFTER (6) ===');
+for(const i of items.slice(0,6)){ console.log(`\n• ${i.handle}`); console.log(` OLD: ${txt(i.oldBody)||'(empty)'}`); console.log(` NEW: ${txt(i.newBody)}`); }
+if(!APPLY){ console.log(`\nDRY-RUN only. Worklist: /tmp/preamble-fix-worklist.json. To apply (GATED): node scripts/versace-preamble-fix/fix-preamble-descriptions.mjs --apply`); process.exit(0); }
+console.log('\nAPPLYING productUpdate (descriptionHtml + seo.description)...');
+const M=`mutation($id:ID!,$html:String!,$seo:String!){productUpdate(input:{id:$id,descriptionHtml:$html,seo:{description:$seo}}){userErrors{message}}}`;
+let ok=0,fail=0;
+for(const i of items){ try{ const seo=txt(i.newBody).slice(0,300); const r=await gql(M,{id:i.id,html:i.newBody,seo}); const ue=r.data?.productUpdate?.userErrors; if(ue&&ue.length)throw new Error(ue[0].message); ok++; if(ok%20===0)console.log(` ${ok}...`);}catch(e){fail++;console.log(` ✗ ${i.handle}: ${e.message.slice(0,60)}`);} await sleep(300); }
+console.log(`DONE: ${ok} fixed, ${fail} failed`);
diff --git a/scripts/worker-registry-monitor/monitor.mjs b/scripts/worker-registry-monitor/monitor.mjs
new file mode 100644
index 0000000..71cab0f
--- /dev/null
+++ b/scripts/worker-registry-monitor/monitor.mjs
@@ -0,0 +1,122 @@
+#!/usr/bin/env node
+'use strict';
+/**
+ * Worker Registry Monitor (Mac2-local, READ-ONLY).
+ *
+ * Born 2026-06-17 after a Kamatera queue worker died UNNOTICED for 2 months.
+ * Auto-discovers every com.steve.* LaunchAgent, joins it to worker-registry.json
+ * (owner / by-design state / prod flag), and classifies each:
+ * UNLOADED — plist on disk but not loaded into launchctl (will never fire)
+ * FAILING — loaded but last exit ≠ 0 (incl. signal kills like OOM sig9)
+ * INTENTIONAL— UNLOADED/odd but flagged by-design (parked/paused/disabled/viewer)
+ * OK — loaded, last exit 0
+ * Writes data/latest.json (its own heartbeat for the meta-watchdog) + prints a
+ * table grouped by owning officer. Flags problems; NEVER loads/unloads/re-arms
+ * anything (re-arming drain-all-queues etc. is a gated hazard).
+ *
+ * Phase-2 (not here): heartbeat stamps per worker + Kamatera plane via the
+ * cncp-drift-sentinel extension (queue drain-age by mechanism, not pm2 status).
+ */
+import { execSync } from 'node:child_process';
+import { readFileSync, writeFileSync, readdirSync, mkdirSync, existsSync, unlinkSync } from 'node:fs';
+import { homedir } from 'node:os';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const HOME = homedir();
+const LA_DIR = join(HOME, 'Library', 'LaunchAgents');
+const REG = JSON.parse(readFileSync(join(HERE, 'worker-registry.json'), 'utf8'));
+const DATA = join(HERE, 'data');
+const PREFIX = 'com.steve.';
+
+// invert owner map: label -> officer
+const ownerOf = {};
+for (const [vp, labels] of Object.entries(REG.owners || {})) for (const l of labels) ownerOf[l] = vp;
+const byDesign = REG.by_design_state || {};
+const prodSet = new Set(REG.prod || []);
+
+// 1) all com.steve.* plists on disk (known workers)
+const known = readdirSync(LA_DIR)
+ .filter(f => f.startsWith(PREFIX) && f.endsWith('.plist'))
+ .map(f => f.slice(PREFIX.length, -'.plist'.length));
+
+// 2) loaded jobs + last exit status from launchctl list
+const loaded = {}; // short label -> exit status (string)
+for (const line of execSync('launchctl list', { encoding: 'utf8' }).split('\n')) {
+ const m = line.match(/^(\S+)\s+(\S+)\s+(com\.steve\.\S+)$/);
+ if (m) loaded[m[3].slice(PREFIX.length)] = { pid: m[1], status: m[2] };
+}
+
+const rows = [];
+for (const label of new Set([...known, ...Object.keys(loaded)])) {
+ const onDisk = known.includes(label);
+ const live = loaded[label];
+ const design = byDesign[label];
+ const isViewerOrAlwaysOn = design && /viewer|always-on/.test(design);
+ let state, detail;
+
+ if (!live && onDisk) {
+ state = design ? 'INTENTIONAL' : 'UNLOADED';
+ detail = design || 'plist on disk but not loaded — will never fire';
+ } else if (!live && !onDisk) {
+ state = 'INTENTIONAL'; detail = 'loaded transiently / no plist — skip';
+ } else if (live.status !== '0' && live.status !== '-') {
+ // negative = signal (e.g. -9 OOM, -15 TERM); positive = exit code
+ state = isViewerOrAlwaysOn ? 'OK' : 'FAILING';
+ detail = `last exit ${live.status}` + (live.status.startsWith('-') ? ` (signal ${live.status.slice(1)})` : '');
+ } else {
+ state = 'OK'; detail = live.pid !== '-' ? `running pid ${live.pid}` : 'idle, last exit 0';
+ }
+
+ rows.push({ label, owner: ownerOf[label] || 'UNASSIGNED', prod: prodSet.has(label), state, detail });
+}
+
+rows.sort((a, b) => (a.owner > b.owner ? 1 : a.owner < b.owner ? -1 : a.label > b.label ? 1 : -1));
+
+const problems = rows.filter(r => r.state === 'UNLOADED' || r.state === 'FAILING' || r.owner === 'UNASSIGNED');
+const ts = execSync('date -u +%Y-%m-%dT%H:%M:%SZ', { encoding: 'utf8' }).trim();
+
+// console table grouped by owner
+const C = { reset: '\x1b[0m', red: '\x1b[31m', yel: '\x1b[33m', grn: '\x1b[32m', dim: '\x1b[2m', bold: '\x1b[1m' };
+const color = s => s === 'FAILING' ? C.red : s === 'UNLOADED' ? C.yel : s === 'INTENTIONAL' ? C.dim : C.grn;
+console.log(`${C.bold}Worker Registry Monitor${C.reset} ${ts} ${rows.length} workers · ${problems.length} need attention\n`);
+let lastOwner = '';
+for (const r of rows) {
+ if (r.owner !== lastOwner) { console.log(`${C.bold}${r.owner}${C.reset}`); lastOwner = r.owner; }
+ const flag = r.prod ? ' [prod]' : '';
+ console.log(` ${color(r.state)}${r.state.padEnd(11)}${C.reset} ${r.label.padEnd(40)}${C.dim}${r.detail}${flag}${C.reset}`);
+}
+console.log(`\n${C.bold}Needs attention (${problems.length}):${C.reset}`);
+for (const p of problems) console.log(` ${color(p.state)}${p.state}${C.reset} ${p.label} → owner ${p.owner}${p.prod ? ' [PROD — revive is gated]' : ''}`);
+
+if (!existsSync(DATA)) mkdirSync(DATA, { recursive: true });
+writeFileSync(join(DATA, 'latest.json'), JSON.stringify({
+ generatedAt: ts, total: rows.length, problemCount: problems.length, rows, problems
+}, null, 2));
+
+// refresh ONE canonical CNCP approval card (propose-only — never executes a revive).
+// CNCP /api/approvals live-reads this dir; a stable filename keeps it current in place.
+const CARD = join(HOME, '.claude', 'yolo-queue', 'pending-approval', 'worker-revive-triage.md');
+const revivable = problems.filter(p => p.state === 'UNLOADED' || p.state === 'FAILING');
+try {
+ if (revivable.length) {
+ const byOwner = {};
+ for (const p of revivable) (byOwner[p.owner] ||= []).push(p);
+ let body = `# GATED — Worker revive/retire triage (${revivable.length} dead/failing workers)\n\n`;
+ body += `**Refreshed:** ${ts} (worker-registry-monitor) · **Status: AWAITING STEVE — nothing executed**\n`;
+ body += `**Why:** a Kamatera queue worker died unnoticed 2 months. Every UNLOADED/FAILING com.steve.* worker, routed to its owning officer; each needs a per-worker REVIVE or RETIRE call. PROD ones hard-gated.\n\n`;
+ for (const [o, list] of Object.entries(byOwner)) {
+ body += `## ${o}\n`;
+ for (const p of list) body += `- **${p.state}** \`${p.label}\`${p.prod ? ' — [PROD — revive gated]' : ''} — ${p.detail}\n`;
+ body += '\n';
+ }
+ body += `## Do NOT auto-revive (parked by design — flagged so they aren't "fixed" by mistake)\n`;
+ body += `- \`drain-all-queues\` (mirror-clobber re-arm hazard) · \`import-queue-drain\` (paused) · \`kravet-roll-variants\` (stale 2021 MAP)\n\n`;
+ body += `## Gate\nEach revive is a prod/launchd change — Steve-approved per worker. This monitor is read-only; it never loads/unloads/re-arms.\n`;
+ mkdirSync(dirname(CARD), { recursive: true });
+ writeFileSync(CARD, body);
+ } else if (existsSync(CARD)) {
+ unlinkSync(CARD); // all healthy → clear the card so CNCP isn't showing a stale one
+ }
+} catch (e) { /* never let card-refresh break the monitor */ }
diff --git a/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs b/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
new file mode 100644
index 0000000..f0daa70
--- /dev/null
+++ b/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
@@ -0,0 +1,140 @@
+// zero-dollar-orderable-canary — READ-ONLY, $0. Cycle 78 (DTD-B unanimous).
+// A DURABLE standing guard for the most SEVERE class this run found: orderable zero-dollar
+// variants = free-checkout (P1; c67-c71 bounded 145 live). NO standing detector existed.
+// Operationalizes the c75 spec's top line, hardened per c77.
+//
+// Scans status:active + status:draft (STATUS-AGNOSTIC except archived — archived can't be
+// ordered; DRAFT zero-dollar is the latent-activation landmine the c69 officer named).
+// Flags ANY variant priced 0 that is ORDERABLE (availableForSale OR inventoryPolicy=CONTINUE),
+// ANY position. Groups by vendor + status. HEALTHY = 0 active orderable-zero-dollar.
+//
+// c77 hardening / discipline:
+// - ABORT-ON-PARTIAL: if pagination errors mid-scan, a "0 found" is a FALSE-CLEAN → report
+// INCONCLUSIVE, never HEALTHY, on an incomplete scan.
+// - COVERAGE GATE / negative control: the known Ralph Lauren zero-dollar set (~111) MUST be
+// reproduced; if the scan finds ~0 RL, coverage failed (don't trust a clean result).
+// - This is an absolute gate (target count = 0), not a baseline-drift check, so no rerun-
+// confirm needed (a $0 DB state isn't a transient network blip; abort-on-partial covers
+// the under-count risk). exit 3 on live ACTIVE exposure, 0 if clean, 2 if inconclusive.
+// EXCLUDES Phillip Jeffries. Read-only Admin GraphQL; never a mutation.
+import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=((ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1]||'').replace(/['"\r]/g,'').trim(); // c78-officer: guard missing token
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const MIN_ACTIVE_SCAN=Number(process.env.MIN_ACTIVE_SCAN||50000); // completeness floor (real active ~71.7k); survives the RL reprice (decoupled from $0 content)
+const BASE_DIR=path.dirname(fileURLToPath(import.meta.url)); const DATA_DIR=path.join(BASE_DIR,'data');
+const ACK_FILE=path.join(BASE_DIR,'ack-baseline.json'); // acknowledged-pending-fix set (c80, c78/c79 officer design)
+const ACK_SEED=process.env.ACK_SEED==='1'; // ACK_SEED=1: write current hits as the acknowledged set, exit 0
+const SELFTEST=process.env.SELFTEST==='1'; // SELFTEST=1: classify a synthetic dataset (no GraphQL) to prove ack logic
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+// tuple key: handle#position#status — keying on status means a DRAFT-acknowledged $0 that ACTIVATES
+// (draft→active) appears as a NEW tuple and fires (latent→live escalation), not silently acknowledged.
+const tup=h=>(h.pos||[]).map(p=>`${h.h}#${p}#${h.status}`);
+function loadAck(){ try{ return new Set(JSON.parse(fs.readFileSync(ACK_FILE,'utf8')).tuples||[]); }catch{ return null; } }
+// SET-DIFFERENCE (NOT count-delta, per c78 officer): a NEW hit = a tuple not in the acknowledged set.
+function classify(hits, ack){ const nw=[], ak=[]; for(const h of hits){ for(const t of tup(h)){ (ack&&ack.has(t)?ak:nw).push({...h,tuple:t}); } } return {nw, ak}; }
+async function gql(q,v){for(let a=0;a<6;a++){try{const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}catch(e){await sleep(1500*(a+1));}}return null;}
+
+// c78-officer fix: fetch inventoryQuantity (DENY+stock>0 IS orderable — was a false-clean hole);
+// variants(first:100) + pageInfo so a >100-variant product's truncation is OBSERVABLE, not silent.
+const Q=`query($cursor:String,$q:String!){ products(first:100, after:$cursor, query:$q){ pageInfo{hasNextPage endCursor} edges{node{handle vendor status variants(first:100){pageInfo{hasNextPage} edges{node{price position inventoryPolicy availableForSale inventoryQuantity}}}}} } }`;
+// orderable iff price 0 AND can actually transact: oversell allowed OR has stock OR storefront says available
+const isOrderableZero=v=> parseFloat(v.price)===0 && (v.inventoryPolicy==='CONTINUE' || (Number.isFinite(v.inventoryQuantity)&&v.inventoryQuantity>0) || v.availableForSale===true);
+
+async function scanStatus(statusQ){
+ let cursor=null, pages=0, scanned=0, complete=true, truncated=0; const hits=[];
+ while(true){
+ const j=await gql(Q,{cursor,q:statusQ});
+ if(!j||!j.data){ complete=false; break; }
+ const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||'')) continue; scanned++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node);
+ if(n.variants?.pageInfo?.hasNextPage) truncated++; // >100 variants: a $0 past 100 is unverified
+ const z=vs.filter(isOrderableZero);
+ if(z.length){ hits.push({h:n.handle,vendor:n.vendor,status:n.status,n:z.length,pos:z.map(v=>v.position)}); }
+ }
+ pages++; if(!c.pageInfo.hasNextPage) break; cursor=c.pageInfo.endCursor;
+ const cost=j.extensions?.cost?.throttleStatus; if(cost&&cost.currentlyAvailable<800) await sleep(1500); else await sleep(220);
+ }
+ return {scanned, pages, complete, truncated, hits};
+}
+
+console.log(`=== zero-dollar-orderable-canary (READ-ONLY Admin GraphQL, $0) ===`);
+// SELFTEST: prove the ack-baseline set-difference logic without a 10-min GraphQL scan.
+if(SELFTEST){
+ const ack=new Set(['known-a#1#ACTIVE','known-b#2#DRAFT']);
+ const hits=[{h:'known-a',status:'ACTIVE',pos:[1]},{h:'known-b',status:'DRAFT',pos:[2]},{h:'NEW-import',status:'ACTIVE',pos:[1]}];
+ const {nw,ak}=classify(hits,ack);
+ const pass = nw.length===1 && nw[0].h==='NEW-import' && ak.length===2;
+ console.log(`SELFTEST: acknowledged=${ak.length} (expect 2), NEW=${nw.length} (expect 1: ${nw.map(x=>x.h).join(',')})`);
+ // also prove draft->active escalation: a draft-acknowledged tuple seen ACTIVE = NEW
+ const esc=classify([{h:'known-b',status:'ACTIVE',pos:[2]}],ack);
+ const escPass = esc.nw.length===1;
+ console.log(`SELFTEST escalation (draft-ack tuple now ACTIVE): NEW=${esc.nw.length} (expect 1) → ${escPass?'fires':'MISS'}`);
+ console.log(`SELFTEST: ${pass&&escPass?'PASS':'FAIL'}`);
+ process.exit(pass&&escPass?0:1);
+}
+if(!TOK){ console.log('🔴 INCONCLUSIVE: SHOPIFY_ADMIN_TOKEN missing — cannot scan'); fs.mkdirSync(DATA_DIR,{recursive:true}); fs.writeFileSync(path.join(DATA_DIR,'latest.json'),JSON.stringify({ts:new Date().toISOString(),verdict:'INCONCLUSIVE',reason:'no token'},null,2)); process.exitCode=2; process.exit(2); }
+const act=await scanStatus('status:active');
+const dft=await scanStatus('status:draft');
+const complete = act.complete && dft.complete;
+console.log(`active: scanned ${act.scanned} (${act.pages}p, complete=${act.complete}, >100-var trunc=${act.truncated}) | orderable-$0 hits ${act.hits.length}`);
+console.log(`draft: scanned ${dft.scanned} (${dft.pages}p, complete=${dft.complete}, >100-var trunc=${dft.truncated}) | orderable-$0 hits ${dft.hits.length}`);
+
+// COVERAGE GATE decoupled from the remediated content (c78-officer): a scan-completeness FLOOR,
+// not an RL fingerprint (RL=111 would brick to INCONCLUSIVE the moment Steve fixes the RL set).
+// Trust the result iff the crawl completed AND the active scan saw a plausible full catalog.
+const coverageOk = complete && act.scanned>=MIN_ACTIVE_SCAN;
+const rlActive=act.hits.filter(h=>/ralph/i.test(h.vendor||'')).length; // informational context only, NOT a gate
+console.log(`\nCOVERAGE GATE: complete=${complete} + activeScanned ${act.scanned} >= floor ${MIN_ACTIVE_SCAN} → ${coverageOk?'PASS':'FAIL (scan incomplete/blind)'} [RL $0 = ${rlActive}, info only]`);
+if(act.truncated+dft.truncated>0) console.log(` ⚠️ ${act.truncated+dft.truncated} products have >100 variants → a $0 past position 100 is UNVERIFIED (observable, not silent)`);
+
+// vendor/status breakdown
+function vb(hits){ const m={}; hits.forEach(h=>{const k=`${h.vendor}|${h.status}`; m[k]=(m[k]||0)+1;}); return Object.entries(m).sort((a,b)=>b[1]-a[1]).slice(0,12); }
+console.log(`\nactive orderable-$0 by vendor:`); vb(act.hits).forEach(([k,n])=>console.log(` ${k}: ${n}`));
+if(dft.hits.length){ console.log(`DRAFT orderable-$0 (latent activation landmine) by vendor:`); vb(dft.hits).forEach(([k,n])=>console.log(` ${k}: ${n}`)); }
+
+const allHits=[...act.hits,...dft.hits];
+fs.mkdirSync(DATA_DIR,{recursive:true});
+
+// ACK_SEED mode: record the CURRENT orderable-$0 set as acknowledged-pending-fix, then exit clean.
+// (Only meaningful on a complete scan — never seed off a partial/blind crawl.)
+if(ACK_SEED){
+ if(!coverageOk){ console.log(`\n🔴 refusing to seed off an incomplete scan (coverageOk=false)`); process.exit(2); }
+ const tuples=allHits.flatMap(tup);
+ fs.writeFileSync(ACK_FILE, JSON.stringify({ts:new Date().toISOString(),note:'acknowledged-pending-fix orderable-$0 set (c80); alert only on NEW tuples beyond this',count:tuples.length,activeHits:act.hits.length,draftHits:dft.hits.length,tuples},null,2));
+ console.log(`\nACK_SEED → wrote ${ACK_FILE} with ${tuples.length} acknowledged tuples (${act.hits.length} active + ${dft.hits.length} draft). Re-baseline to 0 after the gated reprice (delete this file + ACK_SEED again, or just delete once fixed).`);
+ process.exit(0);
+}
+
+const ack=loadAck(); // null if not seeded yet
+const {nw,ak}=classify(allHits, ack);
+const alerts=[];
+if(!coverageOk){
+ alerts.push(`INCONCLUSIVE: scan incomplete/blind (complete=${complete}, activeScanned=${act.scanned} vs floor ${MIN_ACTIVE_SCAN}) — a "0 found" cannot be trusted`);
+} else if(ack===null){
+ // no acknowledged baseline yet → behave as the absolute gate (every hit is "live"); prompts Steve to seed
+ if(act.hits.length>0) alerts.push(`LIVE FREE-CHECKOUT: ${act.hits.length} ACTIVE orderable zero-dollar (no ack-baseline yet — run once with ACK_SEED=1 to acknowledge the known set, then this alerts only on NEW)`);
+ if(dft.hits.length>0) alerts.push(`LATENT: ${dft.hits.length} DRAFT orderable zero-dollar`);
+} else {
+ // SET-DIFFERENCE: loud only on NEW (a tuple not acknowledged = a regression / bad import / draft→active escalation)
+ const newActive=nw.filter(x=>x.status==='ACTIVE'), newDraft=nw.filter(x=>x.status!=='ACTIVE');
+ if(newActive.length>0) alerts.push(`NEW LIVE FREE-CHECKOUT: ${newActive.length} orderable zero-dollar NOT in the acknowledged set (regression / bad import / draft→active) — e.g. ${newActive.slice(0,5).map(x=>x.h).join(', ')}`);
+ if(newDraft.length>0) alerts.push(`NEW LATENT: ${newDraft.length} draft orderable zero-dollar not acknowledged`);
+}
+if(coverageOk && act.truncated+dft.truncated>0) alerts.push(`UNVERIFIED: ${act.truncated+dft.truncated} products >100 variants — $0 past position 100 not checked`);
+
+let verdict;
+if(!coverageOk) verdict='INCONCLUSIVE';
+else if(alerts.some(a=>/^NEW|^LIVE FREE-CHECKOUT|^LATENT/.test(a))) verdict='ALERT';
+else verdict='HEALTHY';
+console.log(`\nacknowledged-pending-fix: ${ack?ak.length:'(none — not seeded)'} | NEW (beyond acknowledged): ${ack?nw.length:'n/a'}`);
+console.log(`=== VERDICT: ${verdict} ===`);
+if(alerts.length) alerts.forEach(a=>console.log(` 🔴 ${a}`)); else console.log(` 🟢 0 NEW orderable zero-dollar beyond the acknowledged set (${ack?ak.length:0} known-open, quietly tracked)`);
+
+const result={ts:new Date().toISOString(),verdict,activeScanned:act.scanned,draftScanned:dft.scanned,complete,coverageOk,rlActive,activeHits:act.hits.length,draftHits:dft.hits.length,acknowledged:ack?ak.length:null,newBeyondAck:ack?nw.length:null,newSample:nw.slice(0,15),activeByVendor:vb(act.hits),draftByVendor:vb(dft.hits),alerts};
+fs.writeFileSync('/tmp/zero-dollar-orderable-canary.json',JSON.stringify(result,null,2));
+fs.writeFileSync(path.join(DATA_DIR,'latest.json'),JSON.stringify(result,null,2)); // heartbeat for meta-watchdog
+console.log(`\nwrote /tmp/zero-dollar-orderable-canary.json + data/latest.json`);
+process.exitCode = verdict==='HEALTHY'?0 : verdict==='INCONCLUSIVE'?2 : 3;
diff --git a/scripts/zero-roll-rootcause/era-33-diagnosis.mjs b/scripts/zero-roll-rootcause/era-33-diagnosis.mjs
new file mode 100644
index 0000000..4e2600e
--- /dev/null
+++ b/scripts/zero-roll-rootcause/era-33-diagnosis.mjs
@@ -0,0 +1,26 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const PJ=/phillip[- ]?jeffries/i;
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active"){ pageInfo{hasNextPage endCursor} edges{node{handle vendor variants(first:15){edges{node{title price position inventoryPolicy createdAt sku}}}}} } }`;
+let cursor=null, pages=0; const z=[];
+while(pages<110){ const j=await gql(Q,{cursor}); if(!j?.data)break; const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; if(PJ.test(n.vendor||''))continue;
+ const vs=(n.variants?.edges||[]).map(x=>x.node).map(v=>({t:v.title,price:parseFloat(v.price),pos:v.position,ip:v.inventoryPolicy,created:v.createdAt,sku:v.sku})).filter(v=>!isNaN(v.price));
+ if(vs.length<2)continue; const p1=vs.find(v=>v.pos===1)||vs[0]; const zeros=vs.filter(v=>v.price===0);
+ if(p1.price!==0 && zeros.length){ zeros.forEach(zv=>z.push({h:n.handle,vendor:n.vendor,title:zv.t,created:zv.created,sku:zv.sku,ip:zv.ip})); } }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; if(z.length>=40)break; await sleep(220);
+}
+console.log(`zero-roll variants found: ${z.length}`);
+const years={}, titles={}, ipc={};
+z.forEach(v=>{ const y=(v.created||'').slice(0,4); years[y]=(years[y]||0)+1; titles[v.title]=(titles[v.title]||0)+1; ipc[v.ip]=(ipc[v.ip]||0)+1; });
+console.log('by creation YEAR:', JSON.stringify(years));
+console.log('by variant TITLE:', JSON.stringify(titles));
+console.log('by inventoryPolicy:', JSON.stringify(ipc));
+const recent=z.filter(v=>(v.created||'')>='2026-01-01');
+console.log(`\nany created in 2026 (would implicate a CURRENT pipeline): ${recent.length}`);
+recent.slice(0,5).forEach(v=>console.log(' ',v.h,v.created));
+console.log('\nSKU pattern check (roll variant sku vs handle):'); z.slice(0,4).forEach(v=>console.log(` ${v.h.slice(0,34)} roll-sku=${v.sku} title="${v.title}"`));
diff --git a/scripts/zero-sample-sweep/zero-sample-sweep-v2.mjs b/scripts/zero-sample-sweep/zero-sample-sweep-v2.mjs
new file mode 100644
index 0000000..d8d669b
--- /dev/null
+++ b/scripts/zero-sample-sweep/zero-sample-sweep-v2.mjs
@@ -0,0 +1,68 @@
+// zero-sample-sweep-v2 — READ-ONLY, $0. Cycle 68 (officer-specified P1 sizing).
+// v1 FAILED coverage: global /products.json caps at page 100 (~25k of ~74k) and the
+// known 111 RL $0-Sample positives sit BEYOND that cap → v1 found 0 and its own negative
+// control flagged "RL not reproduced". v2 enumerates the catalog by COLLECTION (the 572
+// collections collectively cover the catalog), pages each, DEDUPES products by id, and
+// classifies by the P1 signature: single-variant + title~"Sample" + price $0 + available.
+// NEGATIVE CONTROL (hard gate): must reproduce RL ~111; if it doesn't, coverage is still
+// incomplete and the total is a LOWER BOUND (stated as such).
+// EXCLUDES Phillip Jeffries.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<5;a++){const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(2500*(a+1));continue;}return{status:r.status,text:await r.text()};}return{status:429,text:''};}
+const PJ=/phillip[- ]?jeffries/i;
+const isSample=t=>/sample/i.test(t||'');
+function classify(p){ const vs=p.variants||[]; if(vs.length!==1) return 'multi'; const price=parseFloat(vs[0].price); if(isNaN(price)) return 'multi';
+ if(!isSample(vs[0].title)) return price===0?'zero-nonsample':'ok-single';
+ if(price===0) return 'zero-sample'; if(price===4.25) return 'ok-425'; return 'abnormal-sample'; }
+
+// collection handles from the en collections sitemap
+const idx=await get(`${WWW}/sitemap.xml`);
+const collMaps=[...idx.text.matchAll(/<loc>([^<]+sitemap_collections_\d+\.xml[^<]*)<\/loc>/g)].map(m=>m[1].replace(/&/g,'&')).filter(u=>!/\/en-(ca|gb)\//.test(u));
+let colls=[]; for(const sm of collMaps){ const x=await get(sm); colls.push(...[...x.text.matchAll(/<loc>[^<]*\/collections\/([^<\/?]+)/g)].map(m=>m[1])); }
+colls=[...new Set(colls)];
+console.log(`=== zero-sample-sweep-v2 (READ-ONLY, $0) ===\nenumerating ${colls.length} collections, deduped by product id (PJ excluded)\n`);
+
+const seen=new Map(); // id -> classification (dedupe across collections)
+const vendorOf=new Map();
+let reqs=0, collDone=0;
+for(const h of colls){
+ let page=1;
+ while(page<=12){
+ const r=await get(`${WWW}/collections/${h}/products.json?limit=250&page=${page}`); reqs++;
+ let ps=[]; try{ps=JSON.parse(r.text).products||[];}catch{break;}
+ if(ps.length===0) break;
+ for(const p of ps){ if(PJ.test(p.vendor||'')) continue; if(!seen.has(p.id)){ seen.set(p.id,classify(p)); vendorOf.set(p.id,p.vendor||'(none)'); } }
+ page++; await sleep(120);
+ }
+ collDone++;
+ if(collDone%80===0){ let zs=0; for(const c of seen.values()) if(c==='zero-sample')zs++; console.log(` ${collDone}/${colls.length} collections | unique products=${seen.size} | zero-sample=${zs}`); }
+}
+
+// tally
+let zeroSample=0, abnormal=0, zeroNon=0, ok425=0, okSingle=0, multi=0;
+const vendZero={}, vendAbn={};
+for(const [id,c] of seen){ const v=vendorOf.get(id);
+ if(c==='zero-sample'){ zeroSample++; vendZero[v]=(vendZero[v]||0)+1; }
+ else if(c==='abnormal-sample'){ abnormal++; vendAbn[v]=(vendAbn[v]||0)+1; }
+ else if(c==='zero-nonsample') zeroNon++;
+ else if(c==='ok-425') ok425++; else if(c==='ok-single') okSingle++; else multi++;
+}
+console.log(`\n=== RESULTS (unique products across all collections: ${seen.size}; HTTP reqs: ${reqs}) ===`);
+console.log(` ZERO-SAMPLE (P1 free-checkout signature): ${zeroSample}`);
+console.log(` abnormal-sample (single Sample, non-$0/non-$4.25): ${abnormal}`);
+console.log(` zero-NONsample (single $0, not titled Sample): ${zeroNon}`);
+console.log(` ok $4.25 sample: ${ok425} | ok single: ${okSingle} | multi: ${multi}`);
+console.log(`\n vendors with ZERO-SAMPLE bug:`);
+Object.entries(vendZero).sort((a,b)=>b[1]-a[1]).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+if(Object.keys(vendAbn).length){ console.log(` vendors with abnormal-sample price:`); Object.entries(vendAbn).sort((a,b)=>b[1]-a[1]).slice(0,12).forEach(([v,n])=>console.log(` ${v}: ${n}`)); }
+
+const rl=Object.entries(vendZero).filter(([v])=>/ralph/i.test(v)).reduce((s,[,n])=>s+n,0);
+console.log(`\n-- NEGATIVE CONTROL (coverage gate) --`);
+console.log(` Ralph Lauren zero-sample reproduced: ${rl} (c67 found 111) → ${rl>=100?'COVERAGE OK — total is a credible fleet count':rl>0?'PARTIAL — total is a LOWER BOUND':'FAILED — RL not covered, total unreliable'}`);
+console.log(` unique products covered: ${seen.size} of ~74k (${(100*seen.size/74000).toFixed(0)}%)`);
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/zero-sample-sweep-v2.json',JSON.stringify({ts:new Date().toISOString(),collections:colls.length,uniqueProducts:seen.size,reqs,zeroSample,abnormal,zeroNon,ok425,okSingle,multi,vendZero,vendAbn,rlReproduced:rl},null,2));
+console.log('\nwrote /tmp/zero-sample-sweep-v2.json');
diff --git a/scripts/zero-sample-sweep/zero-sample-sweep.mjs b/scripts/zero-sample-sweep/zero-sample-sweep.mjs
new file mode 100644
index 0000000..7123fb7
--- /dev/null
+++ b/scripts/zero-sample-sweep/zero-sample-sweep.mjs
@@ -0,0 +1,86 @@
+// zero-sample-sweep — READ-ONLY, $0. Cycle 68 (DTD-picked A, unanimous).
+// Sizes the c67 P1 by the OFFICER-SPECIFIED SIGNATURE across vendors:
+// single-variant + variant title ~ "Sample" + price == $0.00 + available==true
+// = an orderable $0 sample = free-checkout exposure (the RL bug, 111 found in c67).
+// METHOD: (Phase 1) discovery scan of the reachable global /products.json (Shopify
+// caps unauth at page 100 = ~25k of ~74k → coverage caveat NAMED), classify by signature,
+// GROUP affected by vendor. (Phase 2) for each affected vendor, page its full
+// /collections/<handle>/products.json for the COMPLETE per-vendor count (reaches products
+// beyond the 25k cap). Secondary bucket: single-variant "Sample" at a non-$0/non-$4.25
+// price (mis-seed in other directions). NEGATIVE CONTROL: count a healthy multi-variant
+// priced product as NOT-defect + reproduce RL in the affected-vendor list.
+// EXCLUDES Phillip Jeffries.
+const WWW='https://www.designerwallcoverings.com';
+const UA='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function get(u){for(let a=0;a<5;a++){const r=await fetch(u,{headers:{'User-Agent':UA}});if(r.status===429){await sleep(2500*(a+1));continue;}return{status:r.status,text:await r.text()};}return{status:429,text:''};}
+const PJ=/phillip[- ]?jeffries/i;
+const isSample=t=>/sample/i.test(t||'');
+function classify(p){
+ const vs=p.variants||[];
+ if(vs.length!==1) return 'multi';
+ const v=vs[0]; const price=parseFloat(v.price);
+ if(isNaN(price)) return 'multi';
+ if(!isSample(v.title)) return price===0?'zero-nonsample':'ok-single';
+ // single-variant Sample:
+ if(price===0) return 'zero-sample'; // THE P1 signature
+ if(price===4.25) return 'ok-sample-425'; // legit showroom-line
+ return 'abnormal-sample'; // mis-seed other direction
+}
+
+// ---- Phase 1: discovery scan of reachable /products.json (cap ~page 100) ----
+console.log(`=== zero-sample-sweep (READ-ONLY, $0) ===\nPhase 1: discovery scan of reachable /products.json (cap ~25k of ~74k)\n`);
+let scanned=0, zeroSample=0, abnormalSample=0, zeroNonsample=0, okSingle=0, ok425=0, multi=0, pjSkip=0;
+const vendZero={}, vendAbnormal={}; const zeroExamples=[], multiCtrl=[];
+for(let page=1; page<=100; page++){
+ const r=await get(`${WWW}/products.json?limit=250&page=${page}`);
+ let ps=[]; try{ps=JSON.parse(r.text).products||[];}catch{}
+ if(ps.length===0) break;
+ for(const p of ps){
+ if(PJ.test(p.vendor||'')){ pjSkip++; continue; }
+ scanned++;
+ const c=classify(p);
+ if(c==='zero-sample'){ zeroSample++; vendZero[p.vendor]=(vendZero[p.vendor]||0)+1; if(zeroExamples.length<8) zeroExamples.push({h:p.handle,vendor:p.vendor,avail:p.variants[0].available}); }
+ else if(c==='abnormal-sample'){ abnormalSample++; vendAbnormal[p.vendor]=(vendAbnormal[p.vendor]||0)+1; }
+ else if(c==='zero-nonsample') zeroNonsample++;
+ else if(c==='ok-single') okSingle++;
+ else if(c==='ok-sample-425') ok425++;
+ else { multi++; if(multiCtrl.length<4) multiCtrl.push({h:p.handle,prices:(p.variants||[]).map(v=>v.price)}); }
+ }
+ if(page%20===0) console.log(` page ${page}/100 scanned=${scanned} zero-sample=${zeroSample}`);
+ await sleep(250);
+}
+console.log(`\n--- Phase 1 results (${scanned} products scanned, ~${(100*scanned/74000).toFixed(0)}% of fleet) ---`);
+console.log(` zero-sample (P1 signature): ${zeroSample}`);
+console.log(` abnormal-sample (non-$0,non-$4.25): ${abnormalSample}`);
+console.log(` zero-NONsample (single $0, not titled Sample): ${zeroNonsample}`);
+console.log(` ok single-variant: ${okSingle} | ok $4.25 sample: ${ok425} | multi-variant: ${multi} | PJ-skip: ${pjSkip}`);
+console.log(`\n vendors with zero-sample bug (in-scan counts):`);
+Object.entries(vendZero).sort((a,b)=>b[1]-a[1]).forEach(([v,n])=>console.log(` ${v}: ${n}`));
+
+// ---- Phase 2: per affected vendor, full collection count ----
+console.log(`\nPhase 2: full per-vendor collection counts (reaches beyond the 25k cap)`);
+const vendHandle=v=>(v||'').toLowerCase().trim().replace(/&/g,'').replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'');
+const vendorFull={};
+for(const v of Object.keys(vendZero)){
+ const h=vendHandle(v); let total=0, zs=0, page=1, ok=false;
+ while(page<=12){ const r=await get(`${WWW}/collections/${h}/products.json?limit=250&page=${page}`); let ps=[]; try{ps=JSON.parse(r.text).products||[];}catch{break;} if(ps.length===0)break; ok=true;
+ for(const p of ps){ if(PJ.test(p.vendor||''))continue; total++; if(classify(p)==='zero-sample') zs++; } page++; await sleep(250); }
+ vendorFull[v]={handle:h, collectionFound:ok, total, zeroSample:zs};
+ console.log(` ${v} (/collections/${h}): ${ok?`${zs} zero-sample of ${total} total`:'collection-handle not found → in-scan count only'}`);
+}
+
+const grandZeroFull=Object.values(vendorFull).reduce((s,x)=>s+(x.collectionFound?x.zeroSample:0),0);
+const inScanOnlyVendors=Object.values(vendorFull).filter(x=>!x.collectionFound);
+console.log(`\n=== TOTALS ===`);
+console.log(`zero-sample (P1) — full count for vendors w/ resolvable collection: ${grandZeroFull}`);
+console.log(`zero-sample — Phase-1 in-scan total (lower bound, all vendors): ${zeroSample}`);
+if(inScanOnlyVendors.length) console.log(`(${inScanOnlyVendors.length} affected vendor(s) had no resolvable collection handle → counted only within the 25k scan)`);
+console.log(`\n-- NEGATIVE CONTROL --`);
+console.log(` healthy multi-variant priced (NOT flagged) examples:`); multiCtrl.forEach(m=>console.log(` ${m.h.slice(0,40)} prices=${JSON.stringify(m.prices)}`));
+console.log(` zero-sample examples (flagged, available shown):`); zeroExamples.forEach(z=>console.log(` ${z.h.slice(0,40)} [${z.vendor}] available=${z.avail}`));
+console.log(` RL reproduced in affected list: ${Object.keys(vendZero).some(v=>/ralph/i.test(v))?'YES':'no (check coverage)'}`);
+
+import fs from 'fs';
+fs.writeFileSync('/tmp/zero-sample-sweep.json',JSON.stringify({ts:new Date().toISOString(),scanned,zeroSample,abnormalSample,zeroNonsample,okSingle,ok425,multi,pjSkip,vendZero,vendAbnormal,vendorFull,grandZeroFull,zeroExamples,multiCtrl},null,2));
+console.log('\nwrote /tmp/zero-sample-sweep.json');
diff --git a/scripts/zoffany-clean-70.py b/scripts/zoffany-clean-70.py
new file mode 100644
index 0000000..dfc5b8e
--- /dev/null
+++ b/scripts/zoffany-clean-70.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+"""Re-scrape + clean the 70 field-misaligned never-imported Zoffany catalog rows.
+Direct curl (zoffany.design is un-gated, $0 local). Writes cleaned fields back to
+dw_unified.zoffany_catalog (Mac2-local) and emits a review TSV under data/.
+Canonical-Kamatera apply + Shopify import remain a separate Steve-gated step.
+"""
+import re, json, subprocess, time, sys, html as _html
+
+UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36"
+
+def sql(q):
+ return subprocess.run(["psql","-d","dw_unified","-At","-F","\t","-c",q],
+ capture_output=True, text=True).stdout
+
+def fetch(url):
+ r = subprocess.run(["curl","-sS","-m","30","-A",UA,url], capture_output=True, text=True)
+ return r.stdout
+
+def parse(h):
+ out={}
+ for m in re.finditer(r'<h6[^>]*s1[^>]*>([^<]+)</h6>.*?<p[^>]*class="p1[^"]*"[^>]*>([^<]+)</p>', h, re.S):
+ lbl=_html.unescape(m.group(1).strip()); val=_html.unescape(m.group(2).strip())
+ if lbl and lbl not in out: out[lbl]=val
+ for b in re.findall(r'<script type="application/ld\+json"[^>]*>(.*?)</script>', h, re.S):
+ try: d=json.loads(b)
+ except: continue
+ if isinstance(d,dict) and d.get('@type')=='Product':
+ out['_name']=d.get('name'); out['_sku']=d.get('sku')
+ off=d.get('offers') or {}; off=off[0] if isinstance(off,list) and off else off
+ out['_price']=(off or {}).get('price'); out['_cur']=(off or {}).get('priceCurrency')
+ img=d.get('image'); out['_image']=img[0] if isinstance(img,list) and img else img
+ # leading description = first cms-html <p> that is long-form (the intro paragraph)
+ mdesc=re.search(r'class="cms-html[^"]*"[^>]*>\s*<p[^>]*>([^<]{60,})</p>', h, re.S)
+ if mdesc: out['_desc']=_html.unescape(mdesc.group(1).strip())
+ return out
+
+def esc(s):
+ return s.replace("'","''") if s else ''
+
+rows=[ln.split("\t") for ln in sql(
+ "select mfr_sku, product_url from zoffany_catalog "
+ "where (shopify_product_id is null or shopify_product_id='') and mfr_sku ~ '^Z[A-Z0-9]' "
+ "order by mfr_sku").splitlines() if ln.strip()]
+
+print(f"targets: {len(rows)}", flush=True)
+ok=fail=0
+tsv=open("data/zoffany-clean-70.tsv","w")
+tsv.write("mfr_sku\treal_sku\tpattern\tcolour\tcollection\tproduct_type\twidth\trepeat\tcomposition\tprice_gbp\timage\turl\n")
+
+for i,(sku,url) in enumerate(rows,1):
+ h=fetch(url)
+ if "application/ld+json" not in h:
+ print(f"[{i}/{len(rows)}] {sku} FAIL (no payload, {len(h)}b)", flush=True); fail+=1; time.sleep(0.6); continue
+ d=parse(h)
+ name=d.get('_name') or ''
+ colour=d.get('Colour') or d.get('Color') or ''
+ # pattern = full name minus trailing colour
+ pattern=name
+ if colour and name.lower().endswith(colour.lower()):
+ pattern=name[:len(name)-len(colour)].strip()
+ collection=d.get('Collection') or ''
+ ptype='fabric' if '/fabric/' in url else 'wallcovering'
+ width=d.get('Usable Width') or d.get('Width') or ''
+ repeat=d.get('Vertical Pattern Repeat') or d.get('Pattern Repeat') or ''
+ comp=d.get('Composition') or d.get('Item Type') or ''
+ price=d.get('_price') or ''
+ image=d.get('_image') or ''
+ desc=d.get('_desc') or ''
+ if not (colour and collection):
+ print(f"[{i}/{len(rows)}] {sku} PARTIAL colour={colour!r} coll={collection!r}", flush=True)
+ # write cleaned fields back (local table)
+ q=(f"update zoffany_catalog set "
+ f"pattern_name='{esc(pattern)}', color_name='{esc(colour)}', collection='{esc(collection)}', "
+ f"product_type='{esc(ptype)}', width=nullif('{esc(width)}',''), pattern_repeat=nullif('{esc(repeat)}',''), "
+ f"composition=nullif('{esc(comp)}',''), description=nullif('{esc(desc)}',''), "
+ f"updated_at=now() where mfr_sku='{esc(sku)}';")
+ res=subprocess.run(["psql","-d","dw_unified","-q","-c",q],capture_output=True,text=True)
+ if res.returncode!=0:
+ print(f"[{i}/{len(rows)}] {sku} DB-ERR {res.stderr.strip()[:80]}", flush=True); fail+=1
+ else:
+ ok+=1
+ if i%10==0 or i<=3:
+ print(f"[{i}/{len(rows)}] {sku} -> {pattern} / {colour} / {collection} [{ptype}] £{price}", flush=True)
+ tsv.write("\t".join([sku,d.get('_sku') or '',pattern,colour,collection,ptype,width,repeat,comp,str(price),image,url])+"\n")
+ time.sleep(0.6)
+
+tsv.close()
+print(f"\nDONE cleaned={ok} failed={fail} -> data/zoffany-clean-70.tsv", flush=True)
diff --git a/scripts/zoffany-clean-retry.py b/scripts/zoffany-clean-retry.py
new file mode 100644
index 0000000..30437df
--- /dev/null
+++ b/scripts/zoffany-clean-retry.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+"""Retry the 4 SSR-race 200s (up to 4 attempts) and mark the 7 vendor-404s discontinued."""
+import re, json, subprocess, time, html as _html
+UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124 Safari/537.36"
+RETRY={"ZCOT313015","ZCOT313026","ZRHW312907","ZRHW312910"}
+DISCO={"ZAMO332627","ZFOW312931","ZFOW312941","ZFOW312943","ZGUV08004","ZREV331625","ZTOT312725"}
+def sql(q): return subprocess.run(["psql","-d","dw_unified","-At","-F","\t","-c",q],capture_output=True,text=True).stdout
+def run(q): return subprocess.run(["psql","-d","dw_unified","-q","-c",q],capture_output=True,text=True)
+def esc(s): return s.replace("'","''") if s else ''
+def parse(h):
+ out={}
+ for m in re.finditer(r'<h6[^>]*s1[^>]*>([^<]+)</h6>.*?<p[^>]*class="p1[^"]*"[^>]*>([^<]+)</p>', h, re.S):
+ lbl=_html.unescape(m.group(1).strip()); val=_html.unescape(m.group(2).strip())
+ if lbl and lbl not in out: out[lbl]=val
+ for b in re.findall(r'<script type="application/ld\+json"[^>]*>(.*?)</script>', h, re.S):
+ try: d=json.loads(b)
+ except: continue
+ if isinstance(d,dict) and d.get('@type')=='Product':
+ out['_name']=d.get('name'); off=d.get('offers') or {}; off=off[0] if isinstance(off,list) and off else off
+ out['_price']=(off or {}).get('price')
+ md=re.search(r'class="cms-html[^"]*"[^>]*>\s*<p[^>]*>([^<]{60,})</p>', h, re.S)
+ if md: out['_desc']=_html.unescape(md.group(1).strip())
+ return out
+
+rows={l.split("\t")[0]:l.split("\t")[1] for l in sql("select mfr_sku,product_url from zoffany_catalog where mfr_sku = any('{%s}')"%(",".join(RETRY|DISCO))).splitlines() if l.strip()}
+
+# --- retry the 4 ---
+for sku in sorted(RETRY):
+ url=rows.get(sku); d={}
+ for attempt in range(1,5):
+ h=subprocess.run(["curl","-sS","-m","30","-A",UA,url],capture_output=True,text=True).stdout
+ if "application/ld+json" in h:
+ d=parse(h); break
+ time.sleep(1.2)
+ name=d.get('_name') or ''; colour=d.get('Colour') or d.get('Color') or ''
+ pattern=name[:len(name)-len(colour)].strip() if colour and name.lower().endswith(colour.lower()) else name
+ coll=d.get('Collection') or ''
+ if colour and coll:
+ run(f"update zoffany_catalog set pattern_name='{esc(pattern)}',color_name='{esc(colour)}',collection='{esc(coll)}',"
+ f"product_type='wallcovering',width=nullif('{esc(d.get('Usable Width') or d.get('Width') or '')}',''),"
+ f"pattern_repeat=nullif('{esc(d.get('Vertical Pattern Repeat') or '')}',''),"
+ f"composition=nullif('{esc(d.get('Composition') or d.get('Item Type') or '')}',''),"
+ f"description=nullif('{esc(d.get('_desc') or '')}',''),updated_at=now() where mfr_sku='{esc(sku)}';")
+ print(f"RETRY OK {sku} -> {pattern} / {colour} / {coll} £{d.get('_price')}")
+ else:
+ print(f"RETRY STILL-FAILED {sku} colour={colour!r} coll={coll!r}")
+
+# --- mark the 7 discontinued: clean pattern from slug, drop garbage color/collection ---
+for sku in sorted(DISCO):
+ url=rows.get(sku); slug=url.rstrip('/').split('/')[-1]
+ slug=re.sub(r'-z[a-z]{2,4}[0-9]{3,4}(-[0-9]{2})?$','',slug) # strip trailing style code
+ pat=re.sub(r'-',' ',slug).title()
+ run(f"update zoffany_catalog set pattern_name='{esc(pat)}',color_name=NULL,collection=NULL,"
+ f"description='DISCONTINUED (vendor 404, verified 2026-06-17)',updated_at=now() where mfr_sku='{esc(sku)}';")
+ print(f"DISCO {sku} -> {pat}")
+print("\nretry+disco pass complete")
diff --git a/scripts/zoffany-onboard/arm-schedule.sh b/scripts/zoffany-onboard/arm-schedule.sh
new file mode 100755
index 0000000..7491b03
--- /dev/null
+++ b/scripts/zoffany-onboard/arm-schedule.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+# One-shot installer for the 5:45am Zoffany live-push launchd job.
+# Run by Steve (the human-approval gate the classifier requires):
+# ! bash ~/Projects/designerwallcoverings/scripts/zoffany-onboard/arm-schedule.sh
+set -euo pipefail
+PLIST="$HOME/Projects/designerwallcoverings/scripts/zoffany-onboard/com.steve.zoffany-onboard-push.plist"
+DEST="$HOME/Library/LaunchAgents/com.steve.zoffany-onboard-push.plist"
+cp "$PLIST" "$DEST"
+launchctl bootout "gui/$(id -u)/com.steve.zoffany-onboard-push" 2>/dev/null || true
+launchctl bootstrap "gui/$(id -u)" "$DEST"
+echo "--- loaded? ---"
+launchctl list | grep zoffany || { echo "NOT LOADED"; exit 1; }
+echo "ARMED — fires 5:45am, creates 63 Zoffany live, self-disables after."
diff --git a/scripts/zoffany-onboard/com.steve.zoffany-onboard-push.plist b/scripts/zoffany-onboard/com.steve.zoffany-onboard-push.plist
new file mode 100644
index 0000000..8c7b8a4
--- /dev/null
+++ b/scripts/zoffany-onboard/com.steve.zoffany-onboard-push.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.zoffany-onboard-push</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/zoffany-onboard/run-scheduled.sh</string>
+ </array>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key>
+ <integer>5</integer>
+ <key>Minute</key>
+ <integer>45</integer>
+ </dict>
+ <key>StandardOutPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/zoffany-onboard/data/launchd.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/Users/macstudio3/Projects/designerwallcoverings/scripts/zoffany-onboard/data/launchd.err.log</string>
+ <key>RunAtLoad</key>
+ <false/>
+</dict>
+</plist>
diff --git a/scripts/zoffany-onboard/push-zoffany-live.js b/scripts/zoffany-onboard/push-zoffany-live.js
new file mode 100644
index 0000000..183a0c9
--- /dev/null
+++ b/scripts/zoffany-onboard/push-zoffany-live.js
@@ -0,0 +1,146 @@
+#!/usr/bin/env node
+/**
+ * Direct Shopify Admin REST creator for the 63 cleaned never-imported Zoffany SKUs.
+ * Models the proven push-artmura-live.js path (the shopify_api_queue worker is dead).
+ * Matches the EXISTING live-Zoffany template exactly (GET'd 2026-06-17):
+ * - single variant: option 'Title'/'Default Title', inventory_policy=continue, no inv tracking
+ * - title: "<Pattern> - <Colour> wallcovering | Zoffany"
+ * - price: price_retail (GBP number stored 1:1, same basis as the 302 already-live)
+ * - tags: ai_styles/patterns + ai_colors[].name + "Background Color <bg>" + "color:<dominant>"
+ * + composition + collection + pattern + type-word + Zoffany + dw_sku
+ *
+ * Idempotent: skips any zoffany_catalog row that already has shopify_product_id.
+ * Writes back shopify_product_id + shopify_id (gid) on 201.
+ *
+ * node push-zoffany-live.js # DRY-RUN: first 3 planned creates
+ * node push-zoffany-live.js --apply --limit=5 # canary: 5 DRAFTS
+ * node push-zoffany-live.js --apply # all remaining as DRAFT
+ * node push-zoffany-live.js --apply --status=active # go live (Steve go only)
+ */
+const https = require('https');
+const { Pool } = require('pg');
+
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_PRODUCT_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const DB = process.env.DATABASE_URL || 'postgresql:///dw_unified?host=/tmp';
+const APPLY = process.argv.includes('--apply');
+const STATUS = (process.argv.find(a => a.startsWith('--status=')) || '--status=draft').split('=')[1];
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN (never hard-code).'); process.exit(1); }
+const pool = new Pool({ connectionString: DB });
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+function shopify(method, p, body) {
+ return new Promise((resolve, reject) => {
+ const data = body ? JSON.stringify(body) : null;
+ const req = https.request({
+ hostname: STORE, path: `/admin/api/${API}${p}`, method,
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json',
+ ...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}) },
+ }, res => { let b = ''; res.on('data', c => b += c);
+ res.on('end', () => { let j; try { j = JSON.parse(b); } catch { j = b; }
+ resolve({ status: res.statusCode, body: j, callLimit: res.headers['x-shopify-shop-api-call-limit'] }); }); });
+ req.on('error', reject);
+ req.setTimeout(20000, () => req.destroy(new Error('request timeout')));
+ if (data) req.write(data); req.end();
+ });
+}
+
+const esc = s => String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&':'&','<':'<','>':'>','"':'"' }[c]));
+const arr = v => { try { return Array.isArray(v) ? v : JSON.parse(v || '[]'); } catch { return []; } };
+
+function buildTags(r) {
+ const colors = arr(r.ai_colors);
+ const t = [
+ ...arr(r.ai_styles),
+ ...arr(r.ai_patterns),
+ ...colors.map(c => c && c.name).filter(Boolean),
+ r.ai_background_color ? `Background Color ${r.ai_background_color}` : null,
+ colors[0] && colors[0].name ? `color:${colors[0].name}` : null,
+ r.composition,
+ r.collection,
+ r.pattern_name,
+ r.is_fabric ? 'Fabric' : 'Wallcovering',
+ 'Zoffany',
+ r.dw_sku,
+ ].filter(Boolean);
+ return [...new Set(t)].join(', ');
+}
+
+function specTable(r) {
+ const rows = [
+ ['Pattern', r.pattern_name], ['Colour', r.color_name], ['Collection', r.collection],
+ ['Width', r.width], ['Pattern Repeat', r.pattern_repeat], ['Composition', r.composition],
+ ].filter(([, v]) => v);
+ const trs = rows.map(([k, v]) =>
+ `<tr><th style="text-align:left;padding:6px 14px 6px 0;font-weight:600;">${esc(k)}</th><td style="padding:6px 0;">${esc(v)}</td></tr>`).join('\n');
+ const intro = (r.description && !/^DISCONTINUED/.test(r.description)) ? `<p>${esc(r.description)}</p>\n` : '';
+ return `<div class="zoffany-product">\n${intro}<h3>Specifications</h3>\n<table style="border-collapse:collapse;">\n${trs}\n</table>\n</div>`;
+}
+
+function buildPayload(r) {
+ const word = r.is_fabric ? 'fabric' : 'wallcovering';
+ const title = `${r.pattern_name} - ${r.color_name} ${word} | Zoffany`;
+ const imgs = arr(r.all_images);
+ // primary first, dedup by URL, cap at 12 (avoid Schumacher-style dup-gallery bloat)
+ const srcs = [...new Set([r.image_url, ...imgs].filter(Boolean))].slice(0, 12);
+ return { product: {
+ title, vendor: 'Zoffany', product_type: r.is_fabric ? 'Fabric' : 'Wallcovering',
+ status: STATUS, tags: buildTags(r), body_html: specTable(r),
+ images: srcs.map(src => ({ alt: esc(`${r.pattern_name} - ${r.color_name}`), src })),
+ options: [{ name: 'Title' }],
+ variants: [{
+ sku: r.dw_sku, price: String(r.price_retail), option1: 'Default Title',
+ taxable: true, requires_shipping: true,
+ inventory_management: null, inventory_policy: 'continue',
+ }],
+ } };
+}
+
+(async () => {
+ const { rows } = await pool.query(`
+ SELECT dw_sku, mfr_sku, pattern_name, color_name, collection, width, pattern_repeat,
+ composition, description, price_retail, image_url, all_images,
+ ai_colors, ai_styles, ai_patterns, ai_background_color,
+ (product_type='fabric') AS is_fabric
+ FROM zoffany_catalog
+ WHERE (shopify_product_id IS NULL OR shopify_product_id='') AND mfr_sku ~ '^Z[A-Z0-9]'
+ AND (description IS NULL OR description NOT LIKE 'DISCONTINUED%')
+ AND price_retail > 0 AND dw_sku ~ '^DWZF-187'
+ ORDER BY collection, pattern_name, color_name`);
+ let todo = LIMIT > 0 ? rows.slice(0, LIMIT) : rows;
+ console.log(`Store: ${STORE} · token …${TOKEN.slice(-4)} · status=${STATUS} · to create: ${todo.length} · mode: ${APPLY ? 'APPLY' : 'DRY-RUN'}`);
+
+ if (!APPLY) {
+ for (const r of todo.slice(0, 3)) {
+ const pl = buildPayload(r).product;
+ console.log(`\n[create] ${r.dw_sku} "${pl.title}" [${pl.status}]`);
+ console.log(` variant: ${pl.variants[0].option1} $${pl.variants[0].price} · imgs:${pl.images.length}`);
+ console.log(` tags: ${pl.tags}`);
+ }
+ console.log(`\nDRY-RUN only. Re-run with --apply (optionally --limit=N) to create.`);
+ await pool.end(); return;
+ }
+
+ let ok = 0, fail = 0;
+ for (const r of todo) {
+ try {
+ const res = await shopify('POST', `/products.json`, buildPayload(r));
+ if (res.status === 201 && res.body?.product?.id) {
+ ok++; const pid = res.body.product.id;
+ await pool.query(
+ `UPDATE zoffany_catalog SET shopify_product_id=$1, imported_at=now(), updated_at=now() WHERE dw_sku=$2`,
+ [String(pid), r.dw_sku]);
+ console.log(` ✓ ${r.dw_sku} → ${pid} (${STATUS})`);
+ } else {
+ fail++; console.error(` FAIL ${r.dw_sku}: HTTP ${res.status} ${JSON.stringify(res.body).slice(0, 220)}`);
+ }
+ const [used] = (res.callLimit || '0/40').split('/').map(Number);
+ await sleep(used > 30 ? 1600 : 560);
+ } catch (e) { fail++; console.error(` ERR ${r.dw_sku}: ${e.message}`); await sleep(560); }
+ }
+ console.log(`\nDONE. created=${ok} failed=${fail} of ${todo.length}`);
+ await pool.end();
+})().catch(e => { console.error(e); process.exit(1); });
diff --git a/scripts/zoffany-onboard/run-push-zoffany.sh b/scripts/zoffany-onboard/run-push-zoffany.sh
new file mode 100755
index 0000000..50ec63c
--- /dev/null
+++ b/scripts/zoffany-onboard/run-push-zoffany.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+# Live create push for the 63 cleaned never-imported Zoffany SKUs. Token never hard-coded.
+# bash run-push-zoffany.sh # dry-run (first 3 planned)
+# bash run-push-zoffany.sh --apply --limit=5 # canary: 5 drafts
+# bash run-push-zoffany.sh --apply # all remaining as DRAFT
+# bash run-push-zoffany.sh --apply --status=active # go live (Steve go only)
+set -euo pipefail
+cd "$(dirname "$0")"
+export SHOPIFY_STORE="designer-laboratory-sandbox.myshopify.com" # = live designerwallcoverings.com store
+export DATABASE_URL="postgresql:///dw_unified?host=/tmp"
+export NODE_PATH="/Users/macstudio3/Projects/Designer-Wallcoverings/node_modules"
+export SHOPIFY_ADMIN_TOKEN="$(grep -hiE '^SHOPIFY_ADMIN_TOKEN=' "$HOME/Projects/secrets-manager/.env" | head -1 | cut -d= -f2- | tr -d '"'"'"' ')"
+if [ -z "${SHOPIFY_ADMIN_TOKEN:-}" ]; then
+ echo "FATAL: SHOPIFY_ADMIN_TOKEN not found in ~/Projects/secrets-manager/.env" >&2; exit 1
+fi
+echo "store=$SHOPIFY_STORE token=…${SHOPIFY_ADMIN_TOKEN: -4} args=${*:-<dry-run>}"
+exec node push-zoffany-live.js "$@"
diff --git a/scripts/zoffany-onboard/run-scheduled.sh b/scripts/zoffany-onboard/run-scheduled.sh
new file mode 100755
index 0000000..3665aaf
--- /dev/null
+++ b/scripts/zoffany-onboard/run-scheduled.sh
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+# Scheduled one-shot: create the 63 cleaned Zoffany SKUs LIVE once the daily Shopify
+# variant cap has reset. Runs at 5:45am (ahead of the 6:15am sample-split job that eats
+# the cap). Idempotent — only creates rows lacking shopify_product_id. Self-disables once
+# 0 remain so it never re-fires. Logs to data/scheduled-run.log.
+set -uo pipefail
+cd "$(dirname "$0")"
+export PATH="/usr/local/bin:/opt/homebrew/bin:/opt/homebrew/opt/postgresql@14/bin:$PATH" # launchd minimal-PATH fix (psql not on launchd PATH; exported so child run-push-zoffany.sh inherits); preflight linter 2026-06-18
+LOG="$(pwd)/data/scheduled-run.log"; mkdir -p "$(dirname "$LOG")"
+TS="$(date '+%Y-%m-%d %H:%M:%S')"
+echo "=== $TS zoffany scheduled push start ===" >>"$LOG"
+
+# Shared kill-switch (2026-06-19): this job previously ignored it entirely.
+[ -f "$HOME/.dw-fixer-stop" ] && { echo "$TS kill-switch present — skip" >>"$LOG"; exit 0; }
+
+# Shared variant-budget gate (2026-06-19): draw from the live 'upload' pool (== global ~864/day
+# Shopify ceiling minus osborne) so the live Zoffany create can't collectively blow the daily
+# variant cap. take returns min(req, upload-remaining, global-remaining); 0 grant → exit clean.
+# Grant (variants) → product limit (2 variants/product: Roll + Sample); --limit caps the create.
+BUDGET="$HOME/Projects/designerwallcoverings/scripts/variant-budget/budget.cjs"
+ZF_VARS=$(node "$BUDGET" take upload 40 2>/dev/null || echo 40)
+ZF_PRODUCTS=$(( ZF_VARS / 2 ))
+if [ "${ZF_PRODUCTS:-0}" -lt 1 ]; then
+ echo "$TS no variant budget this run (grant=$ZF_VARS) — exit clean" >>"$LOG"
+ echo "=== done ===" >>"$LOG"; exit 0
+fi
+echo "$TS budget grant=$ZF_VARS variants → create up to $ZF_PRODUCTS products" >>"$LOG"
+ZF_OUT=$(bash run-push-zoffany.sh --apply --status=active --limit="$ZF_PRODUCTS" 2>&1)
+echo "$ZF_OUT" >>"$LOG"
+
+# ── refund the unused upload grant (budget-integrity, 2026-06-20; DTD verdict A) ──
+# We took ZF_VARS variants UP FRONT to size --limit, but push-zoffany-live.js consumes 2 variants
+# (Roll + Sample) per product actually CREATED. A 429/cap slot creates 0 (refund whole grant); a
+# partial slot creates fewer (refund the remainder). Without this the unused grant silently drains
+# the shared 864 upload slice. GUARD: refund ONLY when the 'DONE. created=N' summary line was found
+# (ZF_CREATED non-empty) — no summary (crash/SIGKILL) → keep the debit (conservative, never over-grant).
+ZF_CREATED=$(printf '%s' "$ZF_OUT" | grep -oE 'DONE\. created=[0-9]+' | grep -oE '[0-9]+' | tail -1)
+if [ -n "$ZF_CREATED" ]; then
+ ZF_USED=$(( ZF_CREATED * 2 ))
+ ZF_REFUND=$(( ZF_VARS - ZF_USED ))
+ if [ "$ZF_REFUND" -gt 0 ]; then
+ ZF_GOT=$(node "$BUDGET" refund upload "$ZF_REFUND" 2>/dev/null || echo 0)
+ echo "$(date '+%H:%M:%S') budget refund: grant=$ZF_VARS used=$ZF_USED (created $ZF_CREATED×2) → refunded $ZF_GOT upload variants" >>"$LOG"
+ fi
+fi
+
+# how many still lack a shopify_product_id?
+REMAIN=$(psql -d dw_unified -At -c "select count(*) from zoffany_catalog where (shopify_product_id is null or shopify_product_id='') and mfr_sku ~ '^Z[A-Z0-9]' and (description is null or description not like 'DISCONTINUED%') and price_retail>0 and dw_sku ~ '^DWZF-187';" 2>>"$LOG")
+echo "$(date '+%H:%M:%S') remaining to create: ${REMAIN:-?}" >>"$LOG"
+
+# CNCP heartbeat (best-effort, local)
+curl -s -X POST http://127.0.0.1:3333/api/wins \
+ -H 'Content-Type: application/json' \
+ -d "{\"project\":\"designerwallcoverings\",\"title\":\"Zoffany onboard push ran (${REMAIN:-?} remaining)\",\"summary\":\"Scheduled live-create of the 63 cleaned never-imported Zoffany SKUs; ${REMAIN:-?} still uncreated after this run.\"}" >/dev/null 2>&1 || true
+
+if [ "${REMAIN:-1}" = "0" ]; then
+ echo "$(date '+%H:%M:%S') all created — disabling launchd job (won't re-fire)" >>"$LOG"
+ launchctl bootout "gui/$(id -u)/com.steve.zoffany-onboard-push" 2>/dev/null || true
+ mv "$HOME/Library/LaunchAgents/com.steve.zoffany-onboard-push.plist" \
+ "$HOME/Library/LaunchAgents/com.steve.zoffany-onboard-push.plist.done" 2>/dev/null || true
+fi
+echo "=== done ===" >>"$LOG"
← 7fab2b3 sanderson-onboard: DWXH- drafts (dual mfr_sku mf, retail Rol
·
back to Designerwallcoverings
·
Stroheim onboard: add settlement-gate + go-live (Steve-gated cbf2f3f →