<!-- SOLID CITY · part 2009 -->
>i/8,on=i%2===0;
      ctx.fillStyle=lit?(on?'#ffc952':'#38e3d1'):'rgba(120,150,145,.35)';
      if(lit){ctx.shadowColor=on?'#ffc952':'#38e3d1';ctx.shadowBlur=12}
      ctx.beginPath();ctx.arc(vx,vy,lit?6:4,0,Math.PI*2);ctx.fill();ctx.shadowBlur=0}
    if(summit.ignition>0&&summit.ignition<1){ctx.strokeStyle='rgba(255,240,200,'+(1-summit.ignition)+')';ctx.lineWidth=3;ctx.beginPath();ctx.arc(BEACON.x,BEACON.y,BEACON.r+summit.ignition*UNION_R,0,Math.PI*2);ctx.stroke()}
    if(summit.pulseR>0){ctx.strokeStyle='rgba(255,255,255,'+Math.max(0,1-summit.pulseR/1000)+')';ctx.lineWidth=6;ctx.beginPath();ctx.arc(BEACON.x,BEACON.y,summit.pulseR,0,Math.PI*2);ctx.stroke()}
    ctx.restore();
  }
  function drawShard(ctx,sh){
    ctx.save();ctx.translate(sh.x,sh.y);ctx.rotate(Math.atan2(sh.vy,sh.vx));
    ctx.fillStyle='#050607';ctx.strokeStyle='#ff5a5a';ctx.lineWidth=2;ctx.shadowColor='#ff5a5a';ctx.shadowBlur=10;
    ctx.beginPath();ctx.moveTo(16,0);ctx.lineTo(-10,-9);ctx.lineTo(-4,0);ctx.lineTo(-10,9);ctx.closePath();ctx.fill();ctx.stroke();
    ctx.shadowBlur=0;ctx.fillStyle='#ff8a8a';ctx.fillRect(0,-2,6,4);
    ctx.restore();
  }
  window.__summitTest={summit:function(){return summit},ships:function(){return ships},choice:makeChoice,anchor:selectAnchor,begin:beginUnion};
  reset(false);requestAnimationFrame(loop);setInterval(updateStats,500);document.getElementById('launch').focus();
})();

</script>
</body>
</html>

===== FILE: public/city/fleet/index.html.bak-cityreturn-20261011 =====
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, maximum-scale=1">
  <meta name="color-scheme" content="light dark">
  <link rel="icon" href="data:,">
  <title>Double Strike: Fleet Control</title>
  <style>
    :root{
      color-scheme:light dark;
      --ink:#eef7f6;--muted:#93aaa8;--panel:#071211;--panel2:#0c1e1c;--line:#25413d;
      --gold:#ffc952;--gold2:#9b6911;--teal:#38e3d1;--teal2:#087d75;--danger:#ff6969;--ok:#71f0ac;
      --void:#020706;--glass:rgba(5,17,16,.92);--button:#142a27;--shadow:rgba(0,0,0,.5)
    }
    @media(prefers-color-scheme:light){:root{--ink:#f5fffd;--muted:#a1b7b3;--panel:#071412;--panel2:#0d211e;--line:#31534d;--void:#020807;--glass:rgba(6,20,18,.94);--button:#17322e}}
    *{box-sizing:border-box}
    html,body{margin:0;min-height:100%;background:var(--void);color:var(--ink);font-family:"Aptos","Trebuchet MS",system-ui,sans-serif;overflow-x:hidden}
    body{min-height:100svh;touch-action:manipulation;-webkit-user-select:none;user-select:none}
    button,select{font:inherit;color:inherit}
    button{border:0;cursor:pointer}
    .topbar{min-height:64px;display:flex;align-items:center;gap:12px;padding:max(10px,env(safe-area-inset-top)) 14px 10px;background:#06100f;border-bottom:1px solid var(--line);position:relative;z-index:5}
    .mission{min-width:0;flex:1}
    .mission strong{display:block;font:700 14px/1.15 "Arial Narrow","Aptos Narrow",sans-serif;letter-spacing:.08em;text-transform:uppercase}
    .mission small{display:block;color:var(--muted);font-size:12px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .mode{appearance:none;background:var(--button);border:1px solid var(--line);border-radius:8px;padding:10px 30px 10px 11px;font-weight:800;font-size:12px;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 14px) 16px,calc(100% - 9px) 16px;background-size:5px 5px;background-repeat:no-repeat}
    .stat-open{background:var(--ink);color:#07110f;border-radius:7px;padding:11px 14px;font-weight:900;font-size:12px;letter-spacing:.06em}
    .battlefield{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);min-height:calc(100svh - 64px)}
    .screen{position:relative;background:#030b0a;min-width:0;display:grid;grid-template-rows:auto minmax(260px,1fr) auto;overflow:hidden}
    .screen.gold{--team:var(--gold);--team-dim:var(--gold2)}.screen.teal{--team:var(--teal);--team-dim:var(--teal2)}
    .screen-head{display:flex;align-items:center;gap:10px;padding:9px 11px;background:linear-gradient(90deg,color-mix(in srgb,var(--team) 13%,#071311),#071311 60%);border-bottom:1px solid color-mix(in srgb,var(--team) 45%,transparent)}
    .screen-head b{font:800 13px/1 "Arial Narrow","Aptos Narrow",sans-serif;letter-spacing:.12em}.screen-head b::before{content:"";display:inline-block;width:8px;height:8px;background:var(--team);transform:rotate(45deg);margin-right:8px}
    .screen-head .health{margin-left:auto;font-size:11px;color:var(--muted)}
    .screen-head .signal{font-size:10px;color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 40%,transparent);padding:4px 6px;border-radius:4px}
    .view{position:relative;min-height:260px;touch-action:none;overflow:hidden;background:#020706}
    canvas{display:block;width:100%;height