[object Object]

← back to Commercialrealestate

CRCP: drag-to-resize the Controls rail (#ctrlrail) — vertical expansion bar

b521fc4d99a0dbb42092387ddd66c45725ebd78f · 2026-08-20 13:31:08 -0700 · Steve

A fixed vertical grab-bar pinned to the rail's left edge via right:var(--railW) so it
auto-tracks width and never scrolls with rail content. Drag = widen (clamp 200-760px),
double-click = reset to default, width persisted to localStorage (crcp_railW). Hidden
with the rail below 1100px. Verified on :9911 — 272->422 on drag, persisted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit b521fc4d99a0dbb42092387ddd66c45725ebd78f
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Aug 20 13:31:08 2026 -0700

    CRCP: drag-to-resize the Controls rail (#ctrlrail) — vertical expansion bar
    
    A fixed vertical grab-bar pinned to the rail's left edge via right:var(--railW) so it
    auto-tracks width and never scrolls with rail content. Drag = widen (clamp 200-760px),
    double-click = reset to default, width persisted to localStorage (crcp_railW). Hidden
    with the rail below 1100px. Verified on :9911 — 272->422 on drag, persisted.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 public/index.html | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/public/index.html b/public/index.html
index df961e4..24593b4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2499,5 +2499,32 @@ function loadRanked(_retry){ return fetch('data/ranked.json').then(r=>{ if(!r.ok
        The native Fields show/hide/reorder panel (#fFields) is independent and stays. -->
   <!-- <script src="/nav-agent/nav-agent.js" defer></script> -->
 
+  <!-- ── Controls-rail resize bar (Steve 2026-08-20): drag the #ctrlrail (Controls) panel wider ──
+       A fixed vertical grab-bar pinned to the rail's left edge via right:var(--railW), so it auto-
+       tracks the width and never scrolls with the rail content. Drag = resize, dbl-click = reset,
+       width persisted to localStorage. Hidden with the rail below 1100px. -->
+  <style>
+    .railrsz{ position:fixed; right:var(--railW,272px); top:57px; bottom:0; width:10px; margin-right:-5px; cursor:ew-resize; z-index:25; }
+    .railrsz::before{ content:''; position:absolute; left:4px; top:0; bottom:0; width:2px; background:transparent; transition:background .15s; }
+    .railrsz:hover::before, .railrsz.rsz-active::before{ background:var(--blue,#3b7dff); }
+    body.rsz-dragging{ cursor:ew-resize; user-select:none; }
+    @media (max-width:1100px){ .railrsz{ display:none; } }
+  </style>
+  <script>
+  (function(){
+    var rail=document.getElementById('ctrlrail'); if(!rail) return;
+    var KEY='crcp_railW';
+    try{ var s=parseInt(localStorage.getItem(KEY),10); if(s>=200&&s<=760) document.documentElement.style.setProperty('--railW', s+'px'); }catch(_){}
+    var h=document.createElement('div'); h.className='railrsz'; h.title='Drag to resize the Controls panel · double-click to reset'; document.body.appendChild(h);
+    var dragging=false;
+    function onMove(e){ if(!dragging) return; var w=Math.max(200, Math.min(760, window.innerWidth - e.clientX)); document.documentElement.style.setProperty('--railW', w+'px'); }
+    function onUp(){ if(!dragging) return; dragging=false; document.body.classList.remove('rsz-dragging'); h.classList.remove('rsz-active');
+      document.removeEventListener('mousemove',onMove); document.removeEventListener('mouseup',onUp);
+      try{ localStorage.setItem(KEY, Math.round(rail.getBoundingClientRect().width)); }catch(_){} }
+    h.addEventListener('mousedown',function(e){ e.preventDefault(); dragging=true; document.body.classList.add('rsz-dragging'); h.classList.add('rsz-active');
+      document.addEventListener('mousemove',onMove); document.addEventListener('mouseup',onUp); });
+    h.addEventListener('dblclick',function(){ document.documentElement.style.removeProperty('--railW'); try{ localStorage.removeItem(KEY); }catch(_){} });
+  })();
+  </script>
 </body>
 </html>

← b2f3312 loan-officers: daily local-refresh wrapper (gate-safe: local  ·  back to Commercialrealestate  ·  auto-data-snapshot: 2026-08-20T13:34:43 (1 data files) — scr 8376503 →