diff --git a/Controls/TopBar.xaml b/Controls/TopBar.xaml
index 1db99db..ffba55e 100644
--- a/Controls/TopBar.xaml
+++ b/Controls/TopBar.xaml
@@ -107,23 +107,13 @@
-
-
-
+
+
+
+
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 62c5a67..b1b4c93 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -181,6 +181,14 @@ public partial class MainWindow : Window
{
_viewModel.DismissZoomIfActive();
}
+
+ // Esc leaves a sub-menu (creator ruling 2026-11-12): the Output world is a sub-menu, and its
+ // back chevron is gone in favour of this. The bar says so under the switches.
+ if (e.Key == System.Windows.Input.Key.Escape && _viewModel.IsOutputWorld)
+ {
+ _viewModel.EnterBuildWorldCommand.Execute(null);
+ e.Handled = true;
+ }
}
private void UpdateTaskbarOverlay()
diff --git a/ytLive.Tests/UiShellTests.cs b/ytLive.Tests/UiShellTests.cs
index 4769099..6dda653 100644
--- a/ytLive.Tests/UiShellTests.cs
+++ b/ytLive.Tests/UiShellTests.cs
@@ -39,10 +39,12 @@ public class UiShellTests
// line (creator ruling 2026-11-12), and a chevron is the way back.
Assert.Contains("Data=\"M3,4h8v6H3V4zM13,4h8v6h-8V4zM3,12h8v8H3V12zM13,12h8v8h-8V12z\"", topBar);
Assert.Contains("Visibility=\"{Binding IsBuildWorld, Converter={StaticResource BoolToVis}}\"", topBar);
- Assert.Contains("ToolTip=\"Back to Build Scenes\"", topBar);
+ Assert.Contains("Text=\"Output:\"", topBar);
+ Assert.Contains("Text=\"press <esc> to return\"", topBar);
+ Assert.DoesNotContain("ToolTip=\"Back to Build Scenes\"", topBar); // Esc replaced the chevron
// 2c. The output stage: two labelled switches and the exclusivity promise beside them.
- Assert.Contains("Text=\"Output\"", topBar);
+ Assert.Contains("Text=\"Output:\"", topBar);
Assert.Contains("Text=\"YouTube\"", topBar);
Assert.Contains("Text=\"Local MP4\"", topBar);
Assert.Contains("Text=\"One output at a time\"", topBar);