Polish premium UI pass

This commit is contained in:
2026-06-09 23:54:10 +09:00
parent 0b53e560be
commit 4d3751f9fb
4 changed files with 238 additions and 101 deletions

View File

@@ -13,23 +13,29 @@
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" /> <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here --> <!-- Other merged dictionaries here -->
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="AppBackgroundBrush" Color="#0A0D12" /> <SolidColorBrush x:Key="AppBackgroundBrush" Color="#08070B" />
<SolidColorBrush x:Key="AppChromeBrush" Color="#111827" /> <SolidColorBrush x:Key="AppChromeBrush" Color="#0E0B13" />
<SolidColorBrush x:Key="PanelBrush" Color="#151A22" /> <SolidColorBrush x:Key="PanelBrush" Color="#141019" />
<SolidColorBrush x:Key="PanelAltBrush" Color="#1E2631" /> <SolidColorBrush x:Key="PanelAltBrush" Color="#1C1723" />
<SolidColorBrush x:Key="PanelStrokeBrush" Color="#303946" /> <SolidColorBrush x:Key="PanelElevatedBrush" Color="#211B29" />
<SolidColorBrush x:Key="TextPrimaryBrush" Color="#F6F8FB" /> <SolidColorBrush x:Key="PanelStrokeBrush" Color="#34293F" />
<SolidColorBrush x:Key="TextSecondaryBrush" Color="#C2CAD6" /> <SolidColorBrush x:Key="PanelSoftStrokeBrush" Color="#241E2D" />
<SolidColorBrush x:Key="TextMutedBrush" Color="#8290A3" /> <SolidColorBrush x:Key="TextPrimaryBrush" Color="#F8F5EE" />
<SolidColorBrush x:Key="AccentCyanBrush" Color="#45D6D1" /> <SolidColorBrush x:Key="TextSecondaryBrush" Color="#D6D0C8" />
<SolidColorBrush x:Key="AccentGreenBrush" Color="#37D67A" /> <SolidColorBrush x:Key="TextMutedBrush" Color="#9B92A8" />
<SolidColorBrush x:Key="AccentAmberBrush" Color="#FFB547" /> <SolidColorBrush x:Key="AccentCyanBrush" Color="#5FD7D3" />
<SolidColorBrush x:Key="AccentRedBrush" Color="#FF5B61" /> <SolidColorBrush x:Key="AccentGreenBrush" Color="#C8FF17" />
<SolidColorBrush x:Key="AccentVioletBrush" Color="#B48CFF" /> <SolidColorBrush x:Key="AccentAmberBrush" Color="#D9B76E" />
<SolidColorBrush x:Key="AccentRedBrush" Color="#FF626E" />
<SolidColorBrush x:Key="AccentVioletBrush" Color="#7B2CBF" />
<SolidColorBrush x:Key="AccentRoseBrush" Color="#F04C8B" />
<SolidColorBrush x:Key="LoginSurfaceBrush" Color="#F7F5EE" />
<SolidColorBrush x:Key="LoginTextBrush" Color="#17101F" />
<SolidColorBrush x:Key="LoginMutedBrush" Color="#6C6474" />
<Style x:Key="PageTitleTextStyle" TargetType="TextBlock"> <Style x:Key="PageTitleTextStyle" TargetType="TextBlock">
<Setter Property="FontFamily" Value="Bahnschrift SemiBold" /> <Setter Property="FontFamily" Value="Bahnschrift SemiBold" />
<Setter Property="FontSize" Value="30" /> <Setter Property="FontSize" Value="32" />
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" /> <Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" />
</Style> </Style>
@@ -59,22 +65,25 @@
</Style> </Style>
<Style x:Key="ActionButtonStyle" TargetType="Button"> <Style x:Key="ActionButtonStyle" TargetType="Button">
<Setter Property="Padding" Value="12,8" /> <Setter Property="MinHeight" Value="42" />
<Setter Property="CornerRadius" Value="8" /> <Setter Property="Padding" Value="15,8" />
<Setter Property="CornerRadius" Value="7" />
<Setter Property="FontFamily" Value="Bahnschrift SemiBold" /> <Setter Property="FontFamily" Value="Bahnschrift SemiBold" />
<Setter Property="BorderThickness" Value="1" />
</Style> </Style>
<Style x:Key="PrimaryActionButtonStyle" <Style x:Key="PrimaryActionButtonStyle"
TargetType="Button" TargetType="Button"
BasedOn="{StaticResource ActionButtonStyle}"> BasedOn="{StaticResource ActionButtonStyle}">
<Setter Property="Background" Value="{StaticResource AccentCyanBrush}" /> <Setter Property="Background" Value="{StaticResource AccentVioletBrush}" />
<Setter Property="Foreground" Value="#051012" /> <Setter Property="BorderBrush" Value="#77C8FF17" />
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" />
</Style> </Style>
<Style x:Key="GhostActionButtonStyle" <Style x:Key="GhostActionButtonStyle"
TargetType="Button" TargetType="Button"
BasedOn="{StaticResource ActionButtonStyle}"> BasedOn="{StaticResource ActionButtonStyle}">
<Setter Property="Background" Value="{StaticResource PanelAltBrush}" /> <Setter Property="Background" Value="{StaticResource PanelElevatedBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource PanelStrokeBrush}" /> <Setter Property="BorderBrush" Value="{StaticResource PanelStrokeBrush}" />
<Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" /> <Setter Property="Foreground" Value="{StaticResource TextPrimaryBrush}" />
</Style> </Style>

