Build 730 (creator): - Left pill while recording: solid #2ECC71 dot pulsing 1.0 <-> 0.2 on the existing one-second timer, and "REC: hh:mm:ss" in Consolas so the digits cannot jitter the pill's width. Idle face unchanged. - Right pill while recording: a stop square and "Stop Recording"; clicking it runs the normal stop, which halts and resets the clock and returns the pair to "Local MP4" / "Start Recording". - The separate reality line (dot + REC/LIVE + elapsed + End) is now LIVE-ONLY: a recording would otherwise print the same three facts twice. RunningVisible is IsLive, and ShowOutputStage no longer hides itself for a recording (it must be on screen to carry the clock and the stop). Two rules collided and are now separated rather than merged: a creator's Stop on a recording restores the Local MP4 pair (build 730), while a pipeline FAILURE still clears both pills (the 2026-09-01 zombie rule). StopStream(afterFailure:) carries the difference, and the pump-failure path passes it. RealAppHost.Run was rethrowing with `throw failure;`, which destroyed the original stack — a failing assertion inside the action reported the wrapper's line instead of its own. ExceptionDispatchInfo now preserves it; that is how the two failures above were located in one pass instead of five. 680 pass (one audio-pipe instance flake under full-suite load, passes alone), 0 warnings. Scope justification: Assets/starting-background.jpg is outside this unit — the creator's replacement art, still awaiting their visual check.
110 lines
5.9 KiB
XML
110 lines
5.9 KiB
XML
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:sys="clr-namespace:System;assembly=System.Runtime">
|
|
|
|
<!-- ============================================================================
|
|
DESIGN TOKENS — the only place a raw value may live.
|
|
Source of truth: DESIGN.md (normative). Guard: ytLive.Tests/DesignTokensTests.cs,
|
|
which fails if a documented token has no brush here, or the values disagree.
|
|
|
|
Merge order: App.xaml merges this BEFORE Themes/Controls.xaml, so every style can
|
|
reference a token instead of a literal.
|
|
============================================================================ -->
|
|
|
|
<!-- Surfaces (dark navy scale) -->
|
|
<SolidColorBrush x:Key="Brush.Background" Color="#0b1326"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceContainerLowest" Color="#060e20"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceContainerLow" Color="#131b2e"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceContainer" Color="#171f33"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceContainerHigh" Color="#222a3d"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceContainerHighest" Color="#2d3449"/>
|
|
<SolidColorBrush x:Key="Brush.SurfaceBright" Color="#31394d"/>
|
|
<SolidColorBrush x:Key="Brush.Outline" Color="#334155"/>
|
|
<SolidColorBrush x:Key="Brush.OutlineVariant" Color="#1e293b"/>
|
|
<SolidColorBrush x:Key="Brush.ScrimSoft" Color="#22FFFFFF"/>
|
|
<SolidColorBrush x:Key="Brush.ScrimStrong" Color="#26FFFFFF"/>
|
|
<SolidColorBrush x:Key="Brush.ScrimDark" Color="#26000000"/>
|
|
<SolidColorBrush x:Key="Brush.ScrimDarkStrong" Color="#00000080"/>
|
|
|
|
<!-- Text -->
|
|
<SolidColorBrush x:Key="Brush.OnSurface" Color="#dae2fd"/>
|
|
<SolidColorBrush x:Key="Brush.OnSurfaceVariant" Color="#94a3b8"/>
|
|
<SolidColorBrush x:Key="Brush.OnSurfaceDisabled" Color="#5b6478"/>
|
|
|
|
<!-- Accent roles: one per meaning, never mixed -->
|
|
<SolidColorBrush x:Key="Brush.Tertiary" Color="#38bdf8"/>
|
|
<SolidColorBrush x:Key="Brush.OnTertiary" Color="#0b1326"/>
|
|
<SolidColorBrush x:Key="Brush.OnAccent" Color="#ffffff"/>
|
|
<!-- Segmented mode switcher (creator mock, 2026-11-12) -->
|
|
<SolidColorBrush x:Key="Brush.SegmentTrack" Color="#1E222B"/>
|
|
<SolidColorBrush x:Key="Brush.SegmentActive" Color="#2E3440"/>
|
|
<SolidColorBrush x:Key="Brush.SegmentHover" Color="#252A34"/>
|
|
<SolidColorBrush x:Key="Brush.SegmentTextActive" Color="#E2E8F0"/>
|
|
<SolidColorBrush x:Key="Brush.SegmentTextInactive" Color="#8892A4"/>
|
|
<SolidColorBrush x:Key="Brush.SegmentIconActive" Color="#F26D6D"/>
|
|
<!-- One-alpha black: transparent to the eye, opaque to hit-testing, so the whole segment is clickable. -->
|
|
<SolidColorBrush x:Key="Brush.SegmentHitArea" Color="#01000000"/>
|
|
<!-- The recording dot on the output pill (creator, build 730). -->
|
|
<SolidColorBrush x:Key="Brush.RecordLive" Color="#2ECC71"/>
|
|
|
|
<SolidColorBrush x:Key="Brush.Primary" Color="#ff5451"/>
|
|
<SolidColorBrush x:Key="Brush.PrimaryContainer" Color="#b91a24"/>
|
|
<SolidColorBrush x:Key="Brush.Secondary" Color="#ffb95f"/>
|
|
<SolidColorBrush x:Key="Brush.SecondaryContainer" Color="#ee9800"/>
|
|
<SolidColorBrush x:Key="Brush.Attention" Color="#ff8c3a"/>
|
|
<SolidColorBrush x:Key="Brush.Positive" Color="#22c55e"/>
|
|
<SolidColorBrush x:Key="Brush.Error" Color="#ef4444"/>
|
|
<SolidColorBrush x:Key="Brush.ErrorContainer" Color="#93000a"/>
|
|
<SolidColorBrush x:Key="Brush.OnError" Color="#ffdad6"/>
|
|
<SolidColorBrush x:Key="Brush.InfoContainer" Color="#3a3b52"/>
|
|
<SolidColorBrush x:Key="Brush.SuccessContainer" Color="#1d5c38"/>
|
|
<SolidColorBrush x:Key="Brush.WarningContainer" Color="#b8860b"/>
|
|
<SolidColorBrush x:Key="Brush.TestContainer" Color="#9c6f1c"/>
|
|
<SolidColorBrush x:Key="Brush.Youtube" Color="#ff0000"/>
|
|
|
|
<!-- Colours (for gradients that cannot take a brush) -->
|
|
<Color x:Key="Color.Background">#0b1326</Color>
|
|
<Color x:Key="Color.Tertiary">#38bdf8</Color>
|
|
<Color x:Key="Color.SurfaceContainerLowest">#060e20</Color>
|
|
|
|
<!-- Meter bands (measured levels, never gain settings) -->
|
|
<SolidColorBrush x:Key="Brush.Meter.Nominal" Color="#38bdf8"/>
|
|
<SolidColorBrush x:Key="Brush.Meter.Caution" Color="#ffb95f"/>
|
|
<SolidColorBrush x:Key="Brush.Meter.Peak" Color="#ff5451"/>
|
|
|
|
<!-- Typography. Both families ship as WPF resources in Assets/Fonts (no install, no
|
|
network). The `#Family` form resolves them from the pack folder. -->
|
|
<FontFamily x:Key="FontFamily.Sans">/Assets/Fonts/#Inter</FontFamily>
|
|
<FontFamily x:Key="FontFamily.Mono">/Assets/Fonts/#JetBrains Mono</FontFamily>
|
|
|
|
<sys:Double x:Key="FontSize.HeadlineLg">32</sys:Double>
|
|
<sys:Double x:Key="FontSize.HeadlineMd">24</sys:Double>
|
|
<sys:Double x:Key="FontSize.HeadlineSm">18</sys:Double>
|
|
<sys:Double x:Key="FontSize.BodyLg">15</sys:Double>
|
|
<sys:Double x:Key="FontSize.BodyMd">13</sys:Double>
|
|
<sys:Double x:Key="FontSize.BodySm">12</sys:Double>
|
|
<sys:Double x:Key="FontSize.LabelLg">13</sys:Double>
|
|
<sys:Double x:Key="FontSize.LabelMd">11</sys:Double>
|
|
<sys:Double x:Key="FontSize.LabelSm">10</sys:Double>
|
|
|
|
<!-- Spacing -->
|
|
<sys:Double x:Key="Space.Xs">4</sys:Double>
|
|
<sys:Double x:Key="Space.Sm">8</sys:Double>
|
|
<sys:Double x:Key="Space.Md">12</sys:Double>
|
|
<sys:Double x:Key="Space.Lg">16</sys:Double>
|
|
<sys:Double x:Key="Space.Xl">24</sys:Double>
|
|
<sys:Double x:Key="Space.Gutter">12</sys:Double>
|
|
<sys:Double x:Key="Space.Margin">16</sys:Double>
|
|
<sys:Double x:Key="Space.MarginDocked">8</sys:Double>
|
|
|
|
<!-- Shape -->
|
|
<CornerRadius x:Key="Radius.Sm">4</CornerRadius>
|
|
<CornerRadius x:Key="Radius.Md">8</CornerRadius>
|
|
<CornerRadius x:Key="Radius.Lg">16</CornerRadius>
|
|
|
|
<!-- Motion -->
|
|
<Duration x:Key="Motion.Fast">0:0:0.09</Duration>
|
|
<Duration x:Key="Motion.Normal">0:0:0.15</Duration>
|
|
|
|
</ResourceDictionary>
|