<!-- SOLID CITY · part 1911 -->
 launched · AI has Ship Two');showLevelBrief(1)}
  function formatTime(seconds){var n=Math.max(0,Math.floor(seconds));return String(Math.floor(n/60)).padStart(2,'0')+':'+String(n%60).padStart(2,'0')}
  function endRun(reason){if(!running)return;running=false;runEnding=true;var victory=reason!=='defeat',levelReached=Math.max(1,level),finalScore=metrics.kills*100+metrics.rescues*300+metrics.reunions*200+levelReached*1000;var isNewBest=finalScore>sessionBest.score;if(isNewBest){sessionBest={score:finalScore,kills:metrics.kills,level:levelReached,time:elapsed,formation:metrics.formationTime,reunions:metrics.reunions,rescues:metrics.rescues,shield:metrics.shieldHits,friendly:metrics.friendlyFire}};document.querySelector('#outcome').textContent=victory?'MISSION COMPLETE · VICTORY':'FORMATION LOST · DEFEAT';document.querySelector('#mScore').textContent=String(finalScore).padStart(5,'0');document.querySelector('#newBest').classList.toggle('show',isNewBest);document.querySelector('#mKills').textContent=metrics.kills;document.querySelector('#mLevel').textContent=levelReached;document.querySelector('#mTime').textContent=formatTime(elapsed);document.querySelector('#mFormation').textContent=Math.round(metrics.formationTime)+'s';document.querySelector('#mReunions').textContent=metrics.reunions;document.querySelector('#mRescues').textContent=metrics.rescues;document.querySelector('#mShield').textContent=metrics.shieldHits;document.querySelector('#mFriendly').textContent=metrics.friendlyFire;document.querySelector('#mAvoid').textContent=metrics.avoided;document.querySelector('#mHits').textContent=metrics.meteorHits;document.querySelector('#mSeparations').textContent=metrics.separations;document.querySelector('#mCoord').textContent=metrics.coordinated;document.querySelector('#mContinuity').textContent=metrics.assistChecks?metrics.assistContinuity+'/'+metrics.assistChecks:'NO EVENTS';document.querySelector('#bScore').textContent=sessionBest.score;document.querySelector('#bKills').textContent=sessionBest.kills;document.querySelector('#bLevel').textContent=sessionBest.level;document.querySelector('#bTime').textContent=formatTime(sessionBest.time);document.querySelector('#bFormation').textContent=Math.round(sessionBest.formation)+'s';document.querySelector('#bReunions').textContent=sessionBest.reunions;document.querySelector('#bRescues').textContent=sessionBest.rescues;document.querySelector('#bShield').textContent=sessionBest.shield;document.querySelector('#bFriendly').textContent=sessionBest.friendly;var care=metrics.rescues+metrics.reunions+metrics.coordinated;document.querySelector('#result').textContent=victory?'Both pilots returned. '+(care?'You looked after each other '+care+' times.':'Formation is always waiting.'):'Both ships fell together at Level '+levelReached+'. The next flight begins with everything you learned.';document.querySelector('#handoffLog').innerHTML=(metrics.handoffs.length?metrics.handoffs:['No takeovers recorded']).map(function(x){return '<div><em>'+x.slice(0,5)+'</em>'+x.slice(5)+'</div>'}).join('');document.querySelector('#assistLog').innerHTML=(metrics.assists.length?metrics.assists:['Assist remained disarmed or no collision threat entered the prediction window.']).map(function(x){return '<div>'+x+'</div>'}).join('');debrief.hidden=false;debrief.querySelector('.debrief-card').scrollTop=0}
  function pointerDown(i,e){if(!running)return;e.preventDefault();var c=controls[i],r=views[i].getBoundingClientRect();c.active=true;c.pointer=e.pointerId;c.startX=e.clientX-r.left;c.startY=e.clientY-r.top;c.x=0;c.y=0;views[i].setPointerCapture(e.pointerId);var st=views[i].querySelector('.stick');st.style.left=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(