View File

@@ -2,6 +2,7 @@ using Microsoft.UI.Windowing;
using System; using System;
using System.IO; using System.IO;
using WinRT.Interop; using WinRT.Interop;
using Windows.UI;
namespace TornadoAce_CJOnStyle namespace TornadoAce_CJOnStyle
{ {
@@ -33,7 +34,7 @@ namespace TornadoAce_CJOnStyle
Title = "TornadoAce CJ OnStyle CG Automation" Title = "TornadoAce CJ OnStyle CG Automation"
}; };
ApplyWindowIcon(window); ApplyWindowChrome(window);
if (window.Content is not Frame rootFrame) if (window.Content is not Frame rootFrame)
{ {
@@ -46,14 +47,8 @@ namespace TornadoAce_CJOnStyle
window.Activate(); window.Activate();
} }
private static void ApplyWindowIcon(Window targetWindow) private static void ApplyWindowChrome(Window targetWindow)
{ {
var iconPath = Path.Combine(AppContext.BaseDirectory, "Assets", "AppIcon.ico");
if (!File.Exists(iconPath))
{
return;
}
var windowHandle = WindowNative.GetWindowHandle(targetWindow); var windowHandle = WindowNative.GetWindowHandle(targetWindow);
if (windowHandle == IntPtr.Zero) if (windowHandle == IntPtr.Zero)
{ {
@@ -61,7 +56,35 @@ namespace TornadoAce_CJOnStyle
} }
var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle); var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle);
AppWindow.GetFromWindowId(windowId)?.SetIcon(iconPath); var appWindow = AppWindow.GetFromWindowId(windowId);
if (appWindow is null)
{
return;
}
var iconPath = Path.Combine(AppContext.BaseDirectory, "Assets", "AppIcon.ico");
if (File.Exists(iconPath))
{
appWindow.SetIcon(iconPath);
}
ApplyTitleBarColors(appWindow.TitleBar);
}
private static void ApplyTitleBarColors(AppWindowTitleBar titleBar)
{
titleBar.BackgroundColor = Color.FromArgb(255, 8, 7, 11);
titleBar.ForegroundColor = Color.FromArgb(255, 248, 245, 238);
titleBar.InactiveBackgroundColor = Color.FromArgb(255, 14, 11, 19);
titleBar.InactiveForegroundColor = Color.FromArgb(255, 155, 146, 168);
titleBar.ButtonBackgroundColor = Color.FromArgb(255, 8, 7, 11);
titleBar.ButtonForegroundColor = Color.FromArgb(255, 248, 245, 238);
titleBar.ButtonHoverBackgroundColor = Color.FromArgb(255, 33, 27, 41);
titleBar.ButtonHoverForegroundColor = Color.FromArgb(255, 248, 245, 238);
titleBar.ButtonPressedBackgroundColor = Color.FromArgb(255, 52, 41, 63);
titleBar.ButtonPressedForegroundColor = Color.FromArgb(255, 200, 255, 23);
titleBar.ButtonInactiveBackgroundColor = Color.FromArgb(255, 14, 11, 19);
titleBar.ButtonInactiveForegroundColor = Color.FromArgb(255, 155, 146, 168);
} }
/// <summary> /// <summary>

