← back to Quadrille Showroom
furniture FIX 2: Transitional now unmistakably distinct from Contemporary
02b4e0a9c073b73f495299bc9afb0579bed46969 · 2026-07-02 10:16:27 -0700 · Steve
Chair upholstery moved OFF cream/greige to a deep sage-olive (mattMat env-0 so the
~1.6x showroom light-lift can't wash it back to cream) so the CHAIR — the dominant
visual mass — reads clearly green vs Contemporary's white seat. Table wood darkened
to a matte mid-oak (env-0) so it reads as solid wood, not pale blonde. Also gates the
resizeRoom re-dress: a resize only re-dresses if the user had actively chosen a room
type, preserving the FIX-1 clean-empty-room boot invariant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
Diff
commit 02b4e0a9c073b73f495299bc9afb0579bed46969
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 2 10:16:27 2026 -0700
furniture FIX 2: Transitional now unmistakably distinct from Contemporary
Chair upholstery moved OFF cream/greige to a deep sage-olive (mattMat env-0 so the
~1.6x showroom light-lift can't wash it back to cream) so the CHAIR — the dominant
visual mass — reads clearly green vs Contemporary's white seat. Table wood darkened
to a matte mid-oak (env-0) so it reads as solid wood, not pale blonde. Also gates the
resizeRoom re-dress: a resize only re-dresses if the user had actively chosen a room
type, preserving the FIX-1 clean-empty-room boot invariant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
public/js/showroom.js | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/public/js/showroom.js b/public/js/showroom.js
index e97ace6..4a08208 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -1168,12 +1168,16 @@ const FURNITURE_STYLES = {
transitional: {
label: 'Transitional',
buildTable(g) {
- // WARM honey-oak — clearly a wood tone (not the Contemporary set's cool white).
- const wood = fmat(0xa9803f, 0.5, 0.0);
+ // DEEP warm mid-oak — pushed well off the Contemporary set's cool white. mattMat
+ // (envMapIntensity 0) is REQUIRED here: the ~1.6x showroom light-lift + ACES tone-map
+ // washes any env-lit wood to pale blonde (proven — a 0.15-env honey rendered nearly
+ // white). A darker matte base survives the lift and reads as a solid oak brown, sitting
+ // clearly between Contemporary's white and Traditional's dark walnut.
+ const wood = mattMat(0x4f3a1c, 0.6);
const top = new THREE.Mesh(new THREE.BoxGeometry(1.06, 0.055, 0.70), wood);
top.position.set(0, 0.73, 0); top.castShadow = true; top.receiveShadow = true; g.add(top);
// softened edge: a thin inset trim just under the top reads as an eased/beveled edge
- const trim = new THREE.Mesh(new THREE.BoxGeometry(1.00, 0.03, 0.64), fmat(0x8a6531, 0.55, 0.0));
+ const trim = new THREE.Mesh(new THREE.BoxGeometry(1.00, 0.03, 0.64), mattMat(0x3d2c14, 0.65));
trim.position.set(0, 0.695, 0); trim.castShadow = true; g.add(trim);
[[-0.45, -0.29], [0.45, -0.29], [-0.45, 0.29], [0.45, 0.29]].forEach(([lx, lz]) =>
buildTaperedLeg(g, lx, lz, wood, 0.70));
@@ -1182,7 +1186,13 @@ const FURNITURE_STYLES = {
buildChair(g) {
// Soft, rounded upholstered chair — a curved barrel back + bolstered front, so its
// silhouette reads clearly SOFTER than the Contemporary set's crisp rectilinear chair.
- const wood = fmat(0xa9803f, 0.55, 0.0), greige = fmat(0xcfc3af, 0.9, 0.0);
+ // Upholstery is a DEEP SAGE-OLIVE (not cream/greige) so the chair — the dominant visual
+ // mass — reads clearly green at room distance and is never confused with Contemporary's
+ // crisp white seat. mattMat (env 0) + a deliberately dark, saturated base is REQUIRED:
+ // a pale linen washed to cream under the ~1.6x showroom light-lift (proven). This tone
+ // survives the lift and lands as a recognisable sage.
+ const wood = mattMat(0x4f3a1c, 0.6);
+ const greige = mattMat(0x4c5730, 0.95);
const c = new THREE.Group(); c.position.set(0, 0, 0.69);
const seat = new THREE.Mesh(new THREE.BoxGeometry(0.50, 0.12, 0.48), greige);
seat.position.set(0, 0.45, 0); seat.castShadow = true; seat.receiveShadow = true; c.add(seat);
@@ -5360,8 +5370,10 @@ function resizeRoom(w, d, h) {
}
enableStaticShadows();
- // Re-dress the active (or default) room type into the new box.
- buildRoomType(currentRoomType || 'living');
+ // Re-dress ONLY if the user had actively chosen a room type — the boot default is a
+ // clean empty room (no sofa/lamps/rug), so a resize must NOT silently re-introduce the
+ // dressing. currentRoomType is null until the user clicks a room-type chip.
+ if (currentRoomType) buildRoomType(currentRoomType);
// Persist.
try { localStorage.setItem('qh_room_w', String(w)); localStorage.setItem('qh_room_h', String(h)); localStorage.setItem('qh_room_d', String(d)); } catch (e) {}
← 6bdf2b5 furniture FIX 1: onload = clean empty room + table+chair onl
·
back to Quadrille Showroom
·
chore: v1.3.2 (session close — furniture style selector + ar bf8db8a →