        confirmedAction(`Delete campaign #${b.dataset.del}? This removes the campaign and its recipient assignments. Logs are kept.`,
          async () => { await POST(`/campaigns/${b.dataset.del}/delete`); loadList(); },
          { title: "Delete campaign", confirmLabel: "Delete" }));
    } catch (e) { box.innerHTML = `<div class="notice err"><span class="n-ico">✕</span><div>${esc(e.message)}</div></div>`; }
  }

  /* ==================== MONITOR PANE ==================== */
  let MON = { id: null, es: null, timer: null, page: 1, statusF: "", q: "" };
  function openMonitor(cid) {
    MON.id = cid;
    setMode("monitor");
  }
  function setMode(m) {
