[object Object]

← back to Quadrille Showroom

PJ polish: true hi-res (4096px) engraved-brass wall wordmark, fix stale book-match comments

a08b36a70317d5bff1dd18bd1dc4965a5c1120d0 · 2026-06-27 10:59:02 -0700 · Steve

Files touched

Diff

commit a08b36a70317d5bff1dd18bd1dc4965a5c1120d0
Author: Steve <steve@designerwallcoverings.com>
Date:   Sat Jun 27 10:59:02 2026 -0700

    PJ polish: true hi-res (4096px) engraved-brass wall wordmark, fix stale book-match comments
---
 public/js/showroom.js | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/public/js/showroom.js b/public/js/showroom.js
index 40420ba..f13bcc0 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -766,9 +766,10 @@ function buildWingWall() {
     const poolIdx = product._poolIdx !== undefined ? product._poolIdx : (i % TEXTURE_POOL.length);
     const poolMat = TEXTURE_POOL[poolIdx].material;
 
-    // BOOK-MATCH WING — two leaves hinged at a center spine (x=0).
-    // Closed: coplanar on the wall (a flat mirrored pair). Open (proximity ≤4ft):
-    // both leaves swing forward like an opening sample book — left mirrored, right normal.
+    // WINGBOARD — two leaves hinged at a center spine (x=0). Together they present
+    // ONE continuous design (left leaf = left half U 0..0.5, right leaf = right half
+    // U 0.5..1; see loadWingBook). Closed: coplanar on the wall. Open (proximity ≤4ft
+    // or focus): both leaves swing forward ~65° to show the whole wallcovering.
     const leafW = wingW / 2;
     const H = WC.height;
     const yC = H / 2 + 0.04;
@@ -892,21 +893,22 @@ function buildWingWall() {
     const sectionW = (section.endIdx - section.startIdx + 1) * slotW;
 
     // Vendor label — HIGH-RES engraved-brass gallery plaque (crisp, clean, PJ-style).
-    const lc = document.createElement('canvas'); lc.width = 2048; lc.height = 160;
+    const lc = document.createElement('canvas'); lc.width = 4096; lc.height = 320;
     const lx = lc.getContext('2d');
-    lx.clearRect(0, 0, 2048, 160);                                  // transparent ground (no cheap colour bar)
-    lx.fillStyle = '#1a1206'; lx.font = '600 84px Georgia, "Times New Roman", serif';
+    lx.clearRect(0, 0, 4096, 320);                                  // transparent ground (no cheap colour bar)
+    lx.font = '600 168px Georgia, "Times New Roman", serif';
     lx.textAlign = 'center'; lx.textBaseline = 'middle';
     // letter-spaced uppercase for an engraved-plaque feel
     const txt = section.vendor.toUpperCase().split('').join('  ');
-    lx.fillStyle = '#b9933f'; lx.fillText(txt, 1024, 86);           // brass
+    lx.fillStyle = 'rgba(26,18,6,0.32)'; lx.fillText(txt, 2050, 166); // faint engraved shadow
+    lx.fillStyle = '#c2a052'; lx.fillText(txt, 2048, 160);           // soft brass face
     const lt = new THREE.CanvasTexture(lc);
     if (renderer.capabilities) lt.anisotropy = renderer.capabilities.getMaxAnisotropy();
     lt.minFilter = THREE.LinearMipmapLinearFilter; lt.generateMipmaps = true;
-    const labelW = Math.max(sectionW * 0.9, 0.4);
-    const label = new THREE.Mesh(new THREE.PlaneGeometry(labelW, labelW * 160 / 2048),
+    const labelW = Math.max(sectionW * 0.92, 0.4);
+    const label = new THREE.Mesh(new THREE.PlaneGeometry(labelW, labelW * 320 / 4096),
       new THREE.MeshBasicMaterial({ map: lt, transparent: true }));
-    label.position.set(centerX, WC.height + 0.18, 0.01);
+    label.position.set(centerX, WC.height + 0.2, 0.01);
     wallGroup.add(label);
 
     // Thin vertical divider at section start (except first)

← e7268c6 Photoreal room (SDXL warm-oak floor + limewash plaster walls  ·  back to Quadrille Showroom  ·  PJ hero framing: focused board presents FLAT/dead-on (near-f b1e3c75 →