<!-- SOLID CITY · part 1947 -->
t=c.startX+'px';st.style.top=c.startY+'px';st.classList.add('show');c.inputStamp=performance.now();requestAnimationFrame(function(){metrics.latencies.push(performance.now()-c.inputStamp)});if(i===1){notify(1,'YOU HAVE THE STICK',1100);logH('human took Ship Two')}}
  function pointerMove(i,e){var c=controls[i];if(!c.active||c.pointer!==e.pointerId)return;var r=views[i].getBoundingClientRect(),dx=e.clientX-r.left-c.startX,dy=e.clientY-r.top-c.startY,l=Math.hypot(dx,dy),max=38;if(l>max){dx=dx/l*max;dy=dy/l*max}c.x=dx/max;c.y=dy/max;var knob=views[i].querySelector('.stick b');knob.style.transform='translate('+dx+'px,'+dy+'px)'}
  function pointerUp(i,e){var c=controls[i];if(!c.active||c.pointer!==e.pointerId)return;c.active=false;c.x=0;c.y=0;c.pointer=null;c.lastRelease=performance.now();views[i].querySelector('.stick').classList.remove('show');views[i].querySelector('.stick b').style.transform='';if(i===1){c.resumePending=true;logH('human released Ship Two · grace period')}}
  function fireDown(e){if(!running)return;e.preventDefault();e.stopPropagation();fireControl.active=true;fireControl.pointer=e.pointerId;fireEl.setPointerCapture(e.pointerId);fireEl.classList.add('firing');ships[0].manualFire=0}
  function fireUp(e){if(fireControl.pointer!==e.pointerId)return;e.preventDefault();e.stopPropagation();fireControl.active=false;fireControl.pointer=null;fireEl.classList.remove('firing')}
  fireEl.addEventListener('pointerdown',fireDown);fireEl.addEventListener('pointerup',fireUp);fireEl.addEventListener('pointercancel',fireUp);fireEl.addEventListener('contextmenu',function(e){e.preventDefault()});
  views.forEach(function(v,i){v.addEventListener('pointerdown',function(e){pointerDown(i,e)});v.addEventListener('pointermove',function(e){pointerMove(i,e)});v.addEventListener('pointerup',function(e){pointerUp(i,e)});v.addEventListener('pointercancel',function(e){pointerUp(i,e)})});
  addEventListener('keydown',function(e){var relevant=/^(Key[WASD]|Arrow(Up|Down|Left|Right))$/.test(e.code);if(!relevant)return;e.preventDefault();if(!keys[e.code]){var i=e.code.indexOf('Arrow')===0?1:0,now=performance.now();metrics&&metrics.latencies.push(Math.max(0,performance.now()-now));if(i===1&&!controls[1].keyActive){controls[1].keyActive=true;notify(1,'YOU HAVE THE STICK',1100);if(metrics)logH('keyboard took Ship Two')}}keys[e.code]=true});
  addEventListener('keyup',function(e){keys[e.code]=false;if(e.code.indexOf('Arrow')===0&&!keys.ArrowUp&&!keys.ArrowDown&&!keys.ArrowLeft&&!keys.ArrowRight){controls[1].keyActive=false;controls[1].lastRelease=performance.now();controls[1].resumePending=true;if(metrics)logH('keyboard released Ship Two · grace period')}});
  armEl.addEventListener('change',function(){if(!running)return;notify(0,armEl.checked?'ASSIST ARMED':'ASSIST OFF',800);logA(armEl.checked?'assistance armed':'assistance disarmed')});
  document.querySelector('#launch').addEventListener('click',begin);document.querySelector('#continueLevel').addEventListener('click',function(){var next=levelBeat.dataset.next;if(next==='depthComplete'){transitioning=false;running=true;endRun()}else enterLevel(Number(next))});document.querySelector('#again').addEventListener('click',begin);
  init();running=false;requestAnimationFrame(frame);
})();
</script>
</body>
</html>


===== FILE: public/city/double-strike/index.html.bak-summit-20261011 =====
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover" />
  <meta name="color-scheme" content="light dark" />
  <link rel="icon" href="data:," />
  <title>Double Strike</title>
  <style>
    :root{
      color-scheme:light dark;
      --void:#05070c;--panel:#0b1019;--ink:#f7f2dc;--muted:#b4bcc8;
      --gold:#ffc84a;--gold2:#ff8c24;--teal:#44e1d0;--red:#ff5b66;--line:#293344;
    }
    @media (prefers-color-scheme:light){:root{--ink:#fff8de;--muted:#c7ced8}}
    *{box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
    html,body{margin:0;width:100%;height:100%;overflow:hidden;overflow-x:clip;background:var(--void);font-family:"Trebuchet MS",ui-sans-serif,system-ui,sans-serif;color:var(--ink);touch-action:none;overscroll-behavior:none}
    button{font:inherit}
    #game{position:fixed;inset:0;display:grid;grid-template-rows:42px minmax(0,1fr);background:#02040a}
    .command{position:relative;z-index:10;display:flex;align-items:center;justify-content:center;gap:14px;padding:env(safe-area-inset-top) 48px 0 12px;min-width:0;background:linear-gradient(180deg,#111722,#080c13);border-bottom:1px solid #263044;box-shadow:0 1px 10px #000}
    .pause-toggle{position:absolute;z-index:18;top:50%;right:max(7px,env(safe-area-inset-right));translate:0 -50%;width:30px;height:30px;padding:0;border:1px solid #657287;background:#0a1019;color:#f5edd5;font:900 13px/1 ui-monospace,SFMono-Regular,Consolas,monospace;let