View File

@@ -275,19 +275,19 @@ namespace TornadoAce_CJOnStyle.ViewModels
private void LoadStatusCards() private void LoadStatusCards()
{ {
StatusCards.Add(new StatusCardViewModel("큐시트 API", "12", "수신 대기", Symbol.Sync, Brush(0xFF45D6D1))); StatusCards.Add(new StatusCardViewModel("큐시트 API", "12", "수신 대기", Symbol.Sync, Brush(0xFF5FD7D3)));
StatusCards.Add(new StatusCardViewModel("Scene 매핑", "5", "템플릿 정의", Symbol.Map, Brush(0xFFB48CFF))); StatusCards.Add(new StatusCardViewModel("Scene 매핑", "5", "템플릿 정의", Symbol.Map, Brush(0xFFB58BFF)));
StatusCards.Add(new StatusCardViewModel("자동 검수", "98.7%", "목표 99%+", Symbol.Accept, Brush(0xFFFFB547))); StatusCards.Add(new StatusCardViewModel("자동 검수", "98.7%", "목표 99%+", Symbol.Accept, Brush(0xFFD9B76E)));
StatusCards.Add(new StatusCardViewModel("Tornado", "Adapter", "Mock SDK 경계", Symbol.Repair, Brush(0xFF37D67A))); StatusCards.Add(new StatusCardViewModel("Tornado", "Adapter", "Mock SDK 경계", Symbol.Repair, Brush(0xFFC8FF17)));
} }
private void LoadPipelineSteps() private void LoadPipelineSteps()
{ {
PipelineSteps.Add(new PipelineStepViewModel("01", "큐시트/ERP 데이터 수신", "AI ON Studio / CJ OnStyle ERP", "PoC", 55, Brush(0xFF45D6D1))); PipelineSteps.Add(new PipelineStepViewModel("01", "큐시트/ERP 데이터 수신", "AI ON Studio / CJ OnStyle ERP", "PoC", 55, Brush(0xFF5FD7D3)));
PipelineSteps.Add(new PipelineStepViewModel("02", "Data Field Mapping", "큐시트 필드 -> Tornado Scene 객체", "초안", 45, Brush(0xFFB48CFF))); PipelineSteps.Add(new PipelineStepViewModel("02", "Data Field Mapping", "큐시트 필드 -> Tornado Scene 객체", "초안", 45, Brush(0xFFB58BFF)));
PipelineSteps.Add(new PipelineStepViewModel("03", "Scene 생성/갱신", "Tornado2 우선, Tornado3 adapter ready", "PoC", 55, Brush(0xFF37D67A))); PipelineSteps.Add(new PipelineStepViewModel("03", "Scene 생성/갱신", "Tornado2 우선, Tornado3 adapter ready", "PoC", 55, Brush(0xFFC8FF17)));
PipelineSteps.Add(new PipelineStepViewModel("04", "Scene Data API 추출", "Text/Image visible object snapshot", "PoC", 50, Brush(0xFFFFB547))); PipelineSteps.Add(new PipelineStepViewModel("04", "Scene Data API 추출", "Text/Image visible object snapshot", "PoC", 50, Brush(0xFFD9B76E)));
PipelineSteps.Add(new PipelineStepViewModel("05", "자동 검수 피드백", "Text Diffing + LLM 중요도 판정", "초안", 40, Brush(0xFFFF5B61))); PipelineSteps.Add(new PipelineStepViewModel("05", "자동 검수 피드백", "Text Diffing + LLM 중요도 판정", "초안", 40, Brush(0xFFFF626E)));
} }
private void LoadFieldMappings() private void LoadFieldMappings()
@@ -320,10 +320,10 @@ namespace TornadoAce_CJOnStyle.ViewModels
private void LoadEndpoints() private void LoadEndpoints()
{ {
Endpoints.Add(new IntegrationEndpointViewModel("큐시트 플랫폼", "GET /api/cuesheets/{broadcastDate}", "AI ON Studio", "Mock", Brush(0xFF45D6D1))); Endpoints.Add(new IntegrationEndpointViewModel("큐시트 플랫폼", "GET /api/cuesheets/{broadcastDate}", "AI ON Studio", "Mock", Brush(0xFF5FD7D3)));
Endpoints.Add(new IntegrationEndpointViewModel("ERP 편성", "GET /api/schedules/{programCode}", "CJ OnStyle ERP", "Mock", Brush(0xFF37D67A))); Endpoints.Add(new IntegrationEndpointViewModel("ERP 편성", "GET /api/schedules/{programCode}", "CJ OnStyle ERP", "Mock", Brush(0xFFC8FF17)));
Endpoints.Add(new IntegrationEndpointViewModel("Tornado Scene API", "POST /api/scenes/extract", "Tornado Adapter", "Mock", Brush(0xFF37D67A))); Endpoints.Add(new IntegrationEndpointViewModel("Tornado Scene API", "POST /api/scenes/extract", "Tornado Adapter", "Mock", Brush(0xFFC8FF17)));
Endpoints.Add(new IntegrationEndpointViewModel("LLM 검수", "POST /api/inspection/llm", "Internal LLM", "정책 확인", Brush(0xFFB48CFF))); Endpoints.Add(new IntegrationEndpointViewModel("LLM 검수", "POST /api/inspection/llm", "Internal LLM", "정책 확인", Brush(0xFFB58BFF)));
} }
private void LoadTornadoAdapterChecks() private void LoadTornadoAdapterChecks()
@@ -342,18 +342,18 @@ namespace TornadoAce_CJOnStyle.ViewModels
check.Name, check.Name,
check.Status, check.Status,
check.Evidence, check.Evidence,
check.Status == "준비" ? Brush(0xFFFFB547) : Brush(0xFF37D67A))); check.Status == "준비" ? Brush(0xFFD9B76E) : Brush(0xFFC8FF17)));
} }
} }
private void LoadRequirementCoverage() private void LoadRequirementCoverage()
{ {
RequirementCoverage.Add(new PocRequirementViewModel("RFP-01", "큐시트 API 연동", "PoC", "JSON Mock 수신", Brush(0xFF45D6D1))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-01", "큐시트 API 연동", "PoC", "JSON Mock 수신", Brush(0xFF5FD7D3)));
RequirementCoverage.Add(new PocRequirementViewModel("RFP-02", "ERP 편성 연동", "PoC", "편성 JSON 매칭", Brush(0xFF37D67A))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-02", "ERP 편성 연동", "PoC", "편성 JSON 매칭", Brush(0xFFC8FF17)));
RequirementCoverage.Add(new PocRequirementViewModel("RFP-03", "Data Field Mapping", "PoC", "Scene 스냅샷 생성", Brush(0xFF37D67A))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-03", "Data Field Mapping", "PoC", "Scene 스냅샷 생성", Brush(0xFFC8FF17)));
RequirementCoverage.Add(new PocRequirementViewModel("RFP-04", "Tornado Scene API", "PoC", "Mock adapter 추출", Brush(0xFF37D67A))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-04", "Tornado Scene API", "PoC", "Mock adapter 추출", Brush(0xFFC8FF17)));
RequirementCoverage.Add(new PocRequirementViewModel("RFP-05", "관리자 매핑 기능", "PoC", "프로파일 검증", Brush(0xFF37D67A))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-05", "관리자 매핑 기능", "PoC", "프로파일 검증", Brush(0xFFC8FF17)));
RequirementCoverage.Add(new PocRequirementViewModel("RFP-06", "1·2단계 자동 검수", "PoC", "필드 상세 Diff + LLM 후보", Brush(0xFF45D6D1))); RequirementCoverage.Add(new PocRequirementViewModel("RFP-06", "1·2단계 자동 검수", "PoC", "필드 상세 Diff + LLM 후보", Brush(0xFF5FD7D3)));
} }
private void LoadScheduleMatches() private void LoadScheduleMatches()
@@ -371,7 +371,7 @@ namespace TornadoAce_CJOnStyle.ViewModels
schedule?.ProgramCode ?? "-", schedule?.ProgramCode ?? "-",
schedule is null ? "편성 미확인" : $"{schedule.MerchandiserName} / {schedule.ProductCategory}", schedule is null ? "편성 미확인" : $"{schedule.MerchandiserName} / {schedule.ProductCategory}",
isMatched ? "매칭" : "확인", isMatched ? "매칭" : "확인",
isMatched ? Brush(0xFF37D67A) : Brush(0xFFFFB547))); isMatched ? Brush(0xFFC8FF17) : Brush(0xFFD9B76E)));
} }
} }
@@ -471,9 +471,9 @@ namespace TornadoAce_CJOnStyle.ViewModels
{ {
return severity switch return severity switch
{ {
"High" => Brush(0xFFFF5B61), "High" => Brush(0xFFFF626E),
"Medium" => Brush(0xFFFFB547), "Medium" => Brush(0xFFD9B76E),
_ => Brush(0xFF37D67A) _ => Brush(0xFFC8FF17)
}; };
} }

