[object Object]

← 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 →