<!-- SOLID CITY · part 3441 -->
d:rgba(35,44,61,.95);color:#cfd6e4;border:1px solid #9aa4b5;border-radius:12px;padding:10px 12px;font:13px/1.45 system-ui;display:none}';
  document.head.appendChild(st);
  var chip = document.createElement('button');
  chip.id = 'sc-chip'; chip.textContent = '📷 SURVEY';
  chip.addEventListener('click', function () {
    var open = C.panel.style.display !== 'block';
    C.panel.style.display = open ? 'block' : 'none';
    if (open) render();
  });
  document.body.appendChild(chip);
  C.panel = document.createElement('div'); C.panel.id = 'sc-panel';
  C.body = document.createElement('div'); C.panel.appendChild(C.body);
  document.body.appendChild(C.panel);
}
fetch('/api/city/me', { credentials: 'same-origin' }).then(function (r) { return r.json(); }).then(function (me) {
  if (me && me.king && me.royal) build();
}).catch(function () {});
})();


===== FILE: public/city/swarm/index.html =====
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
  <meta name="color-scheme" content="light dark" />
  <link rel="icon" href="data:," />
  <title>Swarm Command</title>
  <style>
    :root{
      color-scheme:light dark;
      --bg:#071013;--panel:#0d1a1e;--panel2:#122329;--ink:#f2f7f6;--muted:#9bb0b2;
      --line:#284047;--gold:#ffc34d;--gold2:#ff8b3d;--teal:#52e0d0;--red:#ff625f;--green:#7ee39b;
      --shadow:0 18px 48px rgba(0,0,0,.28);--soft:rgba(255,255,255,.055);
    }
    @media(prefers-color-scheme:light){
      :root{--bg:#eaf2f1;--panel:#f8fbfa;--panel2:#fff;--ink:#102326;--muted:#52696d;--line:#bfd0d1;
      --gold:#a85b00;--gold2:#c63e19;--teal:#007f77;--red:#bd2f36;--green:#087b38;--shadow:0 18px 48px rgba(20,48,53,.15);--soft:rgba(14,58,64,.06)}
    }
    *{box-sizing:border-box}
    html,body{margin:0;min-height:100%;background:var(--bg);color:var(--ink);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
    body{overflow-x:hidden}
    button{font:inherit;color:inherit}
    button:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
    .app{width:min(1500px,100%);margin:0 auto;padding:clamp(10px,2vw,24px);padding-bottom:max(16px,env(safe-area-inset-bottom))}
    .mission-bar{position:sticky;top:0;z-index:10;display:grid;grid-template-columns:minmax(190px,1fr) minmax(260px,2fr) auto auto;gap:14px;align-items:center;margin-bottom:12px;padding-bottom:8px;background:var(--bg)}
    .objective h1{font-size:clamp(1.25rem,2.5vw,2rem);line-height:1;margin:0 0 6px;font-weight:780;letter-spacing:-.035em}
    .objective p{margin:0;color:var(--muted);font-size:.86rem}
    .progress-wrap{min-width:0}
    .progress-label{display:flex;justify-content:space-between;gap:12px;margin-bottom:6px;font:700 .72rem ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);letter-spacing:.05em}
    .progress-track{height:14px;border:1px solid var(--line);background:var(--panel);position:relative;overflow:hidden;clip-path:polygon(0 0,98% 0,100% 50%,98% 100%,0 100%)}
    .progress-fill{height:100%;width:0;background:linear-gradient(90deg,var(--teal),var(--gold));transition:width .25s linear}
    .integrity{display:flex;gap:10px;align-items:center;background:var(--panel);border:1px solid var(--line);padding:9px 12px}
    .integrity strong{font:800 1.25rem ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--green)}
    .integrity span{font-size:.68rem;color:var(--muted);line-height:1.2;text-transform:uppercase;letter-spacing:.09em}
    .layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:12px;align-items:start}
    .field-shell{position:relative;background:#03090b;border:1px solid var(--line);min-height:560px;overflow:hidden;box-shadow:var(--shadow)}
    canvas{display:block;width:100%;height:560px;touch-action:none;background:#03090b}
    .hud-top{position:absolute;left:10px;right:10px;top:10px;display:flex;gap:8px;justify-content:space-between;pointer-events:none}
    .hud-chip{background:rgba(4,12,15,.86);border:1px solid rgba(115,223,213,.28);padding:7px 9px;font:700 .7rem ui-monospace,SFMono-Regular,Menlo,monospace;color:#dff8f4;backdrop-filter:blur(8px)}
    .hud-chip b{color:#5de1d2}
    .advisory{position:absolute;left:10px;right:10px;bottom:10px;display:flex;align-items:center;gap:9px;background:rgba(4,12,15,.9);border:1px solid rgba(255,195,77,.34);padding:9px 10px;color:#f9f4e6;font-size:.78rem;pointer-events:none}
    .advisory::before{content:"AI";font:800 .67rem ui-monospace,SFMono-Regular,Menlo,monospace;color:#ffca5e;border:1px solid #b97921;padding:3px 5px}
    .pause-btn{width:42px;height:42px;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));background:var(--panel);color:var(--gold);font-size:1rem;font-weight:900;cursor:pointer;box-shadow:var(--shadow)}
    .pause-btn:hover{background:#ffc34d;color:#171207}.pause-btn[hidden]{display:none}
    .pause-screen{position:fixed;inset:0;z-index:20;displ