💾 HasUnsavedChanges が切り替わる瞬間

1. プロパティを編集 Slider/ComboBox

WindowWidth/Theme を書き換えた瞬間に RelayCommand.RaiseCanExecuteChanged() が発火します。

2. 終了ダイアログ OnClosing

HasUnsavedChanges が true のまま閉じると MessageBox.Show() が三択で割り込む構造です。

3. 保存確定 SettingsService.Save

AppData パスの JSON を書き戻し、最終更新と保存先の表示を刷新します。

ComboBox を Light→Dark に変えた瞬間、ThemeManager.ApplyThemeInline が呼ばれ Save ボタンが点灯します。