Files
Tritone/HorseRacingPredictor/Styles/GlobalStyles.xaml
T
2026-06-09 18:31:15 +02:00

478 lines
25 KiB
XML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- =============================================================
MATERIAL DESIGN 3 TOKEN SYSTEM (Light Mode)
Reference: https://m3.material.io/styles/color/roles
============================================================= -->
<!-- Primary palette -->
<Color x:Key="CPrimary">#6750A4</Color>
<Color x:Key="COnPrimary">#FFFFFF</Color>
<Color x:Key="CPrimaryContainer">#EADDFF</Color>
<Color x:Key="COnPrimaryContainer">#21005D</Color>
<!-- Secondary palette -->
<Color x:Key="CSecondary">#625B71</Color>
<Color x:Key="COnSecondary">#FFFFFF</Color>
<Color x:Key="CSecondaryContainer">#E8DEF8</Color>
<Color x:Key="COnSecondaryContainer">#1D192B</Color>
<!-- Tertiary palette -->
<Color x:Key="CTertiary">#7D5260</Color>
<Color x:Key="COnTertiary">#FFFFFF</Color>
<Color x:Key="CTertiaryContainer">#FFD8E4</Color>
<Color x:Key="COnTertiaryContainer">#31111D</Color>
<!-- Error -->
<Color x:Key="CError">#B3261E</Color>
<Color x:Key="COnError">#FFFFFF</Color>
<Color x:Key="CErrorContainer">#F9DEDC</Color>
<!-- Surface / Background -->
<Color x:Key="CSurface">#FEF7FF</Color>
<Color x:Key="COnSurface">#1C1B1F</Color>
<Color x:Key="CSurfaceVariant">#E7E0EC</Color>
<Color x:Key="COnSurfaceVariant">#49454F</Color>
<Color x:Key="CSurfaceContainer">#F3EDF7</Color>
<Color x:Key="CSurfaceContainerHigh">#ECE6F0</Color>
<Color x:Key="CSurfaceContainerHighest">#E6E0E9</Color>
<Color x:Key="CSurfaceContainerLow">#F7F2FA</Color>
<Color x:Key="CBackground">#FEF7FF</Color>
<Color x:Key="COnBackground">#1C1B1F</Color>
<!-- Outline -->
<Color x:Key="COutline">#79747E</Color>
<Color x:Key="COutlineVariant">#CAC4D0</Color>
<!-- Misc -->
<Color x:Key="CInversePrimary">#D0BCFF</Color>
<Color x:Key="CShadow">#000000</Color>
<!-- Legacy color keys (kept for compatibility) -->
<Color x:Key="CBase">#FEF7FF</Color>
<Color x:Key="CMantle">#F3EDF7</Color>
<Color x:Key="CCrust">#ECE6F0</Color>
<Color x:Key="CSurface0">#F7F2FA</Color>
<Color x:Key="CSurface1">#F3EDF7</Color>
<Color x:Key="CSurface2">#ECE6F0</Color>
<Color x:Key="COverlay0">#49454F</Color>
<Color x:Key="CText">#1C1B1F</Color>
<Color x:Key="CSubtext0">#49454F</Color>
<Color x:Key="CSubtext1">#625B71</Color>
<Color x:Key="CBlue">#6750A4</Color>
<Color x:Key="CGreen">#7D5260</Color>
<Color x:Key="CRed">#B3261E</Color>
<Color x:Key="CPeach">#625B71</Color>
<Color x:Key="CLavender">#EADDFF</Color>
<!-- MD3 Brushes -->
<SolidColorBrush x:Key="BrPrimary" Color="{StaticResource CPrimary}"/>
<SolidColorBrush x:Key="BrOnPrimary" Color="{StaticResource COnPrimary}"/>
<SolidColorBrush x:Key="BrPrimaryContainer" Color="{StaticResource CPrimaryContainer}"/>
<SolidColorBrush x:Key="BrOnPrimaryContainer" Color="{StaticResource COnPrimaryContainer}"/>
<SolidColorBrush x:Key="BrSecondary" Color="{StaticResource CSecondary}"/>
<SolidColorBrush x:Key="BrOnSecondary" Color="{StaticResource COnSecondary}"/>
<SolidColorBrush x:Key="BrSecondaryContainer" Color="{StaticResource CSecondaryContainer}"/>
<SolidColorBrush x:Key="BrOnSecondaryContainer" Color="{StaticResource COnSecondaryContainer}"/>
<SolidColorBrush x:Key="BrTertiary" Color="{StaticResource CTertiary}"/>
<SolidColorBrush x:Key="BrTertiaryContainer" Color="{StaticResource CTertiaryContainer}"/>
<SolidColorBrush x:Key="BrOnTertiaryContainer" Color="{StaticResource COnTertiaryContainer}"/>
<SolidColorBrush x:Key="BrError" Color="{StaticResource CError}"/>
<SolidColorBrush x:Key="BrSurface" Color="{StaticResource CSurface}"/>
<SolidColorBrush x:Key="BrOnSurface" Color="{StaticResource COnSurface}"/>
<SolidColorBrush x:Key="BrSurfaceVariant" Color="{StaticResource CSurfaceVariant}"/>
<SolidColorBrush x:Key="BrOnSurfaceVariant" Color="{StaticResource COnSurfaceVariant}"/>
<SolidColorBrush x:Key="BrSurfaceContainer" Color="{StaticResource CSurfaceContainer}"/>
<SolidColorBrush x:Key="BrSurfaceContainerHigh" Color="{StaticResource CSurfaceContainerHigh}"/>
<SolidColorBrush x:Key="BrSurfaceContainerHighest" Color="{StaticResource CSurfaceContainerHighest}"/>
<SolidColorBrush x:Key="BrSurfaceContainerLow" Color="{StaticResource CSurfaceContainerLow}"/>
<SolidColorBrush x:Key="BrBackground" Color="{StaticResource CBackground}"/>
<SolidColorBrush x:Key="BrOutline" Color="{StaticResource COutline}"/>
<SolidColorBrush x:Key="BrOutlineVariant" Color="{StaticResource COutlineVariant}"/>
<!-- Legacy brush aliases used by existing XAML -->
<SolidColorBrush x:Key="BrBase" Color="{StaticResource CBackground}"/>
<SolidColorBrush x:Key="BrMantle" Color="{StaticResource CSurfaceContainer}"/>
<SolidColorBrush x:Key="BrSurface0" Color="{StaticResource CSurfaceContainerLow}"/>
<SolidColorBrush x:Key="BrSurface1" Color="{StaticResource CSurfaceContainer}"/>
<SolidColorBrush x:Key="BrSurface2" Color="{StaticResource CSurfaceContainerHigh}"/>
<SolidColorBrush x:Key="BrOverlay0" Color="{StaticResource COnSurfaceVariant}"/>
<SolidColorBrush x:Key="BrText" Color="{StaticResource COnSurface}"/>
<SolidColorBrush x:Key="BrSubtext0" Color="{StaticResource COnSurfaceVariant}"/>
<SolidColorBrush x:Key="BrBlue" Color="{StaticResource CPrimary}"/>
<SolidColorBrush x:Key="BrGreen" Color="{StaticResource CTertiary}"/>
<SolidColorBrush x:Key="BrRed" Color="{StaticResource CError}"/>
<SolidColorBrush x:Key="BrPeach" Color="{StaticResource CSecondary}"/>
<SolidColorBrush x:Key="BrLavender" Color="{StaticResource CPrimaryContainer}"/>
<SolidColorBrush x:Key="BrBorder" Color="{StaticResource COutlineVariant}"/>
<!-- Elevation drop shadows (MD3 tonal elevation complement) -->
<DropShadowEffect x:Key="Elevation1" BlurRadius="3" ShadowDepth="1" Opacity="0.12" Color="{StaticResource CShadow}"/>
<DropShadowEffect x:Key="Elevation2" BlurRadius="6" ShadowDepth="2" Opacity="0.14" Color="{StaticResource CShadow}"/>
<DropShadowEffect x:Key="Elevation3" BlurRadius="12" ShadowDepth="4" Opacity="0.16" Color="{StaticResource CShadow}"/>
<DropShadowEffect x:Key="SubtleDropShadow" BlurRadius="6" ShadowDepth="2" Opacity="0.12" Color="{StaticResource CShadow}"/>
<!-- =============================================================
NAVIGATION RAIL BUTTON (MD3 pill active indicator)
============================================================= -->
<Style x:Key="NavBtn" TargetType="RadioButton">
<Setter Property="Width" Value="80"/>
<Setter Property="Height" Value="72"/>
<Setter Property="Margin" Value="0,2"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurfaceVariant}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid HorizontalAlignment="Center" Width="56" Height="32">
<!-- Active pill indicator -->
<Border x:Name="Pill" CornerRadius="16"
Background="Transparent"
HorizontalAlignment="Center" VerticalAlignment="Center"
Width="56" Height="32"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<TextBlock x:Name="NavLabel"
Text="{TemplateBinding Tag}"
FontFamily="Roboto, Segoe UI" FontSize="12" FontWeight="Medium"
Foreground="{TemplateBinding Foreground}"
HorizontalAlignment="Center" TextAlignment="Center"
Margin="0,4,0,0"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Pill" Property="Background" Value="#1A6750A4"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Pill" Property="Background" Value="{StaticResource BrSecondaryContainer}"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSecondaryContainer}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- =============================================================
FILLED BUTTON (MD3 pill shape, height 40px)
============================================================= -->
<Style x:Key="AccentBtn" TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource BrOnPrimary}"/>
<Setter Property="Background" Value="{StaticResource BrPrimary}"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="24,0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" CornerRadius="100"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
Effect="{StaticResource Elevation1}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Opacity" Value="0.92"/>
<Setter TargetName="Bd" Property="Effect" Value="{StaticResource Elevation2}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Bd" Property="Opacity" Value="0.88"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Bd" Property="Opacity" Value="0.38"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Tonal button alias used by some pages -->
<Style x:Key="ToolBtn" TargetType="Button">
<Setter Property="Foreground" Value="{StaticResource BrOnSecondaryContainer}"/>
<Setter Property="Background" Value="{StaticResource BrSecondaryContainer}"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="24,0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" CornerRadius="100"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Opacity" Value="0.92"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Bd" Property="Opacity" Value="0.38"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- =============================================================
OUTLINED TEXT FIELD (MD3 4px corner, 2px focus border)
============================================================= -->
<Style x:Key="FlatTb" TargetType="TextBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
<Setter Property="CaretBrush" Value="{StaticResource BrPrimary}"/>
<Setter Property="SelectionBrush" Value="{StaticResource BrPrimaryContainer}"/>
<Setter Property="BorderBrush" Value="{StaticResource BrOutline}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="16,0"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border x:Name="Bd" CornerRadius="4"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource BrPrimary}"/>
<Setter TargetName="Bd" Property="BorderThickness" Value="2"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource BrOnSurface}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- =============================================================
PASSWORD BOX (MD3 outlined)
============================================================= -->
<Style x:Key="FlatPb" TargetType="PasswordBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
<Setter Property="CaretBrush" Value="{StaticResource BrPrimary}"/>
<Setter Property="SelectionBrush" Value="{StaticResource BrPrimaryContainer}"/>
<Setter Property="BorderBrush" Value="{StaticResource BrOutline}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="16,0"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="PasswordBox">
<Border x:Name="Bd" CornerRadius="4"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource BrPrimary}"/>
<Setter TargetName="Bd" Property="BorderThickness" Value="2"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- PROGRESS BAR -->
<!-- =============================================================
PROGRESS BAR (MD3 linear indicator)
============================================================= -->
<Style x:Key="ModernPb" TargetType="ProgressBar">
<Setter Property="Height" Value="4"/>
<Setter Property="Background" Value="{StaticResource BrSurfaceVariant}"/>
<Setter Property="Foreground" Value="{StaticResource BrPrimary}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Grid>
<Border CornerRadius="2" Background="{TemplateBinding Background}"/>
<Border x:Name="PART_Indicator" CornerRadius="2"
Background="{TemplateBinding Foreground}"
HorizontalAlignment="Left"/>
<Border x:Name="PART_Track"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- =============================================================
DATAGRID (MD3 surface tones)
============================================================= -->
<Style x:Key="ModernDg" TargetType="DataGrid">
<Setter Property="Background" Value="{StaticResource BrSurfaceContainerLow}"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="RowBackground" Value="{StaticResource BrSurfaceContainerLow}"/>
<Setter Property="AlternatingRowBackground" Value="{StaticResource BrSurfaceContainer}"/>
<Setter Property="GridLinesVisibility" Value="Horizontal"/>
<Setter Property="HorizontalGridLinesBrush" Value="{StaticResource BrOutlineVariant}"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="RowHeaderWidth" Value="0"/>
<Setter Property="AutoGenerateColumns" Value="True"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
<Setter Property="CanUserResizeRows" Value="False"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="{StaticResource BrSurfaceContainerHigh}"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurfaceVariant}"/>
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Padding" Value="16,12"/>
<Setter Property="BorderBrush" Value="{StaticResource BrOutlineVariant}"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="16,10"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource BrSecondaryContainer}"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSecondaryContainer}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="DataGridRow">
<Setter Property="Margin" Value="0"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource BrSecondaryContainer}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#1A6750A4"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- =============================================================
CARD (MD3 Surface Container, 12px radius, Elevation 1)
============================================================= -->
<Style x:Key="StatCard" TargetType="Border">
<Setter Property="Background" Value="{StaticResource BrSurfaceContainer}"/>
<Setter Property="CornerRadius" Value="12"/>
<Setter Property="Padding" Value="16"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Effect" Value="{StaticResource Elevation1}"/>
</Style>
<Style x:Key="ApiCard" TargetType="Border">
<Setter Property="Background" Value="{StaticResource BrSurfaceContainerHigh}"/>
<Setter Property="CornerRadius" Value="12"/>
<Setter Property="Padding" Value="20,16"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Effect" Value="{StaticResource Elevation1}"/>
<Setter Property="Margin" Value="0,0,0,16"/>
</Style>
<Style x:Key="CardStyle" TargetType="Border">
<Setter Property="Background" Value="{StaticResource BrSurfaceContainer}"/>
<Setter Property="CornerRadius" Value="12"/>
<Setter Property="Padding" Value="16"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Effect" Value="{StaticResource Elevation1}"/>
<Setter Property="Margin" Value="0,0,0,8"/>
</Style>
<!-- =============================================================
SECTION TITLE (MD3 Title Medium)
============================================================= -->
<Style x:Key="SectionTitle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="Roboto, Segoe UI"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
<Setter Property="Margin" Value="0,0,0,8"/>
</Style>
<!-- =============================================================
SCROLLBAR (MD3 slim, OutlineVariant thumb)
============================================================= -->
<Style TargetType="ScrollBar">
<Setter Property="Width" Value="8"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollBar">
<Grid>
<Track x:Name="PART_Track" IsDirectionReversed="True">
<Track.Thumb>
<Thumb>
<Thumb.Template>
<ControlTemplate TargetType="Thumb">
<Border CornerRadius="4" Margin="2"
Background="{StaticResource BrOutlineVariant}"/>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Width" Value="Auto"/>
<Setter Property="Height" Value="8"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- =============================================================
LISTBOX (transparent background)
============================================================= -->
<Style TargetType="ListBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{StaticResource BrOnSurface}"/>
</Style>
</ResourceDictionary>