releases/src/Paca.App/Themes/Shared.xaml

1277 lines
77 KiB
XML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<!-- 폰트 (테마 무관) — 한국어 가독성 프리셋 Pretendard(UC-F12) 우선 + 폴백 체인.
브러시/폰트/토큰 참조는 DynamicResource 로 연결해 테마·폰트·설정 변경이 즉시 반영된다(UC-T04). -->
<FontFamily x:Key="UiFont">Pretendard, Segoe UI Variable Text, Segoe UI, Malgun Gothic</FontFamily>
<FontFamily x:Key="LucideFont">pack://application:,,,/Paca;component/Assets/Fonts/#lucide, pack://application:,,,/Paca.App;component/Assets/Fonts/#lucide</FontFamily>
<FontFamily x:Key="IconFont">Segoe Fluent Icons, Segoe MDL2 Assets, Segoe UI Symbol, Arial</FontFamily>
<FontFamily x:Key="MonoFont">Cascadia Mono, Consolas, Courier New</FontFamily>
<!-- ===== 디자인 토큰 (§B 타이포그래피 · §C 레이아웃 · UC-L22 지속시간) ===== -->
<sys:Double x:Key="FontSize.Base">13</sys:Double>
<sys:Double x:Key="FontSize.Small">11.5</sys:Double>
<sys:Double x:Key="FontSize.Large">16</sys:Double>
<sys:Double x:Key="FontSize.XLarge">22</sys:Double>
<sys:Double x:Key="IconSize.Small">14</sys:Double>
<sys:Double x:Key="Type.LineHeight">1.5</sys:Double>
<Thickness x:Key="Spacing.S">4,4,4,4</Thickness>
<Thickness x:Key="Spacing.M">8,8,8,8</Thickness>
<Thickness x:Key="Spacing.L">16,16,16,16</Thickness>
<CornerRadius x:Key="CornerRadius.Card">12</CornerRadius>
<Duration x:Key="Duration.Fast">0:0:0.15</Duration>
<Duration x:Key="Duration.Normal">0:0:0.3</Duration>
<!-- UC-A16/L21: ReduceMotion 켜면 App 이 Duration 토큰들을 0으로 교체해 애니메이션을 즉시 완결시킨다. -->
<sys:Boolean x:Key="ReduceMotion">False</sys:Boolean>
<!-- ===== 그림자 토큰 (UC-T23/T24) ===== -->
<DropShadowEffect x:Key="TooltipShadow" Color="#000000" Opacity="0.45" BlurRadius="14" ShadowDepth="3" Direction="270"/>
<DropShadowEffect x:Key="PopupShadow" Color="#000000" Opacity="0.22" BlurRadius="12" ShadowDepth="3" Direction="270"/>
<!-- ===== 스크롤바 썸 전용 색 (UC-T22) — 기본 토큰 (Light/Dark.xaml 테마에서 각각 최적화됨) ===== -->
<SolidColorBrush x:Key="ScrollBarThumbBrush" Color="#1E000000"/>
<SolidColorBrush x:Key="ScrollBarThumbHoverBrush" Color="#50000000"/>
<!-- ===== 탭 그룹 색 팔레트 (UC-B17) — MainWindow 탭 컨텍스트 메뉴가 사용 ===== -->
<x:Array x:Key="GroupPalette" Type="SolidColorBrush">
<SolidColorBrush Color="#E74C3C"/>
<SolidColorBrush Color="#3498DB"/>
<SolidColorBrush Color="#2ECC71"/>
<SolidColorBrush Color="#F39C12"/>
<SolidColorBrush Color="#9B59B6"/>
<SolidColorBrush Color="#E91E8C"/>
</x:Array>
<!-- 암시 스타일: FontFamily 를 여기서 강제하면 버튼 ContentPresenter 의 자동 TextBlock 이
IconFont 상속을 잃어 모든 아이콘 글리프가 tofu(□)가 된다(2026-08-18 실결함).
UI 폰트 통일은 각 창 루트의 FontFamily="{DynamicResource UiFont}" 상속으로 해결한다. -->
<Style TargetType="TextBlock">
<Setter Property="SnapsToDevicePixels" Value="True"/>
</Style>
<Style TargetType="ToolTip">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Padding" Value="10,6"/>
<!-- UC-T23 툴팁 그림자 -->
<Setter Property="Effect" Value="{StaticResource TooltipShadow}"/>
</Style>
<!-- UC-A05 키보드 포커스 링 — 모든 인터랙티브 스타일이 참조 (WCAG 2.2 SC 2.4.13 최소 2px 둘레 준수) -->
<Style x:Key="FocusVisual">
<Setter Property="Control.Margin" Value="2"/>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" StrokeThickness="2" Stroke="{DynamicResource FocusAdornerBrush}"
StrokeDashArray="4 2" SnapsToDevicePixels="True"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 공용 텍스트 스타일 (§B) ===== -->
<Style x:Key="Type.H1" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="{DynamicResource FontSize.XLarge}"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="LineHeight" Value="{DynamicResource Type.LineHeight}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Style>
<Style x:Key="Type.Body" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="{DynamicResource FontSize.Base}"/>
<Setter Property="LineHeight" Value="{DynamicResource Type.LineHeight}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="Type.Caption" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="{DynamicResource FontSize.Small}"/>
<Setter Property="Foreground" Value="{DynamicResource TextMuted}"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<!-- UC-F11 등폭 숫자 — 진행률·속도 표기에 사용 (안티지터 Tabular 고정폭 숫자 강제) -->
<Style x:Key="Type.Mono" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource MonoFont}"/>
<Setter Property="FontSize" Value="{DynamicResource FontSize.Small}"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="Typography.NumeralAlignment" Value="Tabular"/>
</Style>
<!-- UC-F19 탭 제목 -->
<Style x:Key="TabTitleStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
</Style>
<!-- 탭 닫기 전용 미니 버튼 (WCAG 2.2 SC 2.5.8 최소 24x24px 인터랙션 타깃 보장) -->
<Style x:Key="TabCloseButton" TargetType="Button">
<Setter Property="FontFamily" Value="{DynamicResource IconFont}"/>
<Setter Property="FontSize" Value="9"/>
<Setter Property="Foreground" Value="{DynamicResource TextMuted}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Width" Value="24"/>
<Setter Property="Height" Value="24"/>
<Setter Property="MinWidth" Value="24"/>
<Setter Property="MinHeight" Value="24"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="{TemplateBinding Background}" CornerRadius="5"
SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
<Setter Property="Foreground" Value="{DynamicResource AccentBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- UC-F20 상태바 텍스트 -->
<Style x:Key="StatusTextStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="11.5"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<!-- UC-N17 빈 상태 안내 -->
<Style x:Key="EmptyStateStyle" TargetType="Border">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderSubtle}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="Padding" Value="16"/>
<Setter Property="Margin" Value="8"/>
</Style>
<!-- ===== Primary 버튼 ===== -->
<Style x:Key="PrimaryButton" TargetType="Button">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="16,8"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="{DynamicResource AccentGradient}" CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True"><Setter TargetName="bd" Property="Opacity" Value="0.9"/></Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="RenderTransform"><Setter.Value><ScaleTransform ScaleX="0.97" ScaleY="0.97"/></Setter.Value></Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Opacity" Value="0.35"/>
<Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== Ghost 버튼 (심플 폰트 버튼: 투박한 헤어라인 제거, 호버 시 부드러운 톤온톤 음영) ===== -->
<Style x:Key="GhostButton" TargetType="Button">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="10,6"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
<Setter TargetName="bd" Property="RenderTransform"><Setter.Value><ScaleTransform ScaleX="0.96" ScaleY="0.96"/></Setter.Value></Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Opacity" Value="0.4"/>
<Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 아이콘 전용 버튼 (Fluent) ===== -->
<Style x:Key="IconButton" TargetType="Button" BasedOn="{StaticResource GhostButton}">
<Setter Property="FontFamily" Value="{DynamicResource IconFont}"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="8,0"/>
<Setter Property="Height" Value="32"/>
<Setter Property="MinWidth" Value="32"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
</Style>
<!-- ===== 마지막 탭 뒤에 붙는 연한 탭 형태의 새 탭 (+) 버튼 스타일 (헤어라인 테두리 없는 글래스 음영) ===== -->
<Style x:Key="NewTabButtonStyle" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource GlassBg}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Height" Value="32"/>
<Setter Property="Width" Value="34"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
<Setter Property="Margin" Value="2,0,2,0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd"
Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="8,8,0,0"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource Surface2}"/>
<Setter Property="Foreground" Value="{DynamicResource AccentTextBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="bd" Property="Opacity" Value="0.4"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 연한 새 탭 보조 (...) 버튼 스타일 ===== -->
<Style x:Key="NewTabMoreButtonStyle" TargetType="Button" BasedOn="{StaticResource NewTabButtonStyle}">
<Setter Property="Width" Value="24"/>
<Setter Property="Margin" Value="0,0,4,0"/>
</Style>
<!-- ===== Fluent 아이콘 TextBlock ===== -->
<Style x:Key="FluentIcon" TargetType="TextBlock">
<Setter Property="FontFamily" Value="{DynamicResource IconFont}"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<!-- ===== 플라이아웃/메뉴 팝업 전용 Fade 애니메이션 카드 스타일 ===== -->
<Style x:Key="FlyoutBorder" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource GlassBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="12"/>
<Setter Property="Effect" Value="{StaticResource PopupShadow}"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Opacity" Value="0"/>
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform Y="-5"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.16">
<DoubleAnimation.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" From="-5" To="0" Duration="0:0:0.16">
<DoubleAnimation.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
<!-- ===== 플라이아웃 / 설정 행 항목 스타일 (스위스 미니멀 무구분선 호버 행) ===== -->
<Style x:Key="PopupItemRow" TargetType="Border">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="CornerRadius" Value="8"/>
<Setter Property="Padding" Value="8,6"/>
<Setter Property="Margin" Value="0,1"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource CardBgHover}"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- ===== 글래스모피즘 ContextMenu ===== -->
<Style TargetType="ContextMenu">
<Setter Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource GlassBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="12.5"/>
<Setter Property="Padding" Value="4"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Grid.IsSharedSizeScope" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContextMenu">
<Border x:Name="ContextMenuBorder" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="10" Padding="{TemplateBinding Padding}"
Effect="{StaticResource PopupShadow}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.DirectionalNavigation="Cycle"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 글래스모피즘 Menu ===== -->
<Style TargetType="Menu">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Menu">
<Border Background="{TemplateBinding Background}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 수직 드롭다운 메뉴 전용 스타일 -->
<Style x:Key="VerticalMenu" TargetType="Menu" BasedOn="{StaticResource {x:Type Menu}}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 글래스모피즘 MenuItem (서브메뉴 뎁스 지원) ===== -->
<Style TargetType="MenuItem">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="FontSize" Value="12.5"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Padding" Value="10,6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="MenuItem">
<Grid>
<Border x:Name="bd" Background="{TemplateBinding Background}" CornerRadius="6" Padding="{TemplateBinding Padding}" Margin="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIconColumnGroup"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemGestureColumnGroup"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentPresenter x:Name="IconPresenter" Grid.Column="0" Content="{TemplateBinding Icon}"
Margin="0,0,8,0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<ContentPresenter x:Name="HeaderHost" Grid.Column="1" ContentSource="Header" RecognizesAccessKey="True"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="{TemplateBinding InputGestureText}"
FontFamily="{DynamicResource MonoFont}" FontSize="11"
Foreground="{DynamicResource TextMuted}"
Margin="16,0,6,0" VerticalAlignment="Center"/>
<TextBlock x:Name="SubmenuArrow" Grid.Column="3" Text="&#xE76C;" Style="{StaticResource FluentIcon}"
FontSize="10" Foreground="{DynamicResource TextMuted}"
VerticalAlignment="Center" Margin="8,0,0,0" Visibility="Collapsed"/>
</Grid>
</Border>
<Popup x:Name="PART_Popup" AllowsTransparency="True" Focusable="False"
IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
Placement="Right" HorizontalOffset="0" VerticalOffset="-4" PopupAnimation="Fade">
<Border Background="{DynamicResource CardBg}"
BorderBrush="{DynamicResource GlassBorder}"
BorderThickness="1" CornerRadius="10" Padding="4"
Effect="{StaticResource PopupShadow}" MinWidth="190">
<ScrollViewer VerticalScrollBarVisibility="Auto" MaxHeight="450">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.DirectionalNavigation="Cycle"/>
</ScrollViewer>
</Border>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<!-- 자식 서브메뉴 항목이 있으면 화살표 표시 -->
<Trigger Property="HasItems" Value="True">
<Setter TargetName="SubmenuArrow" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_Popup" Property="Placement" Value="Right"/>
<Setter TargetName="PART_Popup" Property="VerticalOffset" Value="-4"/>
<Setter TargetName="PART_Popup" Property="HorizontalOffset" Value="0"/>
</Trigger>
<Trigger Property="Role" Value="SubmenuHeader">
<Setter TargetName="SubmenuArrow" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_Popup" Property="Placement" Value="Right"/>
</Trigger>
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsSubmenuOpen" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.4"/>
<Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 글래스모피즘 Separator ===== -->
<Style TargetType="Separator">
<Setter Property="Height" Value="1"/>
<Setter Property="Margin" Value="4,3"/>
<Setter Property="Background" Value="{DynamicResource BorderSubtle}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Separator">
<Border Height="1" Background="{TemplateBinding Background}" Margin="{TemplateBinding Margin}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 윈도우 캡션 버튼 (최소화/최대화/복원) — 고정폭, 서로 밀착(네이티브 Fluent) ===== -->
<Style x:Key="CaptionButton" TargetType="Button" BasedOn="{StaticResource GhostButton}">
<Setter Property="FontFamily" Value="{DynamicResource IconFont}"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Width" Value="46"/>
<Setter Property="Height" Value="32"/>
<Setter Property="Foreground" Value="{DynamicResource TextSecondary}"/>
<Setter Property="Cursor" Value="Arrow"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="Transparent">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource BorderBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 닫기 버튼 — 빨간 호버 (Fluent 표준) ===== -->
<Style x:Key="CloseButton" TargetType="Button" BasedOn="{StaticResource CaptionButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="Transparent">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="#E81123"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 작은 카드 액션 버튼 (음영 백그라운드 폰트 버튼: 투박한 헤어라인 테두리 완전 제거) ===== -->
<Style x:Key="CardActionButton" TargetType="Button" BasedOn="{StaticResource GhostButton}">
<Setter Property="Background" Value="{DynamicResource Surface2}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Padding" Value="8,4"/>
<Setter Property="FontSize" Value="11"/>
</Style>
<!-- ===== 투명 행 버튼 ===== -->
<Style x:Key="FlatButton" TargetType="Button">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Padding" Value="10,7"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="bd" Background="Transparent" CornerRadius="7" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True"><Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/></Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 주소창 자동완성 제안 목록 ===== -->
<Style x:Key="SuggestList" TargetType="ListBox">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="MaxHeight" Value="360"/>
</Style>
<Style x:Key="SuggestItem" TargetType="ListBoxItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="bd" Background="Transparent" CornerRadius="6" Padding="6,4" Margin="2,1">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource CardBgHover}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="bd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
<Setter TargetName="bd" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/>
<Setter TargetName="bd" Property="BorderThickness" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== TextBox ===== -->
<Style x:Key="DarkTextBox" TargetType="TextBox">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Background" Value="{DynamicResource GlassBg}"/>
<Setter Property="CaretBrush" Value="{DynamicResource TextPrimary}"/>
<Setter Property="SelectionBrush" Value="{DynamicResource SelectionBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="10,8"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border x:Name="bd" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="8">
<ScrollViewer x:Name="PART_ContentHost" Margin="{TemplateBinding Padding}"
Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter TargetName="bd" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 암시적 TextBox 기본 스타일 (누락 방지 및 일관된 패딩·포커스 보장) -->
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource DarkTextBox}"/>
<!-- ===== 주소창/검색창 전용 무테두리 텍스트박스 (이중 헤어라인 방지) ===== -->
<Style x:Key="AddressTextBox" TargetType="TextBox">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="CaretBrush" Value="{DynamicResource TextPrimary}"/>
<Setter Property="SelectionBrush" Value="{DynamicResource SelectionBrush}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Padding" Value="6,2"/>
<Setter Property="FontSize" Value="12.5"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border x:Name="bd" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
<ScrollViewer x:Name="PART_ContentHost" Margin="{TemplateBinding Padding}"
Focusable="False" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 복합 검색창/입력창 일체형 컨테이너 스타일 (단일 테두리 + 포커스 하이라이트) ===== -->
<Style x:Key="SearchInputContainer" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource GlassBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="8"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource AccentBrush}"/>
<Setter Property="Background" Value="{DynamicResource CardBgHover}"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- ===== ProgressBar (UC-T10: 하드코딩 색 제거 — 테마 강조 리소스만 참조) ===== -->
<Style x:Key="AccentProgressBar" TargetType="ProgressBar">
<Setter Property="Height" Value="8"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ProgressBar">
<Grid>
<!-- PART_Track 이 있어야 ProgressBar 가 PART_Indicator 폭을(Value/Maximum 비율) 계산한다.
없으면 바가 절대 채워지지 않는 치명 결함이었음. -->
<Border x:Name="PART_Track" CornerRadius="4" Background="{DynamicResource TrackBrush}"/>
<Border x:Name="PART_Indicator" CornerRadius="4" HorizontalAlignment="Left"
Background="{DynamicResource AccentGradient}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 부정확(길이 미상) 진행률 바 ===== -->
<Style x:Key="IndeterminateBar" TargetType="ProgressBar" BasedOn="{StaticResource AccentProgressBar}">
<Setter Property="Height" Value="8"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="IsIndeterminate" Value="True"/>
</Style>
<!-- ===== Slider RepeatButton 스타일 (투명 히트박스) ===== -->
<Style x:Key="SliderRepeatButtonStyle" TargetType="{x:Type RepeatButton}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Rectangle Fill="Transparent"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== Slider Thumb 스타일 (모던 원형 알약) ===== -->
<Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Ellipse x:Name="thumbEllipse" Width="16" Height="16"
Fill="{DynamicResource AccentBrush}" Stroke="{DynamicResource PanelBg}" StrokeThickness="2"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="thumbEllipse" Property="Fill" Value="{DynamicResource AccentHoverBrush}"/>
<Setter TargetName="thumbEllipse" Property="Width" Value="18"/>
<Setter TargetName="thumbEllipse" Property="Height" Value="18"/>
</Trigger>
<Trigger Property="IsDragging" Value="true">
<Setter TargetName="thumbEllipse" Property="Fill" Value="{DynamicResource AccentHoverBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== Modern Slider 기본 스타일 ===== -->
<Style x:Key="ModernSlider" TargetType="{x:Type Slider}">
<Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Slider}">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border x:Name="TrackBackground" Grid.Row="1" Height="4" CornerRadius="2"
Background="{DynamicResource TrackBrush}" VerticalAlignment="Center"/>
<Track x:Name="PART_Track" Grid.Row="1">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource SliderRepeatButtonStyle}" Command="{x:Static Slider.DecreaseLarge}"/>
</Track.DecreaseRepeatButton>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource SliderRepeatButtonStyle}" Command="{x:Static Slider.IncreaseLarge}"/>
</Track.IncreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource SliderThumbStyle}" VerticalAlignment="Center"/>
</Track.Thumb>
</Track>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Slider}" BasedOn="{StaticResource ModernSlider}"/>
<!-- ===== Expander ToggleButton 스타일 (미니멀 화살표 링크) ===== -->
<Style x:Key="ExpanderToggleButtonStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Background="Transparent" Padding="2,2" Cursor="Hand" SnapsToDevicePixels="True">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock x:Name="Arrow" Text="&#xE70D;" Style="{StaticResource FluentIcon}"
FontSize="10" Foreground="{DynamicResource TextMuted}" Margin="0,0,5,0" VerticalAlignment="Center"/>
<ContentPresenter VerticalAlignment="Center"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Arrow" Property="Text" Value="&#xE70E;"/>
<Setter TargetName="Arrow" Property="Foreground" Value="{DynamicResource AccentTextBrush}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Arrow" Property="Foreground" Value="{DynamicResource AccentTextBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== Modern Expander 스타일 ===== -->
<Style x:Key="ModernExpander" TargetType="{x:Type Expander}">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextMuted}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Expander}">
<DockPanel LastChildFill="True">
<ToggleButton DockPanel.Dock="Top" Style="{StaticResource ExpanderToggleButtonStyle}"
IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
<ContentPresenter ContentSource="Header" RecognizesAccessKey="True"/>
</ToggleButton>
<ContentPresenter x:Name="ExpandSite" DockPanel.Dock="Bottom" Visibility="Collapsed" Focusable="False"/>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter TargetName="ExpandSite" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Expander}" BasedOn="{StaticResource ModernExpander}"/>
<!-- ===== CheckBox ===== -->
<Style x:Key="DarkCheckBox" TargetType="CheckBox">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CheckBox">
<StackPanel Orientation="Horizontal" Background="Transparent">
<Border x:Name="box" Width="18" Height="18" CornerRadius="5" Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1.5">
<Path x:Name="check" Width="10" Height="10" Stretch="Uniform" Data="M 0 5 L 4 9 L 10 0" Stroke="White" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"/>
</Border>
<ContentPresenter VerticalAlignment="Center" Margin="8,0,0,0"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="box" Property="Background" Value="{DynamicResource AccentGradient}"/>
<Setter TargetName="box" Property="BorderBrush" Value="Transparent"/>
<Setter TargetName="check" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True"><Setter TargetName="box" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/></Trigger>
<Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/></Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== RadioButton(DarkCheckBox 와 같은 모양, 라디오 그룹용) ===== -->
<Style x:Key="DarkRadioButton" TargetType="RadioButton">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<StackPanel Orientation="Horizontal" Background="Transparent">
<Border x:Name="box" Width="18" Height="18" CornerRadius="9" Background="{DynamicResource GlassBg}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1.5">
<Ellipse x:Name="dot" Width="8" Height="8" Fill="White" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed"/>
</Border>
<ContentPresenter VerticalAlignment="Center" Margin="8,0,0,0"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="box" Property="Background" Value="{DynamicResource AccentGradient}"/>
<Setter TargetName="box" Property="BorderBrush" Value="Transparent"/>
<Setter TargetName="dot" Property="Visibility" Value="Visible"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True"><Setter TargetName="box" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/></Trigger>
<Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="{DynamicResource TextDisabled}"/></Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== ComboBox ===== -->
<Style x:Key="DarkComboBox" TargetType="ComboBox">
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Background" Value="{DynamicResource GlassBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="10,6"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="Padding" Value="10,5"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="ibd" Background="Transparent" CornerRadius="5" Padding="{TemplateBinding Padding}">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ibd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ibd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<Border x:Name="MainBorder" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="8"/>
<Grid Margin="{TemplateBinding Padding}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ToggleButton x:Name="ToggleButton" Grid.ColumnSpan="2" Focusable="False" ClickMode="Press"
Background="Transparent"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="{TemplateBinding Background}"/>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<ContentPresenter x:Name="ContentSite" Grid.Column="0" IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
TextBlock.Foreground="{TemplateBinding Foreground}"
TextBlock.FontSize="{TemplateBinding FontSize}"/>
<TextBlock x:Name="arrow" Grid.Column="1" Text="&#xE70D;" Style="{StaticResource FluentIcon}"
FontSize="9" Foreground="{DynamicResource TextMuted}"
VerticalAlignment="Center" Margin="10,0,0,0" IsHitTestVisible="False"/>
</Grid>
<!-- UC-A14 팝업 내 방향키/Tab 탐색 -->
<Popup x:Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
<Border x:Name="DropDown" Background="{DynamicResource CardBg}"
BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="8" Padding="4"
MinWidth="{TemplateBinding ActualWidth}" MaxHeight="340"
Effect="{StaticResource PopupShadow}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>
</ScrollViewer>
</Border>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter TargetName="MainBorder" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 미니 인라인 ComboBox (작업공간 스위처 등 인라인 미니멀 캡슐용) ===== -->
<Style x:Key="MiniDarkComboBox" TargetType="ComboBox" BasedOn="{StaticResource DarkComboBox}">
<Setter Property="Background" Value="{DynamicResource GlassBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderSubtle}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="7,3,6,3"/>
<Setter Property="FontSize" Value="11.5"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<Setter Property="Padding" Value="8,5"/>
<Setter Property="Foreground" Value="{DynamicResource TextPrimary}"/>
<Setter Property="FontSize" Value="11.5"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="ibd" Background="Transparent" CornerRadius="6" Padding="{TemplateBinding Padding}" Margin="0,1">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ibd" Property="Background" Value="{DynamicResource CardBgHover}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ibd" Property="Background" Value="{DynamicResource AccentFadeBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<Border x:Name="MainBorder" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="6"/>
<Grid Margin="{TemplateBinding Padding}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ToggleButton x:Name="ToggleButton" Grid.ColumnSpan="3" Focusable="False" ClickMode="Press"
Background="Transparent"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="Transparent"/>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<TextBlock x:Name="icon" Grid.Column="0" Text="&#xE737;" Style="{StaticResource FluentIcon}"
FontSize="11" Foreground="{DynamicResource AccentTextBrush}"
VerticalAlignment="Center" Margin="0,0,5,0" IsHitTestVisible="False"/>
<ContentPresenter x:Name="ContentSite" Grid.Column="1" IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
VerticalAlignment="Center" HorizontalAlignment="Left"
TextBlock.Foreground="{TemplateBinding Foreground}"
TextBlock.FontSize="{TemplateBinding FontSize}"
TextBlock.FontWeight="{TemplateBinding FontWeight}"/>
<TextBlock x:Name="arrow" Grid.Column="2" Text="&#xE70D;" Style="{StaticResource FluentIcon}"
FontSize="8" Foreground="{DynamicResource TextMuted}"
VerticalAlignment="Center" Margin="5,0,0,0" IsHitTestVisible="False"/>
</Grid>
<Popup x:Name="Popup" Placement="Bottom" VerticalOffset="3" IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
<Border x:Name="DropDown" Background="{DynamicResource CardBg}"
BorderBrush="{DynamicResource GlassBorder}" BorderThickness="1" CornerRadius="8" Padding="4"
MinWidth="110" MaxHeight="300"
Effect="{StaticResource PopupShadow}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"/>
</ScrollViewer>
</Border>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="MainBorder" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter TargetName="MainBorder" Property="BorderBrush" Value="{DynamicResource GlassBorder}"/>
</Trigger>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter TargetName="MainBorder" Property="Background" Value="{DynamicResource CardBgHover}"/>
<Setter TargetName="MainBorder" Property="BorderBrush" Value="{DynamicResource AccentBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ===== 초슬림 글래스 플로팅 스크롤바 (Ultra-fine 4px Floating Glass Minimal / UC-T22) ===== -->
<Style TargetType="ScrollBar">
<Setter Property="Background" Value="{DynamicResource ScrollBarTrackBrush}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Style.Triggers>
<Trigger Property="Orientation" Value="Vertical">
<Setter Property="Width" Value="4"/>
<Setter Property="MinWidth" Value="4"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollBar">
<Grid Background="Transparent" SnapsToDevicePixels="True">
<Track Name="PART_Track" IsDirectionReversed="True">
<Track.Thumb>
<Thumb>
<Thumb.Template>
<ControlTemplate TargetType="Thumb">
<Border x:Name="ThumbBorder" CornerRadius="2" Margin="0,3,0,3"
Background="{DynamicResource ScrollBarThumbBrush}"
SnapsToDevicePixels="True"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ThumbBorder" Property="Background" Value="{DynamicResource ScrollBarThumbHoverBrush}"/>
<Setter TargetName="ThumbBorder" Property="CornerRadius" Value="2.5"/>
</Trigger>
<Trigger Property="IsDragging" Value="True">
<Setter TargetName="ThumbBorder" Property="Background" Value="{DynamicResource ScrollBarThumbDragBrush}"/>
<Setter TargetName="ThumbBorder" Property="CornerRadius" Value="2.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Width" Value="6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Height" Value="4"/>
<Setter Property="MinHeight" Value="4"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollBar">
<Grid Background="Transparent" SnapsToDevicePixels="True">
<Track Name="PART_Track" IsDirectionReversed="False">
<Track.Thumb>
<Thumb>
<Thumb.Template>
<ControlTemplate TargetType="Thumb">
<Border x:Name="ThumbBorder" CornerRadius="2" Margin="3,0,3,0"
Background="{DynamicResource ScrollBarThumbBrush}"
SnapsToDevicePixels="True"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ThumbBorder" Property="Background" Value="{DynamicResource ScrollBarThumbHoverBrush}"/>
<Setter TargetName="ThumbBorder" Property="CornerRadius" Value="2.5"/>
</Trigger>
<Trigger Property="IsDragging" Value="True">
<Setter TargetName="ThumbBorder" Property="Background" Value="{DynamicResource ScrollBarThumbDragBrush}"/>
<Setter TargetName="ThumbBorder" Property="CornerRadius" Value="2.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Height" Value="6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<!-- 전역 Floating Overlay ScrollViewer 스타일 (콘텐츠 영역 침범 없는 플로팅 룩) -->
<Style TargetType="ScrollViewer">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
CanContentScroll="{TemplateBinding CanContentScroll}"
CanHorizontallyScroll="False"
CanVerticallyScroll="False"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Grid.RowSpan="2"
Margin="{TemplateBinding Padding}"/>
<ScrollBar x:Name="PART_VerticalScrollBar"
AutomationProperties.AutomationId="VerticalScrollBar"
Cursor="Arrow" Grid.Column="1" Grid.Row="0"
Panel.ZIndex="10" Margin="0,2,2,2"
HorizontalAlignment="Right"
Maximum="{TemplateBinding ScrollableHeight}"
Minimum="0"
Orientation="Vertical"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportHeight}"/>
<ScrollBar x:Name="PART_HorizontalScrollBar"
AutomationProperties.AutomationId="HorizontalScrollBar"
Cursor="Arrow" Grid.Column="0" Grid.Row="1"
Panel.ZIndex="10" Margin="2,0,2,2"
VerticalAlignment="Bottom"
Maximum="{TemplateBinding ScrollableWidth}"
Minimum="0"
Orientation="Horizontal"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Gate 112: Passkey 2차 인증 프롬프트 모달 카드 스타일 -->
<Style x:Key="PasskeyPromptCard" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="16"/>
<Setter Property="Padding" Value="24"/>
<Setter Property="MinWidth" Value="380"/>
<Setter Property="Effect" Value="{StaticResource PopupShadow}"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<!-- Gate 113: 모바일 P2P QR 페어링 모달 보더 스타일 -->
<Style x:Key="QrPairingModalBorder" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource CardBg}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="16"/>
<Setter Property="Padding" Value="24"/>
<Setter Property="Width" Value="320"/>
<Setter Property="Height" Value="360"/>
<Setter Property="Effect" Value="{StaticResource PopupShadow}"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</ResourceDictionary>