1262 lines
63 KiB
XML
1262 lines
63 KiB
XML
<!--
|
||
ClaudeDo component styles for Avalonia.
|
||
Depends on Tokens.axaml being merged first.
|
||
|
||
How to use each style:
|
||
<Border Classes="island"> — floating island container
|
||
<Border Classes="chip running"> — status chip
|
||
<Button Classes="icon-btn"> — 24×24 icon button (icon colour: never inline,
|
||
see "ICON PAINTING" below)
|
||
<Button Classes="btn primary"> — rounded-rect button
|
||
<TextBlock Classes="eyebrow"> — uppercase mono label
|
||
<Border Classes="terminal"> — terminal/log window
|
||
-->
|
||
<Styles xmlns="https://github.com/avaloniaui"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SHARED RESOURCES -->
|
||
<!-- ============================================================ -->
|
||
<Styles.Resources>
|
||
<!-- Badge brushes -->
|
||
<SolidColorBrush x:Key="DraftBadgeBrush" Color="{StaticResource TextMuteColor}"/>
|
||
<SolidColorBrush x:Key="PlanningBadgeBrush" Color="{StaticResource PeatColor}"/>
|
||
<SolidColorBrush x:Key="PlannedBadgeBrush" Color="{StaticResource SageColor}"/>
|
||
<SolidColorBrush x:Key="ManualBadgeBrush" Color="{StaticResource TextFaintColor}"/>
|
||
|
||
</Styles.Resources>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- TITLE BAR CONTROLS -->
|
||
<!-- ============================================================ -->
|
||
|
||
<Style Selector="Button.title-ctrl">
|
||
<Setter Property="Width" Value="36" />
|
||
<Setter Property="Height" Value="36" />
|
||
<Setter Property="Padding" Value="0" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="CornerRadius" Value="0" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||
</Style>
|
||
<Style Selector="Button.title-ctrl:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="Button.title-ctrl.close:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource BloodBrush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- ISLAND -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.island">
|
||
<Setter Property="Background" Value="{StaticResource IslandBackgroundBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource HairlineOverlayBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource IslandCornerRadius}" />
|
||
<Setter Property="BoxShadow" Value="{StaticResource IslandShadow}" />
|
||
<Setter Property="ClipToBounds" Value="True" />
|
||
</Style>
|
||
|
||
<!-- Island header separator (apply on the header Border inside an island) -->
|
||
<Style Selector="Border.island-header">
|
||
<Setter Property="Padding" Value="{StaticResource IslandHeaderPadding}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- CHIPS / BADGES -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.chip">
|
||
<Setter Property="CornerRadius" Value="{StaticResource ChipCornerRadius}" />
|
||
<Setter Property="Padding" Value="8,3" />
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
</Style>
|
||
<Style Selector="Border.chip > TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- Status variants — tint background 12% alpha of the status hue -->
|
||
<Style Selector="Border.chip.running">
|
||
<Setter Property="Background" Value="{StaticResource RunningTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource RunningTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.running > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusRunningBrush}" />
|
||
</Style>
|
||
|
||
<Style Selector="Border.chip.review">
|
||
<Setter Property="Background" Value="{StaticResource ReviewTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource ReviewTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.review > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusReviewBrush}" />
|
||
</Style>
|
||
|
||
<Style Selector="Border.chip.children">
|
||
<Setter Property="Background" Value="#332A1A" />
|
||
<Setter Property="BorderBrush" Value="#4D3A1A" />
|
||
</Style>
|
||
<Style Selector="Border.chip.children > TextBlock">
|
||
<Setter Property="Foreground" Value="#E0A030" />
|
||
</Style>
|
||
|
||
<Style Selector="Border.chip.error">
|
||
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.error > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusErrorBrush}" />
|
||
</Style>
|
||
|
||
<!-- queued → Sage (#8B9D7A) -->
|
||
<Style Selector="Border.chip.queued">
|
||
<Setter Property="Background" Value="{StaticResource QueuedTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource QueuedTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.queued > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusQueuedBrush}" />
|
||
</Style>
|
||
|
||
<!-- waiting → muted amber: a Queued task blocked on an unmet predecessor (a task_dependencies
|
||
edge, or the planning chain's BlockedByTaskId) — distinct from queued (unblocked, next up
|
||
to run) and from children (a parent waiting on its own subtasks). Mutually exclusive with
|
||
.queued on the same chip (IsQueued/IsWaiting), so no declaration-order fight between them. -->
|
||
<Style Selector="Border.chip.waiting">
|
||
<Setter Property="Background" Value="#332F1A" />
|
||
<Setter Property="BorderBrush" Value="#4D451A" />
|
||
</Style>
|
||
<Style Selector="Border.chip.waiting > TextBlock">
|
||
<Setter Property="Foreground" Value="#C9A227" />
|
||
</Style>
|
||
|
||
<!-- done → green (#6FA86B) -->
|
||
<Style Selector="Border.chip.done">
|
||
<Setter Property="Background" Value="{StaticResource DoneTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource DoneTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.done > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusDoneBrush}" />
|
||
</Style>
|
||
|
||
<!-- idle → TextMute (#6B7973) -->
|
||
<Style Selector="Border.chip.idle">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.idle > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
|
||
<!-- parked → slate-blue: an Idle task still holding its Active worktree -->
|
||
<Style Selector="Border.chip.parked">
|
||
<Setter Property="Background" Value="#22303A" />
|
||
<Setter Property="BorderBrush" Value="#3A5060" />
|
||
</Style>
|
||
<Style Selector="Border.chip.parked > TextBlock">
|
||
<Setter Property="Foreground" Value="#8FB9D6" />
|
||
</Style>
|
||
|
||
<!-- interactive → accent, the "live" family shared with running: the task has a ConPTY session
|
||
open in Mission Control. Clickable (jumps to that pane), hence the hand cursor + hover lift.
|
||
Deliberately NOT the slate-blue parked treatment — telling the two apart is the whole point. -->
|
||
<Style Selector="Border.chip.interactive">
|
||
<Setter Property="Background" Value="{StaticResource RunningTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
</Style>
|
||
<Style Selector="Border.chip.interactive > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.interactive:pointerover">
|
||
<Setter Property="Background" Value="{StaticResource AccentSoftBrush}" />
|
||
</Style>
|
||
|
||
<!-- Worktree-state chips (worktrees overview) -->
|
||
<!-- active → slate-blue (same hue as parked: a live worktree) -->
|
||
<Style Selector="Border.chip.wt-active">
|
||
<Setter Property="Background" Value="#22303A" />
|
||
<Setter Property="BorderBrush" Value="#3A5060" />
|
||
</Style>
|
||
<Style Selector="Border.chip.wt-active > TextBlock">
|
||
<Setter Property="Foreground" Value="#8FB9D6" />
|
||
</Style>
|
||
|
||
<!-- merged → green -->
|
||
<Style Selector="Border.chip.wt-merged">
|
||
<Setter Property="Background" Value="{StaticResource DoneTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource DoneTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.wt-merged > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusDoneBrush}" />
|
||
</Style>
|
||
|
||
<!-- kept → amber -->
|
||
<Style Selector="Border.chip.wt-kept">
|
||
<Setter Property="Background" Value="{StaticResource ReviewTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource ReviewTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.wt-kept > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource StatusReviewBrush}" />
|
||
</Style>
|
||
|
||
<!-- discarded → muted gray (same as idle) -->
|
||
<Style Selector="Border.chip.wt-discarded">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.chip.wt-discarded > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- BUTTONS -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Button.btn">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="10,6" />
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
<Setter Property="Transitions">
|
||
<Transitions>
|
||
<BrushTransition Property="Background" Duration="0:0:0.12" />
|
||
<BrushTransition Property="BorderBrush" Duration="0:0:0.12" />
|
||
</Transitions>
|
||
</Setter>
|
||
</Style>
|
||
<Style Selector="Button.btn:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrightBrush}" />
|
||
</Style>
|
||
|
||
<!-- Icon button: 24×24 square with hover surface. The ToggleButton variant is the same
|
||
chrome for a persisted on/off control (its "on" state is the :checked rule below). -->
|
||
<Style Selector="Button.icon-btn, ToggleButton.icon-btn">
|
||
<Setter Property="Width" Value="24" />
|
||
<Setter Property="Height" Value="24" />
|
||
<Setter Property="Padding" Value="0" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="CornerRadius" Value="6" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||
</Style>
|
||
<!-- Fluent paints disabled buttons with its own gray background — keep icon buttons transparent.
|
||
Declared *before* :pointerover so a disabled button still gets the hover surface: it's the
|
||
only feedback that the button exists at all, and its tooltip explains why it won't act. -->
|
||
<Style Selector="Button.icon-btn:disabled /template/ ContentPresenter, ToggleButton.icon-btn:disabled /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
</Style>
|
||
<Style Selector="Button.icon-btn:pointerover /template/ ContentPresenter, ToggleButton.icon-btn:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="ToggleButton.icon-btn:checked /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- ══ ICON PAINTING — the one place icon colour is decided ══════════════════
|
||
NEVER set Foreground/Stroke on an icon inline. A local value outranks every
|
||
style, so the button's hover/checked/disabled states can't reach the icon and
|
||
it stays dead on hover. Pick the colour with a class instead:
|
||
|
||
<PathIcon Data="{Binding Source='mdi:Close', Converter={StaticResource IconKey}}"/> neutral (mute → text)
|
||
<PathIcon Classes="danger" .../> destructive (blood → bright)
|
||
|
||
Selectors are class-only (".icon-btn"), so Button and ToggleButton share them.
|
||
Order is the whole mechanism (Avalonia has no specificity — the last matching
|
||
rule wins), so the sequence below is: rest → hover → lit (.on/.active/:checked
|
||
stay lit under the pointer) → :disabled → .danger (red in every state). -->
|
||
|
||
<!-- rest -->
|
||
<Style Selector=".icon-btn PathIcon, .new-list-btn PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
<!-- an unset star is barely there until you hover the row -->
|
||
<Style Selector=".icon-btn.star-btn PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
</Style>
|
||
|
||
<!-- diff file tree: folders stay neutral, file icons take the change-kind colour via Tag (A/D/M/R) -->
|
||
<Style Selector="PathIcon.tree-icon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
<Style Selector="PathIcon.tree-icon[Tag=A]">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrush}" />
|
||
</Style>
|
||
<Style Selector="PathIcon.tree-icon[Tag=D]">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
<Style Selector="PathIcon.tree-icon[Tag=M]">
|
||
<Setter Property="Foreground" Value="{StaticResource PeatBrush}" />
|
||
</Style>
|
||
<Style Selector="PathIcon.tree-icon[Tag=R]">
|
||
<Setter Property="Foreground" Value="{StaticResource SageBrush}" />
|
||
</Style>
|
||
|
||
<!-- hover -->
|
||
<Style Selector=".icon-btn:pointerover PathIcon, .new-list-btn:pointerover PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<!-- lit: on/active/checked keep their colour under the pointer -->
|
||
<Style Selector=".icon-btn.star-btn.on PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource PeatBrush}" />
|
||
</Style>
|
||
<Style Selector=".icon-btn.active PathIcon, .icon-btn:checked PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- disabled greys out every neutral variant -->
|
||
<Style Selector=".icon-btn:disabled PathIcon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
</Style>
|
||
|
||
<!-- …except danger, which is last on purpose: a destructive action stays red in every state,
|
||
including disabled. Greying it out makes the button read as broken rather than blocked. -->
|
||
<Style Selector=".icon-btn PathIcon.danger">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
<Style Selector=".icon-btn:pointerover PathIcon.danger">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrightBrush}" />
|
||
</Style>
|
||
|
||
<!-- Segmented switch: one control, mutually exclusive segments, active one highlighted.
|
||
Use for picking a mode (not for independent on/off flags — those are icon toggles). -->
|
||
<Style Selector="Border.segmented">
|
||
<Setter Property="Background" Value="{StaticResource DeepBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="2" />
|
||
</Style>
|
||
<Style Selector="Border.segmented Button.segment">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="10,4" />
|
||
<Setter Property="CornerRadius" Value="4" />
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.segmented Button.segment:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<!-- Declared after :pointerover so hovering the active segment keeps the active look. -->
|
||
<Style Selector="Border.segmented Button.segment.active /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- INPUTS -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="TextBox.search">
|
||
<Setter Property="Background" Value="{StaticResource DeepBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource InputCornerRadius}" />
|
||
<Setter Property="Padding" Value="10,8" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="CaretBrush" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBox.search:focus /template/ Border#PART_BorderElement">
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="BoxShadow" Value="0 0 0 3 #387C9166" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- FLAT BUTTON — replaces the entire Button template with a -->
|
||
<!-- bare ContentPresenter so no Fluent chrome (bg / hover / -->
|
||
<!-- pressed) can render. Used to wrap TaskRowView for clicks. -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Button.flat">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="0" />
|
||
<Setter Property="CornerRadius" Value="0" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="Template">
|
||
<ControlTemplate>
|
||
<ContentPresenter Name="PART_ContentPresenter"
|
||
Background="Transparent"
|
||
BorderBrush="Transparent"
|
||
BorderThickness="0"
|
||
Padding="0"
|
||
CornerRadius="0"
|
||
Content="{TemplateBinding Content}"
|
||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
|
||
</ControlTemplate>
|
||
</Setter>
|
||
</Style>
|
||
<Style Selector="Button.flat:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
</Style>
|
||
<Style Selector="Button.flat:pressed /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
</Style>
|
||
<Style Selector="Button.flat:focus /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- TASK ROW -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.task-row">
|
||
<Setter Property="Padding" Value="12,10" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="Margin" Value="0,0,0,6" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
<Setter Property="Transitions">
|
||
<Transitions>
|
||
<BrushTransition Property="Background" Duration="0:0:0.12" />
|
||
<BrushTransition Property="BorderBrush" Duration="0:0:0.12" />
|
||
<ThicknessTransition Property="Margin" Duration="0:0:0.15" />
|
||
<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.12" />
|
||
<DoubleTransition Property="Opacity" Duration="0:0:0.12" />
|
||
</Transitions>
|
||
</Setter>
|
||
</Style>
|
||
<Style Selector="Border.task-row:pointerover">
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrightBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.task-row.selected">
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
</Style>
|
||
<!-- "Grabbed" row: collapses out of layout entirely while the custom drag runs — the
|
||
floating ghost snapshot (TaskDragController) is what the user sees moving. -->
|
||
<Style Selector="Border.task-row.dragging">
|
||
<Setter Property="IsVisible" Value="False" />
|
||
<Setter Property="Transitions" Value="{x:Null}" />
|
||
</Style>
|
||
|
||
<!-- Row currently hovered while dragging (shows the dashed drop-hint gap): suppress the
|
||
ordinary hover highlight and transitions so they don't fight the hint. Placed after
|
||
Border.task-row:pointerover so its extra class also wins on declaration order. -->
|
||
<Style Selector="Border.task-row.drop-target">
|
||
<Setter Property="Transitions" Value="{x:Null}" />
|
||
</Style>
|
||
<Style Selector="Border.task-row.drop-target:pointerover">
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
</Style>
|
||
|
||
<!-- Checkbox indicator (the 18px circle that replaces the native CheckBox template) -->
|
||
<Style Selector="Ellipse.task-check">
|
||
<Setter Property="Width" Value="18" />
|
||
<Setter Property="Height" Value="18" />
|
||
<Setter Property="StrokeThickness" Value="1.5" />
|
||
<Setter Property="Stroke" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="Fill" Value="Transparent" />
|
||
</Style>
|
||
<Style Selector="Ellipse.task-check.done">
|
||
<Setter Property="Stroke" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="Fill" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- Status dot pulse (applied when running) -->
|
||
<Style Selector="Ellipse.status-pulse">
|
||
<Style.Animations>
|
||
<Animation Duration="0:0:1.2" IterationCount="INFINITE" Easing="CubicEaseInOut">
|
||
<KeyFrame Cue="0%"><Setter Property="Opacity" Value="0.4"/></KeyFrame>
|
||
<KeyFrame Cue="50%"><Setter Property="Opacity" Value="1.0"/></KeyFrame>
|
||
<KeyFrame Cue="100%"><Setter Property="Opacity" Value="0.4"/></KeyFrame>
|
||
</Animation>
|
||
</Style.Animations>
|
||
</Style>
|
||
|
||
<!-- Indeterminate ring spinner (dashed ring, rotated forever) -->
|
||
<Style Selector="Ellipse.spinner">
|
||
<Setter Property="Width" Value="14" />
|
||
<Setter Property="Height" Value="14" />
|
||
<Setter Property="Stroke" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="StrokeThickness" Value="2" />
|
||
<Setter Property="StrokeDashArray" Value="3,2" />
|
||
<Setter Property="RenderTransform" Value="rotate(0deg)" />
|
||
<Style.Animations>
|
||
<Animation Duration="0:0:0.9" IterationCount="INFINITE" Easing="LinearEasing">
|
||
<KeyFrame Cue="0%"> <Setter Property="RotateTransform.Angle" Value="0" /> </KeyFrame>
|
||
<KeyFrame Cue="100%"><Setter Property="RotateTransform.Angle" Value="360" /></KeyFrame>
|
||
</Animation>
|
||
</Style.Animations>
|
||
</Style>
|
||
<Style Selector="Ellipse.spinner.dim">
|
||
<Setter Property="Stroke" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- TERMINAL / LOG -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.terminal">
|
||
<Setter Property="Background" Value="{StaticResource VoidBrush}" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="Padding" Value="12" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-sys]">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-tool]">
|
||
<Setter Property="Foreground" Value="{StaticResource SageBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-claude]">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<!-- log-stdout: program output — dim text, same as base -->
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-stdout]">
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-stderr]">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-done]">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrightBrush}" />
|
||
</Style>
|
||
<!-- log-msg: generic informational message — slightly brighter than sys -->
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-msg]">
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
<!-- log-user: user's own messages in interactive sessions — accent color to stand out -->
|
||
<Style Selector="Border.terminal TextBlock[Tag=log-user]">
|
||
<Setter Property="Foreground" Value="{DynamicResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- TERMINAL HEADER -->
|
||
<!-- ============================================================ -->
|
||
<!-- traffic-light dot colors -->
|
||
<Style Selector="Ellipse.dot-red">
|
||
<Setter Property="Width" Value="8" />
|
||
<Setter Property="Height" Value="8" />
|
||
<Setter Property="Fill" Value="#5A2A26" />
|
||
</Style>
|
||
<Style Selector="Ellipse.dot-yellow">
|
||
<Setter Property="Width" Value="8" />
|
||
<Setter Property="Height" Value="8" />
|
||
<Setter Property="Fill" Value="#6A5A28" />
|
||
</Style>
|
||
<Style Selector="Ellipse.dot-green">
|
||
<Setter Property="Width" Value="8" />
|
||
<Setter Property="Height" Value="8" />
|
||
<Setter Property="Fill" Value="#2F4D2F" />
|
||
</Style>
|
||
|
||
<!-- LIVE chip (pulsing dot + text) -->
|
||
<Style Selector="Border.live-chip">
|
||
<Setter Property="Padding" Value="5,2" />
|
||
<Setter Property="CornerRadius" Value="4" />
|
||
<Setter Property="Background" Value="#267C9166" />
|
||
</Style>
|
||
<Style Selector="Border.live-chip > StackPanel > TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="LetterSpacing" Value="1.2" />
|
||
</Style>
|
||
<Style Selector="Border.live-chip > StackPanel > Ellipse">
|
||
<Setter Property="Width" Value="6" />
|
||
<Setter Property="Height" Value="6" />
|
||
<Setter Property="Fill" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.live-chip.pulsing > StackPanel > Ellipse">
|
||
<Style.Animations>
|
||
<Animation Duration="0:0:1.4" IterationCount="INFINITE" Easing="CubicEaseInOut">
|
||
<KeyFrame Cue="0%"> <Setter Property="Opacity" Value="1.0"/></KeyFrame>
|
||
<KeyFrame Cue="50%"> <Setter Property="Opacity" Value="0.3"/></KeyFrame>
|
||
<KeyFrame Cue="100%"><Setter Property="Opacity" Value="1.0"/></KeyFrame>
|
||
</Animation>
|
||
</Style.Animations>
|
||
</Style>
|
||
|
||
<!-- Terminal log-line timestamp column -->
|
||
<Style Selector="TextBlock.log-ts">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
<Setter Property="Width" Value="60" />
|
||
<Setter Property="VerticalAlignment" Value="Top" />
|
||
<Setter Property="Margin" Value="0,0,4,0" />
|
||
</Style>
|
||
<!-- Kind marker column -->
|
||
<Style Selector="TextBlock.log-kind">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="Width" Value="46" />
|
||
<Setter Property="VerticalAlignment" Value="Top" />
|
||
<Setter Property="Margin" Value="0,0,6,0" />
|
||
</Style>
|
||
<Style Selector="TextBlock.log-kind[Tag=log-tool]">
|
||
<Setter Property="Foreground" Value="{StaticResource SageBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.log-kind[Tag=log-claude]">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.log-kind[Tag=log-stderr]">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.log-kind[Tag=log-done]">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrightBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- WORKTREE MODAL STATUS BADGES -->
|
||
<!-- Tag="M" → peat, "A" → moss, "D" → blood, "?" → faint -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border[Tag=M]">
|
||
<Setter Property="Background" Value="#26A06040"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=M] > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource PeatBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=A]">
|
||
<Setter Property="Background" Value="#267C9166"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=A] > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=D]">
|
||
<Setter Property="Background" Value="#26C87060"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=D] > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=?]">
|
||
<Setter Property="Background" Value="#1A888888"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=?] > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}"/>
|
||
</Style>
|
||
<!-- R → rename (sage) -->
|
||
<Style Selector="Border[Tag=R]">
|
||
<Setter Property="Background" Value="#268B9D7A"/>
|
||
</Style>
|
||
<Style Selector="Border[Tag=R] > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource SageBrush}"/>
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- LIST NAV ITEM -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.list-item">
|
||
<Setter Property="Padding" Value="10,4" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<!-- Reserved so the task-drop highlight below only swaps the brush — a thickness that changes
|
||
on hover would nudge the row's content while dragging over it. -->
|
||
<Setter Property="BorderThickness" Value="1.5" />
|
||
<Setter Property="BorderBrush" Value="Transparent" />
|
||
</Style>
|
||
<!-- Folder tree rows sit tighter than the smart lists — a deep tree gets long fast. -->
|
||
<Style Selector="Border.list-item.tree-row">
|
||
<Setter Property="Padding" Value="4,4,10,4" />
|
||
</Style>
|
||
<Style Selector="Border.list-item:pointerover">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
</Style>
|
||
<Style Selector="Border.list-item.active">
|
||
<Setter Property="Background" Value="{StaticResource AccentSoftBrush}" />
|
||
</Style>
|
||
<!-- Highlighted while a dragged task hovers over this row as a move target. -->
|
||
<Style Selector="Border.list-item.drop-target">
|
||
<Setter Property="Background" Value="{StaticResource AccentSoftBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<!-- Resting icon colour. Must live here, not inline on the PathIcon: a local value outranks
|
||
every style, so an inline Foreground makes the .active accent below unreachable. -->
|
||
<Style Selector="Border.list-item PathIcon.list-icon">
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
<!-- Active item text / icon colors -->
|
||
<Style Selector="Border.list-item.active TextBlock.list-label">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.list-item.active PathIcon.list-icon">
|
||
<Setter Property="Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- Count badge — larger, high contrast, brighter when the row is active -->
|
||
<Style Selector="TextBlock.list-count">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="FontWeight" Value="Medium" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
<Setter Property="Margin" Value="8,0,4,0" />
|
||
</Style>
|
||
<Style Selector="Border.list-item.active TextBlock.list-count">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SEARCH BOX WRAPPER -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.search-wrap">
|
||
<Setter Property="Background" Value="{StaticResource DeepBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="Padding" Value="8,0" />
|
||
</Style>
|
||
<Style Selector="Border.search-wrap:focus-within">
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<!-- Borderless TextBox inside search-wrap -->
|
||
<Style Selector="Border.search-wrap TextBox.search-inner">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="4,7" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="CaretBrush" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.search-wrap TextBox.search-inner /template/ Border#PART_BorderElement">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="BoxShadow" Value="none" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- KBD CHIP -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.kbd">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="4" />
|
||
<Setter Property="Padding" Value="8,3" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||
</Style>
|
||
<Style Selector="Border.kbd > TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
<Setter Property="TextAlignment" Value="Center" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- NEW LIST BUTTON -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Button.new-list-btn">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="10,8" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Left" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
</Style>
|
||
<Style Selector="Button.new-list-btn:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- FOOTER PROFILE ROW -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.avatar-circle">
|
||
<Setter Property="Width" Value="28" />
|
||
<Setter Property="Height" Value="28" />
|
||
<Setter Property="CornerRadius" Value="14" />
|
||
<Setter Property="Background" Value="{StaticResource AccentDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- ADD-TASK ROW -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.add-task">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="10" />
|
||
<Setter Property="Padding" Value="14,12" />
|
||
<Setter Property="Transitions">
|
||
<Transitions>
|
||
<BrushTransition Property="BorderBrush" Duration="0:0:0.15" />
|
||
</Transitions>
|
||
</Setter>
|
||
</Style>
|
||
<Style Selector="Border.add-task:focus-within">
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- Plus circle inside the add-task row -->
|
||
<Style Selector="Border.add-task-plus">
|
||
<Setter Property="Width" Value="20" />
|
||
<Setter Property="Height" Value="20" />
|
||
<Setter Property="CornerRadius" Value="10" />
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
<Setter Property="Padding" Value="0" />
|
||
</Style>
|
||
<Style Selector="Border.add-task-plus > PathIcon">
|
||
<Setter Property="HorizontalAlignment" Value="Center" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
</Style>
|
||
|
||
<!-- Borderless TextBox inside the add-task row -->
|
||
<Style Selector="TextBox.add-task-input">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="0,0,2,0" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeTaskTitle}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="CaretBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="MinHeight" Value="20" />
|
||
</Style>
|
||
<Style Selector="TextBox.add-task-input /template/ Border#PART_BorderElement">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="BoxShadow" Value="none" />
|
||
</Style>
|
||
|
||
<!-- kbd-enter variant (no extra styles needed — base kbd works) -->
|
||
<Style Selector="Border.kbd.kbd-enter > TextBlock">
|
||
<Setter Property="LetterSpacing" Value="1.2" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- HEADER TOOLBAR icon-btn active state -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Button.icon-btn.active /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource AccentBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- TASK ROW — extensions (C2) -->
|
||
<!-- ============================================================ -->
|
||
|
||
<!-- Left accent bar for selected row -->
|
||
<Style Selector="Border.task-row-accent">
|
||
<Setter Property="Width" Value="2" />
|
||
<Setter Property="Background" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="CornerRadius" Value="1" />
|
||
<Setter Property="Margin" Value="0,4" />
|
||
<Setter Property="HorizontalAlignment" Value="Left" />
|
||
<Setter Property="VerticalAlignment" Value="Stretch" />
|
||
</Style>
|
||
|
||
<!-- Done state: dim the whole row and strike through the title -->
|
||
<Style Selector="Border.task-row.done">
|
||
<Setter Property="Opacity" Value="0.45" />
|
||
</Style>
|
||
<Style Selector="Border.task-row.done TextBlock.task-title">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
<Setter Property="TextDecorations" Value="Strikethrough" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- CHIP EXTENSIONS -->
|
||
<!-- ============================================================ -->
|
||
<!-- Slightly slimmer chips inside task rows -->
|
||
<Style Selector="Border.task-row Border.chip">
|
||
<Setter Property="Padding" Value="6,2" />
|
||
<Setter Property="CornerRadius" Value="4" />
|
||
</Style>
|
||
<Style Selector="Border.task-row Border.chip > StackPanel > TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- Tag chip: faint text -->
|
||
<Style Selector="Border.chip.chip-tag > TextBlock">
|
||
<Setter Property="Foreground" Value="{StaticResource TextFaintBrush}" />
|
||
</Style>
|
||
|
||
<!-- Diff chip add/del coloring -->
|
||
<Style Selector="TextBlock.diff-add">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrightBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.diff-del">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}" />
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- STAR BUTTON -->
|
||
<!-- ============================================================ -->
|
||
<!-- Icon colour comes from the icon-painting block; only the opacity differs here. -->
|
||
<Style Selector="Button.star-btn">
|
||
<Setter Property="Opacity" Value="0.6" />
|
||
</Style>
|
||
<Style Selector="Button.star-btn.on">
|
||
<Setter Property="Opacity" Value="1.0" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- LIVE-TAIL PREVIEW ROW -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.task-live-tail">
|
||
<Setter Property="Background" Value="{StaticResource VoidBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="5" />
|
||
<Setter Property="Padding" Value="8,4" />
|
||
<Setter Property="Margin" Value="0,2,0,0" />
|
||
</Style>
|
||
<Style Selector="Border.task-live-tail TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SUBTASK ROW -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.subtask-row">
|
||
<Setter Property="Padding" Value="8,5" />
|
||
<Setter Property="CornerRadius" Value="6" />
|
||
<Setter Property="Background" Value="Transparent" />
|
||
</Style>
|
||
<Style Selector="Border.subtask-row:pointerover">
|
||
<Setter Property="Background" Value="{StaticResource Surface3Brush}" />
|
||
</Style>
|
||
<Style Selector="Border.subtask-row.done TextBlock.subtask-title">
|
||
<Setter Property="Opacity" Value="0.5" />
|
||
<Setter Property="TextDecorations" Value="Strikethrough" />
|
||
</Style>
|
||
<Style Selector="TextBox.subtask-edit">
|
||
<Setter Property="Padding" Value="4,2" />
|
||
<Setter Property="MinHeight" Value="0" />
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="6" />
|
||
<Setter Property="Foreground" Value="{DynamicResource TextBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SECTION LABELS (OVERDUE / TASKS / COMPLETED) -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="TextBlock.section-label">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
<Setter Property="LetterSpacing" Value="1.4" />
|
||
</Style>
|
||
<Style Selector="TextBlock.section-label.overdue">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- PLANNING / DRAFT BADGES -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.badge">
|
||
<Setter Property="CornerRadius" Value="3"/>
|
||
<Setter Property="Padding" Value="4,1"/>
|
||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||
</Style>
|
||
|
||
<Style Selector="Border.badge > TextBlock">
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}"/>
|
||
<Setter Property="FontWeight" Value="Bold"/>
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}"/>
|
||
</Style>
|
||
|
||
<Style Selector="Border.badge.draft">
|
||
<Setter Property="Background" Value="{DynamicResource DraftBadgeBrush}"/>
|
||
</Style>
|
||
|
||
<Style Selector="Border.badge.planning">
|
||
<Setter Property="Background" Value="{DynamicResource PlanningBadgeBrush}"/>
|
||
</Style>
|
||
|
||
<Style Selector="Border.badge.planned">
|
||
<Setter Property="Background" Value="{DynamicResource PlannedBadgeBrush}"/>
|
||
</Style>
|
||
|
||
<!-- manual → faint gray: a reminder Claude never touches -->
|
||
<Style Selector="Border.badge.manual">
|
||
<Setter Property="Background" Value="{DynamicResource ManualBadgeBrush}"/>
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- CHAIN DEPENDENCY RAIL (step badge on the 24px indent track) -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.chain-step-badge">
|
||
<Setter Property="Width" Value="16"/>
|
||
<Setter Property="Height" Value="16"/>
|
||
<Setter Property="CornerRadius" Value="{StaticResource PillCornerRadius}"/>
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}"/>
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
</Style>
|
||
<Style Selector="Border.chain-step-badge > TextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}"/>
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeEyebrow}"/>
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}"/>
|
||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SHARED MODAL STYLES (promoted from per-modal Window.Styles) -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="TextBlock.field-label">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
<Setter Property="Margin" Value="0,0,0,4" />
|
||
</Style>
|
||
|
||
<Style Selector="TextBlock.path-mono">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
|
||
</Style>
|
||
|
||
<!-- Self-contained action buttons (same geometry as Button.btn, distinct color).
|
||
Used standalone, e.g. Classes="primary" / "danger". -->
|
||
<Style Selector="Button.primary">
|
||
<Setter Property="Background" Value="{StaticResource AccentDimBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="10,6" />
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
<Style Selector="Button.danger">
|
||
<Setter Property="Background" Value="{StaticResource BloodBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BloodBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="10,6" />
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- CANONICAL TYPOGRAPHY -->
|
||
<!-- One class per text role. Small text = 11 (eyebrow/meta/ -->
|
||
<!-- field-label/path-mono). Body = 13. Heading = 18. Display = 24.-->
|
||
<!-- ============================================================ -->
|
||
|
||
<!-- Small secondary mono text: timestamps, ids, hints, status, diffstat, age -->
|
||
<Style Selector="TextBlock.meta">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
<!-- diff file tree names: change-kind colour; must stay after TextBlock.meta -->
|
||
<Style Selector="TextBlock.tree-name[Tag=A]">
|
||
<Setter Property="Foreground" Value="{StaticResource MossBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.tree-name[Tag=D]">
|
||
<Setter Property="Foreground" Value="{StaticResource BloodBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.tree-name[Tag=M]">
|
||
<Setter Property="Foreground" Value="{StaticResource PeatBrush}" />
|
||
</Style>
|
||
<Style Selector="TextBlock.tree-name[Tag=R]">
|
||
<Setter Property="Foreground" Value="{StaticResource SageBrush}" />
|
||
</Style>
|
||
|
||
<!-- Default body / list values / descriptions -->
|
||
<Style Selector="TextBlock.body">
|
||
<Setter Property="FontFamily" Value="{StaticResource SansFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- Item / task / detail titles -->
|
||
<Style Selector="TextBlock.title">
|
||
<Setter Property="FontFamily" Value="{StaticResource SansFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeBody}" />
|
||
<Setter Property="FontWeight" Value="Medium" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
|
||
<!-- Panel / section headings ("Lists", modal section titles) -->
|
||
<Style Selector="TextBlock.heading">
|
||
<Setter Property="FontFamily" Value="{StaticResource SansFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeH3}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
|
||
<!-- Main board / island display title -->
|
||
<Style Selector="TextBlock.display">
|
||
<Setter Property="FontFamily" Value="{StaticResource SansFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeH2}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- SHARED CONTAINERS (promoted from per-view inline/local styles)-->
|
||
<!-- ============================================================ -->
|
||
|
||
<!-- Bordered card / settings section -->
|
||
<Style Selector="Border.section">
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="14" />
|
||
<Setter Property="Background" Value="{StaticResource DeepBrush}" />
|
||
</Style>
|
||
|
||
<!-- Stacked content section with a bottom hairline (Details island) -->
|
||
<Style Selector="Border.section-divider">
|
||
<Setter Property="Padding" Value="18,12" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||
</Style>
|
||
|
||
<!-- Inline danger confirm box -->
|
||
<Style Selector="Border.danger-box">
|
||
<Setter Property="BorderBrush" Value="{StaticResource BloodBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="12,10" />
|
||
</Style>
|
||
|
||
<!-- Left sidebar pane with vertical hairline (diff/planning views) -->
|
||
<Style Selector="Border.sidebar-pane">
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="BorderThickness" Value="0,0,1,0" />
|
||
<Setter Property="Background" Value="{StaticResource DeepBrush}" />
|
||
</Style>
|
||
|
||
<!-- Terminal selectable log text (SelectableTextBlock doesn't inherit the TextBlock terminal style) -->
|
||
<Style Selector="Border.terminal SelectableTextBlock">
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextDimBrush}" />
|
||
</Style>
|
||
|
||
<!-- Accent call-to-action button (Send to queue / Continue / Schedule) -->
|
||
<Style Selector="Button.accent">
|
||
<Setter Property="Background" Value="{StaticResource AccentDimBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="{StaticResource ButtonCornerRadius}" />
|
||
<Setter Property="Padding" Value="10,6" />
|
||
<Setter Property="FontFamily" Value="{StaticResource MonoFont}" />
|
||
<Setter Property="FontSize" Value="{StaticResource FontSizeMono}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
<!-- Override Fluent's built-in accent button (SystemAccentColor = blue) at the
|
||
ContentPresenter level so our moss tokens win across rest/hover/pressed. -->
|
||
<Style Selector="Button.accent /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource AccentDimBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="Button.accent:pointerover /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<Style Selector="Button.accent:pressed /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource AccentSoftBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextBrush}" />
|
||
</Style>
|
||
<!-- Disabled: drop the accent so a gated action (e.g. Approve before the diff is
|
||
opened) reads clearly as unavailable instead of looking clickable. -->
|
||
<Style Selector="Button.accent:disabled /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{StaticResource Surface2Brush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LineBrush}" />
|
||
<Setter Property="TextElement.Foreground" Value="{StaticResource TextMuteBrush}" />
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- DAY TOGGLE -->
|
||
<!-- Small ToggleButton for weekday pickers (Prime schedule row) -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="ToggleButton.day-toggle">
|
||
<Setter Property="MinWidth" Value="34"/>
|
||
<Setter Property="Padding" Value="6,4"/>
|
||
<Setter Property="Margin" Value="0"/>
|
||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||
<Setter Property="Background" Value="{DynamicResource DeepBrush}"/>
|
||
<Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
|
||
<Setter Property="BorderBrush" Value="{DynamicResource LineBrush}"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="CornerRadius" Value="4"/>
|
||
</Style>
|
||
<Style Selector="ToggleButton.day-toggle:checked /template/ ContentPresenter">
|
||
<Setter Property="Background" Value="{DynamicResource AccentBrush}"/>
|
||
</Style>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- MISSION CONTROL PANE STATUS TINTING -->
|
||
<!-- Base neutral grey; tints layer on by status. -->
|
||
<!-- Running / idle / queued: no class → fall through to base. -->
|
||
<!-- ============================================================ -->
|
||
<Style Selector="Border.monitor-pane">
|
||
<Setter Property="Background" Value="{DynamicResource SurfaceBrush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource LineBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.monitor-pane.mon-done">
|
||
<Setter Property="Background" Value="{DynamicResource DoneTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource DoneTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.monitor-pane.mon-review">
|
||
<Setter Property="Background" Value="{DynamicResource DoneTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource DoneTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.monitor-pane.mon-roadblock">
|
||
<Setter Property="Background" Value="{DynamicResource RoadblockTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource RoadblockTintBorderBrush}" />
|
||
</Style>
|
||
<Style Selector="Border.monitor-pane.mon-failed">
|
||
<Setter Property="Background" Value="{DynamicResource ErrorTintBrush}" />
|
||
<Setter Property="BorderBrush" Value="{DynamicResource ErrorTintBorderBrush}" />
|
||
</Style>
|
||
|
||
</Styles>
|