[object Object]

← back to Wallco Ai

curator A8: panel-scoped keyboard shortcuts (0=reset, [ ]=nudge focused slider) + note documentation

2dffa4a3f6aa0d21f7136535c3d49f9507c6e80e · 2026-05-31 23:16:31 -0700 · Steve Abrams

Files touched

Diff

commit 2dffa4a3f6aa0d21f7136535c3d49f9507c6e80e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun May 31 23:16:31 2026 -0700

    curator A8: panel-scoped keyboard shortcuts (0=reset, [ ]=nudge focused slider) + note documentation
---
 YOLO_BACKLOG_2026-05-31.md       |  5 ++++-
 public/admin/cactus-curator.html | 22 +++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/YOLO_BACKLOG_2026-05-31.md b/YOLO_BACKLOG_2026-05-31.md
index 7f2808b..9efed54 100644
--- a/YOLO_BACKLOG_2026-05-31.md
+++ b/YOLO_BACKLOG_2026-05-31.md
@@ -22,7 +22,7 @@ Self-contained in `public/admin/cactus-curator.html` — zero `server.js` risk,
 - [x] **A5 · Per-card Bake from grid** — browser-verified (card #53856 bake btn; decide btns still data-a-only; neutral guard fires no-POST) — — a hover "⤓ Bake" affordance on each card that bakes the current adjustment for that design without opening the modal (reuses `bakeAdjustment`).
 - [x] **A6 · Copy-filter-CSS dev aid** — browser-verified (copies `filter: …;`, ✓ copied feedback) — — a tiny "copy CSS" button that copies the current `filter:` string to clipboard (useful for porting the look elsewhere).
 - [x] **A7 · Bake confirmation guard** — browser-verified (sat 2.01× → first click arms, no POST; 4s disarm) — — when baking, if the adjustment is extreme (e.g. saturate >2× or brightness <0.5×), show a one-line "looks extreme — bake anyway?" inline confirm before POSTing, to avoid accidental wild bakes.
-- [ ] **A8 · Reset-all + keyboard** — `0` key (when panel open) resets to neutral; `[`/`]` nudge the focused slider; document in the panel's note line.
+- [x] **A8 · Reset-all + keyboard** — browser-verified (0 resets vivid→neutral; ] +6, [ -3 on focused slider) — — `0` key (when panel open) resets to neutral; `[`/`]` nudge the focused slider; document in the panel's note line.
 
 ## Parked-for-Steve (created by the loop as items arise)
 - Deploy the night's curator commits to prod (`scp public/admin/cactus-curator.html`) — gated, morning approval.
@@ -42,3 +42,6 @@ TICK · TIMESTAMP · ITEM · STATUS · COMMIT
 - T5 · 2026-05-31 21:37 · A5 per-card bake · done · (commit below)
 - T6 · 2026-05-31 22:10 · A6 copy-filter-CSS · done · (commit below)
 - T7 · 2026-05-31 22:42 · A7 extreme-bake guard · done · (commit below)
+- T8 · 2026-05-31 23:15 · A8 reset+keyboard · done · (commit below)
+
+✅ ALL A1-A8 [x] · stop condition triggered · loop OFF · deploy parked for Steve
diff --git a/public/admin/cactus-curator.html b/public/admin/cactus-curator.html
index b286bd1..5267369 100644
--- a/public/admin/cactus-curator.html
+++ b/public/admin/cactus-curator.html
@@ -252,7 +252,7 @@
     <span class="ba-wrap"><img class="ba-img ba-before" id="baBefore" alt=""><em>before</em></span>
     <span class="ba-wrap"><img class="ba-img ba-after" id="baAfter" alt=""><em>after</em></span>
   </span>
-  <span class="adjnote">live preview only — non-destructive, doesn't touch the stored image</span>
+  <span class="adjnote">live preview only — non-destructive, doesn't touch the stored image · keys: <b>0</b> reset, <b>[</b>/<b>]</b> nudge focused slider</span>
 </div>
 
 <div id="err" style="display:none"></div>
@@ -1767,6 +1767,26 @@ load();
       try { navigator.clipboard.writeText(css).then(function(){ done(true); }, function(){ done(false); }); }
       catch(e){ done(false); }
     });
+    // A8 — keyboard shortcuts, scoped to when the Adjust panel is open.
+    //   0      → reset to neutral
+    //   [ / ]  → nudge the focused slider down / up by 3
+    document.addEventListener('keydown', function(e){
+      if (!panel || !panel.classList.contains('on')) return;
+      var isRange = e.target && e.target.type === 'range';
+      var tag = (e.target && e.target.tagName || '').toLowerCase();
+      if (tag === 'input' && !isRange) return;   // don't hijack real text inputs
+      if (e.key === '0'){
+        for (var k in NEUTRAL) set(k, NEUTRAL[k]); apply(); markActivePreset(); e.preventDefault();
+      } else if ((e.key === '[' || e.key === ']') && isRange){
+        var rid = e.target.id, key = null;
+        for (var kk in ids){ if (ids[kk] === rid) { key = kk; break; } }
+        if (key){
+          var step = (e.key === ']' ? 1 : -1) * 3;
+          var nv = Math.max(+e.target.min, Math.min(+e.target.max, get(key) + step));
+          set(key, nv); apply(); markActivePreset(); e.preventDefault();
+        }
+      }
+    });
     var panel = el('adjPanel'), toggle = el('adjToggle');
     // A3 — pick a representative card image for the before/after preview chip.
     function refreshBA(){

← 45280b3 curator A7: extreme-adjustment bake guard — require a confir  ·  back to Wallco Ai  ·  BLEED_GHOST cohort triage report (7875 designs, read-only): 365dbd6 →