[object Object]

← back to Designer Wallcoverings

auto-save: 2026-06-23T18:54:15 (7 files) — shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl vendor-scrapers/china-seas-refresh shopify/remap-brewster-york-to-house-lines.py

a0fd572c9115c923f65ce1648ff8b47836320a03 · 2026-06-23 18:54:20 -0700 · Steve Abrams

Files touched

Diff

commit a0fd572c9115c923f65ce1648ff8b47836320a03
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jun 23 18:54:20 2026 -0700

    auto-save: 2026-06-23T18:54:15 (7 files) — shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl vendor-scrapers/china-seas-refresh shopify/remap-brewster-york-to-house-lines.py
---
 shopify/remap-brewster-york-to-house-lines.py      |  67 +++++++
 shopify/scripts/cadence/data/cadence-cursor.json   |   2 +-
 .../cadence/data/cadence-plan-pm-2026-06-24.json   | 206 ++++++++++-----------
 .../cadence/data/upload-restore-2026-06-24.jsonl   |  18 ++
 shopify/shop-by-color-onerow-override.md           |  24 +++
 shopify/shop-by-color-onerow.png                   | Bin 0 -> 337942 bytes
 6 files changed, 213 insertions(+), 104 deletions(-)

diff --git a/shopify/remap-brewster-york-to-house-lines.py b/shopify/remap-brewster-york-to-house-lines.py
new file mode 100644
index 00000000..624d7d7d
--- /dev/null
+++ b/shopify/remap-brewster-york-to-house-lines.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+# STAGED — DO NOT RUN WITHOUT STEVE'S EXPLICIT GO.
+# Remap the 12 ACTIVE "Brewster & York" wallcoverings to their house lines so the
+# banned distributor name "Brewster & York" never renders front-facing.
+#
+#   Ami bucket  (10) -> vendor "LA Walls"      (smart collection VENDOR EQUALS LA Walls)
+#   Alchemy bucket (2) -> vendor "Malibu Walls" (smart collection VENDOR EQUALS Malibu Walls)
+#
+# Per product it: (1) sets vendor to the line, (2) rewrites the title suffix
+# "| Brewster & York" -> "| <Line>", (3) strips the "Brewster & York" tag.
+# Because LA Walls / Malibu are SMART collections keyed on vendor, the product
+# auto-joins the correct collection and auto-leaves the vendor-keyed "Brewster &
+# York" collection — no manual collection edits.
+#
+# Default = DRY RUN (prints before->after, writes nothing). Add --execute to write.
+#   python3 remap-brewster-york-to-house-lines.py            # dry run
+#   python3 remap-brewster-york-to-house-lines.py --execute  # live write (gated)
+import sys, json, urllib.request, os
+
+EXECUTE = "--execute" in sys.argv
+STORE = "designer-laboratory-sandbox.myshopify.com"; API = "2024-10"
+TOK = ""
+for ln in open(os.path.expanduser("~/Projects/secrets-manager/.env")):
+    if ln.startswith("SHOPIFY_ADMIN_TOKEN="):
+        TOK = ln.split("=", 1)[1].strip().strip('"').strip("'"); break
+assert TOK, "no SHOPIFY_ADMIN_TOKEN"
+H = {"X-Shopify-Access-Token": TOK, "Content-Type": "application/json"}
+
+# id -> target front-facing line (decided by Steve 2026-06-23: Ami->LA Walls, Alchemy->Malibu Walls)
+MAP = {
+    # Ami -> LA Walls
+    "7866875084851": "LA Walls", "7866887110707": "LA Walls", "7866887143475": "LA Walls",
+    "7866887176243": "LA Walls", "7866903134259": "LA Walls", "7866903167027": "LA Walls",
+    "7866903199795": "LA Walls", "7866927251507": "LA Walls", "7866927317043": "LA Walls",
+    "7866927349811": "LA Walls",
+    # Alchemy -> Malibu Walls
+    "7866875019315": "Malibu Walls", "7866875052083": "Malibu Walls",
+}
+BANNED = "Brewster & York"
+
+def gql(q, v=None):
+    r = urllib.request.Request(f"https://{STORE}/admin/api/{API}/graphql.json",
+        headers=H, method="POST", data=json.dumps({"query": q, "variables": v or {}}).encode())
+    return json.load(urllib.request.urlopen(r))
+
+GET = '''query($id:ID!){product(id:$id){id title vendor tags}}'''
+UPD = '''mutation($p:ProductInput!){productUpdate(input:$p){product{id title vendor} userErrors{field message}}}'''
+
+print(f"{'EXECUTE' if EXECUTE else 'DRY RUN'} — {len(MAP)} products\n")
+for pid, line in MAP.items():
+    p = gql(GET, {"id": f"gid://shopify/Product/{pid}"})["data"]["product"]
+    new_title = p["title"].replace(BANNED, line)
+    new_tags = [t for t in p["tags"] if t.strip().lower() != BANNED.lower()]
+    print(f"[{pid}] -> {line}")
+    print(f"   vendor: {p['vendor']!r} -> {line!r}")
+    print(f"   title : {p['title']!r}")
+    print(f"        -> {new_title!r}")
+    print(f"   tags  : drop {BANNED!r}  ({len(p['tags'])} -> {len(new_tags)})")
+    if EXECUTE:
+        res = gql(UPD, {"p": {"id": p["id"], "vendor": line, "title": new_title, "tags": new_tags}})
+        errs = res["data"]["productUpdate"]["userErrors"]
+        print("   WRITE:", "OK" if not errs else f"ERRORS {errs}")
+    print()
+print("Done." if EXECUTE else "Dry run only — no writes. Re-run with --execute after Steve's go.")
+print("\nAfter execute: the vendor-keyed 'Brewster & York' collection auto-empties;")
+print("unpublish/delete it as a separate explicit step (collection id TBD — verify it is")
+print("smart on VENDOR EQUALS 'Brewster & York' first).")
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index 6d3696da..829dbefe 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
 {
- "idx": 6,
+ "idx": 12,
  "lastSlot": "pm",
  "lastRun": "2026-06-24"
 }
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json b/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json
index 91916846..183f77bf 100644
--- a/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json
+++ b/shopify/scripts/cadence/data/cadence-plan-pm-2026-06-24.json
@@ -1,182 +1,182 @@
 [
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240025",
-  "cost": 542.304,
-  "retail": 981.55,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102046",
+  "cost": 92.95,
+  "retail": 139.43,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Akata, Ochre Wallcoverings | Romo",
+  "title": "Bodenham, Beige Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240027",
-  "cost": 379.5015,
-  "retail": 686.88,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102047",
+  "cost": 92.95,
+  "retail": 139.43,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Sisal, Pale Beige Wallcoverings | Romo",
+  "title": "Bodenham, Off-White Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240029",
-  "cost": 379.5015,
-  "retail": 686.88,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102048",
+  "cost": 92.95,
+  "retail": 139.43,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Sisal, Stone Wallcoverings | Romo",
+  "title": "Bodenham, Off-White Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73414",
-  "cost": 46.8,
-  "retail": 84.71,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805200",
+  "cost": 32,
+  "retail": 57.92,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Gada Paisley, Navy Wallcoverings | Thibaut",
+  "title": "San Cristobal Toile, Peacock Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73415",
-  "cost": 46.8,
-  "retail": 84.71,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805210",
+  "cost": 32,
+  "retail": 57.92,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Gada Paisley, Green Wallcoverings | Thibaut",
+  "title": "San Cristobal Toile, Ivory Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73416",
-  "cost": 62.1,
-  "retail": 112.4,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805220",
+  "cost": 32,
+  "retail": 57.92,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Gibson, Grey Wallcoverings | Thibaut",
+  "title": "San Cristobal Toile, Black Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187017",
-  "cost": 216,
-  "retail": 390.95,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600006",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Spun Silk, Paris Grey Wallcoverings | Zoffany",
+  "sampleOnly": true,
+  "title": "Ophelia, Multi Raspberry Wallcoverings | Quadrille",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187019",
-  "cost": 208,
-  "retail": 376.47,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600007",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Moresque Glaze, Indigo Wallcoverings | Zoffany",
+  "sampleOnly": true,
+  "title": "Ophelia, Multi Greens Wallcoverings | Quadrille",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187021",
-  "cost": 216,
-  "retail": 390.95,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600008",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Kensington Grasscloth, Paris Grey Wallcoverings | Zoffany",
+  "sampleOnly": true,
+  "title": "Ophelia, Multi Blues on White Wallcoverings | Quadrille",
   "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220315",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700000",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Pebble, Riverbed Wallcoverings | Designtex",
+  "sampleOnly": true,
+  "title": "White on Tint Wallcoverings | Alan Campbell",
   "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220316",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700001",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Pebble, Cloudburst Wallcoverings | Designtex",
+  "sampleOnly": true,
+  "title": "Soft Windsor on Tint Wallcoverings | Alan Campbell",
   "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220317",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700002",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Pebble, Primp Wallcoverings | Designtex",
-  "willActivate": false
+  "sampleOnly": true,
+  "title": "Soft Lavender on Tint Wallcoverings | Alan Campbell",
+  "willActivate": true
  },
  {
-  "vendor": "Newwall",
-  "dw_sku": "DWXW-1005020",
-  "cost": 156,
-  "retail": 282.35,
+  "vendor": "Home Couture",
+  "dw_sku": "DWHJ-900000",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Uzbek Lilac, Lilac Wallcoverings | Newwall",
+  "sampleOnly": true,
+  "title": "Multi Green / Brown / Beige on Ivory Wallcoverings | Home Couture",
   "willActivate": true
  },
  {
-  "vendor": "Newwall",
-  "dw_sku": "DWXW-1005021",
-  "cost": 156,
-  "retail": 282.35,
+  "vendor": "Home Couture",
+  "dw_sku": "DWHJ-900001",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Uzbek Cream, Cream Wallcoverings | Newwall",
+  "sampleOnly": true,
+  "title": "Multi Blue / Green / Beige Wallcoverings | Home Couture",
   "willActivate": true
  },
  {
-  "vendor": "Newwall",
-  "dw_sku": "DWXW-1005022",
-  "cost": 156,
-  "retail": 282.35,
+  "vendor": "Home Couture",
+  "dw_sku": "DWHJ-900002",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Huipil Blue, Blue Wallcoverings | Newwall",
+  "sampleOnly": true,
+  "title": "Multi Emerald Green / Brown / Beige Wallcoverings | Home Couture",
   "willActivate": true
  },
  {
-  "vendor": "Brewster & York",
-  "dw_sku": "DWBR-170673",
-  "cost": 35,
-  "retail": 63.35,
+  "vendor": "Charles Burger",
+  "dw_sku": "DWCY-1100000",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Allison, Blue Wallcoverings | Brewster & York",
+  "sampleOnly": true,
+  "title": "Jardin Des Plantes Print, Multi Wallcoverings | Charles Burger",
   "willActivate": true
  },
  {
-  "vendor": "Brewster & York",
-  "dw_sku": "DWBR-170674",
-  "cost": 69.99,
-  "retail": 126.68,
+  "vendor": "Charles Burger",
+  "dw_sku": "DWCY-1100001",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Allison, Lavender Wallcoverings | Brewster & York",
+  "sampleOnly": true,
+  "title": "Mevlana Allover, Multi Bleu Wallcoverings | Charles Burger",
   "willActivate": true
  },
  {
-  "vendor": "Brewster & York",
-  "dw_sku": "DWBR-170675",
-  "cost": 35,
-  "retail": 63.35,
+  "vendor": "Charles Burger",
+  "dw_sku": "DWCY-1100002",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Allison, Pink Wallcoverings | Brewster & York",
+  "sampleOnly": true,
+  "title": "Mevlana Allover, Multi Vert Wallcoverings | Charles Burger",
   "willActivate": true
  }
 ]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
