Panel contents
Log
Why destroy() matters: a row that is only removed from the DOM stays
subscribed to its signal, and the subscription keeps the detached row alive. destroy() stops
the row's effects first. The counter below tracks live effect count via the panel's own
controller list.