<Window x:Class="PSLauncher.App.Views.SettingsDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:PSLauncher.App.ViewModels"
        xmlns:loc="clr-namespace:PSLauncher.Core.Localization;assembly=PSLauncher.Core"
        Title="{x:Static loc:Strings.SettingsTitle}"
        Icon="pack://application:,,,/Resources/favicon.ico"
        Width="640" Height="720"
        MinWidth="540" MinHeight="500"
        WindowStartupLocation="CenterOwner"
        Background="{StaticResource Brush.Bg.Window}"
        d:DataContext="{d:DesignInstance Type=vm:SettingsViewModel}"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        mc:Ignorable="d"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <!-- Header -->
        <Border Grid.Row="0" Padding="32,24,32,16">
            <TextBlock Text="{x:Static loc:Strings.SettingsTitle}" FontSize="22" FontWeight="SemiBold"
                       Foreground="{StaticResource Brush.Text.Primary}" />
        </Border>

        <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="32,0,32,16">
            <StackPanel>

                <!-- License de mise à jour (en tête : c'est l'info la plus importante,
                     elle conditionne ce que l'utilisateur peut télécharger.
                     Bordure colorée selon l'état : vert/jaune/rouge). -->
                <Border BorderThickness="2"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <Border.Style>
                        <Style TargetType="Border">
                            <Setter Property="Background" Value="#2A1414" />
                            <Setter Property="BorderBrush" Value="#EF4444" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding LicenseSeverity}" Value="Ok">
                                    <Setter Property="Background" Value="{StaticResource Brush.Status.InstalledBg}" />
                                    <Setter Property="BorderBrush" Value="{StaticResource Brush.Status.Installed}" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding LicenseSeverity}" Value="Warning">
                                    <Setter Property="Background" Value="{StaticResource Brush.Status.BusyBg}" />
                                    <Setter Property="BorderBrush" Value="{StaticResource Brush.Status.Busy}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Border.Style>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>

                        <!-- Icône -->
                        <TextBlock Grid.Row="0" Grid.RowSpan="2" Grid.Column="0"
                                   Text="{Binding LicenseIcon}"
                                   FontSize="36" FontWeight="Bold"
                                   VerticalAlignment="Center"
                                   Margin="0,0,16,0">
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Foreground" Value="#EF4444" />
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding LicenseSeverity}" Value="Ok">
                                            <Setter Property="Foreground" Value="{StaticResource Brush.Status.Installed}" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding LicenseSeverity}" Value="Warning">
                                            <Setter Property="Foreground" Value="{StaticResource Brush.Status.Busy}" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>

                        <!-- Header text -->
                        <TextBlock Grid.Row="0" Grid.Column="1"
                                   Text="{x:Static loc:Strings.SettingsLicense}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}" />
                        <TextBlock Grid.Row="1" Grid.Column="1"
                                   Text="{Binding LicenseInfo}"
                                   Foreground="{StaticResource Brush.Text.Primary}"
                                   FontWeight="SemiBold" FontSize="14"
                                   Margin="0,2,0,0"
                                   TextWrapping="Wrap" />

                        <!-- Machine ID en dessous -->
                        <Grid Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0">
                                <TextBlock Text="{x:Static loc:Strings.SettingsMachineId}"
                                           FontSize="11"
                                           Foreground="{StaticResource Brush.Text.Secondary}" />
                                <TextBlock Text="{Binding MachineId}"
                                           FontFamily="Consolas" FontSize="11"
                                           Foreground="{StaticResource Brush.Text.Primary}"
                                           Margin="0,2,0,0" TextTrimming="CharacterEllipsis" />
                            </StackPanel>
                            <Button Grid.Column="1"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsCopyMachineId}"
                                    Command="{Binding CopyMachineIdCommand}" />
                        </Grid>
                    </Grid>
                </Border>

                <!-- Langue de l'interface -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsLanguage}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <ComboBox ItemsSource="{Binding AvailableLanguages}"
                                  DisplayMemberPath="Name"
                                  SelectedValuePath="Code"
                                  SelectedValue="{Binding Language, Mode=TwoWay}"
                                  Background="#1A1A20"
                                  Foreground="{StaticResource Brush.Text.Primary}"
                                  BorderBrush="{StaticResource Brush.Border}"
                                  BorderThickness="1" Padding="8" />
                        <TextBlock Text="{x:Static loc:Strings.SettingsLanguageHint}"
                                   FontSize="11" Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontStyle="Italic" Margin="0,6,0,0" TextWrapping="Wrap" />
                    </StackPanel>
                </Border>

                <!--
                    Section "À propos" : version + copyright. Visible (pas dans l'Expander),
                    placée entre Langue et les paramètres avancés repliés. C'est l'info que
                    le support demande en premier en cas de bug.
                -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsAbout}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <TextBlock FontSize="13"
                                   Foreground="{StaticResource Brush.Text.Primary}">
                            <Run Text="{x:Static loc:Strings.SettingsLauncherVersion}" />
                            <Run Text=" " />
                            <Run Text="{Binding LauncherVersion, Mode=OneWay}" FontWeight="SemiBold" />
                        </TextBlock>
                        <TextBlock Text="{x:Static loc:Strings.Copyright}"
                                   FontSize="12"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,4,0,0" />
                    </StackPanel>
                </Border>

                <!--
                    Sections "techniques" : Server / Installation / Cache / Database / Logs
                    repliées par défaut sous un Expander pour ne pas noyer les sections
                    importantes (License, Langue, About) qui restent dépliées.
                    Placé en BAS de la fenêtre car ce sont des trucs de power-user / support.
                -->
                <Expander Header="{x:Static loc:Strings.SettingsAdvanced}"
                          Foreground="{StaticResource Brush.Text.Secondary}"
                          FontSize="11" FontWeight="Bold"
                          Background="Transparent" BorderThickness="0"
                          Margin="0,0,0,16" IsExpanded="False">
                    <StackPanel Margin="0,12,0,0">

                <!-- Serveur -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsServer}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <TextBlock Text="{x:Static loc:Strings.SettingsApiUrl}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,0,0,4" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBox Grid.Column="0"
                                     Text="{Binding ServerBaseUrl, UpdateSourceTrigger=PropertyChanged}"
                                     Background="#1A1A20"
                                     Foreground="{StaticResource Brush.Text.Primary}"
                                     BorderBrush="{StaticResource Brush.Border}"
                                     BorderThickness="1" Padding="8" />
                            <Button Grid.Column="1" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsTest}"
                                    Command="{Binding TestConnectionCommand}"
                                    IsEnabled="{Binding IsTestingConnection, Converter={StaticResource InverseBoolToBool}}" />
                        </Grid>
                        <TextBlock Text="{Binding ConnectionStatus}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,8,0,0" TextWrapping="Wrap" />

                        <!-- URLs des onglets latéraux Report / Documentation -->
                        <TextBlock Text="{x:Static loc:Strings.SettingsReportUrl}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,16,0,4" />
                        <TextBox Text="{Binding ReportUrl, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />

                        <TextBlock Text="{x:Static loc:Strings.SettingsDocsUrl}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,12,0,4" />
                        <TextBox Text="{Binding DocumentationUrl, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />
                    </StackPanel>
                </Border>

                <!-- Installation -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsInstallation}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <TextBlock Text="{x:Static loc:Strings.SettingsInstallRoot}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,0,0,4" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBox Grid.Column="0"
                                     Text="{Binding InstallRoot, UpdateSourceTrigger=PropertyChanged}"
                                     Background="#1A1A20"
                                     Foreground="{StaticResource Brush.Text.Primary}"
                                     BorderBrush="{StaticResource Brush.Border}"
                                     BorderThickness="1" Padding="8"
                                     FontFamily="Consolas" />
                            <Button Grid.Column="1" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsBrowse}"
                                    Command="{Binding BrowseInstallRootCommand}" />
                        </Grid>
                    </StackPanel>
                </Border>

                <!-- Cache -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsCache}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0">
                                <TextBlock Text="{Binding CacheDirectory}"
                                           FontFamily="Consolas" FontSize="11"
                                           Foreground="{StaticResource Brush.Text.Primary}"
                                           TextTrimming="CharacterEllipsis" />
                                <TextBlock FontSize="12"
                                           Foreground="{StaticResource Brush.Text.Secondary}">
                                    <Run Text="{x:Static loc:Strings.SettingsCacheSize}" />
                                    <Run Text=" " />
                                    <Run Text="{Binding CacheSizeDisplay}" FontWeight="SemiBold" />
                                </TextBlock>
                            </StackPanel>
                            <Button Grid.Column="1" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="📁"
                                    Command="{Binding OpenCacheFolderCommand}" />
                            <Button Grid.Column="2" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsClearCache}"
                                    Command="{Binding ClearCacheCommand}" />
                        </Grid>
                    </StackPanel>
                </Border>

                <!-- Base de données (XAMPP / MySQL) — config + test + replay -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsDatabase}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />

                        <Grid Margin="0,0,0,8">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="100" />
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0" Margin="0,0,8,0">
                                <TextBlock Text="{x:Static loc:Strings.SettingsDbHost}"
                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                           FontSize="12" Margin="0,0,0,4" />
                                <TextBox Text="{Binding DbHost, UpdateSourceTrigger=PropertyChanged}"
                                         Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                         BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
                            </StackPanel>
                            <StackPanel Grid.Column="1">
                                <TextBlock Text="{x:Static loc:Strings.SettingsDbPort}"
                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                           FontSize="12" Margin="0,0,0,4" />
                                <TextBox Text="{Binding DbPort, UpdateSourceTrigger=PropertyChanged}"
                                         Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                         BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
                            </StackPanel>
                        </Grid>

                        <Grid Margin="0,0,0,8">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0" Margin="0,0,8,0">
                                <TextBlock Text="{x:Static loc:Strings.SettingsDbUser}"
                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                           FontSize="12" Margin="0,0,0,4" />
                                <TextBox Text="{Binding DbUser, UpdateSourceTrigger=PropertyChanged}"
                                         Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                         BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
                            </StackPanel>
                            <StackPanel Grid.Column="1">
                                <TextBlock Text="{x:Static loc:Strings.SettingsDbPassword}"
                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                           FontSize="12" Margin="0,0,0,4" />
                                <TextBox Text="{Binding DbPassword, UpdateSourceTrigger=PropertyChanged}"
                                         Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                         BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                         FontFamily="Consolas" />
                            </StackPanel>
                        </Grid>

                        <TextBlock Text="{x:Static loc:Strings.SettingsDbName}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,0,0,4" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBox Grid.Column="0"
                                     Text="{Binding DbName, UpdateSourceTrigger=PropertyChanged}"
                                     Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                     BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                     FontFamily="Consolas" />
                            <Button Grid.Column="1" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsTest}"
                                    Command="{Binding TestDbCommand}"
                                    IsEnabled="{Binding IsTestingDb, Converter={StaticResource InverseBoolToBool}}" />
                        </Grid>
                        <TextBlock Text="{Binding DbConnectionStatus}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,8,0,0" TextWrapping="Wrap" />

                        <CheckBox IsChecked="{Binding DbAutoApplyMigrations}"
                                  Margin="0,12,0,0"
                                  Foreground="{StaticResource Brush.Text.Primary}"
                                  Content="{x:Static loc:Strings.SettingsDbAutoMigrate}" />

                        <Grid Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0"
                                       Text="{Binding MigrationsReplayStatus}"
                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                       FontSize="12" VerticalAlignment="Center"
                                       TextWrapping="Wrap" />
                            <Button Grid.Column="1"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsDbReplay}"
                                    Command="{Binding ReplayMigrationsCommand}"
                                    IsEnabled="{Binding IsReplayingMigrations, Converter={StaticResource InverseBoolToBool}}" />
                        </Grid>

                        <TextBlock Text="{x:Static loc:Strings.SettingsDbHint}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontStyle="Italic" FontSize="11" Margin="0,8,0,0"
                                   TextWrapping="Wrap" />
                    </StackPanel>
                </Border>

                <!-- Outil Report (XAMPP htdocs deploy) -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsReportTool}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />

                        <TextBlock Text="{x:Static loc:Strings.SettingsReportHtdocs}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,0,0,4" />
                        <TextBox Text="{Binding ReportHtdocsRoot, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />

                        <TextBlock Text="{x:Static loc:Strings.SettingsReportFolder}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,12,0,4" />
                        <TextBox Text="{Binding ReportFolderName, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />

                        <CheckBox IsChecked="{Binding ReportAutoDeploy}"
                                  Margin="0,12,0,0"
                                  Foreground="{StaticResource Brush.Text.Primary}"
                                  Content="{x:Static loc:Strings.SettingsReportAutoDeploy}" />

                        <!-- Conserver N backups -->
                        <Grid Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="80" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0"
                                       Text="{x:Static loc:Strings.SettingsReportMaxBackups}"
                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                       FontSize="12" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1"
                                     Text="{Binding ReportMaxBackups, UpdateSourceTrigger=PropertyChanged}"
                                     Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                     BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
                        </Grid>

                        <Grid Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0"
                                       Text="{Binding ReportDeployStatus}"
                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                       FontSize="12" VerticalAlignment="Center"
                                       TextWrapping="Wrap" />
                            <Button Grid.Column="1"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsReportRedeploy}"
                                    Command="{Binding RedeployReportCommand}"
                                    IsEnabled="{Binding IsDeployingReport, Converter={StaticResource InverseBoolToBool}}" />
                        </Grid>

                        <!-- Liste des backups disponibles avec bouton Revert par ligne -->
                        <TextBlock Text="{x:Static loc:Strings.SettingsReportBackups}"
                                   FontWeight="Bold" FontSize="11"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,16,0,6" />
                        <TextBlock Text="{x:Static loc:Strings.SettingsReportNoBackups}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" FontStyle="Italic"
                                   Visibility="{Binding HasReportBackups, Converter={StaticResource InverseBoolToVisibility}}" />
                        <ItemsControl ItemsSource="{Binding ReportBackups}"
                                      Visibility="{Binding HasReportBackups, Converter={StaticResource BoolToVisibility}}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Background="#1A1A20"
                                            BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                                            CornerRadius="4" Padding="10,8" Margin="0,0,0,4">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="Auto" />
                                                <ColumnDefinition Width="Auto" />
                                            </Grid.ColumnDefinitions>
                                            <StackPanel Grid.Column="0" VerticalAlignment="Center">
                                                <TextBlock Text="{Binding DateDisplay}"
                                                           Foreground="{StaticResource Brush.Text.Primary}"
                                                           FontSize="13" FontWeight="SemiBold" />
                                                <TextBlock Text="{Binding SizeDisplay}"
                                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                                           FontSize="11" />
                                            </StackPanel>
                                            <TextBlock Grid.Column="1"
                                                       Text="{Binding FolderName}"
                                                       FontFamily="Consolas" FontSize="10"
                                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                                       VerticalAlignment="Center" Margin="0,0,12,0" />
                                            <Button Grid.Column="2"
                                                    Style="{StaticResource SecondaryButton}"
                                                    Content="{x:Static loc:Strings.SettingsReportRevert}"
                                                    Command="{Binding RevertCommand}"
                                                    Padding="12,6" />
                                        </Grid>
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </Border>

                <!-- Outil Doc (XAMPP htdocs deploy, mirror of Report) -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsDocTool}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />

                        <TextBlock Text="{x:Static loc:Strings.SettingsReportHtdocs}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,0,0,4" />
                        <TextBox Text="{Binding DocHtdocsRoot, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />

                        <TextBlock Text="{x:Static loc:Strings.SettingsReportFolder}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" Margin="0,12,0,4" />
                        <TextBox Text="{Binding DocFolderName, UpdateSourceTrigger=PropertyChanged}"
                                 Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                 BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
                                 FontFamily="Consolas" />

                        <CheckBox IsChecked="{Binding DocAutoDeploy}"
                                  Margin="0,12,0,0"
                                  Foreground="{StaticResource Brush.Text.Primary}"
                                  Content="{x:Static loc:Strings.SettingsDocAutoDeploy}" />

                        <Grid Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="80" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0"
                                       Text="{x:Static loc:Strings.SettingsDocMaxBackups}"
                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                       FontSize="12" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1"
                                     Text="{Binding DocMaxBackups, UpdateSourceTrigger=PropertyChanged}"
                                     Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
                                     BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
                        </Grid>

                        <Grid Margin="0,12,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0"
                                       Text="{Binding DocDeployStatus}"
                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                       FontSize="12" VerticalAlignment="Center"
                                       TextWrapping="Wrap" />
                            <Button Grid.Column="1"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.SettingsDocRedeploy}"
                                    Command="{Binding RedeployDocCommand}"
                                    IsEnabled="{Binding IsDeployingDoc, Converter={StaticResource InverseBoolToBool}}" />
                        </Grid>

                        <TextBlock Text="{x:Static loc:Strings.SettingsDocBackups}"
                                   FontWeight="Bold" FontSize="11"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,16,0,6" />
                        <TextBlock Text="{x:Static loc:Strings.SettingsReportNoBackups}"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   FontSize="12" FontStyle="Italic"
                                   Visibility="{Binding HasDocBackups, Converter={StaticResource InverseBoolToVisibility}}" />
                        <ItemsControl ItemsSource="{Binding DocBackups}"
                                      Visibility="{Binding HasDocBackups, Converter={StaticResource BoolToVisibility}}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border Background="#1A1A20"
                                            BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                                            CornerRadius="4" Padding="10,8" Margin="0,0,0,4">
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="Auto" />
                                                <ColumnDefinition Width="Auto" />
                                            </Grid.ColumnDefinitions>
                                            <StackPanel Grid.Column="0" VerticalAlignment="Center">
                                                <TextBlock Text="{Binding DateDisplay}"
                                                           Foreground="{StaticResource Brush.Text.Primary}"
                                                           FontSize="13" FontWeight="SemiBold" />
                                                <TextBlock Text="{Binding SizeDisplay}"
                                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                                           FontSize="11" />
                                            </StackPanel>
                                            <TextBlock Grid.Column="1"
                                                       Text="{Binding FolderName}"
                                                       FontFamily="Consolas" FontSize="10"
                                                       Foreground="{StaticResource Brush.Text.Secondary}"
                                                       VerticalAlignment="Center" Margin="0,0,12,0" />
                                            <Button Grid.Column="2"
                                                    Style="{StaticResource SecondaryButton}"
                                                    Content="{x:Static loc:Strings.SettingsReportRevert}"
                                                    Command="{Binding RevertCommand}"
                                                    Padding="12,6" />
                                        </Grid>
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </Border>

                <!-- Logs (path + open button) -->
                <Border Background="{StaticResource Brush.Bg.Card}"
                        BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
                        CornerRadius="6" Padding="20" Margin="0,0,0,16">
                    <StackPanel>
                        <TextBlock Text="{x:Static loc:Strings.SettingsLogs}"
                                   FontSize="11" FontWeight="Bold"
                                   Foreground="{StaticResource Brush.Text.Secondary}"
                                   Margin="0,0,0,8" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <StackPanel Grid.Column="0">
                                <TextBlock Text="{Binding LogsDirectory}"
                                           FontFamily="Consolas" FontSize="11"
                                           Foreground="{StaticResource Brush.Text.Primary}"
                                           TextTrimming="CharacterEllipsis" />
                                <TextBlock Text="{x:Static loc:Strings.SettingsCacheRotation}"
                                           FontSize="12"
                                           Foreground="{StaticResource Brush.Text.Secondary}"
                                           Margin="0,2,0,0" />
                            </StackPanel>
                            <Button Grid.Column="1" Margin="8,0,0,0"
                                    Style="{StaticResource SecondaryButton}"
                                    Content="{x:Static loc:Strings.OpenButton}"
                                    Command="{Binding OpenLogsFolderCommand}" />
                        </Grid>
                    </StackPanel>
                </Border>

                    </StackPanel>
                </Expander>

            </StackPanel>
        </ScrollViewer>

        <!-- Footer -->
        <Border Grid.Row="2" Background="{StaticResource Brush.Bg.Footer}"
                BorderBrush="{StaticResource Brush.Border}" BorderThickness="0,1,0,0"
                Padding="20,12">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button Style="{StaticResource SecondaryButton}"
                        Content="{x:Static loc:Strings.ActionCancel}"
                        IsCancel="True"
                        Margin="0,0,12,0"
                        Click="OnCancel" />
                <Button Style="{StaticResource AccentButton}"
                        Content="{x:Static loc:Strings.ActionSave}"
                        Padding="32,8"
                        IsDefault="True"
                        Click="OnSave" />
            </StackPanel>
        </Border>
    </Grid>
</Window>
