53:
54:
55:
60: $$("#gal [data-pdf]").forEach(b => b.onclick = () => testPdf(+b.dataset.pdf));
61: $$("#gal [data-dup]").forEach(b => b.onclick = async () => {
62: try { const d = await POST(`/templates/${b.dataset.dup}/duplicate`); toast(`Duplicated — new template #${d.id}`, "ok"); load(); }
63: catch (e) { toast(e.message, "err", 6000); }
65: $$("#gal [data-del]").forEach(b => b.onclick = () =>
74: catch (e) { toast(e.message, "err", 6000); return; }
90: toast("Rendering PDF via WeasyPrint…", "info");
95: toast(`PDF generated — ${fmtBytes(d.size_bytes)} (${d.engine})`, "ok");
96: } catch (e) { toast(e.message, "err", 6000); }
101: $("#btnClear").onclick = () =>