<!-- SOLID CITY · part 1835 -->
nslate(p.x,p.y);ctx.rotate(e.a);ctx.scale(scale,scale);ctx.fillStyle='#21090f';ctx.strokeStyle='#ff5667';ctx.lineWidth=4;ctx.shadowColor='#ff2844';ctx.shadowBlur=20;ctx.beginPath();ctx.moveTo(62,0);ctx.lineTo(16,-28);ctx.lineTo(-48,-36);ctx.lineTo(-30,0);ctx.lineTo(-48,36);ctx.lineTo(16,28);ctx.closePath();ctx.fill();ctx.stroke();ctx.fillStyle='#ffc84a';ctx.beginPath();ctx.arc(15,0,9,0,6.28);ctx.fill();ctx.restore()}
  function drawDrone(ctx,p,e,scale){ctx.save();ctx.translate(p.x,p.y);ctx.rotate(e.a);ctx.scale(scale,scale);ctx.strokeStyle='#ff6471';ctx.lineWidth=2;ctx.shadowColor='#ff2844';ctx.shadowBlur=8;ctx.beginPath();ctx.moveTo(14,0);ctx.lineTo(5,-9);ctx.lineTo(-12,-7);ctx.lineTo(-6,0);ctx.lineTo(-12,7);ctx.lineTo(5,9);ctx.closePath();ctx.stroke();ctx.shadowBlur=0;ctx.fillStyle='#ff8d62';ctx.beginPath();ctx.arc(3,0,3,0,6.28);ctx.fill();ctx.restore()}
  function drawMeteor(ctx,p,m,scale){ctx.save();ctx.translate(p.x,p.y);ctx.rotate(m.rot);ctx.scale(scale,scale);ctx.fillStyle=m.threat?'#c87735':'#6f7279';ctx.strokeStyle=m.threat?'#ffc84a':'#9ca0a8';ctx.lineWidth=1;ctx.shadowColor=m.threat?'#ff9b28':'transparent';ctx.shadowBlur=m.threat?12:0;ctx.beginPath();for(var i=0;i<8;i++){var a=i/8*6.28,r=m.r*(.78+(i%3)*.1);var x=Math.cos(a)*r,y=Math.sin(a)*r;i?ctx.lineTo(x,y):ctx.moveTo(x,y)}ctx.closePath();ctx.fill();ctx.stroke();ctx.restore()}
  function corridorPoint(x,alt,z,w,h){var near=1-z,spread=.18+near*.82;return{x:w/2+x*w*.46*spread,y:h*.27+near*h*.47-alt*h*.19*spread,scale:.2+near*1.28}}
  function drawCorridorShip(ctx,s,w,h,focus){
    var x=w/2+s.corridorX*w*.37,y=h*.72-s.altitude*h*.2,sc=(.72+s.altitude*.1)*Math.max(.72,Math.min(1,w/480));ctx.save();ctx.globalAlpha=.3;ctx.fillStyle='#02040a';ctx.shadowColor='#000';ctx.shadowBlur=16;ctx.beginPath();ctx.ellipse(x,h*.86,24*sc*(1-s.altitude*.14),6*sc,0,0,6.28);ctx.fill();ctx.restore();var old=s.a;s.a=0;ctx.save();ctx.translate(x,y);ctx.rotate(-Math.PI/2);drawShip(ctx,{x:0,y:0},s,sc,focus);ctx.restore();s.a=old
  }
  function drawCorridorView(ctx,w,h,index){
    var bg=ctx.createLinearGradient(0,0,0,h);bg.addColorStop(0,'#02040a');bg.addColorStop(.48,'#10182a');bg.addColorStop(1,'#070a10');ctx.fillStyle=bg;ctx.fillRect(0,0,w,h);
    ctx.save();ctx.translate(w/2,h*.27);corridorStars.forEach(function(s){var inv=1/Math.max(.05,s.z),x=s.x*w*.18*inv,y=s.y*h*.16*inv,len=(1-s.z)*18+2;ctx.globalAlpha=.25+(1-s.z)*.7;ctx.strokeStyle='#d7ecff';ctx.lineWidth=s.r;ctx.beginPath();ctx.moveTo(x,y);ctx.lineTo(x+(x/(w*.5))*len,y+(y/(h*.5))*len);ctx.stroke()});ctx.restore();ctx.globalAlpha=1;
    ctx.save();ctx.strokeStyle='#42506a66';ctx.lineWidth=1;var horizon=h*.28,deck=h*.91;for(var g=0;g<9;g++){var gx=w/2+(g-4)*w*.055;ctx.beginPath();ctx.moveTo(w/2+(gx-w/2)*.08,horizon);ctx.lineTo(gx,deck);ctx.stroke()}for(g=1;g<8;g++){var q=g/8,y=horizon+(deck-horizon)*q*q;ctx.beginPath();ctx.moveTo(w*.08+(w*.42)*(1-q),y);ctx.lineTo(w*.92-(w*.42)*(1-q),y);ctx.stroke()}ctx.strokeStyle='#ffc84a33';ctx.beginPath();ctx.moveTo(w*.08,deck);ctx.lineTo(w*.46,horizon);ctx.moveTo(w*.92,deck);ctx.lineTo(w*.54,horizon);ctx.stroke();ctx.restore();
    corridorPickups.forEach(function(p){var q=corridorPoint(p.x,p.band,p.z,w,h),colors={shield:'#6ef2ff',spread:'#ff9b57',rapid:'#fff26a',repair:'#72ff9d'};ctx.save();ctx.translate(q.x,q.y);ctx.rotate(p.phase);ctx.strokeStyle=colors[p.type];ctx.shadowColor=colors[p.type];ctx.shadowBlur=12;ctx.strokeRect(-8*q.scale,-8*q.scale,16*q.scale,16*q.scale);ctx.restore()});
    corridorThreats.slice().sort(function(a,b){return b.z-a.z}).forEach(function(t){var p=corridorPoint(t.x,t.band,t.z,w,h),r=18*p.scale;ctx.save();ctx.translate(p.x,p.y);ctx.rotate(t.phase);ctx.shadowColor=t.type==='enemy'?'#ff2844':'#ff9b28';ctx.shadowBlur=8+12*p.scale;ctx.fillStyle=t.type==='enemy'?'#2b0710':'#76502d';ctx.strokeStyle=t.type==='enemy'?'#ff5b66':'#ffc16c';ctx.lineWidth=Math.max(1,2*p.scale);ctx.beginPath();if(t.type==='enemy'){ctx.moveTo(0,-r);ctx.lineTo(r*.8,r*.7);ctx.lineTo(0,r*.35);ctx.lineTo(-r*.8,r*.7)}else{for(var i=0;i<8;i++){var a=i/8*6.28,rr=r*(.78+(i%3)*.12);i?ctx.lineTo(Math.cos(a)*rr,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.re