← back to Wallco Ai
wallco /designs — remove studio-adjust modal (6 Photoshop-style global filter sliders)
fd7b53d5ebc1957afb84679240b533062edd9c68 · 2026-05-19 23:55:04 -0700 · Steve Abrams
Customer-facing /designs page no longer carries the Studio Adjust collapsible
with hue/saturation/brightness/contrast/warmth/sharpness sliders. Removed all 3
chunks: HTML block (<details id=studio-adjust>), scoped CSS (.sa-row rules),
and the studioAdjust() IIFE that wired sliders to CSS filter() on every card.
localStorage('wallco.designs.adjust') is now harmless dead browser data; no
server-side state to clean up.
Files touched
Diff
commit fd7b53d5ebc1957afb84679240b533062edd9c68
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue May 19 23:55:04 2026 -0700
wallco /designs — remove studio-adjust modal (6 Photoshop-style global filter sliders)
Customer-facing /designs page no longer carries the Studio Adjust collapsible
with hue/saturation/brightness/contrast/warmth/sharpness sliders. Removed all 3
chunks: HTML block (<details id=studio-adjust>), scoped CSS (.sa-row rules),
and the studioAdjust() IIFE that wired sliders to CSS filter() on every card.
localStorage('wallco.designs.adjust') is now harmless dead browser data; no
server-side state to clean up.
---
server.js | 111 --------------------------------------------------------------
1 file changed, 111 deletions(-)
diff --git a/server.js b/server.js
index f022e67..ac22649 100644
--- a/server.js
+++ b/server.js
@@ -3756,55 +3756,7 @@ ${cat === 'mural-scenic' ? `
</div>`;
})()}
- <!-- Studio Adjust — 6 Photoshop-style global sliders, apply CSS filter() to every card image.
- Values persist in localStorage('wallco.designs.adjust'). Collapsible to keep the toolbar tidy. -->
- <details id="studio-adjust" class="studio-adjust" style="margin:14px 0 8px;border:1px solid var(--line,#e0d9cd);border-radius:8px;background:var(--card-bg,#faf8f3);overflow:hidden">
- <summary style="cursor:pointer;padding:9px 14px;font:11px var(--sans,system-ui);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft,#555);user-select:none;display:flex;align-items:center;gap:8px">
- <span aria-hidden="true">✦</span>
- <span>Studio adjust</span>
- <span id="studio-adjust-summary" style="margin-left:auto;font-size:10px;color:var(--ink-faint,#999);letter-spacing:0;text-transform:none">defaults</span>
- </summary>
- <div style="padding:8px 14px 14px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 18px">
- <label class="sa-row" data-axis="hue">
- <span class="sa-name">Hue</span>
- <input type="range" min="-180" max="180" step="1" value="0">
- <em class="sa-val">0°</em>
- </label>
- <label class="sa-row" data-axis="sat">
- <span class="sa-name">Saturation</span>
- <input type="range" min="0" max="200" step="1" value="100">
- <em class="sa-val">100%</em>
- </label>
- <label class="sa-row" data-axis="bri">
- <span class="sa-name">Brightness</span>
- <input type="range" min="40" max="160" step="1" value="100">
- <em class="sa-val">100%</em>
- </label>
- <label class="sa-row" data-axis="con">
- <span class="sa-name">Contrast</span>
- <input type="range" min="40" max="200" step="1" value="100">
- <em class="sa-val">100%</em>
- </label>
- <label class="sa-row" data-axis="warm">
- <span class="sa-name">Warmth</span>
- <input type="range" min="0" max="100" step="1" value="0">
- <em class="sa-val">0%</em>
- </label>
- <label class="sa-row" data-axis="sharp">
- <span class="sa-name">Sharpness</span>
- <input type="range" min="-10" max="10" step="1" value="0">
- <em class="sa-val">0</em>
- </label>
- <button type="button" id="studio-adjust-reset" style="grid-column:1/-1;justify-self:start;font:11px var(--sans);padding:5px 12px;background:transparent;border:1px solid var(--line);color:var(--ink-soft);border-radius:6px;cursor:pointer;letter-spacing:.04em">Reset</button>
- </div>
- </details>
<style>
- .sa-row { display:flex;align-items:center;gap:8px;font:11px var(--sans,system-ui);color:var(--ink-soft,#555) }
- .sa-row .sa-name { flex:0 0 70px;text-transform:uppercase;letter-spacing:.05em;font-size:10px }
- .sa-row input[type=range] { flex:1;-webkit-appearance:none;height:2px;background:var(--line,#d8d2c5);border-radius:2px;outline:none }
- .sa-row input[type=range]::-webkit-slider-thumb { -webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent,#c9a14b);cursor:pointer;border:none }
- .sa-row input[type=range]::-moz-range-thumb { width:14px;height:14px;border-radius:50%;background:var(--accent,#c9a14b);cursor:pointer;border:none }
- .sa-row .sa-val { flex:0 0 44px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-faint,#999);font-size:10px }
/* Favorite heart on each card */
.design-card { position:relative }
.fav-btn { position:absolute;top:10px;left:10px;z-index:5;width:32px;height:32px;border-radius:50%;border:0;background:rgba(20,18,15,.55);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1;transition:transform .12s,background .15s;backdrop-filter:blur(4px) }
@@ -4225,69 +4177,6 @@ ${FOOTER}
});
}
- // ── Studio Adjust — 6 Photoshop-style sliders applied globally via CSS filter().
- // Persists in localStorage('wallco.designs.adjust'). Affects every .card-img.
- (function studioAdjust(){
- var KEY = 'wallco.designs.adjust';
- var defaults = { hue:0, sat:100, bri:100, con:100, warm:0, sharp:0 };
- var state = (function(){ try { return Object.assign({}, defaults, JSON.parse(localStorage.getItem(KEY)||'{}')); } catch(e){ return Object.assign({}, defaults); } })();
- var rows = document.querySelectorAll('#studio-adjust .sa-row');
- var summary = document.getElementById('studio-adjust-summary');
- var resetBtn = document.getElementById('studio-adjust-reset');
-
- function buildFilter(){
- // Warmth = sepia approximation (warm wash). Sharpness positive = saturation/contrast micro-boost;
- // negative = soft blur. Keeps semantics user-friendly without exotic SVG filters.
- var sharpExtra = '';
- if (state.sharp < 0) sharpExtra = ' blur(' + (Math.abs(state.sharp) * 0.4) + 'px)';
- else if (state.sharp > 0) sharpExtra = ' contrast(' + (100 + state.sharp * 4) + '%) saturate(' + (100 + state.sharp * 4) + '%)';
- return 'hue-rotate(' + state.hue + 'deg) saturate(' + state.sat + '%) brightness(' + state.bri + '%) contrast(' + state.con + '%) sepia(' + state.warm + '%)' + sharpExtra;
- }
- function applyToAll(){
- var f = buildFilter();
- var imgs = document.querySelectorAll('.design-card .card-img');
- for (var i=0;i<imgs.length;i++) imgs[i].style.filter = f;
- // Fix precedence trap — prior version had state.hue||0!==0 which parses
- // as state.hue || (0!==0) so 'changed' could be a number when hue!=0
- // and was false when hue was 0 regardless of other sliders. Use explicit
- // per-key comparison against defaults so summary always reflects truth.
- // NEVER put backticks in inline comments in this file — the /designs
- // response is one big template literal; a comment backtick closes it
- // and parses every downstream line as top-level JS (broke startup
- // for ~3 minutes on 2026-05-14 commit 109dda6).
- var changed = Object.keys(defaults).some(function(k){ return state[k] !== defaults[k]; });
- if (summary) summary.textContent = changed ? 'edited' : 'defaults';
- }
- function syncRow(row){
- var axis = row.getAttribute('data-axis');
- var inp = row.querySelector('input[type=range]');
- var val = row.querySelector('.sa-val');
- inp.value = state[axis];
- var suffix = axis==='hue' ? '°' : (axis==='sharp' ? '' : '%');
- val.textContent = state[axis] + suffix;
- }
- rows.forEach(function(row){
- var axis = row.getAttribute('data-axis');
- var inp = row.querySelector('input[type=range]');
- var val = row.querySelector('.sa-val');
- syncRow(row);
- inp.addEventListener('input', function(){
- state[axis] = parseFloat(this.value);
- var suffix = axis==='hue' ? '°' : (axis==='sharp' ? '' : '%');
- val.textContent = state[axis] + suffix;
- applyToAll();
- localStorage.setItem(KEY, JSON.stringify(state));
- });
- });
- if (resetBtn) resetBtn.addEventListener('click', function(){
- state = Object.assign({}, defaults);
- rows.forEach(syncRow);
- applyToAll();
- localStorage.setItem(KEY, JSON.stringify(state));
- });
- applyToAll();
- })();
-
// ── Favorites — heart button per card, "Favorites only" filter chip.
// Persists in localStorage('wallco.favorites') as a JSON array of design ids.
(function favorites(){
← 27a2a98 inspiration_generator: pull real archival seeds, generate NE
·
back to Wallco Ai
·
server: mount /admin/inspirations + /api/admin/inspirations/ c79c5bc →