<!-- SOLID CITY · part 1927 -->
);ctx.globalAlpha=1}if(s.build.cannon>0){ctx.strokeStyle='#fff2aa';ctx.lineWidth=2;for(var c=-1;c<=1;c+=2){ctx.beginPath();ctx.moveTo(2,c*8);ctx.lineTo(17+s.build.cannon*4,c*(9+s.build.cannon));ctx.stroke()}}if(s.build.hull>0){ctx.strokeStyle='#ffffffaa';ctx.lineWidth=1;ctx.beginPath();ctx.moveTo(-9,-8-s.build.hull*2);ctx.lineTo(6,-4);ctx.moveTo(-9,8+s.build.hull*2);ctx.lineTo(6,4);ctx.stroke()}ctx.shadowBlur=0;ctx.fillStyle='#071019';ctx.beginPath();ctx.moveTo(10,0);ctx.lineTo(-7,-5);ctx.lineTo(-4,0);ctx.lineTo(-7,5);ctx.closePath();ctx.fill();var flame=8+Math.random()*8;ctx.fillStyle='#fff3ae';ctx.beginPath();ctx.moveTo(-10,-4);ctx.lineTo(-10-flame,0);ctx.lineTo(-10,4);ctx.fill();ctx.restore()}
  function drawPickup(ctx,p,q,scale){var colors={shield:'#6ef2ff',spread:'#ff9b57',rapid:'#fff26a',repair:'#72ff9d',hull:'#d7e2ee',cannon:'#ff9858',thruster:'#fff06a',bio:'#7dff96'},labels={shield:'S',spread:'3',rapid:'R',repair:'+',hull:'H',cannon:'C',thruster:'T',bio:'B'},bob=Math.sin(q.phase)*3;ctx.save();ctx.translate(p.x,p.y+bob);ctx.scale(scale,scale);ctx.rotate(q.phase*.35);ctx.fillStyle=colors[q.type]+'33';ctx.strokeStyle=colors[q.type];ctx.lineWidth=2;ctx.shadowColor=colors[q.type];ctx.shadowBlur=14;ctx.beginPath();ctx.moveTo(0,-13);ctx.lineTo(13,0);ctx.lineTo(0,13);ctx.lineTo(-13,0);ctx.closePath();ctx.fill();ctx.stroke();ctx.rotate(-q.phase*.35);ctx.shadowBlur=0;ctx.fillStyle='#fff';ctx.font='900 10px ui-monospace,monospace';ctx.textAlign='center';ctx.textBaseline='middle';ctx.fillText(labels[q.type],0,0);ctx.restore()}
  function drawSpeedRing(ctx,p,q,scale){ctx.save();ctx.translate(p.x,p.y);ctx.scale(scale,scale);ctx.rotate(q.phase*.35);ctx.strokeStyle=q.owner?'#44e1d0':'#ffc84a';ctx.shadowColor=ctx.strokeStyle;ctx.shadowBlur=16;ctx.lineWidth=4;ctx.beginPath();ctx.arc(0,0,q.r,0,6.28);ctx.stroke();ctx.lineWidth=1;ctx.setLineDash([4,5]);ctx.beginPath();ctx.arc(0,0,q.r+8,0,6.28);ctx.stroke();ctx.restore()}
  function drawPursuer(ctx,p,q,scale){ctx.save();ctx.translate(p.x,p.y);ctx.rotate(q.a);ctx.scale(scale,scale);ctx.fillStyle='#25060a';ctx.strokeStyle='#ff334f';ctx.lineWidth=3;ctx.shadowColor='#ff1f42';ctx.shadowBlur=18;ctx.beginPath();ctx.moveTo(46,0);ctx.lineTo(-20,-34);ctx.lineTo(-10,-9);ctx.lineTo(-38,0);ctx.lineTo(-10,9);ctx.lineTo(-20,34);ctx.closePath();ctx.fill();ctx.stroke();ctx.fillStyle='#fff';ctx.font='900 9px ui-monospace,monospace';ctx.textAlign='center';ctx.fillText('UNSTOPPABLE',0,4);ctx.restore()}
  function drawBoss(ctx,p,e,scale){ctx.save();ctx.translate(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.b