diff options
| -rw-r--r-- | docs/prototypes/panel-widget-gallery.html | 29 | ||||
| -rw-r--r-- | working/retro-stereo-widgets/references/2026-07-12-guarded-toggles.png | bin | 0 -> 280025 bytes |
2 files changed, 29 insertions, 0 deletions
diff --git a/docs/prototypes/panel-widget-gallery.html b/docs/prototypes/panel-widget-gallery.html index dc62d7d..9dab675 100644 --- a/docs/prototypes/panel-widget-gallery.html +++ b/docs/prototypes/panel-widget-gallery.html @@ -742,6 +742,9 @@ card(C,'R27','Winged gain selector', card(C,'R28','Rotary disc switch', `<svg id="discsw" class="rsvg press" viewBox="0 0 110 116" width="110" height="116"></svg>`, '<b>the master power disc.</b> The whole red disc turns, grip bar molded in — a heavy three-position selector for OFF, ON, and COMBINE. Click to step. After a marine battery switch.'); +card(C,'R29','Guarded toggle', + `<svg id="guardsw" class="rsvg press" viewBox="0 0 90 100" width="90" height="100"></svg>`, + '<b>friction sized to consequence.</b> Guard posts flank the lever and a red collar marks it critical — the avionics way to prevent an accidental throw. Click to throw it deliberately. After a flight-deck switch panel.'); /* ============ METERS & GAUGES ============ */ const M=$('meters'); @@ -1951,6 +1954,32 @@ function setDisc(i){discI=i; setRd('R28',DISCSW_POS[i][0]);} setDisc(1); +/* R29 guarded toggle: guard posts + red collar mark the critical throw */ +let guardOn=true,guardLever=null,guardLblOn=null,guardLblOff=null; +(function(){const s=$('guardsw'),cx=45,cy=52; + guardLblOn=svgEl(s,'text',{x:cx,y:12,'text-anchor':'middle','font-size':7,'letter-spacing':'.1em', + 'font-family':'var(--mono)',fill:'var(--gold-hi)'});guardLblOn.textContent='ON'; + guardLblOff=svgEl(s,'text',{x:cx,y:96,'text-anchor':'middle','font-size':7,'letter-spacing':'.1em', + 'font-family':'var(--mono)',fill:'var(--dim)'});guardLblOff.textContent='OFF'; + svgEl(s,'circle',{cx,cy,r:13,fill:'url(#discRed)',stroke:'#4e150a','stroke-width':1}); + const pts=[];for(let k=0;k<6;k++){const a=(k*60+30)*Math.PI/180;pts.push((cx+11*Math.cos(a))+','+(cy+11*Math.sin(a)));} + svgEl(s,'polygon',{points:pts.join(' '),fill:'url(#nutG)',stroke:'#2b2822'}); + svgEl(s,'circle',{cx,cy,r:6,fill:'#14110e',stroke:'#000'}); + for(const gx of [16,74]){ + svgEl(s,'rect',{x:gx-6,y:cy-24,width:12,height:48,rx:6,fill:'url(#nutG)',stroke:'#2b2822','stroke-width':1}); + svgEl(s,'rect',{x:gx-4,y:cy-21,width:3.5,height:42,rx:2,fill:'rgba(255,255,255,.14)'});} + guardLever=svgEl(s,'g',{}); + svgEl(guardLever,'path',{d:`M ${cx-3} ${cy} L ${cx-2} 26 L ${cx+2} 26 L ${cx+3} ${cy} Z`,fill:'url(#chromeG)',stroke:'#4e4a42','stroke-width':.5}); + svgEl(guardLever,'rect',{x:cx-4.5,y:16,width:9,height:12,rx:2,fill:'url(#tipG)',stroke:'#5e5a52','stroke-width':.6}); + for(let r=0;r<4;r++)svgEl(guardLever,'line',{x1:cx-3.5,y1:18.5+r*2.4,x2:cx+3.5,y2:18.5+r*2.4,stroke:'rgba(0,0,0,.25)','stroke-width':.8}); + guardLever.style.transformOrigin=`${cx}px ${cy}px`;guardLever.style.transition='transform .12s'; + $('guardsw').onclick=()=>setGuard(!guardOn);})(); +function setGuard(on){guardOn=on;guardLever.style.transform=on?'rotate(0deg)':'rotate(180deg)'; + guardLblOn.setAttribute('fill',on?'var(--gold-hi)':'var(--dim)'); + guardLblOff.setAttribute('fill',on?'var(--dim)':'var(--gold-hi)'); + setRd('R29',on?'ON':'OFF');} +setGuard(true); + /* R25 fourteen-segment display: the starburst that spells */ const SEG14_WORDS=['ZOOM','ECHO','TAPE','MOOD','HALL','COMP']; const SEG14_MAP={A:['a','b','c','e','f','g1','g2'],C:['a','d','e','f'], diff --git a/working/retro-stereo-widgets/references/2026-07-12-guarded-toggles.png b/working/retro-stereo-widgets/references/2026-07-12-guarded-toggles.png Binary files differnew file mode 100644 index 0000000..fe76c9b --- /dev/null +++ b/working/retro-stereo-widgets/references/2026-07-12-guarded-toggles.png |
