${esc(n.name || "node")}
${esc(n.role || "—")}
${liveChip(n, measured)}
${down ? "—" : Math.round(d * 100) + "%"}
draw
${chip(jChipKind, "joules " + jl)}
`;
}).join("");
}
}
// 2D fallback list (used only if WebGL failed — same honest labels)
const fb = $("fb-nodes");
if (fb && nodes.length) {
fb.innerHTML = nodes.map((n) => {
const wattTxt = (measured && n.live === true && typeof n.watts === "number") ? fmtW(n.watts) + " W" : "—";
return `