index 8edde8a4..03f0e330 100644
--- a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
+++ b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
@@ -22,3 +22,21 @@
 {"table":"brewster_catalog","mfr_sku":"2657-22224","dw_sku":"DWBR-170673","shopify_product_id":"7866927251507","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:00.866Z"}
 {"table":"brewster_catalog","mfr_sku":"2657-22226","dw_sku":"DWBR-170674","shopify_product_id":"7866927317043","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:04.777Z"}
 {"table":"brewster_catalog","mfr_sku":"2657-22225","dw_sku":"DWBR-170675","shopify_product_id":"7866927349811","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T00-40-01-155Z","ts":"2026-06-24T00:41:08.540Z"}
+{"table":"kravet_catalog","mfr_sku":"35302.16.0","dw_sku":"DWKK-102046","shopify_product_id":"7424885588019","action":"linked-existing","activated":false,"batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:06.606Z"}
+{"table":"kravet_catalog","mfr_sku":"35302.24.0","dw_sku":"DWKK-102047","shopify_product_id":"7424885653555","action":"linked-existing","activated":false,"batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:07.369Z"}
+{"table":"kravet_catalog","mfr_sku":"35302.319.0","dw_sku":"DWKK-102048","shopify_product_id":"7424885719091","action":"linked-existing","activated":false,"batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:08.139Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010620","dw_sku":"DWLK-805200","shopify_product_id":"7866943701043","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:13.191Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010621","dw_sku":"DWLK-805210","shopify_product_id":"7866943733811","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:17.134Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010622","dw_sku":"DWLK-805220","shopify_product_id":"7866943799347","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:20.988Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307220F-05","dw_sku":"DWQC-600006","shopify_product_id":"7866943832115","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:24.928Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307220F-03","dw_sku":"DWQC-600007","shopify_product_id":"7866943864883","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:28.971Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307220F-07","dw_sku":"DWQC-600008","shopify_product_id":"7866943897651","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:32.688Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-00","dw_sku":"DWAK-700000","shopify_product_id":"7866943930419","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:36.630Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-02","dw_sku":"DWAK-700001","shopify_product_id":"7866943963187","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:40.140Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-04","dw_sku":"DWAK-700002","shopify_product_id":"7866943995955","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:44.147Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"HC1430L-02","dw_sku":"DWHJ-900000","shopify_product_id":"7866944028723","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:47.892Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"HC1430L-01","dw_sku":"DWHJ-900001","shopify_product_id":"7866944061491","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:51.397Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"HC1430L-04","dw_sku":"DWHJ-900002","shopify_product_id":"7866944094259","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:54.970Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"2391","dw_sku":"DWCY-1100000","shopify_product_id":"7866944127027","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:40:58.616Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"2441-001","dw_sku":"DWCY-1100001","shopify_product_id":"7866944159795","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:41:02.396Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"2441-002","dw_sku":"DWCY-1100002","shopify_product_id":"7866944225331","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-06-24T01-40-05-010Z","ts":"2026-06-24T01:41:06.326Z"}
diff --git a/shopify/shop-by-color-onerow-override.md b/shopify/shop-by-color-onerow-override.md
new file mode 100644
index 00000000..34ab9a49
--- /dev/null
+++ b/shopify/shop-by-color-onerow-override.md
@@ -0,0 +1,24 @@
+# Shop By Color — all dots on one row (2026-06-23)
+
+**What:** Force the `/pages/shop-by-color` color swatches (16 `.sbc-circle` dots) onto a
+single row. The page's inline `<style>` (in the Shopify Page **body_html**, not a theme
+asset) lays them out as `display:grid; grid-template-columns:repeat(4,1fr)` → 4 rows of 4.
+
+**Why an override (not a source edit):** the grid rule lives in the Page body_html, and
+neither Admin token (…75b9 admin, …2954 theme) has `write_content` scope (pages.json → 403).
+So the fix is a CSS override injected into the globally-included `snippets/dw-boost-overrides.liquid`,
+which loads on the page and wins via `#id.class` specificity + `!important`.
+
+**Where:** LIVE main theme **143955820595 "Steves Version 5.2"**, asset
+`snippets/dw-boost-overrides.liquid`, marker block `<!-- DW SHOP-BY-COLOR ONE-ROW -->` /
+`<style id="dw-sbc-onerow">`. Backup: `theme-backups/dw-boost-overrides.LIVE-143955820595.*.bak`.
+
+**Behavior (Steve's choice = shrink + scroll):** flex row, `flex-wrap:nowrap`; dots
+`flex:1 1 0` capped `max-width:96px`, `min-width:42px`. Desktop (1280) → all 16 fit, 67px,
+no scroll. Phone (~400) → 42px floor, horizontal scroll, still one row. Verified via DOM
+`distinctRowTops:1` at both widths.
+
+**Idempotent re-apply / revert:** the marker block is replace-in-place. To revert, delete
+the `<!-- DW SHOP-BY-COLOR ONE-ROW … </style>` block from the snippet (or restore the .bak).
+
+**Cost:** $0 (Shopify Admin API, unmetered).
diff --git a/shopify/shop-by-color-onerow.png b/shopify/shop-by-color-onerow.png
new file mode 100644
index 00000000..6cf369d7
Binary files /dev/null and b/shopify/shop-by-color-onerow.png differ

← f2ef0687 Stage P2 press-band move-up on dev clone of 5.2 (theme 14395  ·  back to Designer Wallcoverings  ·  auto-save: 2026-06-24T05:54:18 (4 files) — shopify/scripts/c 1c14f1e9 →