feat(ui): rebrand to Wild Dragon + Microsoft Teams layout
Replaces the Stone theme with Wild Dragon branding (canvas #0A0A0A, accent cyan #97EDF0, secondary #9AE0FD, coral alert #FB819C — sourced from wilddragon.net) and reorganizes MainWindow into a Microsoft Teams-style three-column layout: a 72px left rail (logo + Participants/Settings nav + engine-status indicator), a center content area (header + participants card), and a right settings panel.
Adds InitialsConverter so participant avatars render real initials (Brendon Power -> 'BP', '(Local)' -> 'L') instead of a generic glyph. Drops the obsolete StoneTheme.xaml; the project now ships exactly one theme dictionary.
Typography: Inter (with Segoe UI Variable Display fallback) for the sans stack, JetBrains Mono (Cascadia Mono fallback) for machine names and timecodes — matching the wilddragon.net site.
Verified live against the running Teams meeting: app launches, participant 'Brendon Power' displays with avatar, settings panel surfaces NDI groups + Hide-Local toggle, engine status pill shows green/live.
2026-05-08 00:08:39 -04:00
|
|
|
|
<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">
|
|
|
|
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
|
TeamsISO design system — Wild Dragon brand × Microsoft Teams layout.
|
|
|
|
|
|
|
|
|
|
|
|
Brand reference: wilddragon.net
|
|
|
|
|
|
Primary canvas: #0a0a0a
|
|
|
|
|
|
Accent cyan: #97EDF0
|
|
|
|
|
|
Secondary blue: #9AE0FD
|
|
|
|
|
|
Coral (errors): #FB819C
|
|
|
|
|
|
Earth (warnings): #423825
|
|
|
|
|
|
Fonts: Inter (primary), JetBrains Mono
|
|
|
|
|
|
|
|
|
|
|
|
Layout reference: Microsoft Teams desktop
|
|
|
|
|
|
- Left rail (72px) for app icon + primary nav
|
|
|
|
|
|
- Top header inside content area
|
|
|
|
|
|
- Card-based main panel with rounded corners (8-12px)
|
|
|
|
|
|
- Subtle elevation through tone, not heavy shadows
|
|
|
|
|
|
- Avatar circles for participants
|
|
|
|
|
|
|
|
|
|
|
|
Inter is not a Windows system font; we list it first and fall back to
|
|
|
|
|
|
Segoe UI Variable Display (Windows 11) and Segoe UI. JetBrains Mono
|
|
|
|
|
|
falls back to Cascadia Mono.
|
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Spacing (8px grid) ════ -->
|
|
|
|
|
|
<sys:Double x:Key="Space.XS">4</sys:Double>
|
|
|
|
|
|
<sys:Double x:Key="Space.S">8</sys:Double>
|
|
|
|
|
|
<sys:Double x:Key="Space.M">12</sys:Double>
|
|
|
|
|
|
<sys:Double x:Key="Space.L">16</sys:Double>
|
|
|
|
|
|
<sys:Double x:Key="Space.XL">24</sys:Double>
|
|
|
|
|
|
<sys:Double x:Key="Space.XXL">32</sys:Double>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Radii (Teams uses 6/8/12) ════ -->
|
|
|
|
|
|
<CornerRadius x:Key="Radius.S">6</CornerRadius>
|
|
|
|
|
|
<CornerRadius x:Key="Radius.M">8</CornerRadius>
|
|
|
|
|
|
<CornerRadius x:Key="Radius.L">12</CornerRadius>
|
|
|
|
|
|
<CornerRadius x:Key="Radius.XL">16</CornerRadius>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Wild Dragon palette (dark) ════ -->
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Canvas" Color="#0A0A0A"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Rail" Color="#080808"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Surface" Color="#141414"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.SurfaceElevated" Color="#1C1C1C"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.SurfaceHover" Color="#242424"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.SurfaceActive" Color="#2D2D2D"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Border" Color="#262626"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.BorderStrong" Color="#383838"/>
|
|
|
|
|
|
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Text.Primary" Color="#F5F5F5"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Text.Secondary" Color="#A3A3A3"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Text.Tertiary" Color="#6B6B6B"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Text.Disabled" Color="#404040"/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Accents from wilddragon.net -->
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.Cyan" Color="#97EDF0"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.CyanHover" Color="#B5F2F4"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.CyanMuted" Color="#1B3537"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.Blue" Color="#9AE0FD"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.Coral" Color="#FB819C"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Accent.CoralBg" Color="#3A1922"/>
|
|
|
|
|
|
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Status.Live" Color="#4ADE80"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Status.LiveBg" Color="#13261A"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Status.Warn" Color="#FBBF24"/>
|
|
|
|
|
|
<SolidColorBrush x:Key="Wd.Status.Error" Color="#FB819C"/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Typography ════ -->
|
2026-05-08 13:59:14 -04:00
|
|
|
|
<!--
|
|
|
|
|
|
Inter is bundled as Assets\Fonts\Inter.ttf (Variable, OFL — rsms/inter v3.19).
|
|
|
|
|
|
The pack URI loads it from this assembly's resources at runtime so we don't
|
|
|
|
|
|
depend on the user having Inter installed system-wide. Fallback chain to
|
|
|
|
|
|
Segoe UI if the resource is somehow missing.
|
|
|
|
|
|
-->
|
|
|
|
|
|
<FontFamily x:Key="Wd.Font.Sans">pack://application:,,,/Assets/Fonts/#Inter, Inter, Segoe UI Variable Display, Segoe UI, sans-serif</FontFamily>
|
feat(ui): empty-state, pipeline error/no-signal indicators, JetBrains Mono, tooltips
Four polish improvements aimed at production-floor usability.
1. Empty-state placeholder for the participants card. When Participants.Count == 0, the DataGrid is hidden in favor of a friendly 'Waiting for Teams' panel: faded dragon mark, headline, explainer, and a four-item checklist (Teams running? NDI broadcast on? Discovery group correct? Firewall clear?). New CountToVisibilityConverter (with optional 'empty' parameter to invert) drives both the placeholder and the DataGrid visibility from the same Participants.Count source.
2. Per-pipeline error / no-signal surfacing. IsoHealthStats grows an init-only State property populated from IsoPipeline.State. ParticipantViewModel.UpdateStats maps that to a StateLabel ('LIVE' / 'NO SIGNAL' / 'ERROR' / 'STARTING' / '—'). The ISO toggle button gains DataTriggers on StateLabel — coral-tinted '● ERROR' when the supervisor gives up, amber-tinted '● NO SIGNAL' when the slate threshold trips. Operators can see at a glance which pipelines are broken.
3. JetBrains Mono Variable v2.304 (OFL) bundled at Assets/Fonts/JetBrainsMono.ttf. Wd.Font.Mono now points at the embedded font so machine names, timecodes, and stat counters render in JetBrains Mono regardless of system fonts. Falls back to Cascadia Mono / Consolas if the resource is missing.
4. Tooltip pass over every interactive control in the settings panel (framerate / resolution / aspect / audio / discovery group / output group / hide-local checkbox / Apply button / per-row Output Name textbox / per-row ISO toggle). Operators learn affordances on hover instead of by trial and error.
Tests: 76/76 unit + 9/9 NDI integration green.
2026-05-08 19:32:19 -04:00
|
|
|
|
<FontFamily x:Key="Wd.Font.Mono">pack://application:,,,/Assets/Fonts/#JetBrains Mono, JetBrains Mono, Cascadia Mono, Consolas, monospace</FontFamily>
|
feat(ui): rebrand to Wild Dragon + Microsoft Teams layout
Replaces the Stone theme with Wild Dragon branding (canvas #0A0A0A, accent cyan #97EDF0, secondary #9AE0FD, coral alert #FB819C — sourced from wilddragon.net) and reorganizes MainWindow into a Microsoft Teams-style three-column layout: a 72px left rail (logo + Participants/Settings nav + engine-status indicator), a center content area (header + participants card), and a right settings panel.
Adds InitialsConverter so participant avatars render real initials (Brendon Power -> 'BP', '(Local)' -> 'L') instead of a generic glyph. Drops the obsolete StoneTheme.xaml; the project now ships exactly one theme dictionary.
Typography: Inter (with Segoe UI Variable Display fallback) for the sans stack, JetBrains Mono (Cascadia Mono fallback) for machine names and timecodes — matching the wilddragon.net site.
Verified live against the running Teams meeting: app launches, participant 'Brendon Power' displays with avatar, settings panel surfaces NDI groups + Hide-Local toggle, engine status pill shows green/live.
2026-05-08 00:08:39 -04:00
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Title" TargetType="TextBlock">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="20"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Heading" TargetType="TextBlock">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="14"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Body" TargetType="TextBlock">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="13"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Subtle" TargetType="TextBlock" BasedOn="{StaticResource Wd.Text.Body}">
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Secondary}"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Caption" TargetType="TextBlock">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="11"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="Medium"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Tertiary}"/>
|
|
|
|
|
|
<Setter Property="Typography.Capitals" Value="AllSmallCaps"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Text.Mono" TargetType="TextBlock">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Mono}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="12"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Secondary}"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="TextBlock" BasedOn="{StaticResource Wd.Text.Body}"/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Buttons ════ -->
|
|
|
|
|
|
<!-- Ghost: bordered, transparent fill -->
|
|
|
|
|
|
<Style x:Key="Wd.Button.Ghost" TargetType="Button">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="13"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="Medium"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.BorderStrong}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="14,8"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
|
|
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}"
|
|
|
|
|
|
SnapsToDevicePixels="True">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
|
|
|
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
|
|
|
|
|
Margin="{TemplateBinding Padding}"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsPressed" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceActive}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Disabled}"/>
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Opacity" Value="0.6"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Primary: cyan-on-black for the brand action -->
|
|
|
|
|
|
<Style x:Key="Wd.Button.Primary" TargetType="Button" BasedOn="{StaticResource Wd.Button.Ghost}">
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="#0A0A0A"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
|
|
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="Center"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
Margin="{TemplateBinding Padding}"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.Accent.CyanHover}"/>
|
|
|
|
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource Wd.Accent.CyanHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
2026-05-08 00:55:57 -04:00
|
|
|
|
<!--
|
|
|
|
|
|
Window-caption buttons: minimize / maximize / close. Match the Windows 11
|
|
|
|
|
|
Teams look — slim 46x32, hover-tinted, Close turns red on hover.
|
|
|
|
|
|
-->
|
|
|
|
|
|
<Style x:Key="Wd.Button.Caption" TargetType="Button">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
|
|
|
|
<Setter Property="Width" Value="46"/>
|
|
|
|
|
|
<Setter Property="Height" Value="32"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
|
|
|
|
|
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd" Background="{TemplateBinding Background}">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsPressed" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceActive}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style x:Key="Wd.Button.CaptionClose" TargetType="Button" BasedOn="{StaticResource Wd.Button.Caption}">
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd" Background="{TemplateBinding Background}">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="#C42B1C"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsPressed" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="#A52A1F"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
feat(ui): rebrand to Wild Dragon + Microsoft Teams layout
Replaces the Stone theme with Wild Dragon branding (canvas #0A0A0A, accent cyan #97EDF0, secondary #9AE0FD, coral alert #FB819C — sourced from wilddragon.net) and reorganizes MainWindow into a Microsoft Teams-style three-column layout: a 72px left rail (logo + Participants/Settings nav + engine-status indicator), a center content area (header + participants card), and a right settings panel.
Adds InitialsConverter so participant avatars render real initials (Brendon Power -> 'BP', '(Local)' -> 'L') instead of a generic glyph. Drops the obsolete StoneTheme.xaml; the project now ships exactly one theme dictionary.
Typography: Inter (with Segoe UI Variable Display fallback) for the sans stack, JetBrains Mono (Cascadia Mono fallback) for machine names and timecodes — matching the wilddragon.net site.
Verified live against the running Teams meeting: app launches, participant 'Brendon Power' displays with avatar, settings panel surfaces NDI groups + Hide-Local toggle, engine status pill shows green/live.
2026-05-08 00:08:39 -04:00
|
|
|
|
<!-- Rail-icon button: square 48x48, used on the Teams-style left rail -->
|
|
|
|
|
|
<Style x:Key="Wd.Button.RailIcon" TargetType="Button">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Secondary}"/>
|
|
|
|
|
|
<Setter Property="Width" Value="48"/>
|
|
|
|
|
|
<Setter Property="Height" Value="48"/>
|
|
|
|
|
|
<Setter Property="Margin" Value="0,4"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
|
|
|
|
|
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ISO toggle: pill, status-coded -->
|
|
|
|
|
|
<Style x:Key="Wd.Button.IsoToggle" TargetType="Button">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="11"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.BorderStrong}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="14,6"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="MinWidth" Value="84"/>
|
|
|
|
|
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="Button">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
|
|
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
|
|
|
|
CornerRadius="999">
|
|
|
|
|
|
<ContentPresenter HorizontalAlignment="Center"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
Margin="{TemplateBinding Padding}"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceActive}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ TextBox ════ -->
|
|
|
|
|
|
<Style x:Key="Wd.TextBox.Default" TargetType="TextBox">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="13"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.Surface}"/>
|
|
|
|
|
|
<Setter Property="CaretBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter Property="SelectionBrush" Value="{StaticResource Wd.Accent.CyanMuted}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Border}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="12,9"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="TextBox">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
|
|
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}">
|
|
|
|
|
|
<ScrollViewer x:Name="PART_ContentHost"
|
|
|
|
|
|
Margin="{TemplateBinding Padding}"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
Focusable="False"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsKeyboardFocused" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource Wd.BorderStrong}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
<Style TargetType="TextBox" BasedOn="{StaticResource Wd.TextBox.Default}"/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ ComboBox ════ -->
|
|
|
|
|
|
<Style x:Key="Wd.ComboToggle" TargetType="ToggleButton">
|
|
|
|
|
|
<Setter Property="OverridesDefaultStyle" Value="True"/>
|
|
|
|
|
|
<Setter Property="IsTabStop" Value="False"/>
|
|
|
|
|
|
<Setter Property="Focusable" Value="False"/>
|
|
|
|
|
|
<Setter Property="ClickMode" Value="Press"/>
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="ToggleButton">
|
|
|
|
|
|
<Path HorizontalAlignment="Right"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
Margin="0,0,14,0"
|
|
|
|
|
|
Data="M 0,0 L 4,4 L 8,0 Z"
|
|
|
|
|
|
Fill="{StaticResource Wd.Text.Secondary}"/>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="ComboBox">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="13"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.Surface}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Border}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="12,9"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="ComboBox">
|
|
|
|
|
|
<Grid>
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="{TemplateBinding Background}"
|
|
|
|
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
|
|
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}"/>
|
|
|
|
|
|
<ToggleButton Style="{StaticResource Wd.ComboToggle}"
|
|
|
|
|
|
IsChecked="{Binding IsDropDownOpen,
|
|
|
|
|
|
RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
|
|
|
|
|
|
<ContentPresenter Margin="{TemplateBinding Padding}"
|
|
|
|
|
|
IsHitTestVisible="False"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
Content="{TemplateBinding SelectionBoxItem}"
|
|
|
|
|
|
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"/>
|
|
|
|
|
|
<Popup IsOpen="{TemplateBinding IsDropDownOpen}"
|
|
|
|
|
|
Placement="Bottom"
|
|
|
|
|
|
AllowsTransparency="True"
|
|
|
|
|
|
Focusable="False"
|
|
|
|
|
|
PopupAnimation="None">
|
|
|
|
|
|
<Border Background="{StaticResource Wd.SurfaceElevated}"
|
|
|
|
|
|
BorderBrush="{StaticResource Wd.BorderStrong}"
|
|
|
|
|
|
BorderThickness="1"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.M}"
|
|
|
|
|
|
MinWidth="{TemplateBinding ActualWidth}"
|
|
|
|
|
|
MaxHeight="280"
|
|
|
|
|
|
Margin="0,4,0,0">
|
|
|
|
|
|
<ScrollViewer><ItemsPresenter/></ScrollViewer>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
</Popup>
|
|
|
|
|
|
</Grid>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource Wd.BorderStrong}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsKeyboardFocusWithin" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="ComboBoxItem">
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="12,9"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="ComboBoxItem">
|
|
|
|
|
|
<Border x:Name="Bd"
|
|
|
|
|
|
Background="Transparent"
|
|
|
|
|
|
CornerRadius="{StaticResource Radius.S}"
|
|
|
|
|
|
Margin="4,2"
|
|
|
|
|
|
Padding="{TemplateBinding Padding}">
|
|
|
|
|
|
<ContentPresenter/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsHighlighted" Value="True">
|
|
|
|
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ CheckBox ════ -->
|
|
|
|
|
|
<Style TargetType="CheckBox">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="13"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="10,0,0,0"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="CheckBox">
|
|
|
|
|
|
<StackPanel Orientation="Horizontal">
|
|
|
|
|
|
<Border x:Name="Box"
|
|
|
|
|
|
Width="18" Height="18"
|
|
|
|
|
|
BorderBrush="{StaticResource Wd.BorderStrong}"
|
|
|
|
|
|
BorderThickness="1"
|
|
|
|
|
|
Background="{StaticResource Wd.Surface}"
|
|
|
|
|
|
CornerRadius="4"
|
|
|
|
|
|
VerticalAlignment="Center">
|
|
|
|
|
|
<Path x:Name="Tick"
|
|
|
|
|
|
Data="M 4,9 L 7.5,12.5 L 14,5"
|
|
|
|
|
|
Stroke="#0A0A0A" StrokeThickness="2"
|
|
|
|
|
|
StrokeStartLineCap="Round"
|
|
|
|
|
|
StrokeEndLineCap="Round"
|
|
|
|
|
|
Visibility="Collapsed"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ContentPresenter Margin="{TemplateBinding Padding}"
|
|
|
|
|
|
VerticalAlignment="Center"/>
|
|
|
|
|
|
</StackPanel>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsChecked" Value="True">
|
|
|
|
|
|
<Setter TargetName="Box" Property="Background" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter TargetName="Box" Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter TargetName="Tick" Property="Visibility" Value="Visible"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter TargetName="Box" Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
2026-05-10 09:42:29 -04:00
|
|
|
|
<!-- ════ TabControl (settings panel) ════ -->
|
|
|
|
|
|
<!--
|
|
|
|
|
|
Lightweight, flush tabs that match the dark surface. Underline-on-active
|
|
|
|
|
|
rather than the WPF default raised-border, so the tab strip reads as a
|
|
|
|
|
|
section header rather than a separate widget.
|
|
|
|
|
|
-->
|
|
|
|
|
|
<Style TargetType="TabControl" x:Key="Wd.TabControl">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="0"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="TabControl">
|
|
|
|
|
|
<Grid>
|
|
|
|
|
|
<Grid.RowDefinitions>
|
|
|
|
|
|
<RowDefinition Height="Auto"/>
|
|
|
|
|
|
<RowDefinition Height="*"/>
|
|
|
|
|
|
</Grid.RowDefinitions>
|
|
|
|
|
|
<Border Grid.Row="0"
|
|
|
|
|
|
BorderBrush="{StaticResource Wd.Border}"
|
|
|
|
|
|
BorderThickness="0,0,0,1">
|
|
|
|
|
|
<TabPanel x:Name="HeaderPanel"
|
|
|
|
|
|
IsItemsHost="True"
|
|
|
|
|
|
Background="Transparent"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
<ContentPresenter Grid.Row="1"
|
|
|
|
|
|
ContentSource="SelectedContent"
|
|
|
|
|
|
Margin="0,16,0,0"/>
|
|
|
|
|
|
</Grid>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="TabItem" x:Key="Wd.TabItem">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="11"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="Medium"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Tertiary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="0,8,0,10"/>
|
|
|
|
|
|
<Setter Property="Margin" Value="0,0,20,0"/>
|
|
|
|
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="TabItem">
|
|
|
|
|
|
<Grid>
|
|
|
|
|
|
<Grid.RowDefinitions>
|
|
|
|
|
|
<RowDefinition Height="*"/>
|
|
|
|
|
|
<RowDefinition Height="Auto"/>
|
|
|
|
|
|
</Grid.RowDefinitions>
|
|
|
|
|
|
<ContentPresenter x:Name="Content"
|
|
|
|
|
|
Grid.Row="0"
|
|
|
|
|
|
ContentSource="Header"
|
|
|
|
|
|
HorizontalAlignment="Left"
|
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
|
TextBlock.FontFamily="{TemplateBinding FontFamily}"
|
|
|
|
|
|
TextBlock.FontSize="{TemplateBinding FontSize}"
|
|
|
|
|
|
TextBlock.FontWeight="{TemplateBinding FontWeight}"
|
|
|
|
|
|
TextBlock.Foreground="{TemplateBinding Foreground}"
|
|
|
|
|
|
Margin="{TemplateBinding Padding}"/>
|
|
|
|
|
|
<Rectangle x:Name="Underline"
|
|
|
|
|
|
Grid.Row="1"
|
|
|
|
|
|
Height="2"
|
|
|
|
|
|
Fill="{StaticResource Wd.Accent.Cyan}"
|
|
|
|
|
|
Visibility="Hidden"/>
|
|
|
|
|
|
</Grid>
|
|
|
|
|
|
<ControlTemplate.Triggers>
|
|
|
|
|
|
<Trigger Property="IsSelected" Value="True">
|
|
|
|
|
|
<Setter TargetName="Underline" Property="Visibility" Value="Visible"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Secondary}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</ControlTemplate.Triggers>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
feat(ui): rebrand to Wild Dragon + Microsoft Teams layout
Replaces the Stone theme with Wild Dragon branding (canvas #0A0A0A, accent cyan #97EDF0, secondary #9AE0FD, coral alert #FB819C — sourced from wilddragon.net) and reorganizes MainWindow into a Microsoft Teams-style three-column layout: a 72px left rail (logo + Participants/Settings nav + engine-status indicator), a center content area (header + participants card), and a right settings panel.
Adds InitialsConverter so participant avatars render real initials (Brendon Power -> 'BP', '(Local)' -> 'L') instead of a generic glyph. Drops the obsolete StoneTheme.xaml; the project now ships exactly one theme dictionary.
Typography: Inter (with Segoe UI Variable Display fallback) for the sans stack, JetBrains Mono (Cascadia Mono fallback) for machine names and timecodes — matching the wilddragon.net site.
Verified live against the running Teams meeting: app launches, participant 'Brendon Power' displays with avatar, settings panel surfaces NDI groups + Hide-Local toggle, engine status pill shows green/live.
2026-05-08 00:08:39 -04:00
|
|
|
|
<!-- ════ Card ════ -->
|
|
|
|
|
|
<Style x:Key="Wd.Card" TargetType="Border">
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.Surface}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Border}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
<Setter Property="CornerRadius" Value="{StaticResource Radius.L}"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="16"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ DataGrid (re-skinned, Teams-style) ════ -->
|
|
|
|
|
|
<Style TargetType="DataGrid">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
|
|
|
|
<Setter Property="GridLinesVisibility" Value="None"/>
|
|
|
|
|
|
<Setter Property="HeadersVisibility" Value="Column"/>
|
|
|
|
|
|
<Setter Property="RowHeight" Value="56"/>
|
|
|
|
|
|
<Setter Property="RowBackground" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="AlternatingRowBackground" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
|
|
|
|
|
|
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
|
|
|
|
|
|
<Setter Property="CanUserAddRows" Value="False"/>
|
|
|
|
|
|
<Setter Property="CanUserDeleteRows" Value="False"/>
|
|
|
|
|
|
<Setter Property="CanUserResizeRows" Value="False"/>
|
|
|
|
|
|
<Setter Property="SelectionMode" Value="Single"/>
|
|
|
|
|
|
<Setter Property="SelectionUnit" Value="FullRow"/>
|
|
|
|
|
|
<Setter Property="AutoGenerateColumns" Value="False"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="DataGridColumnHeader">
|
|
|
|
|
|
<Setter Property="FontFamily" Value="{StaticResource Wd.Font.Sans}"/>
|
|
|
|
|
|
<Setter Property="FontSize" Value="11"/>
|
|
|
|
|
|
<Setter Property="FontWeight" Value="Medium"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Tertiary}"/>
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Border}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0,0,0,1"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="14,12"/>
|
|
|
|
|
|
<Setter Property="HorizontalContentAlignment" Value="Left"/>
|
|
|
|
|
|
<Setter Property="Typography.Capitals" Value="AllSmallCaps"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="DataGridRow">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Border}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0,0,0,1"/>
|
|
|
|
|
|
<Style.Triggers>
|
|
|
|
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.SurfaceHover}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
<Trigger Property="IsSelected" Value="True">
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.SurfaceElevated}"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</Style.Triggers>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<Style TargetType="DataGridCell">
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="14,0"/>
|
|
|
|
|
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
|
|
|
|
|
<Setter Property="Foreground" Value="{StaticResource Wd.Text.Primary}"/>
|
|
|
|
|
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
|
|
|
|
|
<Setter Property="Template">
|
|
|
|
|
|
<Setter.Value>
|
|
|
|
|
|
<ControlTemplate TargetType="DataGridCell">
|
|
|
|
|
|
<Border Background="{TemplateBinding Background}"
|
|
|
|
|
|
Padding="{TemplateBinding Padding}">
|
|
|
|
|
|
<ContentPresenter VerticalAlignment="Center"/>
|
|
|
|
|
|
</Border>
|
|
|
|
|
|
</ControlTemplate>
|
|
|
|
|
|
</Setter.Value>
|
|
|
|
|
|
</Setter>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ ScrollBar (slim) ════ -->
|
|
|
|
|
|
<Style TargetType="ScrollBar">
|
|
|
|
|
|
<Setter Property="Width" Value="10"/>
|
|
|
|
|
|
<Setter Property="MinWidth" Value="10"/>
|
|
|
|
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
|
|
|
|
<Style.Triggers>
|
|
|
|
|
|
<Trigger Property="Orientation" Value="Horizontal">
|
|
|
|
|
|
<Setter Property="Height" Value="10"/>
|
|
|
|
|
|
<Setter Property="MinHeight" Value="10"/>
|
|
|
|
|
|
<Setter Property="Width" Value="Auto"/>
|
|
|
|
|
|
</Trigger>
|
|
|
|
|
|
</Style.Triggers>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Avatar (28px circle with initials) ════ -->
|
|
|
|
|
|
<Style x:Key="Wd.Avatar" TargetType="Border">
|
|
|
|
|
|
<Setter Property="Width" Value="32"/>
|
|
|
|
|
|
<Setter Property="Height" Value="32"/>
|
|
|
|
|
|
<Setter Property="CornerRadius" Value="16"/>
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.Accent.CyanMuted}"/>
|
|
|
|
|
|
<Setter Property="BorderBrush" Value="{StaticResource Wd.Accent.Cyan}"/>
|
|
|
|
|
|
<Setter Property="BorderThickness" Value="1"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ════ Status pill ════ -->
|
|
|
|
|
|
<Style x:Key="Wd.Pill" TargetType="Border">
|
|
|
|
|
|
<Setter Property="Background" Value="{StaticResource Wd.SurfaceElevated}"/>
|
|
|
|
|
|
<Setter Property="CornerRadius" Value="999"/>
|
|
|
|
|
|
<Setter Property="Padding" Value="10,4"/>
|
|
|
|
|
|
<Setter Property="HorizontalAlignment" Value="Left"/>
|
|
|
|
|
|
</Style>
|
|
|
|
|
|
|
|
|
|
|
|
</ResourceDictionary>
|