diff --git a/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs b/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs
index ce3fd354..b6d19785 100644
--- a/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs
+++ b/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs
@@ -13,8 +13,9 @@ internal static class AspidThemeStyleSheetExtensions
/// Adds to the element and, when the user has
/// configured one, layers on top of it.
/// The override is added to the same element as the base palette so its :root tokens
- /// take precedence. The element re-applies the override live whenever
- /// fires and unsubscribes when it leaves the panel.
+ /// take precedence. The element subscribes to while
+ /// attached to a panel (re-applying the current override on attach) and unsubscribes when it
+ /// leaves the panel, so live updates survive detach/reattach and never leak when never attached.
///
/// The element that receives the theme style sheets.
/// The element, for chaining.
@@ -34,7 +35,11 @@ void OnThemeChanged()
if (applied != null) element.AddStyleSheets(applied);
}
- AspidThemeSettings.Changed += OnThemeChanged;
+ element.RegisterCallback(_ =>
+ {
+ OnThemeChanged();
+ AspidThemeSettings.Changed += OnThemeChanged;
+ });
element.RegisterCallback(_ => AspidThemeSettings.Changed -= OnThemeChanged);
return element;