      $$("#campTable [data-prev]").forEach(b => b.onclick = () => campaignPreview(+b.dataset.prev));
      $$("#campTable [data-del]").forEach(b => b.onclick = () =>
        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 ==================== */
