<!-- SOLID CITY · part 3450 -->
nounce('The lattice is charged. The choice is yours.');updateAllUI()}
        }else if(s.phase==='cage'){
          s.clearance+=dt*(100/30);
          if(s.clearance>=100){addEvent('CLEARANCE','CONVOY','Convoy through the caged core');finishSummit(true,'cage')}
        }
      }
    }else if(s.phase==='collapse'){
      s.collapseT+=dt;
      var R=summitLatticeR();
      s.core.hp=s.core.max*Math.max(0,R/0.16);
      s.core.flash=Math.max(s.core.flash,0.4);
      var k=Math.min(1,dt*(0.9+s.collapseT*0.4));
      drones.forEach(function(d){
        if(d.status!=='ACTIVE')return;
        d.x+=(s.core.x-d.x)*k;d.y+=(s.core.y-d.y)*k;d.vx=0;d.vy=0;
        d.pulse=Math.max(d.pulse,0.12);
      });
      if(s.collapseT>=6.18){
        for(i=0;i<70;i++)particles.push({x:s.core.x,y:s.core.y,vx:(Math.random()-0.5)*0.34,vy:(Math.random()-0.5)*0.34,life:1.5});
        s.core.dead=true;s.collapseFlash=1;
        addEvent('COLLAPSE','THE ONE','Twelve drones, one body; the core is broken');
        finishSummit(true,'collapse');
      }
    }else if(s.phase==='breach'){
      s.breachT+=dt;s.core.x-=dt*0.22;
      if(s.breachT>2.4)finishSummit(false,'breach');
    }
  }
  function summitChoose(kind){
    var s=summit;if(!s||s.phase!=='choice')return;
    s.choice=kind;document.getElementById('summitChoice').hidden=true;
    if(kind==='collapse'){
      drones.forEach(function(d){
        if(d.status!=='ACTIVE')return;
        if(d.owner==='HUMAN'){d.owner='AI';d.epoch++;addEvent('HANDOFF',d.name,'Yielded to the One at epoch '+d.epoch)}
        d.task='COLLAPSE';d.vx=0;d.vy=0;
      });
      selectedId=null;s.phase='collapse';s.collapseT=0;activeOrder='COLLAPSE';
      addEvent('COLLAPSE','COMMAND','The choice is made: twelve become one');
      announce('Twelve become one.');
    }else{
      s.phase='cage';s.clearance=0;s.surgeT=3;
      addEvent('CAGE','COMMAND','The twelve hold; the core remains');
      announce('Hold the cage. The convoy is moving.');
    }
    updateAllUI();
  }
  function summitAdvisory(){
    if(!summit)return;var ph=summit.phase,h=heldCount(),hh=humanHeldCount();
    if(ph==='coalesce')announce('The field answers one gravity.');
    else if(ph==='lattice')announce(h>=12?'The solid is closed.':(12-h)+' faces dark. '+(hh?hh+' human-held outside the lattice — release or fly them in.':'Sub-commanders seating the lattice.'));
    else if(ph==='strain')announce('Hold the twelve. Charge '+Math.floor(summit.charge)+'%. Pulse the core to weaken surges.');
    else if(ph==='choice')announce('The lattice is charged. The choice is yours.');
    else if(ph==='collapse')announce('Twelve become one.');
    else if(ph==='cage')announce('Hold the cage. Convoy clearance '+Math.floor(summit.clearance)+'%.');
    else if(ph==='breach')announce('The lattice broke.');
  }
  function summitDebrief(kind){
    var names=drones.map(function(d){return d.name});
    var home=drones.filter(function(d){return d.status==='ACTIVE'}).map(function(d){return d.name});
    var lost=drones.filter(function(d){return d.status!=='ACTIVE'});
    var homeLine,lostLine,tail;
    if(kind==='collapse'){
      homeLine='ONE — '+names.join(', ')+', a single body';
      lostLine='The twelve, as twelve. They were not lost; they were finished';
      tail='The core is broken. The lane is clear. Twelve flew in; one flew out.';
    }else if(kind==='cage'){
      homeLine=home.length?home.join(', '):'No one';
      lostLine=lost.length?lost.map(function(d){return d.name+' — '+(d.lostReason||'disabled holding the cage')}).join('; '):'No one — all twelve hold the cage';
      tail='The convoy is through. The core is caged, not killed. The twelve keep their names — and their watch.';
    }else if(kind==='fell'){
      homeLine='No one';
      lostLine=drones.map(function(d){return d.name+' — '+(d.lostReason||'lost')}).join('; ');
      tail='No active drones remain. The lattice went dark, face by face.';
    }else{
      homeLine=home.length?home.join(', '):'No one';
      lostLine=(lost.length?lost.map(function(d){return d.name+' — '+(d.lostReason||'disabled')}).join('; ')+'; ':'')+'the lane — the core crossed it';
      tail='The lattice broke. What the swarm could not hold, the convoy could not survive.';
    }
    return '<b>Home:</b> '+homeLine+'.<br><b>Lost:</b> '+lostLine+'.<span class="debt">'+tail+'</span>';
  }
  function finishSummit(won,kind){
    if(!running||!summit||summit.phase==='done')return;
    summit.phase='done';
    running=false;paused=false;pauseBtn.hidden=true;pauseScreen.hidden=true;app.inert=false;
    document.getElementById('summitChoice').hidden=true;
    var titles={collapse:'THE MANY ARE ONE',cage:'THE CORE REMAINS',fell:'THE SWARM FELL',breach:'THE LANE BROKE'};
    document.getElementById('debriefTitle').textContent=titles[kind]||'Summit over.';
    document.getElementById('debriefCopy').innerHTML=summitDebrief(kind);
    document.getElementById('finalTime').textContent=nowStamp(