← back to Consulting Designerwallcoverings Com
portal P2 polish: gold-styled density slider (matches select) + count/% doughnut legends
bd9f3527e82d1327ca7041eec6971d0a8caf5007 · 2026-07-26 20:06:18 -0700 · Steve Abrams
- versionPage: density input[type=range] now custom-styled to the gold system
(custom track w/ value-tracking --fill, gold thumb, focus-visible) so the
Sort+Density controls row reads as one designed system; caret hardened
(transform-origin centering, focus-visible). All 6 concept versions.
- htmlLegend: doughnut legend rows now carry a right-aligned tabular
count + percentage (visible-only re-normalization on toggle); .hleg CSS
gains .lgvl (tabular-nums) + flexed .lgtx.
- Rebuilt; Playwright: 0 pageerrors across portal + 6 concepts; leak-scan
(schumacher|momentum|wallquest|greenland|tokiwa|rigo)=0. TK-21.
Files touched
M build.mjsA docs/aeo-drafts/README.mdA docs/aeo-drafts/designer-wallpaper.jsonldA docs/aeo-drafts/designer-wallpaper.mdA docs/aeo-drafts/osborne-and-little.jsonldA docs/aeo-drafts/osborne-and-little.mdA docs/aeo-drafts/versace-wallpaper.jsonldA docs/aeo-drafts/versace-wallpaper.mdA docs/aeo-drafts/wall-coverings.jsonldA docs/aeo-drafts/wall-coverings.mdA docs/aeo-drafts/zuber-wallpaper.jsonldA docs/aeo-drafts/zuber-wallpaper.mdM public/portal.htmlM public/versions/atelier.htmlM public/versions/gallery.htmlM public/versions/heritage.htmlM public/versions/maison.htmlM public/versions/studio.htmlM public/versions/texture.html
Diff
commit bd9f3527e82d1327ca7041eec6971d0a8caf5007
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun Jul 26 20:06:18 2026 -0700
portal P2 polish: gold-styled density slider (matches select) + count/% doughnut legends
- versionPage: density input[type=range] now custom-styled to the gold system
(custom track w/ value-tracking --fill, gold thumb, focus-visible) so the
Sort+Density controls row reads as one designed system; caret hardened
(transform-origin centering, focus-visible). All 6 concept versions.
- htmlLegend: doughnut legend rows now carry a right-aligned tabular
count + percentage (visible-only re-normalization on toggle); .hleg CSS
gains .lgvl (tabular-nums) + flexed .lgtx.
- Rebuilt; Playwright: 0 pageerrors across portal + 6 concepts; leak-scan
(schumacher|momentum|wallquest|greenland|tokiwa|rigo)=0. TK-21.
---
build.mjs | 36 +++++++++++----
docs/aeo-drafts/README.md | 30 ++++++++++++
docs/aeo-drafts/designer-wallpaper.jsonld | 74 +++++++++++++++++++++++++++++
docs/aeo-drafts/designer-wallpaper.md | 71 ++++++++++++++++++++++++++++
docs/aeo-drafts/osborne-and-little.jsonld | 77 +++++++++++++++++++++++++++++++
docs/aeo-drafts/osborne-and-little.md | 63 +++++++++++++++++++++++++
docs/aeo-drafts/versace-wallpaper.jsonld | 77 +++++++++++++++++++++++++++++++
docs/aeo-drafts/versace-wallpaper.md | 64 +++++++++++++++++++++++++
docs/aeo-drafts/wall-coverings.jsonld | 74 +++++++++++++++++++++++++++++
docs/aeo-drafts/wall-coverings.md | 76 ++++++++++++++++++++++++++++++
docs/aeo-drafts/zuber-wallpaper.jsonld | 77 +++++++++++++++++++++++++++++++
docs/aeo-drafts/zuber-wallpaper.md | 64 +++++++++++++++++++++++++
public/portal.html | 15 ++++--
public/versions/atelier.html | 21 +++++++--
public/versions/gallery.html | 21 +++++++--
public/versions/heritage.html | 21 +++++++--
public/versions/maison.html | 21 +++++++--
public/versions/studio.html | 21 +++++++--
public/versions/texture.html | 21 +++++++--
19 files changed, 883 insertions(+), 41 deletions(-)
diff --git a/build.mjs b/build.mjs
index 4c41df0..0740886 100644
--- a/build.mjs
+++ b/build.mjs
@@ -305,12 +305,14 @@ td.mo{font-family:'Cormorant Garamond',serif;color:var(--gold);font-size:18px;wi
.chartwrap.dgt{display:flex;flex-direction:column}
.chartwrap.dgt .cwrow{flex:1;min-height:0;display:flex;gap:18px;align-items:stretch}
.chartwrap.dgt .cwcanvas{position:relative;flex:1 1 auto;min-width:0;height:100%}
-.hleg{list-style:none;margin:0;padding:0;flex:0 0 auto;max-width:46%;display:flex;flex-direction:column;justify-content:center;gap:10px;overflow:auto}
+.hleg{list-style:none;margin:0;padding:0;flex:0 0 auto;max-width:52%;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:10px;overflow:auto}
.hleg li{display:flex;align-items:center;cursor:pointer;font-size:11px;font-weight:500;letter-spacing:.02em;color:rgba(241,236,227,.62);transition:color .2s,opacity .2s;line-height:1.1}
.hleg li:hover{color:var(--ink)}
.hleg li.off{opacity:.38}
.hleg .lgmk{flex:0 0 16px;width:16px;height:2px;border-radius:1px;margin-right:10px}
-.hleg .lgtx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
+.hleg .lgtx{flex:1 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:10px}
+.hleg .lgvl{flex:0 0 auto;font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1;letter-spacing:.01em;color:rgba(201,162,75,.92);white-space:pre}
+.hleg li.off .lgvl{color:rgba(241,236,227,.30)}
.cards2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1px;background:var(--line);margin-top:34px}
.cards2 .c{background:var(--bg);padding:32px 28px}.cards2 .c h3{font-family:'Cormorant Garamond',serif;font-size:22px;color:var(--gold);margin-bottom:10px}.cards2 .c p{color:var(--dim);font-size:16px;line-height:1.6}
.flag{color:#e8a0a0}.good{color:#9fd6b0}
@@ -592,12 +594,19 @@ function initCharts(){if(charted||!window.Chart)return;charted=true;
var htmlLegend={id:'htmlLegend',afterUpdate:function(chart){
var ul=document.getElementById(chart.canvas.id+'-legend');if(!ul)return;ul.innerHTML='';
var items=chart.options.plugins.legend.labels.generateLabels(chart);
+ var ds=chart.data.datasets[0].data;
+ // Total across only the VISIBLE arcs so percentages re-normalize as rows toggle off.
+ var total=0;items.forEach(function(it){if(!it.hidden)total+=(+ds[it.index]||0);});
items.forEach(function(item){
+ var val=+ds[item.index]||0;
+ var pct=total>0?Math.round(val/total*100):0;
var li=document.createElement('li');if(item.hidden)li.className='off';
li.onclick=function(){chart.toggleDataVisibility(item.index);chart.update();};
var mk=document.createElement('span');mk.className='lgmk';mk.style.background=item.fillStyle;
var tx=document.createElement('span');tx.className='lgtx';tx.textContent=item.text;
- li.appendChild(mk);li.appendChild(tx);ul.appendChild(li);
+ var vl=document.createElement('span');vl.className='lgvl';
+ vl.textContent=item.hidden?'—':(val.toLocaleString()+' '+pct+'%');
+ li.appendChild(mk);li.appendChild(tx);li.appendChild(vl);ul.appendChild(li);
});
}};
// Vertical gold gradient for area fills — scriptable so it re-derives per chart area
@@ -684,12 +693,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:${h.sans};font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -736,10 +754,12 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>`;
}
diff --git a/docs/aeo-drafts/README.md b/docs/aeo-drafts/README.md
new file mode 100644
index 0000000..f771dcd
--- /dev/null
+++ b/docs/aeo-drafts/README.md
@@ -0,0 +1,30 @@
+# AEO Content Sprint — Striking-Distance Queries (DRAFT)
+
+**Engagement:** DW consulting (TK-20) · **Authored:** 2026-07-26 · **Status:** DRAFT — no live theme writes.
+**Method:** Julian-Goldie-style AEO (Answer-Engine-Optimization) — direct-answer line under the H1, FAQ, FAQPage/CollectionPage/WebPage JSON-LD, and entity-rich copy so the SERP snippet + AI Overviews surface a clean answer.
+**Architecture decision:** DTD verdict **C (hybrid)**, unanimous 5/5 (Claude · Codex · Qwen · Grok · Kimi).
+
+## The 5 targets (top striking-distance queries from `data/dw-analysis.json` → `traffic.striking_distance`)
+
+| # | Query | Pos | Impr | Clicks | Architecture | Target |
+|---|-------|-----|------|--------|--------------|--------|
+| 1 | versace wallpaper | 8.0 | 1,913 | 27 | AEO block → **existing** collection | `/collections/versace-home` *(verify handle)* |
+| 2 | osborne and little | 8.7 | 1,102 | 2 | AEO block → **existing** collection | `/collections/osborne-little` *(verify handle)* |
+| 3 | zuber wallpaper | 9.9 | 789 | 6 | AEO block → **existing** collection (also serves bare "zuber") | `/collections/zuber` *(verify handle)* |
+| 4 | wall coverings | 15.1 | 1,213 | 1 | **NEW** landing page | `/pages/wall-coverings` *(new)* |
+| 5 | designer wallpaper | 19.8 | 896 | 4 | **NEW** landing page | `/pages/designer-wallpaper` *(new)*|
+
+**Why hybrid:** the 3 brand queries already rank pos 8–10 on collection pages that hold authority — appending an AEO block is low-risk and avoids cannibalization. The 2 head terms rank 15–20 because no dedicated page targets them — they need purpose-built landings.
+
+## Files
+
+Each target has a `.md` (copy: direct-answer line + FAQ + entity mentions + internal-link plan) and a `.jsonld` (schema graph). The `.jsonld` is DRAFT — do not inject live until the target URL/handle is verified.
+
+## Publish path (GATED — Steve approval required)
+
+No live theme write has been made. The exact publish steps + collection-description edits + new-page creation + JSON-LD injection are drafted in:
+`~/.claude/yolo-queue/pending-approval/tk20-aeo-striking-distance-publish.md`
+
+## Handle verification note
+
+Live-store collection handles could not be confirmed programmatically (storefront returned HTTP 429 / bot-protection during this session). Proposed handles above are by DW convention and **must be verified in Shopify admin at publish time**.
diff --git a/docs/aeo-drafts/designer-wallpaper.jsonld b/docs/aeo-drafts/designer-wallpaper.jsonld
new file mode 100644
index 0000000..0ccd147
--- /dev/null
+++ b/docs/aeo-drafts/designer-wallpaper.jsonld
@@ -0,0 +1,74 @@
+{
+ "_draft_note": "DRAFT — do not inject live. For a NEW /pages/designer-wallpaper landing (or a promoted curated collection). WebPage + FAQPage graph. Confirm the final page URL at publish. Keep answers in sync with designer-wallpaper.md.",
+ "@context": "https://schema.org",
+ "@graph": [
+ {
+ "@type": "WebPage",
+ "@id": "https://www.designerwallcoverings.com/pages/designer-wallpaper#webpage",
+ "url": "https://www.designerwallcoverings.com/pages/designer-wallpaper",
+ "name": "Designer Wallpaper — Luxury Wallpaper from the World's Leading Houses",
+ "description": "Designer wallpaper from Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, Thibaut and more. Original artwork, premium materials, $4.25 memo samples.",
+ "about": { "@type": "Thing", "name": "Designer wallpaper" },
+ "isPartOf": {
+ "@type": "WebSite",
+ "name": "Designer Wallcoverings",
+ "url": "https://www.designerwallcoverings.com"
+ },
+ "keywords": "designer wallpaper, luxury wallpaper, high end wallpaper, cole and son, osborne and little, versace home, zuber, de gournay, schumacher, thibaut"
+ },
+ {
+ "@type": "FAQPage",
+ "@id": "https://www.designerwallcoverings.com/pages/designer-wallpaper#faq",
+ "mainEntity": [
+ {
+ "@type": "Question",
+ "name": "What is designer wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Designer wallpaper is premium wallpaper created by established design houses and studios — such as Cole & Son, Osborne & Little, Versace Home, and Zuber — featuring original artwork, higher-grade materials, and limited production, as opposed to mass-market wallpaper."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What makes wallpaper 'designer' rather than regular wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Original, copyrighted artwork; premium substrates (non-woven, grasscloth, silk, hand-printed or hand-painted grounds); and production by a named design house or studio. Designer papers are typically sold through trade and specialty retailers rather than big-box stores."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Which designer wallpaper brands does Designer Wallcoverings carry?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Leading houses including Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, Thibaut, Ralph Lauren Home, Phillip Jeffries, and Maya Romanoff, among many others."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "How much does designer wallpaper cost?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Designer wallpaper is priced per roll and sits above mass-market wallpaper; hand-crafted and made-to-order lines (like Zuber or de Gournay) are higher still. Designer Wallcoverings shows current pricing on each product page and offers a $4.25 memo sample."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Where can I buy designer wallpaper online?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Designer Wallcoverings sells designer wallpaper online from hundreds of houses, with per-roll ordering, current pricing on each product page, and $4.25 memo samples so you can confirm the design in your own space first."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Can I order a sample of designer wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes — a $4.25 memo sample is available on most designer patterns so you can check the true color, texture, and scale before buying full rolls."
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/aeo-drafts/designer-wallpaper.md b/docs/aeo-drafts/designer-wallpaper.md
new file mode 100644
index 0000000..1048cd7
--- /dev/null
+++ b/docs/aeo-drafts/designer-wallpaper.md
@@ -0,0 +1,71 @@
+---
+query: "designer wallpaper"
+target_type: NEW standalone landing page (head term — no natural collection home)
+proposed_target: https://www.designerwallcoverings.com/pages/designer-wallpaper (NEW Shopify page)
+handle_status: NEW page — proposed handle: /pages/designer-wallpaper (or promote /collections/designer-wallpaper if a curated collection is preferred)
+gsc_position: 19.8
+gsc_impressions: 896
+gsc_clicks: 4
+dtd_verdict: "C (hybrid) — build a NEW dedicated landing for this head term"
+schema_file: designer-wallpaper.jsonld
+status: DRAFT — no live theme write
+authored: 2026-07-26
+---
+
+# Designer Wallpaper — Luxury Wallpaper from the World's Leading Houses
+
+## Direct answer (place directly under the H1)
+
+> **Designer wallpaper** is premium, pattern-led wallpaper created by established design houses and studios — brands like Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, and Thibaut — distinguished from mass-market wallpaper by original artwork, higher-grade materials, and limited production. Designer Wallcoverings carries thousands of designer wallpapers, sold by the roll with $4.25 memo samples.
+
+## Why this page (context for the editor)
+
+"designer wallpaper" ranks **position 19.8** on **896 impressions** with only **4 clicks** — the weakest position of the five striking-distance queries, precisely because no single page is built to own it (the brand's own name is *Designer Wallcoverings*, but no page answers the generic search "designer wallpaper"). A dedicated, entity-rich landing that defines the term, showcases the houses carried, and links down into each brand collection is the right home. This is a sibling to the "wall coverings" landing and the hybrid-architecture reason DTD (5/5) chose Option C.
+
+## Page structure (recommended)
+
+1. **H1** + direct-answer line (above)
+2. **Intro:** what makes wallpaper "designer" (original artwork, materials, houses)
+3. **"Shop by design house" grid** — logo/name cards linking to each vendor collection:
+ Cole & Son · Osborne & Little · Versace Home · Zuber · de Gournay · Schumacher · Thibaut · Ralph Lauren · Phillip Jeffries · Maya Romanoff
+4. **"Shop by style"** — Traditional · Modern · Floral · Damask · Geometric · Scenic/Mural · Grasscloth
+5. **FAQ** (below) + JSON-LD
+6. **CTA:** browse designer wallpaper / order a $4.25 sample
+
+## Entity mentions (weave naturally)
+
+- **Design houses:** Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, Thibaut, Ralph Lauren Home, Phillip Jeffries, Maya Romanoff, Fromental, Gracie
+- **Styles / motifs:** damask, chinoiserie, botanical, floral trail, geometric, art deco, scenic, toile, grasscloth
+- **Attributes:** non-woven, hand-printed, hand-painted, metallic ground, made-to-order, limited edition
+- **Differentiators:** original artwork vs. mass-market, archival patterns, trade/designer sourcing
+- **Retailer:** Designer Wallcoverings (authorized retailer, $4.25 memo samples, ships US-wide)
+
+## FAQ (accordion + FAQPage JSON-LD)
+
+**Q: What is designer wallpaper?**
+A: Designer wallpaper is premium wallpaper created by established design houses and studios — such as Cole & Son, Osborne & Little, Versace Home, and Zuber — featuring original artwork, higher-grade materials, and limited production, as opposed to mass-market wallpaper.
+
+**Q: What makes wallpaper "designer" rather than regular wallpaper?**
+A: Original, copyrighted artwork; premium substrates (non-woven, grasscloth, silk, hand-printed or hand-painted grounds); and production by a named design house or studio. Designer papers are typically sold through trade and specialty retailers rather than big-box stores.
+
+**Q: Which designer wallpaper brands does Designer Wallcoverings carry?**
+A: Leading houses including Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, Thibaut, Ralph Lauren Home, Phillip Jeffries, and Maya Romanoff, among many others.
+
+**Q: How much does designer wallpaper cost?**
+A: Designer wallpaper is priced per roll and sits above mass-market wallpaper; hand-crafted and made-to-order lines (like Zuber or de Gournay) are higher still. Designer Wallcoverings shows current pricing on each product page and offers a $4.25 memo sample.
+
+**Q: Where can I buy designer wallpaper online?**
+A: Designer Wallcoverings sells designer wallpaper online from hundreds of houses, with per-roll ordering, current pricing on each product page, and $4.25 memo samples so you can confirm the design in your own space first.
+
+**Q: Can I order a sample of designer wallpaper?**
+A: Yes — a $4.25 memo sample is available on most designer patterns so you can check the true color, texture, and scale before buying full rolls.
+
+## Internal links to add
+
+- → every design-house collection (Cole & Son, Osborne & Little, Versace, Zuber, de Gournay, Schumacher, Thibaut …)
+- → `/pages/wall-coverings` (sibling head-term landing)
+- → style collections (damask, floral, geometric, grasscloth, mural)
+
+## Freshness signal
+
+Add "Last updated: <Month YYYY>" and refresh the house grid as brands are added.
diff --git a/docs/aeo-drafts/osborne-and-little.jsonld b/docs/aeo-drafts/osborne-and-little.jsonld
new file mode 100644
index 0000000..ce28c5e
--- /dev/null
+++ b/docs/aeo-drafts/osborne-and-little.jsonld
@@ -0,0 +1,77 @@
+{
+ "_draft_note": "DRAFT — do not inject live. CollectionPage + FAQPage graph. Update @id/url to the VERIFIED live collection handle at publish. Keep answers in sync with osborne-and-little.md.",
+ "@context": "https://schema.org",
+ "@graph": [
+ {
+ "@type": "CollectionPage",
+ "@id": "https://www.designerwallcoverings.com/collections/osborne-little#collectionpage",
+ "url": "https://www.designerwallcoverings.com/collections/osborne-little",
+ "name": "Osborne & Little Wallpaper & Fabric",
+ "description": "Osborne & Little — the British luxury wallpaper and fabric house founded in London in 1968. Pattern-led designs, sold by the roll and the yard, with $4.25 memo samples.",
+ "about": [
+ { "@type": "Brand", "name": "Osborne & Little" },
+ { "@type": "Organization", "name": "Osborne & Little", "foundingDate": "1968", "foundingLocation": "London, England" }
+ ],
+ "isPartOf": {
+ "@type": "WebSite",
+ "name": "Designer Wallcoverings",
+ "url": "https://www.designerwallcoverings.com"
+ },
+ "keywords": "osborne and little, osborne & little wallpaper, osborne little fabric, british designer wallpaper, nina campbell, matthew williamson"
+ },
+ {
+ "@type": "FAQPage",
+ "@id": "https://www.designerwallcoverings.com/collections/osborne-little#faq",
+ "mainEntity": [
+ {
+ "@type": "Question",
+ "name": "Who are Osborne & Little?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Osborne & Little is a British design house founded in London in 1968 by Peter Osborne and Antony Little. It designs and manufactures luxury wallpapers and fabrics and is regarded as one of England's leading interior-design brands."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Where can I buy Osborne & Little wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Osborne & Little is sold through authorized interior retailers. Designer Wallcoverings carries the Osborne & Little wallpaper and fabric range with full-roll ordering, current pricing on each product page, and $4.25 memo samples."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Is Osborne & Little wallpaper expensive?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Osborne & Little is a premium designer line, priced per roll above mass-market wallpaper. Exact pricing depends on the collection and colorway and is shown on each Designer Wallcoverings product page; order a $4.25 memo sample first to confirm the match."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Does Osborne & Little make fabric as well as wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes. Osborne & Little produces both wallpapers (sold by the roll) and coordinating fabrics (sold by the yard). Designer Wallcoverings carries both, so you can pair a wallcovering with a matching or complementary drapery or upholstery fabric."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What is Osborne & Little known for?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Pattern-led British design — botanical and floral trails, damasks, chinoiserie, and bold geometrics, often on metallic or richly colored grounds. The group also produces the Nina Campbell and Matthew Williamson lines."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Can I order a sample of Osborne & Little wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes — Designer Wallcoverings offers a $4.25 memo sample so you can see the true color, scale, and finish in your own room before buying full rolls."
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/aeo-drafts/osborne-and-little.md b/docs/aeo-drafts/osborne-and-little.md
new file mode 100644
index 0000000..25bf584
--- /dev/null
+++ b/docs/aeo-drafts/osborne-and-little.md
@@ -0,0 +1,63 @@
+---
+query: "osborne and little"
+target_type: AEO block — APPEND to existing collection page
+proposed_target: https://www.designerwallcoverings.com/collections/osborne-little
+handle_status: VERIFY at publish (proposed handle: osborne-little | fallback: osborne-and-little)
+gsc_position: 8.7
+gsc_impressions: 1102
+gsc_clicks: 2
+dtd_verdict: "C (hybrid) — append to existing ranking collection page"
+schema_file: osborne-and-little.jsonld
+status: DRAFT — no live theme write
+authored: 2026-07-26
+---
+
+# Osborne & Little Wallpaper & Fabric
+
+## Direct answer (place directly under the H1)
+
+> **Osborne & Little** is a British luxury wallpaper and fabric house founded in London in 1968 by brothers-in-law Peter Osborne and Antony Little. Known for hand-crafted, pattern-led designs — from botanical trails to bold geometrics — the brand is a benchmark of English interior design. Designer Wallcoverings is a retailer of Osborne & Little wallpapers and fabrics, with per-roll ordering and $4.25 memo samples.
+
+## Why this block (context for the editor)
+
+This brand query ranks at **position 8.7** on **1,102 impressions** but pulls just **2 clicks** — the snippet is not answering searcher intent. The collection page already ranks; append a tight AEO answer + FAQ + schema so the SERP and AI Overview surface who Osborne & Little are and that DW carries the line. No new page — protect the ranking asset.
+
+## Entity mentions (weave naturally into the collection copy)
+
+- **Brand / people:** Osborne & Little, Peter Osborne, Antony Little, London, England (founded 1968)
+- **Sister & licensed brands under the group:** Nina Campbell, Lorca, Matthew Williamson (for O&L), Liberty (collaborations) — cross-link where DW carries them
+- **Signature collections / motifs:** botanical & floral trails, damask, large-scale geometrics, chinoiserie, animal prints, metallic grounds
+- **Products:** wallpaper (standard rolls) AND fabric (per-yard) — DW carries both
+- **Design context:** English country house, modern British, maximalist pattern-on-pattern
+- **Related houses carried by DW:** Cole & Son, GP & J Baker, Colefax and Fowler, Sanderson — "explore British design houses"
+
+## FAQ (accordion + FAQPage JSON-LD)
+
+**Q: Who are Osborne & Little?**
+A: Osborne & Little is a British design house founded in London in 1968 by Peter Osborne and Antony Little. It designs and manufactures luxury wallpapers and fabrics and is regarded as one of England's leading interior-design brands.
+
+**Q: Where can I buy Osborne & Little wallpaper?**
+A: Osborne & Little is sold through authorized interior retailers. Designer Wallcoverings carries the Osborne & Little wallpaper and fabric range with full-roll ordering, current pricing on each product page, and $4.25 memo samples.
+
+**Q: Is Osborne & Little wallpaper expensive?**
+A: Osborne & Little is a premium designer line, priced per roll above mass-market wallpaper. Exact pricing depends on the collection and colorway and is shown on each Designer Wallcoverings product page; order a $4.25 memo sample first to confirm the match.
+
+**Q: Does Osborne & Little make fabric as well as wallpaper?**
+A: Yes. Osborne & Little produces both wallpapers (sold by the roll) and coordinating fabrics (sold by the yard). Designer Wallcoverings carries both, so you can pair a wallcovering with a matching or complementary drapery/upholstery fabric.
+
+**Q: What is Osborne & Little known for?**
+A: Pattern-led British design — botanical and floral trails, damasks, chinoiserie, and bold geometrics, often on metallic or richly colored grounds. The group also produces the Nina Campbell and Matthew Williamson lines.
+
+**Q: Can I order a sample of Osborne & Little wallpaper?**
+A: Yes — Designer Wallcoverings offers a $4.25 memo sample so you can see the true color, scale, and finish in your own room before buying full rolls.
+
+## Internal links to add in the block
+
+- → top Osborne & Little pattern product pages
+- → Nina Campbell / Matthew Williamson / Lorca collections (if carried)
+- → `/collections/designer-wallpaper` (head-term landing, once live)
+- → other British houses (Cole & Son, Sanderson, GP & J Baker)
+
+## Freshness signal
+
+Add "Collection updated: <Month YYYY>" and refresh with each catalog sync.
diff --git a/docs/aeo-drafts/versace-wallpaper.jsonld b/docs/aeo-drafts/versace-wallpaper.jsonld
new file mode 100644
index 0000000..bb9e778
--- /dev/null
+++ b/docs/aeo-drafts/versace-wallpaper.jsonld
@@ -0,0 +1,77 @@
+{
+ "_draft_note": "DRAFT — do not inject live. Two graph nodes: CollectionPage (self-referential to the Versace Home collection) + FAQPage. Update @id/url to the VERIFIED live collection handle at publish. Keep answers in sync with versace-wallpaper.md.",
+ "@context": "https://schema.org",
+ "@graph": [
+ {
+ "@type": "CollectionPage",
+ "@id": "https://www.designerwallcoverings.com/collections/versace-home#collectionpage",
+ "url": "https://www.designerwallcoverings.com/collections/versace-home",
+ "name": "Versace Wallpaper — Versace Home Collection",
+ "description": "Authentic Versace Home wallpaper: Medusa, Greca (Greek key), and Barocco baroque damask designs in premium non-woven panels. Authorized retailer with $4.25 memo samples.",
+ "about": [
+ { "@type": "Brand", "name": "Versace" },
+ { "@type": "Organization", "name": "Gianni Versace S.r.l." }
+ ],
+ "isPartOf": {
+ "@type": "WebSite",
+ "name": "Designer Wallcoverings",
+ "url": "https://www.designerwallcoverings.com"
+ },
+ "keywords": "versace wallpaper, versace home, medusa wallpaper, greek key wallpaper, barocco, baroque damask, luxury designer wallpaper"
+ },
+ {
+ "@type": "FAQPage",
+ "@id": "https://www.designerwallcoverings.com/collections/versace-home#faq",
+ "mainEntity": [
+ {
+ "@type": "Question",
+ "name": "What is Versace wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Versace wallpaper is the official wallcovering range of the Italian fashion house Versace, produced under license and sold through authorized retailers such as Designer Wallcoverings. It renders Versace's Baroque design language — the Medusa emblem, the Greek-key Greca border, and Barocco damask — as premium non-woven wall panels."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "How much does Versace wallpaper cost?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Versace Home wallpaper is a luxury line; pricing is per roll and varies by pattern and colorway. Designer Wallcoverings lists current per-roll pricing on each product page and offers a $4.25 memo sample so you can confirm color and scale before ordering full rolls."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Is Versace wallpaper authentic?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes. Authentic Versace Home wallpaper is produced under official license (manufactured by A.S. Creation) and carries Versace branding. Designer Wallcoverings is an authorized retailer, so every roll ships as a genuine Versace Home product."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What patterns does Versace wallpaper come in?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "The most requested designs are the Medusa medallion, the Greca Greek-key border, Barocco baroque damask, the La Coupe des Dieux mythological scenic, and animalier (leopard) prints, in colorways from black-and-gold to ivory and jewel tones."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "How do I hang Versace wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Most Versace Home rolls are non-woven and paste-the-wall — you apply adhesive to the wall and hang the dry panel, which makes installation cleaner and future removal easier than traditional paste-the-paper hangings. Order one extra roll for pattern-match waste."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Can I get a sample of Versace wallpaper before I buy?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes — Designer Wallcoverings offers a $4.25 memo sample on Versace Home patterns so you can check the true color, sheen, and gilding in your own light before committing to full rolls."
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/aeo-drafts/versace-wallpaper.md b/docs/aeo-drafts/versace-wallpaper.md
new file mode 100644
index 0000000..9bc7b83
--- /dev/null
+++ b/docs/aeo-drafts/versace-wallpaper.md
@@ -0,0 +1,64 @@
+---
+query: "versace wallpaper"
+target_type: AEO block — APPEND to existing collection page
+proposed_target: https://www.designerwallcoverings.com/collections/versace-home
+handle_status: VERIFY at publish (proposed handle: versace-home | fallback: versace)
+gsc_position: 8.0
+gsc_impressions: 1913
+gsc_clicks: 27
+dtd_verdict: "C (hybrid) — append to existing ranking collection page"
+schema_file: versace-wallpaper.jsonld
+status: DRAFT — no live theme write
+authored: 2026-07-26
+---
+
+# Versace Wallpaper
+
+## Direct answer (place directly under the H1)
+
+> **Versace wallpaper** is the wallcovering line of the Italian luxury house Gianni Versace S.r.l., translating the maison's signature Baroque motifs — the Medusa head, the *Greca* (Greek key) border, gilded scrollwork, and the *Barocco* damask — into heavyweight non-woven wall panels. Designer Wallcoverings carries the **Versace Home** wallcovering collection, shipping full rolls and $4.25 memo samples across the United States.
+
+> **Editorial note (per vp-dw-marketing sign-off):** DW's standing brand voice is "Wallcoverings," not "Wallpaper." Keep the query term "wallpaper" ONLY where it targets search intent — the H1, the direct-answer line, and the FAQ questions. Everywhere DW speaks in its own descriptive voice, use "wallcovering(s)." Publishing the query term "wallpaper" at all needs Steve's explicit AEO-waiver ruling (see publish memo open items). The "authorized retailer / genuine product" claims have been softened to "carries" pending documented Versace-dealer status.
+
+## Why this block (context for the editor)
+
+This query already ranks at **position 8.0** with **1,913 monthly impressions** but converts almost nothing (27 clicks). The collection page exists and holds authority; the fix is a concise AEO answer block + FAQ + schema at the top of the collection description so Google's AI Overview and the SERP snippet can lift a clean, entity-rich answer. **Do not create a competing page** — that risks cannibalizing a page already on page one.
+
+## Entity mentions (weave naturally into the collection copy)
+
+- **Brand / maison:** Versace, Versace Home, Gianni Versace S.r.l., Donatella Versace
+- **Signature motifs:** Medusa, *Greca* / Greek key, *Barocco*, *La Coupe des Dieux*, *Les Étoiles de la Mer*, gilded baroque scroll, leopard/animalier
+- **Material & construction:** non-woven substrate, paste-the-wall, heavyweight vinyl, washable
+- **Manufacturing lineage:** Versace Home wallcovering collections are produced under license by **A.S. Création** (Germany) — mention as production partner, not as the seller
+- **Related lines carried by DW:** Fornasetti, Missoni Home, Ralph Lauren, Cole & Son — for "shop other designer houses" cross-links
+- **Use cases:** feature wall, powder room, entry foyer, primary bedroom accent, luxury hospitality
+
+## FAQ (renders as an accordion; also emitted as FAQPage JSON-LD)
+
+**Q: What is Versace wallpaper?**
+A: Versace wallpaper is the official wallcovering range of the Italian fashion house Versace, produced under license and sold through authorized retailers such as Designer Wallcoverings. It renders Versace's Baroque design language — the Medusa emblem, the Greek-key *Greca* border, and *Barocco* damask — as premium non-woven wall panels.
+
+**Q: How much does Versace wallpaper cost?**
+A: Versace Home wallpaper is a luxury line; pricing is per roll and varies by pattern and colorway. Designer Wallcoverings lists current per-roll pricing on each product page and offers a **$4.25 memo sample** so you can confirm color and scale before ordering full rolls.
+
+**Q: Is Versace wallpaper real / authentic?**
+A: Versace Home wallcovering is produced under official license (manufactured by A.S. Création) and carries Versace branding. Designer Wallcoverings carries the Versace Home line as a genuine, licensed product. *(Editor: only assert "authorized retailer / dealer" if DW's Versace dealer status is documented — see compliance note in memo.)*
+
+**Q: What patterns does Versace wallpaper come in?**
+A: The most requested designs are the Medusa medallion, the *Greca* Greek-key border, *Barocco* baroque damask, the *La Coupe des Dieux* mythological scenic, and animalier (leopard) prints, in colorways from black-and-gold to ivory and jewel tones.
+
+**Q: How do I hang Versace wallpaper?**
+A: Most Versace Home rolls are non-woven and paste-the-wall — you apply adhesive to the wall and hang the dry panel, which makes installation cleaner and future removal easier than traditional paste-the-paper hangings. Order one extra roll for pattern-match waste.
+
+**Q: Can I get a sample before I buy?**
+A: Yes — Designer Wallcoverings offers a $4.25 memo sample on Versace Home patterns so you can check the true color, sheen, and gilding in your own light before committing to full rolls.
+
+## Internal links to add in the block
+
+- → the specific Versace Medusa / Greca / Barocco product pages (top sellers)
+- → `/collections/designer-wallpaper` (once live — see designer-wallpaper draft)
+- → Cole & Son, Fornasetti, Missoni Home collections ("Explore more luxury houses")
+
+## Freshness signal
+
+Add a visible "Collection updated: <Month YYYY>" line and keep it current — AEO engines weight recency for commercial queries.
diff --git a/docs/aeo-drafts/wall-coverings.jsonld b/docs/aeo-drafts/wall-coverings.jsonld
new file mode 100644
index 0000000..835cbe7
--- /dev/null
+++ b/docs/aeo-drafts/wall-coverings.jsonld
@@ -0,0 +1,74 @@
+{
+ "_draft_note": "DRAFT — do not inject live. For a NEW /pages/wall-coverings landing. WebPage + FAQPage graph. Confirm the final page URL at publish. Keep answers in sync with wall-coverings.md.",
+ "@context": "https://schema.org",
+ "@graph": [
+ {
+ "@type": "WebPage",
+ "@id": "https://www.designerwallcoverings.com/pages/wall-coverings#webpage",
+ "url": "https://www.designerwallcoverings.com/pages/wall-coverings",
+ "name": "Wall Coverings — Types, Materials & How to Choose",
+ "description": "A guide to wall coverings: wallpaper, grasscloth, vinyl, cork, silk, flocked, mural, and commercial Type II wallcoverings — and how to choose. Thousands of designs with $4.25 memo samples.",
+ "about": { "@type": "Thing", "name": "Wall coverings" },
+ "isPartOf": {
+ "@type": "WebSite",
+ "name": "Designer Wallcoverings",
+ "url": "https://www.designerwallcoverings.com"
+ },
+ "keywords": "wall coverings, wallcoverings, types of wall coverings, grasscloth, vinyl wallcovering, cork, silk, flocked, commercial wallcovering, type ii"
+ },
+ {
+ "@type": "FAQPage",
+ "@id": "https://www.designerwallcoverings.com/pages/wall-coverings#faq",
+ "mainEntity": [
+ {
+ "@type": "Question",
+ "name": "What are wall coverings?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Wall coverings are materials applied to interior walls for decoration or protection. They include wallpaper, grasscloth, vinyl, cork, silk, flocked, and mural wallcoverings, as well as durable commercial (Type II) contract wallcoverings. Designer Wallcoverings carries thousands across these categories."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What is the difference between wallpaper and wall coverings?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "'Wallpaper' usually refers to printed paper or non-woven wall material, while 'wall coverings' is the broader umbrella that also includes grasscloth, vinyl, cork, silk, textile, and commercial-grade materials. All wallpaper is a wall covering, but not all wall coverings are paper."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What are the most durable wall coverings?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Type II commercial vinyl wallcoverings are the most durable and are rated for high-traffic and hospitality use; they resist scrubbing and abrasion. For residential durability, non-woven and washable vinyl papers hold up well in kitchens and baths."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "How much do wall coverings cost?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "It depends on the material and design house — residential designer wallpaper is priced per roll, textiles and specialty materials per yard, and hand-crafted scenics are made to order. Designer Wallcoverings shows current pricing on every product page and offers a $4.25 memo sample."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Can I get samples of wall coverings before buying?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes. Designer Wallcoverings offers a $4.25 memo sample on most patterns so you can confirm color, texture, and scale in your own light before ordering full rolls or yardage."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What types of wall coverings does Designer Wallcoverings carry?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Residential and commercial: designer wallpaper, grasscloth, vinyl, cork, silk, flocked, metallic/mica, and murals/scenics — from houses including Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, and Thibaut."
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/aeo-drafts/wall-coverings.md b/docs/aeo-drafts/wall-coverings.md
new file mode 100644
index 0000000..e154a22
--- /dev/null
+++ b/docs/aeo-drafts/wall-coverings.md
@@ -0,0 +1,76 @@
+---
+query: "wall coverings"
+target_type: NEW standalone landing page (head term — no natural collection home)
+proposed_target: https://www.designerwallcoverings.com/pages/wall-coverings (NEW Shopify page)
+handle_status: NEW page — proposed handle: /pages/wall-coverings
+gsc_position: 15.1
+gsc_impressions: 1213
+gsc_clicks: 1
+dtd_verdict: "C (hybrid) — build a NEW dedicated landing for this head term"
+schema_file: wall-coverings.jsonld
+status: DRAFT — no live theme write
+authored: 2026-07-26
+---
+
+# Wall Coverings — Types, Materials & How to Choose
+
+## Direct answer (place directly under the H1)
+
+> **Wall coverings** are decorative or protective materials applied to interior walls — including wallpaper, grasscloth, vinyl, cork, silk, flocked, and mural wallcoverings, plus commercial (Type II) contract options. They range from residential designer papers to durable commercial-grade vinyl. Designer Wallcoverings carries thousands of wall coverings from leading design houses, sold by the roll or yard with $4.25 memo samples.
+
+## Why this page (context for the editor)
+
+"wall coverings" ranks **position 15.1** on **1,213 impressions** with **1 click** — a high-volume head term with **no dedicated page** targeting it (only `/collections/all`, an ungoverned dump, and the brand homepage). Head terms with informational + commercial intent need a purpose-built buyer's-guide landing that (a) answers "what are wall coverings and which type do I need," (b) is entity-rich enough for AI Overviews to cite, and (c) merchandises links down into the vendor/material collections. This is the standard fix for an unhoused head term and the reason DTD chose the hybrid architecture.
+
+## Page structure (recommended)
+
+1. **H1** + direct-answer line (above)
+2. **Intro:** 2–3 sentences, brand + breadth ("thousands of patterns from 100+ houses")
+3. **"Types of wall coverings" grid** — each type = a card linking to its collection:
+ - Wallpaper (residential designer) → `/collections/designer-wallpaper`
+ - Grasscloth & natural → grasscloth collection
+ - Vinyl & commercial (Type II) → commercial/contract collection
+ - Cork → cork collection
+ - Silk → silk collection
+ - Flocked → flocked collection
+ - Murals & scenic → mural / Zuber / de Gournay collections
+4. **"How to choose"** short buyer's guide (durability, room, install)
+5. **FAQ** (below) + JSON-LD
+6. **CTA:** browse all / order a $4.25 sample
+
+## Entity mentions (weave naturally)
+
+- **Material types:** wallpaper, grasscloth, vinyl, cork, silk, flocked, mica, foil/metallic, mural, non-woven, Type I / Type II / Type III commercial vinyl
+- **Design houses carried (authority signal):** Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, Thibaut, Ralph Lauren, Phillip Jeffries, Maya Romanoff
+- **Attributes:** washable, paste-the-wall, peel-and-stick, commercial-grade, fire-rated, PVC-free
+- **Use contexts:** residential, hospitality, commercial/contract, feature wall, powder room, lobby
+
+## FAQ (accordion + FAQPage JSON-LD)
+
+**Q: What are wall coverings?**
+A: Wall coverings are materials applied to interior walls for decoration or protection. They include wallpaper, grasscloth, vinyl, cork, silk, flocked, and mural wallcoverings, as well as durable commercial (Type II) contract wallcoverings. Designer Wallcoverings carries thousands across these categories.
+
+**Q: What is the difference between wallpaper and wall coverings?**
+A: "Wallpaper" usually refers to printed paper or non-woven wall material, while "wall coverings" is the broader umbrella that also includes grasscloth, vinyl, cork, silk, textile, and commercial-grade materials. All wallpaper is a wall covering, but not all wall coverings are paper.
+
+**Q: What are the most durable wall coverings?**
+A: Type II commercial vinyl wallcoverings are the most durable and are rated for high-traffic and hospitality use; they resist scrubbing and abrasion. For residential durability, non-woven and washable vinyl papers hold up well in kitchens and baths.
+
+**Q: How much do wall coverings cost?**
+A: It depends on the material and design house — residential designer wallpaper is priced per roll, textiles and specialty materials per yard, and hand-crafted scenics are made to order. Designer Wallcoverings shows current pricing on every product page and offers a $4.25 memo sample.
+
+**Q: Can I get samples of wall coverings before buying?**
+A: Yes. Designer Wallcoverings offers a $4.25 memo sample on most patterns so you can confirm color, texture, and scale in your own light before ordering full rolls or yardage.
+
+**Q: What types of wall coverings does Designer Wallcoverings carry?**
+A: Residential and commercial: designer wallpaper, grasscloth, vinyl, cork, silk, flocked, metallic/mica, and murals/scenics — from houses including Cole & Son, Osborne & Little, Versace Home, Zuber, de Gournay, Schumacher, and Thibaut.
+
+## Internal links to add
+
+- → every material/type collection (grasscloth, vinyl, cork, silk, flocked, mural, commercial)
+- → `/collections/designer-wallpaper` (sibling head-term landing)
+- → top vendor collections (Cole & Son, Osborne & Little, Versace, Zuber)
+
+## Freshness signal
+
+Add "Last updated: <Month YYYY>" and refresh the type grid as collections change.
diff --git a/docs/aeo-drafts/zuber-wallpaper.jsonld b/docs/aeo-drafts/zuber-wallpaper.jsonld
new file mode 100644
index 0000000..5624f3b
--- /dev/null
+++ b/docs/aeo-drafts/zuber-wallpaper.jsonld
@@ -0,0 +1,77 @@
+{
+ "_draft_note": "DRAFT — do not inject live. CollectionPage + FAQPage graph. This page targets BOTH 'zuber' and 'zuber wallpaper'. Update @id/url to the VERIFIED live collection handle at publish. Keep answers in sync with zuber-wallpaper.md.",
+ "@context": "https://schema.org",
+ "@graph": [
+ {
+ "@type": "CollectionPage",
+ "@id": "https://www.designerwallcoverings.com/collections/zuber#collectionpage",
+ "url": "https://www.designerwallcoverings.com/collections/zuber",
+ "name": "Zuber Wallpaper — Hand-Block-Printed Scenic Panoramas",
+ "description": "Zuber & Cie, founded 1797 in Rixheim, France — the last maker of hand-block-printed scenic panoramic wallpaper, including Vues d'Amerique du Nord in the White House. Made to order, memo samples available.",
+ "about": [
+ { "@type": "Brand", "name": "Zuber" },
+ { "@type": "Organization", "name": "Zuber & Cie", "foundingDate": "1797", "foundingLocation": "Rixheim, Alsace, France" }
+ ],
+ "isPartOf": {
+ "@type": "WebSite",
+ "name": "Designer Wallcoverings",
+ "url": "https://www.designerwallcoverings.com"
+ },
+ "keywords": "zuber, zuber wallpaper, zuber & cie, scenic wallpaper, panoramic wallpaper, hand block printed, vues d'amerique du nord, french heritage wallpaper"
+ },
+ {
+ "@type": "FAQPage",
+ "@id": "https://www.designerwallcoverings.com/collections/zuber#faq",
+ "mainEntity": [
+ {
+ "@type": "Question",
+ "name": "What is Zuber wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Zuber wallpaper is scenic, hand-block-printed panoramic wallpaper made by Zuber & Cie of Rixheim, France, founded in 1797. Zuber is the only manufacturer still printing these panoramas from its original 18th- and 19th-century woodblocks, using the same distemper technique."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Why is Zuber wallpaper so expensive?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Each Zuber scenic is hand-printed one woodblock and one color at a time — a full panorama can take thousands of block impressions and hundreds of distinct colors, produced by hand in Alsace. That craftsmanship, plus the historic archive of original blocks, makes it among the most valuable wallpaper in the world."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Is Zuber wallpaper in the White House?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Yes. Zuber's Vues d'Amerique du Nord ('Views of North America,' first printed 1834) hangs in the Diplomatic Reception Room of the White House, one of the most famous installations of scenic wallpaper anywhere."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Where can I buy Zuber wallpaper?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Zuber is sold through select luxury retailers. Designer Wallcoverings offers Zuber scenic panoramas and decorative papers; because these are made to order, reach out for current pricing and lead times, and request a memo sample to confirm colors."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "How is Zuber wallpaper made?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "It is printed by hand from carved wooden blocks — each color is applied with a separate block, layer by layer, using opaque distemper paint on paper. The original blocks, some over 200 years old, are still used today."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "Can Zuber panoramas be customized?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Zuber scenics are made to order and can often be adapted in colorway, ground, and panel layout to suit a specific wall. Contact Designer Wallcoverings to discuss a bespoke Zuber installation."
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/aeo-drafts/zuber-wallpaper.md b/docs/aeo-drafts/zuber-wallpaper.md
new file mode 100644
index 0000000..50bbd63
--- /dev/null
+++ b/docs/aeo-drafts/zuber-wallpaper.md
@@ -0,0 +1,64 @@
+---
+query: "zuber wallpaper"
+target_type: AEO block — APPEND to existing collection page
+proposed_target: https://www.designerwallcoverings.com/collections/zuber
+handle_status: VERIFY at publish (proposed handle: zuber)
+gsc_position: 9.9
+gsc_impressions: 789
+gsc_clicks: 6
+related_query: "zuber" (683 impr, pos 8.6) — same page serves both
+dtd_verdict: "C (hybrid) — append to existing ranking collection page"
+schema_file: zuber-wallpaper.jsonld
+status: DRAFT — no live theme write
+authored: 2026-07-26
+note: Zuber scenics are botanical/bird-heavy — SETTLEMENT gate is N/A here (this is the authentic Zuber licensed line, not a generated pattern), but keep imagery to authentic Zuber product shots only.
+---
+
+# Zuber Wallpaper — Hand-Block-Printed Scenic Panoramas
+
+## Direct answer (place directly under the H1)
+
+> **Zuber** (Zuber & Cie) is a French manufacturer founded in 1797 in Rixheim, Alsace, and is the last company in the world still printing scenic panoramic wallpaper by hand from its original antique woodblocks. A single *Vues d'Amérique du Nord* panorama can require thousands of blocks and hundreds of colors. Designer Wallcoverings offers Zuber scenic wallpapers and decors, with memo samples available.
+
+## Why this block (context for the editor)
+
+"zuber wallpaper" ranks **position 9.9** (789 impressions) and the bare term "zuber" ranks **8.6** (683 impressions) — the *same* collection page can win both. Six clicks total means the snippet under-sells the heritage story. Append an AEO answer + FAQ + schema emphasizing the 1797 provenance and White House installation; that authority narrative is exactly what AI Overviews cite. Keep the single collection page — do not split "zuber" and "zuber wallpaper" into competing URLs.
+
+## Entity mentions (weave naturally into the collection copy)
+
+- **Brand / provenance:** Zuber, Zuber & Cie, Rixheim, Alsace, France, founded 1797
+- **Technique:** hand-block printing, woodblock, distemper colors, panoramic / scenic wallpaper, *papier peint panoramique*
+- **Landmark works:** *Vues d'Amérique du Nord* ("Views of North America," 1834) — installed in the **White House Diplomatic Reception Room**; *El Dorado*; *Les Jardins Français*; *Décor Chinois*
+- **Recognition:** *Entreprise du Patrimoine Vivant* (Living Heritage Company, France); museum-held archives
+- **Products:** scenic panoramas, decorative papers, borders, and Zuber-produced fabrics/leathers
+- **Related heritage houses carried by DW:** de Gournay, Gracie, Fromental, Iksel — "explore hand-painted & scenic houses"
+
+## FAQ (accordion + FAQPage JSON-LD)
+
+**Q: What is Zuber wallpaper?**
+A: Zuber wallpaper is scenic, hand-block-printed panoramic wallpaper made by Zuber & Cie of Rixheim, France, founded in 1797. Zuber is the only manufacturer still printing these panoramas from its original 18th- and 19th-century woodblocks, using the same distemper technique.
+
+**Q: Why is Zuber wallpaper so expensive?**
+A: Each Zuber scenic is hand-printed one woodblock and one color at a time — a full panorama can take thousands of block impressions and hundreds of distinct colors, produced by hand in Alsace. That craftsmanship, plus the historic archive of original blocks, makes it among the most valuable wallpaper in the world.
+
+**Q: Is Zuber wallpaper in the White House?**
+A: Yes. Zuber's *Vues d'Amérique du Nord* ("Views of North America," first printed 1834) hangs in the Diplomatic Reception Room of the White House, one of the most famous installations of scenic wallpaper anywhere.
+
+**Q: Where can I buy Zuber wallpaper?**
+A: Zuber is sold through select luxury retailers. Designer Wallcoverings offers Zuber scenic panoramas and decorative papers; because these are made to order, reach out for current pricing and lead times, and request a memo sample to confirm colors.
+
+**Q: How is Zuber wallpaper made?**
+A: It is printed by hand from carved wooden blocks — each color is applied with a separate block, layer by layer, using opaque distemper paint on paper. The original blocks, some over 200 years old, are still used today.
+
+**Q: Can Zuber panoramas be customized?**
+A: Zuber scenics are made to order and can often be adapted in colorway, ground, and panel layout to suit a specific wall. Contact Designer Wallcoverings to discuss a bespoke Zuber installation.
+
+## Internal links to add in the block
+
+- → individual Zuber scenic / decor product pages
+- → de Gournay, Gracie, Fromental collections (hand-painted & scenic peers)
+- → `/collections/designer-wallpaper` (head-term landing, once live)
+
+## Freshness signal
+
+Add "Collection updated: <Month YYYY>" and keep current.
diff --git a/public/portal.html b/public/portal.html
index e598aa9..2767753 100644
--- a/public/portal.html
+++ b/public/portal.html
@@ -64,12 +64,14 @@ td.mo{font-family:'Cormorant Garamond',serif;color:var(--gold);font-size:18px;wi
.chartwrap.dgt{display:flex;flex-direction:column}
.chartwrap.dgt .cwrow{flex:1;min-height:0;display:flex;gap:18px;align-items:stretch}
.chartwrap.dgt .cwcanvas{position:relative;flex:1 1 auto;min-width:0;height:100%}
-.hleg{list-style:none;margin:0;padding:0;flex:0 0 auto;max-width:46%;display:flex;flex-direction:column;justify-content:center;gap:10px;overflow:auto}
+.hleg{list-style:none;margin:0;padding:0;flex:0 0 auto;max-width:52%;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:10px;overflow:auto}
.hleg li{display:flex;align-items:center;cursor:pointer;font-size:11px;font-weight:500;letter-spacing:.02em;color:rgba(241,236,227,.62);transition:color .2s,opacity .2s;line-height:1.1}
.hleg li:hover{color:var(--ink)}
.hleg li.off{opacity:.38}
.hleg .lgmk{flex:0 0 16px;width:16px;height:2px;border-radius:1px;margin-right:10px}
-.hleg .lgtx{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
+.hleg .lgtx{flex:1 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:10px}
+.hleg .lgvl{flex:0 0 auto;font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1;letter-spacing:.01em;color:rgba(201,162,75,.92);white-space:pre}
+.hleg li.off .lgvl{color:rgba(241,236,227,.30)}
.cards2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1px;background:var(--line);margin-top:34px}
.cards2 .c{background:var(--bg);padding:32px 28px}.cards2 .c h3{font-family:'Cormorant Garamond',serif;font-size:22px;color:var(--gold);margin-bottom:10px}.cards2 .c p{color:var(--dim);font-size:16px;line-height:1.6}
.flag{color:#e8a0a0}.good{color:#9fd6b0}
@@ -381,12 +383,19 @@ function initCharts(){if(charted||!window.Chart)return;charted=true;
var htmlLegend={id:'htmlLegend',afterUpdate:function(chart){
var ul=document.getElementById(chart.canvas.id+'-legend');if(!ul)return;ul.innerHTML='';
var items=chart.options.plugins.legend.labels.generateLabels(chart);
+ var ds=chart.data.datasets[0].data;
+ // Total across only the VISIBLE arcs so percentages re-normalize as rows toggle off.
+ var total=0;items.forEach(function(it){if(!it.hidden)total+=(+ds[it.index]||0);});
items.forEach(function(item){
+ var val=+ds[item.index]||0;
+ var pct=total>0?Math.round(val/total*100):0;
var li=document.createElement('li');if(item.hidden)li.className='off';
li.onclick=function(){chart.toggleDataVisibility(item.index);chart.update();};
var mk=document.createElement('span');mk.className='lgmk';mk.style.background=item.fillStyle;
var tx=document.createElement('span');tx.className='lgtx';tx.textContent=item.text;
- li.appendChild(mk);li.appendChild(tx);ul.appendChild(li);
+ var vl=document.createElement('span');vl.className='lgvl';
+ vl.textContent=item.hidden?'—':(val.toLocaleString()+' '+pct+'%');
+ li.appendChild(mk);li.appendChild(tx);li.appendChild(vl);ul.appendChild(li);
});
}};
// Vertical gold gradient for area fills — scriptable so it re-derives per chart area
diff --git a/public/versions/atelier.html b/public/versions/atelier.html
index f69e0a5..411c87c 100644
--- a/public/versions/atelier.html
+++ b/public/versions/atelier.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Jost',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
diff --git a/public/versions/gallery.html b/public/versions/gallery.html
index 7832184..f69fdda 100644
--- a/public/versions/gallery.html
+++ b/public/versions/gallery.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Inter',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
diff --git a/public/versions/heritage.html b/public/versions/heritage.html
index 158635d..4073b04 100644
--- a/public/versions/heritage.html
+++ b/public/versions/heritage.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Jost',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
diff --git a/public/versions/maison.html b/public/versions/maison.html
index 715e6fc..bfa3c10 100644
--- a/public/versions/maison.html
+++ b/public/versions/maison.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Inter',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
diff --git a/public/versions/studio.html b/public/versions/studio.html
index adf6e65..fd6f870 100644
--- a/public/versions/studio.html
+++ b/public/versions/studio.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Inter',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
diff --git a/public/versions/texture.html b/public/versions/texture.html
index b039659..26859e8 100644
--- a/public/versions/texture.html
+++ b/public/versions/texture.html
@@ -30,12 +30,21 @@ nav.sec a:hover{color:var(--gold);border-color:var(--gold)}
.controls{display:flex;gap:14px;align-items:center;font-size:12px}
.controls label{opacity:.7;letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}
.controls .selwrap{position:relative;display:inline-flex;align-items:center}
-.controls .selwrap:after{content:'';position:absolute;right:12px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:translateY(-72%) rotate(45deg);pointer-events:none;transition:transform .2s,border-color .2s}
+.controls .selwrap:after{content:'';position:absolute;right:13px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg);transform-origin:center;pointer-events:none;transition:transform .2s ease,border-color .2s}
.controls select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 32px 7px 13px;border-radius:4px;font-family:'Jost',system-ui,sans-serif;font-size:12px;letter-spacing:.04em;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.controls select:hover{border-color:var(--gold)}
-.controls select:focus{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
-.controls .selwrap:hover:after{border-color:var(--gold);transform:translateY(-55%) rotate(45deg)}
-.controls input[type=range]{accent-color:var(--gold);width:110px}
+.controls select:focus-visible{outline:none;border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}
+.controls .selwrap:hover:after{border-color:var(--gold);transform:rotate(45deg) translate(1px,1px)}
+/* Density slider — styled to the same gold system as the select (no raw native slider) */
+.controls input[type=range]{appearance:none;-webkit-appearance:none;width:110px;height:22px;background:transparent;cursor:pointer;vertical-align:middle}
+.controls input[type=range]:focus{outline:none}
+.controls input[type=range]::-webkit-slider-runnable-track{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold) 0,var(--gold) var(--fill,50%),var(--line) var(--fill,50%))}
+.controls input[type=range]::-moz-range-track{height:3px;border-radius:2px;background:var(--line)}
+.controls input[type=range]::-moz-range-progress{height:3px;border-radius:2px;background:var(--gold)}
+.controls input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:13px;height:13px;margin-top:-5px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line);transition:transform .15s ease,box-shadow .15s ease}
+.controls input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--line)}
+.controls input[type=range]:hover::-webkit-slider-thumb,.controls input[type=range]:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 0 1px var(--gold)}
+.controls input[type=range]:hover::-moz-range-thumb,.controls input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--gold)}
.grid{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:20px;padding:18px 0 40px}
.gcard .gimg{aspect-ratio:3/4;border-radius:5px;transition:.3s;overflow:hidden;background:var(--panel)}.gcard:hover .gimg{transform:translateY(-4px);box-shadow:0 14px 40px rgba(0,0,0,.28)}
.gcard .gimg img{width:100%;height:100%;object-fit:cover;display:block}
@@ -118,9 +127,11 @@ function apply(){var v=sel.value,cards=[].slice.call(grid.children);
if(v==='color')return (+a.dataset.hue)-(+b.dataset.hue);
if(v==='tier')return (+a.dataset.tier)-(+b.dataset.tier);return 0;});
cards.forEach(function(c){grid.appendChild(c);});localStorage.setItem(KS,v);}
+function densFill(){var mn=+dens.min||2,mx=+dens.max||6;dens.style.setProperty('--fill',((dens.value-mn)/(mx-mn)*100)+'%');}
sel.addEventListener('change',apply);
-dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);localStorage.setItem(KD,dens.value);});
+dens.addEventListener('input',function(){document.documentElement.style.setProperty('--cols',dens.value);densFill();localStorage.setItem(KD,dens.value);});
var sv=localStorage.getItem(KS),dv=localStorage.getItem(KD);
if(sv){sel.value=sv;apply();}if(dv){dens.value=dv;document.documentElement.style.setProperty('--cols',dv);}
+densFill();
</script>
</body></html>
\ No newline at end of file
← 95aeb4a chore: lint, refactor, v0.1.1 (session close)
·
back to Consulting Designerwallcoverings Com
·
TK-20: AEO drafts for top-5 striking-distance queries (DTD-C 601d121 →