<!-- SOLID CITY · part 3170 -->
x+(Math.random()-.5)*.08,y:state.ship.y+(Math.random()-.5)*.08};
    state.enemyShots.push({x:origin.x,y:origin.y,tx:aim.x,ty:aim.y,t:0,d:.75+Math.random()*.45,damage:damage});record('FORTRESS_FIRED',{phase:state.summit?'S'+(state.summitPhase+1):state.phase+1});
  }
  function enemyHit(s){
    if(state.aegisBurst>0&&Math.random()<.72){record('POINT_DEFENSE_INTERCEPT',{owner:tasks.aegis.owner,epoch:tasks.aegis.epoch});burst(s.x,s.y,'#58dbd0',7);return;}
    var dmg=s.damage;if(state.ship.shield>0){var used=Math.min(state.ship.shield,dmg);state.ship.shield-=used;dmg-=used;record('SHIELD_ABSORBED',{owner:tasks.aegis.owner,damage:used});}
    if(dmg>0){state.ship.hp-=dmg;record('FLEET_DAMAGED',{damage:dmg});}
    if(Math.random()<.13+state.phase*.04&&state.wings>2){state.wings--;record('WING_LOST',{phase:state.phase+1});advise('Interceptor contact — one wing lost. Aegis screen recommended.',true);}
    burst(state.ship.x,state.ship.y,'#ff4b35',10);
    if(state.ship.hp<=0)endGame(false);
  }
  function burst(x,y,c,n){for(var i=0;i<n;i++)state.particles.push({x:x,y:y,vx:(Math.random()-.5)*.16,vy:(Math.random()-.5)*.16,t:0,d:.3+Math.random()*.55,c:c});}
  function claim(task){
    if(!state||!state.running)return;var t=tasks[task],start=performance.now(),old=t.owner;t.epoch++;t.owner=t.owner==='HUMAN'?'AI':'HUMAN';state.lastInput=state.time;
    record('OWNERSHIP_TRANSFER',{task:task,from:old,to:t.owner,epoch:t.epoch,latencyMs:Math.max(0,performance.now()-start)});
    record('STALE_COMMAND_REJECTED',{task:task,rejectedEpoch:t.epoch-1,currentEpoch:t.epoch,source:old});
    updateStations();advise(t.owner==='HUMAN'?'You have '+task.toUpperCase()+'. '+t.admiral+' is advisory only.':t.admiral+' has '+task.toUpperCase()+'. Safe handoff complete.');
  }
  function humanMove(dx,dy){if(tasks.fleet.owner!=='HUMAN')return;state.ship.x=Math.max(.08,Math.min(.48,state.ship.x+dx));state.ship.y=Math.max(.18,Math.min(.82,state.ship.y+dy));state.lastInput=state.time;record('FLEET_MANEUVER',{owner:'HUMAN',x:state.ship.x,y:state.ship.y,epoch:tasks.fleet.epoch});}
  function aegisAction(){if(tasks.aegis.owner!=='HUMAN')return;state.aegisBurst=2.6;state.lastInput=state.time;record('AEGIS_FOCUSED',{owner:'HUMAN',epoch:tasks.aegis.epoch});if(state.summit&&state.summitPhase===2){state.heartCharge=Math.max(0,state.heartCharge-25);record('CHARGE_VENTED',{by:'HUMAN',charge:Math.round(state.heartCharge)});}advise('Point-defense focus active for 2.6 seconds.');}
  function chooseStance(stance){
    if(!state||!state.running||!state.summit||state.summitPhase!==2||state.stance)return;
    state.stance=stance;state.lastInput=state.time;record('STANCE_CHOSEN',{stance:stance});
    advise(stance==='lance'?'LANCE. Point-blank — every gun strikes twice as hard, and so does the heart.':'SCREEN. Hold range — aegis focus vents the heart\u2019s charge.',stance==='lance');
    updateStanceBar();
  }
  function updateStanceBar(){
    var show=!!(state&&state.running&&!state.ended&&state.summit&&state.summitPhase===2&&!state.stance);
    document.getElementById('stance').classList.toggle('hidden',!show);
  }
  function nova(){
    burst(.73,.5,'#ffd75e',90);burst(state.ship.x,state.ship.y,'#ff4b35',40);
    record('NOVA',{charge:100});endGame(false,'nova');
  }
  function toggleFormation(){state.formation=state.formation==='SCREEN'?'LANCE':'SCREEN';state.lastInput=state.time;record('FORMATION_CHANGED',{owner:'HUMAN',formation:state.formation,epoch:tasks.wings.epoch});updateStations();}
  function ai(dt){
    if(tasks.fleet.owner==='AI'){state.ship.y+=Math.sin(state.time*.42)*dt*.018;state.ship.y=Math.max(.28,Math.min(.72,state.ship.y));}
    if(tasks.bombard.owner==='AI'&&state.bombardCooldown<=0)fireBombard('AI');
    if(tasks.wings.owner==='AI'&&state.wingCooldown<=0)strikeWings('AI');
    if(tasks.aegis.owner==='AI'&&state.aegisBurst<=0&&state.enemyShots.length>1){state.aegisBurst=1.8;record('AEGIS_FOCUSED',{owner:'AI',epoch:tasks.aegis.epoch});if(state.summit&&state.summitPhase===2){state.heartCharge=Math.max(0,state.heartCharge-4);record('CHARGE_VENTED',{by:'AI',charge:Math.round(state.heartCharge)});}}
  }
  function update(dt){
    if(!state.running)return;state.time+=dt;state.bombardCooldown=Math.max(0,state.bombardCooldown-dt);state.wingCooldown=Math.max(0,state.wingCooldown-dt);state.enemyCooldown-=dt;state.aegisBurst=Math.max(0,state.aegisBurst-dt);state.targetPulse+=dt;lastSignal=performance.now();
    if(state.phaseDelay>0){state.phaseDelay=Math.max(0,state.phaseDelay-dt);if(state.phaseDelay===0)spawnPhase();}
    if(state.enemyCooldown<=0){enemyFire();state.enemyCooldown=state.summit?Math.max(.3,1.02-state.summitPhase*.21-Math.min(.3,state.time/240)):Math.max(.38,1.65-state.phase*.34-Math.min(.35,state.time/240));}
    if(state.summit&&state.reveal<1)state.reveal=Math.min(1,state.reveal+dt/1.4);
    if(state.stance==='lance'&&!state.ended){state.ship.x+=(.44-state.ship.x)*Math.min(1,dt*2);state.ship.y+=(.5-