/* Etape 2 : canevas du Builder, bibliotheques, ciblage. */
.canvas-wrap{margin-bottom:6px}
.canvas-toolbar{display:flex;gap:6px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
.canvas-status{font-size:12px;margin-left:6px}
.canvas{position:relative;height:460px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background-color:var(--surface-2);
  background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:18px 18px;cursor:grab}
.canvas.panning{cursor:grabbing}
.canvas-stage{position:absolute;left:0;top:0;width:4000px;height:3000px;transform-origin:0 0}
.canvas-edges{position:absolute;left:0;top:0;width:4000px;height:3000px;overflow:visible;pointer-events:none}
.canvas-edges path{fill:none;stroke:var(--muted);stroke-width:1.6}
.canvas-edges path.missing{stroke:var(--err);stroke-dasharray:5 4}
.canvas-edges text{font-size:11px;fill:var(--muted)}
.cnode{position:absolute;width:220px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--primary);border-radius:10px;
  padding:10px 12px;color:var(--ink);box-shadow:0 3px 10px #0000000f;user-select:none;cursor:move}
.cnode:hover{text-decoration:none;outline:2px solid var(--accent)}
.cnode strong{display:block}.cnode small{display:block;color:var(--muted);margin-top:3px}
.cnode.start{border-left-color:var(--accent)}.cnode.fallback{border-left-color:var(--warn)}.cnode.end{border-left-color:var(--ok)}
.cnode.dragging{opacity:.85;box-shadow:0 8px 24px #0000002a}
.node-list{margin:6px 0}
.node-list>summary{margin-bottom:8px}
.lib-nav{margin-bottom:16px}
.copy-preview{margin-bottom:14px}.copy-preview legend{display:flex;gap:8px;align-items:center}
.copy-preview legend .check{margin:0}
.propagate table.compact td,.propagate table.compact th{padding:8px}
