<!-- SOLID CITY · part 1873 -->
,Math.sin(a)*rr):ctx.moveTo(Math.cos(a)*rr,Math.sin(a)*rr)}ctx.closePath()}ctx.fill();ctx.stroke();ctx.restore();if(t.z<.48){ctx.fillStyle='#fff';ctx.font='900 7px ui-monospace,monospace';ctx.textAlign='center';ctx.fillText(bandName(t.band),p.x,p.y-r-7)}});
    corridorShots.forEach(function(s){var p=corridorPoint(s.x,s.alt,s.z,w,h);ctx.strokeStyle=s.color;ctx.lineWidth=2;ctx.shadowColor=s.color;ctx.shadowBlur=8;ctx.beginPath();ctx.moveTo(p.x,p.y+10*p.scale);ctx.lineTo(p.x,p.y-18*p.scale);ctx.stroke();ctx.shadowBlur=0});
    if(ships[0].alive&&ships[1].alive&&flight.mode==='formation'){var a={x:w/2+ships[0].corridorX*w*.37,y:h*.72-ships[0].altitude*h*.2},b={x:w/2+ships[1].corridorX*w*.37,y:h*.72-ships[1].altitude*h*.2};ctx.save();ctx.strokeStyle='#73ffe066';ctx.setLineDash([5,7]);ctx.beginPath();ctx.moveTo(a.x,a.y);ctx.lineTo(b.x,b.y);ctx.stroke();ctx.restore()}
    ships.forEach(function(s,i){if(s.alive)drawCorridorShip(ctx,s,w,h,i===index)});
    if(flight.mode==='separation'){var partner=ships[index?0:1],dx=partner.corridorX-ships[index].corridorX,da=partner.altitude-ships[index].altitude;ctx.fillStyle=index?'#ffc84a':'#44e1d0';ctx.font='900 9px ui-monospace,monospace';ctx.textAlign='center';ctx.fillText('HOME '+(da>.2?'↑':da<-.2?'↓':'↔'),w/2+clamp(dx,-1,1)*38,h*.19)}
    ctx.fillStyle='rgba(0,0,0,.18)';ctx.fillRect(0,0,w,28);ctx.fillRect(0,h-18,w,18)
  }
  function syncPauseControl(){pauseToggle.hidden=!running||paused}
  function pauseGame(e){if(e){e.preventDefault();e.stopPropagation()}if(!running||paused)return;running=false;paused=true;pauseToggle.hidden=true;pauseMenu.hidden=false;resumeGame.focus()}
  function resumePausedGame(){if(!paused)return;paused=false;pauseMenu.hidden=true;last=performance.now();running=true;pauseToggle.hidden=false}
  function frame(t){if(!last)last=t;var dt=Math.max(0,Math.min(.033,(t-last)/1000));last=t;if(running)update(dt);render();syncPauseControl();requestAnimationFrame(frame)}
  /* THE SUMMIT · LEVEL 6 · THE DIVIDED PRIME
     The game's own logic made final. The Prime is the mirror of the pair:
     it holds the golden-ratio reflection of the two ships' midpoint, single
     strikes reflect off it, and only a perfect synchronized double strike —
     gold and teal landing as one weapon — can wound it. */
  var PHI=0.6180339887,PHI2=2.6180339887;
  function spawnSummitBoss(){
    var sm=progression.summit;
    var prime={id:nextId++,x:1200,y:800,vx:0,vy:0,a:0,hull:480,maxHull:480,r:70,fire:1,targetIndex:-1,threatTargetIndex:-1,rescuePilot:-1,rescueBroke:false,lastHitBy:-1,lastHitAt:0,coordAt:0,isPrime:true,spin:0};
    sm.prime=prime;enemies.push(prime);
  }
  function spawnSummitPairs(n){
    var sm=progression.summit,cx=1200,cy=800;
    for(var k=0;k<n;k++){
      var pid='p'+(sm.spawnedPairs+k),a=Math.random()*Math.PI*2,r=380+Math.random()*260;
      var ax=cx+Math.cos(a)*r,ay=cy+Math.sin(a)*r,bx=cx-Math.cos(a)*r,by=cy-Math.sin(a)*r;
      var mk=function(x,y){return{id:nextId++,x:wrapX(x),y:wrapY(y),vx:0,vy:0,a:0,hull:30+wave*4,fire:1+Math.random()*2,phase:Math.random()*6.2,targetIndex:-1,threatTargetIndex:-1,rescuePilot:-1,rescueBroke:false,lastHitBy:-1,lastHitAt:0,coordAt:0,pairId:pid,mateFuse:0,enraged:false,deadAt:0,pairDone:false}};
      enemies.push(mk(ax,ay));enemies.push(mk(bx,by));
      sm.pairState[pid]={resolved:false};
    }
    sm.spawnedPairs+=n;
  }
  function pairKilled(e){
    var sm=progression.summit;if(!sm||sm.phase!=='pairs'||e.pairDone)return;
    e.pairDone=true;
    var other=null;enemies.forEach(function(o){if(o.pairId===e.pairId&&o!==e)other=o});
    var now=performance.now();
    if(other&&other.pairDone){
      if(now-other.deadAt<=720){
        sm.perfect++;ships[0].score+=75;ships[1].score+=75;
        notify(0,'SYMMETRY +150',900);notify(1,'SYMMETRY +150',900);
        burst(e.x,e.y,'#fff2a8',20);logH('summit · pair '+e.pairId+' broken as one');
      }
      resolvePair();
    }else if(other&&other.hull>0){other.mateFuse=now+720}
    else resolvePair();
    function resolvePair(){
      var st2=sm.pairState[e.pairId];if(!st2||st2.resolved)return;st2.resolved=true;sm.pairsResolved++;
      if(sm.pairsResolved>=sm.pairsTotal){
        sm.phase='core';
        notify(0,'THE PRIME IS EXPOSED',1500);notify(1,'THE PRIME IS EXPOSED',1500);
        logH('summit · the Prime is exposed');
      }
    }
  }
  function primeHit(e,owner){
    var sm=progression.summit,now=performance.now();
    if(!sm)return;
    if(sm.phase==='core'){
      var bonus=coordinatedHit(e,owner);
      if(bonus>0){
        e.hull-=40+bonus;sm.strikes++;
        burst(e.x,e.y,'#fff2a8',10);burst(e.x,e.y,ships[owner].color,10);
        ships[0].score+=25;ships[1].score+=25;
        if(e.hull<=0){e.hull=0;enterFinal()}
      }else{
        if(now>sm.reflectNotice){sm.reflectNotice=now+1200;notify(0,'REFLECTED',700);notify(1,'REFLECTED',700)}
        burst(e.x,e.y,'#ffffff',6);
      }
    }else if(sm.phase==='final'){
      if(now<