View File

@@ -37,13 +37,33 @@
RequestedTheme="Dark" RequestedTheme="Dark"
Visibility="{x:Bind ViewModel.MainShellVisibility, Mode=OneWay}"> Visibility="{x:Bind ViewModel.MainShellVisibility, Mode=OneWay}">
<NavigationView.PaneHeader> <NavigationView.PaneHeader>
<StackPanel Margin="12,18,12,12" Spacing="4"> <StackPanel Margin="12,18,12,12" Spacing="8">
<TextBlock Style="{StaticResource LabelTextStyle}" Text="TORNADOACE" /> <Grid ColumnSpacing="10">
<TextBlock <Grid.ColumnDefinitions>
FontFamily="Bahnschrift SemiBold" <ColumnDefinition Width="Auto" />
FontSize="16" <ColumnDefinition Width="*" />
Foreground="{StaticResource TextPrimaryBrush}" </Grid.ColumnDefinitions>
Text="CJ OnStyle" /> <Border
Width="34"
Height="34"
Background="{StaticResource PanelElevatedBrush}"
BorderBrush="#55C8FF17"
BorderThickness="1"
CornerRadius="7">
<Image
Width="24"
Height="24"
Source="ms-appx:///Assets/TornadoAceAppIcon.png" />
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Style="{StaticResource LabelTextStyle}" Text="TORNADOACE" />
<TextBlock
FontFamily="Bahnschrift SemiBold"
FontSize="16"
Foreground="{StaticResource TextPrimaryBrush}"
Text="CJ OnStyle" />
</StackPanel>
</Grid>
<TextBlock <TextBlock
Style="{StaticResource LabelTextStyle}" Style="{StaticResource LabelTextStyle}"
Text="{x:Bind ViewModel.BuildPhase, Mode=OneWay}" /> Text="{x:Bind ViewModel.BuildPhase, Mode=OneWay}" />
@@ -104,7 +124,19 @@
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Spacing="6"> <StackPanel Spacing="8">
<StackPanel Orientation="Horizontal" Spacing="9">
<Border
Width="34"
Height="2"
VerticalAlignment="Center"
Background="{StaticResource AccentGreenBrush}" />
<TextBlock
FontFamily="Bahnschrift SemiBold"
FontSize="12"
Foreground="{StaticResource AccentAmberBrush}"
Text="CJ ONSTYLE / TORNADOACE" />
</StackPanel>
<TextBlock <TextBlock
Style="{StaticResource PageTitleTextStyle}" Style="{StaticResource PageTitleTextStyle}"
Text="CG 제작 자동화 컨트롤" /> Text="CG 제작 자동화 컨트롤" />
@@ -116,12 +148,22 @@
<StackPanel <StackPanel
Grid.Column="1" Grid.Column="1"
Width="372"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Spacing="8" Spacing="8"
VerticalAlignment="Top"> VerticalAlignment="Top">
<StackPanel Orientation="Horizontal" Spacing="10"> <Grid ColumnSpacing="8" RowSpacing="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button <Button
Command="{x:Bind ViewModel.RunPocCommand}" Command="{x:Bind ViewModel.RunPocCommand}"
HorizontalAlignment="Stretch"
Style="{StaticResource PrimaryActionButtonStyle}"> Style="{StaticResource PrimaryActionButtonStyle}">
<StackPanel Orientation="Horizontal" Spacing="7"> <StackPanel Orientation="Horizontal" Spacing="7">
<SymbolIcon Symbol="Play" /> <SymbolIcon Symbol="Play" />
@@ -129,7 +171,9 @@
</StackPanel> </StackPanel>
</Button> </Button>
<Button <Button
Grid.Column="1"
Command="{x:Bind ViewModel.RefreshCueSheetCommand}" Command="{x:Bind ViewModel.RefreshCueSheetCommand}"
HorizontalAlignment="Stretch"
Style="{StaticResource GhostActionButtonStyle}"> Style="{StaticResource GhostActionButtonStyle}">
<StackPanel Orientation="Horizontal" Spacing="7"> <StackPanel Orientation="Horizontal" Spacing="7">
<SymbolIcon Symbol="Refresh" /> <SymbolIcon Symbol="Refresh" />
@@ -137,7 +181,9 @@
</StackPanel> </StackPanel>
</Button> </Button>
<Button <Button
Grid.Row="1"
Command="{x:Bind ViewModel.GenerateSceneCommand}" Command="{x:Bind ViewModel.GenerateSceneCommand}"
HorizontalAlignment="Stretch"
Style="{StaticResource GhostActionButtonStyle}"> Style="{StaticResource GhostActionButtonStyle}">
<StackPanel Orientation="Horizontal" Spacing="7"> <StackPanel Orientation="Horizontal" Spacing="7">
<SymbolIcon Symbol="Play" /> <SymbolIcon Symbol="Play" />
@@ -145,14 +191,17 @@
</StackPanel> </StackPanel>
</Button> </Button>
<Button <Button
Grid.Row="1"
Grid.Column="1"
Command="{x:Bind ViewModel.RunInspectionCommand}" Command="{x:Bind ViewModel.RunInspectionCommand}"
HorizontalAlignment="Stretch"
Style="{StaticResource GhostActionButtonStyle}"> Style="{StaticResource GhostActionButtonStyle}">
<StackPanel Orientation="Horizontal" Spacing="7"> <StackPanel Orientation="Horizontal" Spacing="7">
<SymbolIcon Symbol="Accept" /> <SymbolIcon Symbol="Accept" />
<TextBlock Text="검수 실행" /> <TextBlock Text="검수 실행" />
</StackPanel> </StackPanel>
</Button> </Button>
</StackPanel> </Grid>
<TextBlock <TextBlock
HorizontalAlignment="Right" HorizontalAlignment="Right"
Style="{StaticResource LabelTextStyle}" Style="{StaticResource LabelTextStyle}"
@@ -186,10 +235,12 @@
<Border <Border
Width="34" Width="34"
Height="34" Height="34"
Background="{x:Bind AccentBrush}" Background="{StaticResource PanelElevatedBrush}"
BorderBrush="{x:Bind AccentBrush}"
BorderThickness="1"
CornerRadius="8"> CornerRadius="8">
<SymbolIcon <SymbolIcon
Foreground="#071013" Foreground="{x:Bind AccentBrush}"
Symbol="{x:Bind Icon}" /> Symbol="{x:Bind Icon}" />
</Border> </Border>
<StackPanel Grid.Column="1" Spacing="4"> <StackPanel Grid.Column="1" Spacing="4">
@@ -254,13 +305,15 @@
<Border <Border
Width="34" Width="34"
Height="34" Height="34"
Background="{x:Bind AccentBrush}" Background="{StaticResource PanelElevatedBrush}"
BorderBrush="{x:Bind AccentBrush}"
BorderThickness="1"
CornerRadius="8"> CornerRadius="8">
<TextBlock <TextBlock
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
FontFamily="Cascadia Mono" FontFamily="Cascadia Mono"
Foreground="#071013" Foreground="{x:Bind AccentBrush}"
Text="{x:Bind StepNumber}" /> Text="{x:Bind StepNumber}" />
</Border> </Border>
<StackPanel Grid.Column="1" Spacing="5"> <StackPanel Grid.Column="1" Spacing="5">
@@ -307,6 +360,8 @@
<Border <Border
Padding="10,8" Padding="10,8"
Background="{StaticResource PanelAltBrush}" Background="{StaticResource PanelAltBrush}"
BorderBrush="{StaticResource PanelSoftStrokeBrush}"
BorderThickness="1"
CornerRadius="8"> CornerRadius="8">
<Grid ColumnSpacing="10"> <Grid ColumnSpacing="10">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -899,18 +954,18 @@
<StackPanel <StackPanel
MaxWidth="620" MaxWidth="620"
Spacing="16" Spacing="14"
VerticalAlignment="Bottom"> VerticalAlignment="Bottom">
<TextBlock <TextBlock
FontFamily="Bahnschrift SemiBold" FontFamily="Bahnschrift SemiBold"
FontSize="13" FontSize="13"
Foreground="#D7D0B7FF" Foreground="#E8D9B76E"
Text="CJ ONSTYLE" /> Text="CJ ONSTYLE" />
<TextBlock <TextBlock
FontFamily="Bahnschrift SemiBold" FontFamily="Bahnschrift SemiBold"
FontSize="58" FontSize="62"
Foreground="White" Foreground="White"
LineHeight="64" LineHeight="66"
Text="TornadoAce" Text="TornadoAce"
TextWrapping="WrapWholeWords" /> TextWrapping="WrapWholeWords" />
<TextBlock <TextBlock
@@ -924,32 +979,57 @@
<Border <Border
Grid.Column="1" Grid.Column="1"
Padding="24" Padding="26"
Background="#F5FFFFFF" Background="{StaticResource LoginSurfaceBrush}"
BorderBrush="#33FFFFFF" BorderBrush="#66D9B76E"
BorderThickness="1" BorderThickness="1"
CornerRadius="8"> CornerRadius="8">
<StackPanel Spacing="14"> <StackPanel Spacing="16">
<TextBlock <Grid ColumnSpacing="12">
FontFamily="Bahnschrift" <Grid.ColumnDefinitions>
FontSize="12" <ColumnDefinition Width="Auto" />
Foreground="#7B2CBF" <ColumnDefinition Width="*" />
Text="CJ ONSTYLE" /> </Grid.ColumnDefinitions>
<TextBlock <Border
FontFamily="Bahnschrift SemiBold" Width="46"
FontSize="24" Height="46"
Foreground="#15101A" Background="#17101F"
Text="TornadoAce" /> BorderBrush="#55C8FF17"
BorderThickness="1"
CornerRadius="8">
<Image
Width="32"
Height="32"
Source="ms-appx:///Assets/TornadoAceAppIcon.png" />
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock
FontFamily="Bahnschrift"
FontSize="12"
Foreground="{StaticResource AccentVioletBrush}"
Text="CJ ONSTYLE" />
<TextBlock
FontFamily="Bahnschrift SemiBold"
FontSize="24"
Foreground="{StaticResource LoginTextBrush}"
Text="TornadoAce" />
</StackPanel>
</Grid>
<Border Height="1" Background="#2217101F" />
<StackPanel Spacing="6"> <StackPanel Spacing="6">
<TextBlock <TextBlock
FontFamily="Bahnschrift SemiBold" FontFamily="Bahnschrift SemiBold"
FontSize="12" FontSize="12"
Foreground="#62606A" Foreground="{StaticResource LoginMutedBrush}"
Text="아이디" /> Text="아이디" />
<TextBox <TextBox
x:Name="OperatorNameTextBox" x:Name="OperatorNameTextBox"
MinHeight="42" MinHeight="42"
Background="White"
BorderBrush="#2517101F"
Foreground="{StaticResource LoginTextBrush}"
PlaceholderText="operator" PlaceholderText="operator"
Text="{x:Bind ViewModel.LoginOperatorName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> Text="{x:Bind ViewModel.LoginOperatorName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel> </StackPanel>
@@ -958,11 +1038,14 @@
<TextBlock <TextBlock
FontFamily="Bahnschrift SemiBold" FontFamily="Bahnschrift SemiBold"
FontSize="12" FontSize="12"
Foreground="#62606A" Foreground="{StaticResource LoginMutedBrush}"
Text="패스워드" /> Text="패스워드" />
<PasswordBox <PasswordBox
x:Name="OperatorPasswordBox" x:Name="OperatorPasswordBox"
MinHeight="42" MinHeight="42"
Background="White"
BorderBrush="#2517101F"
Foreground="{StaticResource LoginTextBrush}"
PlaceholderText="access code" /> PlaceholderText="access code" />
</StackPanel> </StackPanel>
@@ -970,7 +1053,9 @@
MinHeight="44" MinHeight="44"
Margin="0,4,0,0" Margin="0,4,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Background="#341069" Background="{StaticResource AccentVioletBrush}"
BorderBrush="#88C8FF17"
BorderThickness="1"
Click="LoginButton_Click" Click="LoginButton_Click"
CornerRadius="5" CornerRadius="5"
Foreground="White"> Foreground="White">
@@ -994,28 +1079,48 @@
Visibility="{x:Bind ViewModel.LaunchScreenVisibility, Mode=OneWay}"> Visibility="{x:Bind ViewModel.LaunchScreenVisibility, Mode=OneWay}">
<Border <Border
Width="420" Width="420"
Padding="22" Padding="24"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="#F7FFFFFF" Background="{StaticResource LoginSurfaceBrush}"
BorderBrush="#E5FFFFFF" BorderBrush="#66D9B76E"
BorderThickness="1" BorderThickness="1"
CornerRadius="8"> CornerRadius="8">
<StackPanel Spacing="12"> <StackPanel Spacing="12">
<TextBlock <Grid ColumnSpacing="12">
FontFamily="Bahnschrift" <Grid.ColumnDefinitions>
FontSize="12" <ColumnDefinition Width="Auto" />
Foreground="#7B2CBF" <ColumnDefinition Width="*" />
Text="TORNADOACE" /> </Grid.ColumnDefinitions>
<TextBlock <Border
FontFamily="Bahnschrift SemiBold" Width="42"
FontSize="22" Height="42"
Foreground="#15101A" Background="#17101F"
Text="CJ OnStyle CG Automation" /> BorderBrush="#55C8FF17"
BorderThickness="1"
CornerRadius="8">
<Image
Width="28"
Height="28"
Source="ms-appx:///Assets/TornadoAceAppIcon.png" />
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock
FontFamily="Bahnschrift"
FontSize="12"
Foreground="{StaticResource AccentVioletBrush}"
Text="TORNADOACE" />
<TextBlock
FontFamily="Bahnschrift SemiBold"
FontSize="22"
Foreground="{StaticResource LoginTextBrush}"
Text="CJ OnStyle CG Automation" />
</StackPanel>
</Grid>
<TextBlock <TextBlock
FontFamily="Bahnschrift" FontFamily="Bahnschrift"
FontSize="14" FontSize="14"
Foreground="#62606A" Foreground="{StaticResource LoginMutedBrush}"
Text="{x:Bind ViewModel.LaunchMessage, Mode=OneWay}" Text="{x:Bind ViewModel.LaunchMessage, Mode=OneWay}"
TextWrapping="WrapWholeWords" /> TextWrapping="WrapWholeWords" />
<ProgressBar <ProgressBar