Node palette/badges mirror the real canvas. Groups sit 2 grid units clear of every member
and snap to the grid dots; fill is a slight accent tint that also dims non-members where it covers them
(see the half-covered "stray"). Dial the look below.
PYnormalize
SQLjoin_ref
PYstray
SQLelsewhere
⋮INcustomers
⋮INorders
⋮INproducts
⋮OUTreport
⋮OUTsummary
Non-member, half-covered.
Dimmed only where the group pane overlaps it; the rest stays full-opacity.
Input data group.
Membership = the IN role. Auto-stacked; drag ⋮ to reorder — this order becomes the future job-node port order.
Node group.
Free layout preserved; editable label; top-right grip moves the whole frame + members.