← back to Designer Wallcoverings
auto-save: 2026-07-08T13:05:49 (10 files) — pending-approval/boost-filter-consolidation-2026-06-25 shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl shopify/scripts/catalog-push-to-kamatera.sh
36a54f9838ddf16ca46b11ea19f89c00f8e5e2fe · 2026-07-08 13:05:53 -0700 · Steve Abrams
Files touched
M shopify/scripts/cadence/data/cadence-cursor.jsonM shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.jsonM shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonlM shopify/scripts/catalog-push-to-kamatera.shA shopify/theme-LIVE-591-pull-20260708/.gitignoreA shopify/theme-LIVE-591-pull-20260708/config/settings_schema.jsonM shopify/theme-LIVE-591-pull-20260708/snippets/color-palette.liquidM shopify/theme-LIVE-591/layout/theme.liquid
Diff
commit 36a54f9838ddf16ca46b11ea19f89c00f8e5e2fe
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 8 13:05:53 2026 -0700
auto-save: 2026-07-08T13:05:49 (10 files) — pending-approval/boost-filter-consolidation-2026-06-25 shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl shopify/scripts/catalog-push-to-kamatera.sh
---
shopify/scripts/cadence/data/cadence-cursor.json | 4 +-
.../cadence/data/cadence-plan-pm-2026-07-08.json | 146 ++++++++-------------
.../cadence/data/upload-restore-2026-07-08.jsonl | 11 ++
shopify/scripts/catalog-push-to-kamatera.sh | 7 +-
shopify/theme-LIVE-591-pull-20260708/.gitignore | 4 +
.../config/settings_schema.json | 1 +
.../snippets/color-palette.liquid | 95 +++++++++++++-
shopify/theme-LIVE-591/layout/theme.liquid | 7 +-
8 files changed, 174 insertions(+), 101 deletions(-)
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index 76887608..1c15d267 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
{
- "idx": 8,
- "lastSlot": "am",
+ "idx": 4,
+ "lastSlot": "pm",
"lastRun": "2026-07-08"
}
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json b/shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json
index fe90d99b..f5ebf590 100644
--- a/shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json
+++ b/shopify/scripts/cadence/data/cadence-plan-pm-2026-07-08.json
@@ -1,4 +1,34 @@
[
+ {
+ "vendor": "Alan Campbell",
+ "dw_sku": "DWAK-700409",
+ "cost": 0,
+ "retail": 0,
+ "sample": "4.25",
+ "sampleOnly": true,
+ "title": "Pale Turquoise on White Wallcoverings | Alan Campbell",
+ "willActivate": true
+ },
+ {
+ "vendor": "Alan Campbell",
+ "dw_sku": "DWAK-700410",
+ "cost": 0,
+ "retail": 0,
+ "sample": "4.25",
+ "sampleOnly": true,
+ "title": "Pale Fern on White Wallcoverings | Alan Campbell",
+ "willActivate": true
+ },
+ {
+ "vendor": "Alan Campbell",
+ "dw_sku": "DWAK-700411",
+ "cost": 0,
+ "retail": 0,
+ "sample": "4.25",
+ "sampleOnly": true,
+ "title": "Bali Blue on White Wallcoverings | Alan Campbell",
+ "willActivate": true
+ },
{
"vendor": "Romo",
"dw_sku": "DWRM-240167",
@@ -31,32 +61,32 @@
},
{
"vendor": "Thibaut",
- "dw_sku": "DWTT-73846",
+ "dw_sku": "DWTT-73870",
"cost": 69.3,
"retail": 125.43,
"sample": "4.25",
"sampleOnly": false,
- "title": "Luta Sisal, Blush Wallcoverings | Thibaut",
+ "title": "Normandy, Navy Wallcoverings | Thibaut",
"willActivate": true
},
{
"vendor": "Thibaut",
- "dw_sku": "DWTT-73847",
+ "dw_sku": "DWTT-73871",
"cost": 69.3,
"retail": 125.43,
"sample": "4.25",
"sampleOnly": false,
- "title": "Luta Sisal, Mist Wallcoverings | Thibaut",
+ "title": "Spiro, Grey Wallcoverings | Thibaut",
"willActivate": true
},
{
"vendor": "Thibaut",
- "dw_sku": "DWTT-73848",
+ "dw_sku": "DWTT-73872",
"cost": 69.3,
"retail": 125.43,
"sample": "4.25",
"sampleOnly": false,
- "title": "Luta Sisal, Slate Wallcoverings | Thibaut",
+ "title": "Spiro, Off White Wallcoverings | Thibaut",
"willActivate": true
},
{
@@ -73,112 +103,52 @@
},
{
"vendor": "Designtex",
- "dw_sku": "DWDX-220642",
- "cost": 42,
- "retail": 76.02,
+ "dw_sku": "DWDX-220658",
+ "cost": 31,
+ "retail": 56.11,
"sample": "4.25",
"sampleOnly": false,
- "title": "Addison, Boulder Wallcoverings | Designtex",
+ "title": "Abbott, Rose Wallcoverings | Designtex",
"willActivate": false
},
{
"vendor": "Designtex",
- "dw_sku": "DWDX-220643",
- "cost": 42,
- "retail": 76.02,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Addison, Copper Wallcoverings | Designtex",
- "willActivate": false
- },
- {
- "vendor": "Newwall",
- "dw_sku": "DWXW-1005998",
- "cost": 88,
- "retail": 159.28,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Waves 6800706, Made to Measure Mural Type II Wallcoverings | Newwall",
- "willActivate": false
- },
- {
- "vendor": "Newwall",
- "dw_sku": "DWXW-1005999",
- "cost": 88,
- "retail": 159.28,
+ "dw_sku": "DWDX-220659",
+ "cost": 31,
+ "retail": 56.11,
"sample": "4.25",
"sampleOnly": false,
- "title": "Waves 6800707, Made to Measure Mural Type II Wallcoverings | Newwall",
+ "title": "Abbott, Prune Wallcoverings | Designtex",
"willActivate": false
},
{
"vendor": "Newwall",
- "dw_sku": "DWXW-1006000",
- "cost": 88,
- "retail": 159.28,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Window Flora 6800404, Made to Measure Mural Vinyl Wallcoverings | Newwall",
- "willActivate": false
- },
- {
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171061",
- "cost": 90,
- "retail": 162.9,
+ "dw_sku": "DWXW-1006042",
+ "cost": 216,
+ "retail": 390.95,
"sample": "4.25",
"sampleOnly": false,
- "title": "Dwell, Black Wallcoverings | Malibu Wallcovering",
+ "title": "Artemis Black, Sample Wallcoverings | Newwall",
"willActivate": true
},
{
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171062",
- "cost": 90,
- "retail": 162.9,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Dwell, Pink Wallcoverings | Malibu Wallcovering",
- "willActivate": true
- },
- {
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171063",
- "cost": 90,
- "retail": 162.9,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Dwell, Grey Wallcoverings | Malibu Wallcovering",
- "willActivate": true
- },
- {
- "vendor": "Kravet",
- "dw_sku": "DWKK-103102",
- "cost": 95,
- "retail": 142.5,
- "sample": "4.25",
- "sampleOnly": false,
- "title": "Kravet Design, Beige Wallcoverings | Kravet",
- "willActivate": true
- },
- {
- "vendor": "Kravet",
- "dw_sku": "DWKK-103103",
- "cost": 94.5,
- "retail": 141.75,
+ "vendor": "Newwall",
+ "dw_sku": "DWXW-1006043",
+ "cost": 216,
+ "retail": 390.95,
"sample": "4.25",
"sampleOnly": false,
- "title": "Kravet Design, Off-White Wallcoverings | Kravet",
+ "title": "Florika Petrol, Sample Wallcoverings | Newwall",
"willActivate": true
},
{
- "vendor": "Kravet",
- "dw_sku": "DWKK-103104",
- "cost": 94.5,
- "retail": 141.75,
+ "vendor": "Newwall",
+ "dw_sku": "DWXW-1006044",
+ "cost": 216,
+ "retail": 390.95,
"sample": "4.25",
"sampleOnly": false,
- "title": "Kravet Design, Light Gray Wallcoverings | Kravet",
+ "title": "Pluma Eau de Nil, Sample Wallcoverings | Newwall",
"willActivate": true
}
]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl
index 6f15b511..c41efc72 100644
--- a/shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl
+++ b/shopify/scripts/cadence/data/upload-restore-2026-07-08.jsonl
@@ -258,3 +258,14 @@
{"table":"quadrille_house_catalog","mfr_sku":"306102FW","dw_sku":"DWQC-600405","shopify_product_id":"7879392526387","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-07-08T18-40-05-726Z","ts":"2026-07-08T18:41:01.582Z"}
{"table":"quadrille_house_catalog","mfr_sku":"306100F","dw_sku":"DWQC-600406","shopify_product_id":"7879392559155","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-07-08T18-40-05-726Z","ts":"2026-07-08T18:41:05.126Z"}
{"table":"quadrille_house_catalog","mfr_sku":"306107F","dw_sku":"DWQC-600407","shopify_product_id":"7879392591923","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-07-08T18-40-05-726Z","ts":"2026-07-08T18:41:08.595Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC715-04","dw_sku":"DWAK-700409","shopify_product_id":"7879407894579","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:11.809Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC715-01","dw_sku":"DWAK-700410","shopify_product_id":"7879407927347","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:15.315Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC715-02","dw_sku":"DWAK-700411","shopify_product_id":"7879407960115","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:19.058Z"}
+{"table":"thibaut_catalog","mfr_sku":"T14559","dw_sku":"DWTT-73870","shopify_product_id":"7879407992883","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:27.493Z"}
+{"table":"thibaut_catalog","mfr_sku":"T14562","dw_sku":"DWTT-73871","shopify_product_id":"7879408025651","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:31.352Z"}
+{"table":"thibaut_catalog","mfr_sku":"T14561","dw_sku":"DWTT-73872","shopify_product_id":"7879408058419","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:35.121Z"}
+{"table":"designtex_catalog","mfr_sku":"6732601","dw_sku":"DWDX-220658","shopify_product_id":"7879408091187","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:37.320Z"}
+{"table":"designtex_catalog","mfr_sku":"6732602","dw_sku":"DWDX-220659","shopify_product_id":"7879408123955","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:39.465Z"}
+{"table":"newwall_catalog","mfr_sku":"1-WA-ART-DI-BLK-XXX-004","dw_sku":"DWXW-1006042","shopify_product_id":"7879408156723","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:43.292Z"}
+{"table":"newwall_catalog","mfr_sku":"1-WA-FLO-DI-PET-XXX-004","dw_sku":"DWXW-1006043","shopify_product_id":"7879408189491","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:46.970Z"}
+{"table":"newwall_catalog","mfr_sku":"1-WA-PLU-DI-EAU-XXX-004","dw_sku":"DWXW-1006044","shopify_product_id":"7879408222259","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-pm-2026-07-08T19-40-05-734Z","ts":"2026-07-08T19:40:50.747Z"}
diff --git a/shopify/scripts/catalog-push-to-kamatera.sh b/shopify/scripts/catalog-push-to-kamatera.sh
index 70a884b4..bcab361e 100755
--- a/shopify/scripts/catalog-push-to-kamatera.sh
+++ b/shopify/scripts/catalog-push-to-kamatera.sh
@@ -20,8 +20,11 @@ LOG="$HOME/.claude/logs/catalog-push.log"; mkdir -p "$(dirname "$LOG")"
exec >> "$LOG" 2>&1
echo "==== $(date '+%Y-%m-%d %H:%M:%S') catalog-push START ===="
-cd "$HOME/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL" || { echo "no cwd"; exit 1; }
-MAC3=$(grep -m1 '^DATABASE_URL=' .env | cut -d= -f2- | tr -d '"')
+# SOURCE = local peer auth as macstudio3, a mac3 SUPERUSER. pg_dump locks ACCESS SHARE
+# on every -t table up front and aborts the WHOLE dump if denied on even one; dw_admin
+# lacks read on foreign-owned tables (e.g. sangetsu_catalog), so we dump as the superuser
+# (bypasses per-table grants). TARGET stays dw_admin (only needs write on its own tables).
+MAC3="postgresql:///dw_unified"
KAM='postgresql://dw_admin@127.0.0.1:5432/dw_unified'
# reachability guards — never half-run
diff --git a/shopify/theme-LIVE-591-pull-20260708/.gitignore b/shopify/theme-LIVE-591-pull-20260708/.gitignore
new file mode 100644
index 00000000..1bcdbdcb
--- /dev/null
+++ b/shopify/theme-LIVE-591-pull-20260708/.gitignore
@@ -0,0 +1,4 @@
+node_modules/
+.env*
+*.log
+.DS_Store
diff --git a/shopify/theme-LIVE-591-pull-20260708/config/settings_schema.json b/shopify/theme-LIVE-591-pull-20260708/config/settings_schema.json
new file mode 100644
index 00000000..fe51488c
--- /dev/null
+++ b/shopify/theme-LIVE-591-pull-20260708/config/settings_schema.json
@@ -0,0 +1 @@
+[]
diff --git a/shopify/theme-LIVE-591-pull-20260708/snippets/color-palette.liquid b/shopify/theme-LIVE-591-pull-20260708/snippets/color-palette.liquid
index 37f81db8..d19d70fc 100644
--- a/shopify/theme-LIVE-591-pull-20260708/snippets/color-palette.liquid
+++ b/shopify/theme-LIVE-591-pull-20260708/snippets/color-palette.liquid
@@ -27,6 +27,13 @@
{% assign primary_hex = product.metafields.custom.primary_color_hex.value %}
{% assign ai_colors_raw = product.metafields.dwc.ai_generated_colors.value | json %}
{% assign color_name = product.metafields.custom.color_name.value %}
+{%- comment -%}
+ STYLE source (real fields, in priority order — verified live on the PDP 2026-07-08):
+ global.Style → custom.style → custom.style1
+ Used to scope the color-dot click to same-color-family AND same-style, so the
+ dot no longer text-searches the (LLM-generated, unreliable) color NAME.
+{%- endcomment -%}
+{%- assign product_style = product.metafields.global.Style.value | default: product.metafields.custom.style.value | default: product.metafields.custom.style1.value -%}
<div class="dw-color-palette" data-dw-color-palette
{% if color_details_raw != blank and color_details_raw != 'null' %}data-colors='{{ color_details_raw | escape }}'{% endif %}
@@ -34,6 +41,7 @@
{% if ai_colors_raw != blank and ai_colors_raw != 'null' %}data-ai-colors='{{ ai_colors_raw }}'{% endif %}
{% if color_name != blank %}data-color-name="{{ color_name }}"{% endif %}
{% if color_hex != blank %}data-color-hex="{{ color_hex }}"{% endif %}
+ {% if product_style != blank %}data-product-style="{{ product_style | escape }}"{% endif %}
{% if product.featured_image %}data-product-image="{{ product.featured_image | img_url: '400x400' }}"{% endif %}
>
<p class="dw-color-palette__title">Colors In This Pattern</p>
@@ -95,22 +103,95 @@
function esc(s){return (s||'').toString().replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&','"':'"'}[c];});}
function pctOf(c){ var p = (c.pct!=null?c.pct:(c.percentage!=null?c.percentage:null)); if(p==null) return null; p=parseFloat(p); return isNaN(p)?null:Math.round(p); }
+ /* ── HEX → color-family COLLECTION (Steve 2026-07-08) ─────────────────────
+ The dot no longer text-searches the color NAME (LLM-generated, unreliable).
+ Instead we derive the color family from the REAL measured hex (PIL median-cut)
+ and link to that family's collection. Handles below are the live-proven set
+ already used by color-dots.liquid — do NOT invent new ones. */
+ var FAM_COLL = {
+ red:'red-wallpaper-collection', orange:'orange', yellow:'yellow-wallpaper-collection',
+ gold:'gold-wallpaper', green:'green-wallpaper-collection', teal:'turquoise',
+ blue:'blue-wallpaper-collection', purple:'purple', pink:'pink-wallcovering-2',
+ brown:'brown-wallpaper-collection', beige:'beige-cream-wallpaper-collection',
+ black:'black', white:'white-wallpaper-collection', gray:'grey-wallcovering'
+ };
+ function hexToRgb(h){
+ h=(h||'').replace('#','');
+ if(h.length===3) h=h.split('').map(function(x){return x+x;}).join('');
+ if(h.length<6) return null;
+ var r=parseInt(h.slice(0,2),16),g=parseInt(h.slice(2,4),16),b=parseInt(h.slice(4,6),16);
+ return (isNaN(r)||isNaN(g)||isNaN(b))?null:[r,g,b];
+ }
+ /* Bucket a hex into one of the FAM_COLL families using HSL derived from the hex. */
+ function familyFromHex(hex){
+ var rgb=hexToRgb(hex); if(!rgb) return null;
+ var r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255;
+ var mx=Math.max(r,g,b),mn=Math.min(r,g,b),d=mx-mn;
+ var l=(mx+mn)/2, s=d===0?0:d/(1-Math.abs(2*l-1));
+ var hdeg=0;
+ if(d!==0){
+ if(mx===r) hdeg=60*(((g-b)/d)%6);
+ else if(mx===g) hdeg=60*(((b-r)/d)+2);
+ else hdeg=60*(((r-g)/d)+4);
+ }
+ if(hdeg<0) hdeg+=360;
+ /* neutrals first (low saturation) */
+ if(s<0.18){
+ if(l>0.86) return 'white';
+ if(l<0.18) return 'black';
+ /* warm-neutral (beige/tan) vs cool-neutral (gray) by hue lean */
+ if((hdeg>=20 && hdeg<=70) && l>0.30) return 'beige';
+ return 'gray';
+ }
+ /* pale warm chromatics (cream/oatmeal/tan) → beige */
+ if(l>0.80 && (hdeg>=20 && hdeg<70)) return 'beige';
+ /* dark warm chromatics that are ALSO not very saturated = browns
+ (espresso/mahogany/walnut). Saturated darks (jewel tones) fall through. */
+ if(l<0.40 && s<0.75 && ((hdeg>=10 && hdeg<70) || hdeg>=345)) return 'brown';
+ /* very dark COOL chromatic reads as black-family */
+ if(l<0.16) return 'black';
+ /* hue wheel → family */
+ if(hdeg<15||hdeg>=345) return 'red';
+ if(hdeg<40){ return (s<0.45 && l>0.55) ? 'beige' : 'orange'; }
+ if(hdeg<55){ return (s<0.45) ? 'beige' : (hdeg<50 ? 'gold' : 'yellow'); }
+ if(hdeg<65) return (l<0.45) ? 'gold' : 'yellow';
+ if(hdeg<170) return 'green';
+ if(hdeg<200) return 'teal';
+ if(hdeg<255) return 'blue';
+ if(hdeg<290) return 'purple';
+ return 'pink';
+ }
+ var PRODUCT_STYLE = root.dataset.productStyle || '';
+ /* Build the collection URL for a hex, scoped to the product's style when known.
+ style is applied as a storefront metafield filter (custom.style); if that filter
+ is not enabled on the collection Shopify silently ignores the param, so the user
+ still lands on the correct HEX-derived color family — never a name text-search. */
+ function familyHref(hex){
+ var fam=familyFromHex(hex); if(!fam) return null;
+ var handle=FAM_COLL[fam]; if(!handle) return null;
+ var url='/collections/'+handle+'?sort_by=created-descending';
+ if(PRODUCT_STYLE){ url+='&filter.p.m.custom.style='+encodeURIComponent(PRODUCT_STYLE); }
+ return url;
+ }
+
/* Build a card. Receives the WHOLE color object (fixes the color-dots `c` bug). */
function makeCard(c){
var hex = c.hex || N[(c.name||'').toLowerCase()] || '#ccc';
var name = c.name || '';
var pct = pctOf(c);
- /* Link each color to ALL published ("pushed") SKUs of that color via the storefront
- search — Shopify search only indexes published products, so "if pushed" is inherent.
- No name -> not linkable, render a plain swatch. (Steve 2026-07-08) */
+ /* Link each dot by its REAL hex → color-family collection, scoped to the
+ product's STYLE. NO color-name text search anymore. (Steve 2026-07-08)
+ Tooltip surfaces the hex# (+ style) for transparency, not the name. */
+ var href = familyHref(hex);
var card;
- if(name){
+ if(href){
card = document.createElement('a');
- card.href = '/search?q=' + encodeURIComponent(name) + '&type=product';
- card.title = 'View all ' + name + ' wallcoverings' + (pct!=null? ' — '+pct+'% here':'') + ' ('+hex+')';
+ card.href = href;
+ card.title = 'Shop ' + (PRODUCT_STYLE? PRODUCT_STYLE+' ' : '') + 'wallcoverings in this color family'
+ + (name? ' — '+name : '') + ' (' + hex + (pct!=null? ', '+pct+'% here':'') + ')';
} else {
card = document.createElement('div');
- card.title = (pct!=null? pct+'% ':'') + '('+hex+')';
+ card.title = (name? name+' ' : '') + '(' + hex + (pct!=null? ', '+pct+'%':'') + ')';
}
card.className = 'dw-color-palette__card';
var sw = document.createElement('div');
diff --git a/shopify/theme-LIVE-591/layout/theme.liquid b/shopify/theme-LIVE-591/layout/theme.liquid
index adaa7e7e..18e37bda 100644
--- a/shopify/theme-LIVE-591/layout/theme.liquid
+++ b/shopify/theme-LIVE-591/layout/theme.liquid
@@ -577,6 +577,7 @@
/* single-roll pricing note + dimensions (bolt / min-2 products only) */
.dw-sr-note{font-size:12px!important;color:rgb(136,136,136)!important;letter-spacing:.02em;margin-left:6px}
.dw-sr-dims{font-size:12px!important;color:rgb(90,90,90)!important;margin-left:18px;white-space:nowrap}
+ .dw-2roll-note{font-size:13px!important;font-weight:600;color:rgb(60,66,70)!important;margin-top:6px;letter-spacing:.01em}
</style>
<script>
(function () {
@@ -619,8 +620,7 @@
var srLen = specVal(/^Length S\/R$/i);
if (!srLen) {
var dr = specVal(/^Length(?:\s*D\/R)?$/i);
- var m = dr && dr.match(/([\d.]+)/); var unit = dr ? (dr.replace(/[\d.\s]+/g, ' ').trim() || 'Yards') : 'Yards';
- if (m) srLen = (parseFloat(m[1]) / 2) + ' ' + unit;
+ if (dr) { var srHalf = dr.replace(/[\d.]+/g, function (x) { return (Math.round((parseFloat(x) / 2) * 1000) / 1000) + ''; }); srLen = /\d/.test(srHalf) ? srHalf : null; }
}
var wVal = specVal(/^Width$/i);
var srDims = (wVal && srLen) ? (wVal.split(/\s*x\s*/i)[0].trim() + ' x ' + srLen) : null;
@@ -648,6 +648,8 @@
if (money && !document.querySelector('.dw-sr-note')) { var note = document.createElement('span'); note.className = 'dw-sr-note'; note.textContent = '/ single roll'; money.after(note); }
var price = document.querySelector('.product__price');
if (srDims && price && !price.querySelector('.dw-sr-dims')) { var d = document.createElement('span'); d.className = 'dw-sr-dims'; d.textContent = 'Single roll: ' + srDims; price.appendChild(d); }
+ // Steve 2026-07-08: every 2-roll-minimum product states the increment rule plainly in the buy box.
+ if (price && !price.querySelector('.dw-2roll-note')) { var n2 = document.createElement('div'); n2.className = 'dw-2roll-note'; n2.textContent = 'Sold in 2 roll increments only'; price.appendChild(n2); }
}
// Clean the KEYWORDS list (display-only): drop namespaced tags, spec/operational
@@ -1326,5 +1328,6 @@ alt="web statistics"></a></div></noscript>
</script>
{% endif %}
<!-- DW min-qty end -->
+{% unless customer %}{% render 'dw-signin-modal' %}{% endunless %}
</body>
</html>
← 8db74464 auto-save: 2026-07-08T12:35:41 (6 files) — pending-approval/
·
back to Designer Wallcoverings
·
auto-save: 2026-07-08T14:06:04 (5 files) — pending-approval/ aa8cff6a →