<!-- SOLID CITY · part 2015 -->
core').textContent=Math.floor(progress.gold)+'%';document.getElementById('tealScore').textContent=Math.floor(progress.teal)+'%';document.getElementById('shipStats').innerHTML=ships.map(function(s){var own=ownerLabel(s),cls=own.indexOf('HUMAN')===0?'human':'ai';return '<div class="shiprow"><strong style="color:'+shipColor(s.team)+'">'+s.name+'</strong><span class="owner '+cls+'">'+own+'</span><div><div class="hullbar"><i style="width:'+Math.round(s.hull)+'%;background:'+(s.hull<30?'var(--danger)':'var(--ok)')+'"></i></div><small>Hull '+Math.round(s.hull)+'% · '+s.formation+' · slot '+(s.slot+1)+'</small></div><small class="task">'+s.task+'<br>epoch '+Math.max.apply(null,Object.values(s.epochs))+'</small></div>'}).join('');var ev=document.getElementById('events');ev.innerHTML=events.length?events.slice(0,30).map(function(e){return '<div class="event"><time>'+e.time+'</time><span>'+e.text+'</span><em>'+e.ship+'</em></div>'}).join(''):'<div class="empty">No events recorded yet.</div>'}
  document.getElementById('statsOpen').onclick=function(){updateStats();document.getElementById('drawer').classList.add('open')};document.getElementById('statsClose').onclick=function(){document.getElementById('drawer').classList.remove('open')};document.getElementById('drawer').addEventListener('click',function(e){if(e.target===this)this.classList.remove('open')});document.getElementById('again').onclick=reset;
  window.addEventListener('resize',resizeAll);if(window.ResizeObserver){new ResizeObserver(resizeAll).observe(document.querySelector('.battlefield'))}
  function loop(now){var dt=Math.min(.033,(now-last)/1000);last=now;update(dt);for(var t of ['gold','teal']){draw(contexts[t],t,canvases[t]._w||1,canvases[t]._h||1)}updateUI();requestAnimationFrame(loop)}
  reset();requestAnimationFrame(loop);setInterval(updateStats,500);
})();
</script>
</body>
</html>

===== FILE: public/city/fleet/index.html.bak-deploy-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;