<!-- SOLID CITY · part 2022 -->
es(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(false);requestAnimationFrame(loop);setInterval(updateStats,500);document.getElementById('launch').focus();
})();
</script>
</body>
</html>

===== FILE: public/city/fleet/index.html.bak-prebrief-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:100%;touch-action:none}
    .objective{position:absolute;top:9px;left:10px;right:10px;display:flex;align-items:center;gap:8px;pointer-events:none}
    .objective span{font-size:9px;font-weight:900;letter