<!-- SOLID CITY · part 2012 -->
e,last=performance.now(),missionStart=performance.now(),eventCounts={handoff:0,rescue:0,formation:0,rejected:0,hit:0};
  var names={gold:['AURIC-1','MESA-2','SOL-3','CROWN-4'],teal:['TIDELINE-1','VAPOR-2','REEF-3','CURRENT-4']};
  var pilots={gold:['AI KAI','AI LUMA','AI ORBIT','AI NOVA'],teal:['AI MIRA','AI VEIL','AI ECHO','AI WAVE']};
  function rand(){rngSeed=(rngSeed*1664525+1013904223)>>>0;return rngSeed/4294967296}
  function clamp(v,a,b){return Math.max(a,Math.min(b,v))} function dist(a,b){return Math.hypot(a.x-b.x,a.y-b.y)}
  function stamp(){var s=Math.floor((performance.now()-missionStart)/1000);return String(Math.floor(s/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0')}
  function log(type,text,ship){events.unshift({time:stamp(),type:type,text:text,ship:ship||'FLEET'});if(events.length>80)events.pop();if(eventCounts[type]!=null)eventCounts[type]++;updateStats()}
  function makeShip(team,i){var gold=team==='gold';return {id:team[0].toUpperCase()+(i+1),team:team,name:names[team][i],pilot:pilots[team][i],x:gold?180+i*34:1020-i*34,y:245+i*78,vx:0,vy:0,a:gold?0:Math.PI,hull:100,shield:100,disabled:0,cool:rand(),task:'Form Up',slot:i,formation:'forming',humanAim:null,owners:{movement:'AI',weapons:'AI',navigation:'AI',defense:'AI'},epochs:{movement:1,weapons:1,navigation:1,defense:1},lastHuman:0,rescueTarget:null}}
  function reset(){ships=[];shots=[];rocks=[];sparks=[];events=[];progress={gold:0,teal:0};selected={gold:null,teal:null};order={gold:'form',teal:'form'};running=true;rngSeed=88421;missionStart=performance.now();eventCounts={handoff:0,rescue:0,formation:0,rejected:0,hit:0};for(var t of ['gold','teal'])for(var i=0;i<4;i++)ships.push(makeShip(t,i));for(var r=0;r<13;r++)rocks.push({x:320+rand()*560,y:50+rand()*620,vx:-18+rand()*36,vy:-15+rand()*30,r:9+rand()*18,spin:rand()*6});document.getElementById('debrief').classList.remove('open');document.querySelectorAll('.orders button').forEach(function(b){b.classList.toggle('active',b.dataset.order==='form')});log('formation','Both squadrons entered Diamond formation');resizeAll();updateUI()}
  function teamShips(t){return ships.filter(function(s){return s.team===t})} function enemyTeam(t){return t==='gold'?'teal':'gold'}
  function ownerLabel(s){var human=Object.values(s.owners).filter(function(o){return o==='HUMAN'}).length;return human?(human===4?'HUMAN':'HUMAN · '+human+'/4') : s.pilot}
  function claim(s,parts){parts.forEach(function(p){if(s.owners[p]!=='HUMAN'){s.epochs[p]++;s.owners[p]='HUMAN'}});s.lastHuman=performance.now();selected[s.team]=s.id;log('handoff',s.name+' yielded '+parts.join(' + ')+' to human',s.id);toast(s.name+' · helm acquired');updateUI()}
  function release(s,parts){parts=parts||Object.keys(s.owners);var changed=[];parts.forEach(function(p){if(s.owners[p]==='HUMAN'){s.epochs[p]++;s.owners[p]='AI';changed.push(p)}});if(changed.length){log('handoff',s.name+' returned '+changed.join(' + ')+' to '+s.pilot,s.id);toast(s.name+' · AI resumed safely')}if(parts.length===4)selected[s.team]=null;updateUI()}
  function issueOrder(team,o){order[team]=o;var skipped=0;teamShips(team).forEach(function(s){if(s.disabled>0)return;if(s.owners.movement==='HUMAN'||s.owners.navigation==='HUMAN'){skipped++;return}s.task=({form:'Form Up',attack:'Coordinated Attack',defend:'Defend Beacon',intercept:'Intercept'}[o]);s.epochs.navigation++});document.querySelectorAll('[data-team="'+team+'"][data-order]').forEach(function(b){b.classList.toggle('active',b.dataset.order===o)});log('formation',team.toUpperCase()+' order: '+o.toUpperCase()+(skipped?' · '+skipped+' human helm advised, not overridden':''));toast(o.toUpperCase()+(skipped?' · human helm preserved':''))}
  function nearestEnemy(s){var a=teamShips(enemyTeam(s.team)).filter(function(e){return e.disabled<=0});a.sort(function(x,y){return dist(s,x)-dist(s,y)});return a[0]}
  function desired(s){var mates=teamShips(s.team),leader=mates[0],enemy=nearestEnemy(s),gold=s.team==='gold',baseX=gold?470:730,baseY=360,off=[[-55,-55],[-55,55],[-120,-95],[-120,95]][s.slot];if(!gold)off=[-off[0],off[1]];
    var weak=mates.find(function(m){return m!==s&&m.hull>0&&m.hull<28&&dist(s,m)<330});if(weak&&s.owners.movement==='AI'&&s.hull>45){s.task='Rescue '+weak.name;s.rescueTarget=weak;return{x:weak.x+(gold?-40:40),y:weak.y}}
    s.rescueTarget=null;
    if(order[s.team]==='attack'&&enemy){s.task='Attack '+enemy.name;return{x:enemy.x+(gold?-115:115),y:enemy.y+(s.slot-1.5)*24}}
    if(order[s.team]==='defend'){s.task='Defend Beacon';return{x:BEACON.x+(gold?-1:1)*(115+s.slot*22),y:BEACON.y+(s.slot-1.5)*55}}
    if(order[s.team]==='intercept'&&enemy){s.task='Intercept '+enemy.name;return{x:enemy.x+enemy.vx*2.4,y:enemy.y+enemy.vy*2.4}}
    s.task='Form Up';if(s!==leader&&leader.disabled<=0)return{x:leader.x+off[0],y:leader.y+off[1]};return{x:baseX,y:baseY}}
  function steer(s,target,dt){var dx=target.x-s.x,dy=target.y-s.y,d=Math.max(1,Math.hypot(dx,dy)),ax=dx/d*82,ay=dy/d*82;for(var r 