Repository: Textualize/textual

Issue:
Background queries on `App` when command palette is shown causes an exception
Technically this isn't an issue with the command palette, it would be an issue with *any* screen with a background process that causes a query to be handled by the app, but via the command palette is the way that a dev would most likely encounter it and it's where they'd find it most surprising.

Consider this code:

```python
from textual.app import App, ComposeResult
from textual.widgets import Log

class CommandPaletteIsolation(App[None]):

    def compose(self) -> ComposeResult:
        yield Log()

    def tick(self) -> None:
        self.query_one(Log).write_line("Tick")

    def on_mount(self) -> None:
        self.set_interval(1, self.tick)

if __name__ == "__main__":
    CommandPaletteIsolation().run()
```

Let it run for a moment, then summon the command palette and keep it up. The next time `tick` runs a `NoMatches` will result.

This version, where the default screen isn't being used, isn't a problem:

```python
from textual.app import App, ComposeResult
from textual.screen import Screen
from textual.widgets import Log

class MyScreen(Screen):

    def compose(self) -> ComposeResult:
        yield Log()

    def tick(self) -> None:
        self.query_one(Log).write_line("Tick")

    def on_mount(self) -> None:
        self.set_interval(1, self.tick)

class CommandPaletteIsolation(App[None]):

    def on_mount(self) -> None:
        self.push_screen(MyScreen())

if __name__ == "__main__":
    CommandPaletteIsolation().run()
```
Background queries on `App` when command palette is shown causes an exception
Technically this isn't an issue with the command palette, it would be an issue with *any* screen with a background process that causes a query to be handled by the app, but via the command palette is the way that a dev would most likely encounter it and it's where they'd find it most surprising.

Consider this code:

```python
from textual.app import App, ComposeResult
from textual.widgets import Log

class CommandPaletteIsolation(App[None]):

    def compose(self) -> ComposeResult:
        yield Log()

    def tick(self) -> None:
        self.query_one(Log).write_line("Tick")

    def on_mount(self) -> None:
        self.set_interval(1, self.tick)

if __name__ == "__main__":
    CommandPaletteIsolation().run()
```

Let it run for a moment, then summon the command palette and keep it up. The next time `tick` runs a `NoMatches` will result.

This version, where the default screen isn't being used, isn't a problem:

```python
from textual.app import App, ComposeResult
from textual.screen import Screen
from textual.widgets import Log

class MyScreen(Screen):

    def compose(self) -> ComposeResult:
        yield Log()

    def tick(self) -> None:
        self.query_one(Log).write_line("Tick")

    def on_mount(self) -> None:
        self.set_interval(1, self.tick)

class CommandPaletteIsolation(App[None]):

    def on_mount(self) -> None:
        self.push_screen(MyScreen())

if __name__ == "__main__":
    CommandPaletteIsolation().run()
```


Discussion:

Resolving patch:
diff --git a/src/textual/app.py b/src/textual/app.py
--- a/src/textual/app.py
+++ b/src/textual/app.py
@@ -96,7 +96,12 @@
 from .notifications import Notification, Notifications, Notify, SeverityLevel
 from .reactive import Reactive
 from .renderables.blank import Blank
-from .screen import Screen, ScreenResultCallbackType, ScreenResultType
+from .screen import (
+    Screen,
+    ScreenResultCallbackType,
+    ScreenResultType,
+    _SystemModalScreen,
+)
 from .widget import AwaitMount, Widget
 from .widgets._toast import ToastRack
 from .worker import NoActiveWorker, get_current_worker
@@ -600,8 +605,14 @@ def children(self) -> Sequence["Widget"]:
             A sequence of widgets.
         """
         try:
-            return (self.screen,)
-        except ScreenError:
+            return (
+                next(
+                    screen
+                    for screen in reversed(self._screen_stack)
+                    if not isinstance(screen, _SystemModalScreen)
+                ),
+            )
+        except StopIteration:
             return ()
 
     @contextmanager
diff --git a/src/textual/command.py b/src/textual/command.py
--- a/src/textual/command.py
+++ b/src/textual/command.py
@@ -29,7 +29,7 @@
 from .events import Click, Mount
 from .fuzzy import Matcher
 from .reactive import var
-from .screen import ModalScreen, Screen
+from .screen import Screen, _SystemModalScreen
 from .timer import Timer
 from .types import CallbackType, IgnoreReturnCallbackType
 from .widget import Widget
@@ -329,7 +329,7 @@ class CommandInput(Input):
     """
 
 
-class CommandPalette(ModalScreen[CallbackType], inherit_css=False):
+class CommandPalette(_SystemModalScreen[CallbackType]):
     """The Textual command palette."""
 
     COMPONENT_CLASSES: ClassVar[set[str]] = {
@@ -519,7 +519,7 @@ def _on_click(self, event: Click) -> None:
             self.dismiss()
 
     def on_mount(self, _: Mount) -> None:
-        """Capture the calling screen."""
+        """Configure the command palette once the DOM is ready."""
         self._calling_screen = self.app.screen_stack[-2]
 
         match_style = self.get_component_rich_style(
diff --git a/src/textual/screen.py b/src/textual/screen.py
--- a/src/textual/screen.py
+++ b/src/textual/screen.py
@@ -1067,3 +1067,15 @@ def __init__(
     ) -> None:
         super().__init__(name=name, id=id, classes=classes)
         self._modal = True
+
+
+class _SystemModalScreen(ModalScreen[ScreenResultType], inherit_css=False):
+    """A variant of `ModalScreen` for internal use.
+
+    This version of `ModalScreen` allows us to build system-level screens;
+    the type being used to indicate that the screen should be isolated from
+    the main application.
+
+    Note:
+        This screen is set to *not* inherit CSS.
+    """


Test patch:
diff --git a/tests/command_palette/test_click_away.py b/tests/command_palette/test_click_away.py
--- a/tests/command_palette/test_click_away.py
+++ b/tests/command_palette/test_click_away.py
@@ -20,6 +20,6 @@ def on_mount(self) -> None:
 async def test_clicking_outside_command_palette_closes_it() -> None:
     """Clicking 'outside' the command palette should make it go away."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert isinstance(pilot.app.screen, CommandPalette)
         await pilot.click()
-        assert len(pilot.app.query(CommandPalette)) == 0
+        assert not isinstance(pilot.app.screen, CommandPalette)
diff --git a/tests/command_palette/test_command_source_environment.py b/tests/command_palette/test_command_source_environment.py
--- a/tests/command_palette/test_command_source_environment.py
+++ b/tests/command_palette/test_command_source_environment.py
@@ -1,7 +1,7 @@
 from __future__ import annotations
 
 from textual.app import App, ComposeResult
-from textual.command import CommandPalette, Hit, Hits, Provider
+from textual.command import Hit, Hits, Provider
 from textual.screen import Screen
 from textual.widget import Widget
 from textual.widgets import Input
@@ -31,7 +31,7 @@ def on_mount(self) -> None:
 async def test_command_source_environment() -> None:
     """The command source should see the app and default screen."""
     async with CommandPaletteApp().run_test() as pilot:
-        base_screen = pilot.app.query_one(CommandPalette)._calling_screen
+        base_screen, *_ = pilot.app.children
         assert base_screen is not None
         await pilot.press(*"test")
         assert len(SimpleSource.environment) == 1
diff --git a/tests/command_palette/test_declare_sources.py b/tests/command_palette/test_declare_sources.py
--- a/tests/command_palette/test_declare_sources.py
+++ b/tests/command_palette/test_declare_sources.py
@@ -28,7 +28,8 @@ class AppWithNoSources(AppWithActiveCommandPalette):
 async def test_no_app_command_sources() -> None:
     """An app with no sources declared should work fine."""
     async with AppWithNoSources().run_test() as pilot:
-        assert pilot.app.query_one(CommandPalette)._provider_classes == App.COMMANDS
+        assert isinstance(pilot.app.screen, CommandPalette)
+        assert pilot.app.screen._provider_classes == App.COMMANDS
 
 
 class AppWithSources(AppWithActiveCommandPalette):
@@ -38,10 +39,8 @@ class AppWithSources(AppWithActiveCommandPalette):
 async def test_app_command_sources() -> None:
     """Command sources declared on an app should be in the command palette."""
     async with AppWithSources().run_test() as pilot:
-        assert (
-            pilot.app.query_one(CommandPalette)._provider_classes
-            == AppWithSources.COMMANDS
-        )
+        assert isinstance(pilot.app.screen, CommandPalette)
+        assert pilot.app.screen._provider_classes == AppWithSources.COMMANDS
 
 
 class AppWithInitialScreen(App[None]):
@@ -61,7 +60,8 @@ def on_mount(self) -> None:
 async def test_no_screen_command_sources() -> None:
     """An app with a screen with no sources declared should work fine."""
     async with AppWithInitialScreen(ScreenWithNoSources()).run_test() as pilot:
-        assert pilot.app.query_one(CommandPalette)._provider_classes == App.COMMANDS
+        assert isinstance(pilot.app.screen, CommandPalette)
+        assert pilot.app.screen._provider_classes == App.COMMANDS
 
 
 class ScreenWithSources(ScreenWithNoSources):
@@ -71,8 +71,9 @@ class ScreenWithSources(ScreenWithNoSources):
 async def test_screen_command_sources() -> None:
     """Command sources declared on a screen should be in the command palette."""
     async with AppWithInitialScreen(ScreenWithSources()).run_test() as pilot:
+        assert isinstance(pilot.app.screen, CommandPalette)
         assert (
-            pilot.app.query_one(CommandPalette)._provider_classes
+            pilot.app.screen._provider_classes
             == App.COMMANDS | ScreenWithSources.COMMANDS
         )
 
@@ -91,7 +92,8 @@ def on_mount(self) -> None:
 async def test_app_and_screen_command_sources_combine() -> None:
     """If an app and the screen have command sources they should combine."""
     async with CombinedSourceApp().run_test() as pilot:
+        assert isinstance(pilot.app.screen, CommandPalette)
         assert (
-            pilot.app.query_one(CommandPalette)._provider_classes
+            pilot.app.screen._provider_classes
             == CombinedSourceApp.COMMANDS | ScreenWithSources.COMMANDS
         )
diff --git a/tests/command_palette/test_escaping.py b/tests/command_palette/test_escaping.py
--- a/tests/command_palette/test_escaping.py
+++ b/tests/command_palette/test_escaping.py
@@ -20,31 +20,31 @@ def on_mount(self) -> None:
 async def test_escape_closes_when_no_list_visible() -> None:
     """Pressing escape when no list is visible should close the command palette."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 0
+        assert not CommandPalette.is_open(pilot.app)
 
 
 async def test_escape_does_not_close_when_list_visible() -> None:
     """Pressing escape when a hit list is visible should not close the command palette."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("a")
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 0
+        assert not CommandPalette.is_open(pilot.app)
 
 
 async def test_down_arrow_should_undo_closing_of_list_via_escape() -> None:
     """Down arrow should reopen the hit list if escape closed it before."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("a")
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("down")
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         await pilot.press("escape")
-        assert len(pilot.app.query(CommandPalette)) == 0
+        assert not CommandPalette.is_open(pilot.app)
diff --git a/tests/command_palette/test_interaction.py b/tests/command_palette/test_interaction.py
--- a/tests/command_palette/test_interaction.py
+++ b/tests/command_palette/test_interaction.py
@@ -21,46 +21,46 @@ def on_mount(self) -> None:
 async def test_initial_list_no_highlight() -> None:
     """When the list initially appears, nothing will be highlighted."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
-        assert pilot.app.query_one(CommandList).visible is False
+        assert CommandPalette.is_open(pilot.app)
+        assert pilot.app.screen.query_one(CommandList).visible is False
         await pilot.press("a")
-        assert pilot.app.query_one(CommandList).visible is True
-        assert pilot.app.query_one(CommandList).highlighted is None
+        assert pilot.app.screen.query_one(CommandList).visible is True
+        assert pilot.app.screen.query_one(CommandList).highlighted is None
 
 
 async def test_down_arrow_selects_an_item() -> None:
     """Typing in a search value then pressing down should select a command."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
-        assert pilot.app.query_one(CommandList).visible is False
+        assert CommandPalette.is_open(pilot.app)
+        assert pilot.app.screen.query_one(CommandList).visible is False
         await pilot.press("a")
-        assert pilot.app.query_one(CommandList).visible is True
-        assert pilot.app.query_one(CommandList).highlighted is None
+        assert pilot.app.screen.query_one(CommandList).visible is True
+        assert pilot.app.screen.query_one(CommandList).highlighted is None
         await pilot.press("down")
-        assert pilot.app.query_one(CommandList).highlighted is not None
+        assert pilot.app.screen.query_one(CommandList).highlighted is not None
 
 
 async def test_enter_selects_an_item() -> None:
     """Typing in a search value then pressing enter should select a command."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
-        assert pilot.app.query_one(CommandList).visible is False
+        assert CommandPalette.is_open(pilot.app)
+        assert pilot.app.screen.query_one(CommandList).visible is False
         await pilot.press("a")
-        assert pilot.app.query_one(CommandList).visible is True
-        assert pilot.app.query_one(CommandList).highlighted is None
+        assert pilot.app.screen.query_one(CommandList).visible is True
+        assert pilot.app.screen.query_one(CommandList).highlighted is None
         await pilot.press("enter")
-        assert pilot.app.query_one(CommandList).highlighted is not None
+        assert pilot.app.screen.query_one(CommandList).highlighted is not None
 
 
 async def test_selection_of_command_closes_command_palette() -> None:
     """Selecting a command from the list should close the list."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
-        assert pilot.app.query_one(CommandList).visible is False
+        assert CommandPalette.is_open(pilot.app)
+        assert pilot.app.screen.query_one(CommandList).visible is False
         await pilot.press("a")
-        assert pilot.app.query_one(CommandList).visible is True
-        assert pilot.app.query_one(CommandList).highlighted is None
+        assert pilot.app.screen.query_one(CommandList).visible is True
+        assert pilot.app.screen.query_one(CommandList).highlighted is None
         await pilot.press("enter")
-        assert pilot.app.query_one(CommandList).highlighted is not None
+        assert pilot.app.screen.query_one(CommandList).highlighted is not None
         await pilot.press("enter")
-        assert len(pilot.app.query(CommandPalette)) == 0
+        assert not CommandPalette.is_open(pilot.app)
diff --git a/tests/command_palette/test_no_results.py b/tests/command_palette/test_no_results.py
--- a/tests/command_palette/test_no_results.py
+++ b/tests/command_palette/test_no_results.py
@@ -13,7 +13,7 @@ def on_mount(self) -> None:
 async def test_no_results() -> None:
     """Receiving no results from a search for a command should not be a problem."""
     async with CommandPaletteApp().run_test() as pilot:
-        assert len(pilot.app.query(CommandPalette)) == 1
+        assert CommandPalette.is_open(pilot.app)
         results = pilot.app.screen.query_one(OptionList)
         assert results.visible is False
         assert results.option_count == 0
diff --git a/tests/command_palette/test_run_on_select.py b/tests/command_palette/test_run_on_select.py
--- a/tests/command_palette/test_run_on_select.py
+++ b/tests/command_palette/test_run_on_select.py
@@ -37,7 +37,7 @@ async def test_with_run_on_select_on() -> None:
         assert isinstance(pilot.app, CommandPaletteRunOnSelectApp)
         pilot.app.action_command_palette()
         await pilot.press("0")
-        await pilot.app.query_one(CommandPalette).workers.wait_for_complete()
+        await pilot.app.screen.workers.wait_for_complete()
         await pilot.press("down")
         await pilot.press("enter")
         assert pilot.app.selection is not None
@@ -57,11 +57,11 @@ async def test_with_run_on_select_off() -> None:
         assert isinstance(pilot.app, CommandPaletteDoNotRunOnSelectApp)
         pilot.app.action_command_palette()
         await pilot.press("0")
-        await pilot.app.query_one(CommandPalette).workers.wait_for_complete()
+        await pilot.app.screen.workers.wait_for_complete()
         await pilot.press("down")
         await pilot.press("enter")
         assert pilot.app.selection is None
-        assert pilot.app.query_one(Input).value != ""
+        assert pilot.app.screen.query_one(Input).value != ""
         await pilot.press("enter")
         assert pilot.app.selection is not None
         CommandPalette.run_on_select = save
diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
--- a/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
+++ b/tests/snapshot_tests/__snapshots__/test_snapshots.ambr
@@ -2988,136 +2988,137 @@
           font-weight: 700;
       }
   
-      .terminal-3973201778-matrix {
+      .terminal-3683073661-matrix {
           font-family: Fira Code, monospace;
           font-size: 20px;
           line-height: 24.4px;
           font-variant-east-asian: full-width;
       }
   
-      .terminal-3973201778-title {
+      .terminal-3683073661-title {
           font-size: 18px;
           font-weight: bold;
           font-family: arial;
       }
   
-      .terminal-3973201778-r1 { fill: #a2a2a2 }
-  .terminal-3973201778-r2 { fill: #c5c8c6 }
-  .terminal-3973201778-r3 { fill: #004578 }
-  .terminal-3973201778-r4 { fill: #00ff00 }
-  .terminal-3973201778-r5 { fill: #e2e3e3 }
-  .terminal-3973201778-r6 { fill: #1e1e1e }
-  .terminal-3973201778-r7 { fill: #fea62b;font-weight: bold }
+      .terminal-3683073661-r1 { fill: #a2a2a2 }
+  .terminal-3683073661-r2 { fill: #c5c8c6 }
+  .terminal-3683073661-r3 { fill: #004578 }
+  .terminal-3683073661-r4 { fill: #00ff00 }
+  .terminal-3683073661-r5 { fill: #24292f }
+  .terminal-3683073661-r6 { fill: #e2e3e3 }
+  .terminal-3683073661-r7 { fill: #1e1e1e }
+  .terminal-3683073661-r8 { fill: #fea62b;font-weight: bold }
       </style>
   
       <defs>
-      <clipPath id="terminal-3973201778-clip-terminal">
+      <clipPath id="terminal-3683073661-clip-terminal">
         <rect x="0" y="0" width="975.0" height="584.5999999999999" />
       </clipPath>
-      <clipPath id="terminal-3973201778-line-0">
+      <clipPath id="terminal-3683073661-line-0">
       <rect x="0" y="1.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-1">
+  <clipPath id="terminal-3683073661-line-1">
       <rect x="0" y="25.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-2">
+  <clipPath id="terminal-3683073661-line-2">
       <rect x="0" y="50.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-3">
+  <clipPath id="terminal-3683073661-line-3">
       <rect x="0" y="74.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-4">
+  <clipPath id="terminal-3683073661-line-4">
       <rect x="0" y="99.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-5">
+  <clipPath id="terminal-3683073661-line-5">
       <rect x="0" y="123.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-6">
+  <clipPath id="terminal-3683073661-line-6">
       <rect x="0" y="147.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-7">
+  <clipPath id="terminal-3683073661-line-7">
       <rect x="0" y="172.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-8">
+  <clipPath id="terminal-3683073661-line-8">
       <rect x="0" y="196.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-9">
+  <clipPath id="terminal-3683073661-line-9">
       <rect x="0" y="221.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-10">
+  <clipPath id="terminal-3683073661-line-10">
       <rect x="0" y="245.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-11">
+  <clipPath id="terminal-3683073661-line-11">
       <rect x="0" y="269.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-12">
+  <clipPath id="terminal-3683073661-line-12">
       <rect x="0" y="294.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-13">
+  <clipPath id="terminal-3683073661-line-13">
       <rect x="0" y="318.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-14">
+  <clipPath id="terminal-3683073661-line-14">
       <rect x="0" y="343.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-15">
+  <clipPath id="terminal-3683073661-line-15">
       <rect x="0" y="367.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-16">
+  <clipPath id="terminal-3683073661-line-16">
       <rect x="0" y="391.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-17">
+  <clipPath id="terminal-3683073661-line-17">
       <rect x="0" y="416.3" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-18">
+  <clipPath id="terminal-3683073661-line-18">
       <rect x="0" y="440.7" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-19">
+  <clipPath id="terminal-3683073661-line-19">
       <rect x="0" y="465.1" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-20">
+  <clipPath id="terminal-3683073661-line-20">
       <rect x="0" y="489.5" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-21">
+  <clipPath id="terminal-3683073661-line-21">
       <rect x="0" y="513.9" width="976" height="24.65"/>
               </clipPath>
-  <clipPath id="terminal-3973201778-line-22">
+  <clipPath id="terminal-3683073661-line-22">
       <rect x="0" y="538.3" width="976" height="24.65"/>
               </clipPath>
       </defs>
   
-      <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="633.6" rx="8"/><text class="terminal-3973201778-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">CommandPaletteApp</text>
+      <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="992" height="633.6" rx="8"/><text class="terminal-3683073661-title" fill="#c5c8c6" text-anchor="middle" x="496" y="27">CommandPaletteApp</text>
               <g transform="translate(26,22)">
               <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
               <circle cx="22" cy="0" r="7" fill="#febc2e"/>
               <circle cx="44" cy="0" r="7" fill="#28c840"/>
               </g>
           
-      <g transform="translate(9, 41)" clip-path="url(#terminal-3973201778-clip-terminal)">
+      <g transform="translate(9, 41)" clip-path="url(#terminal-3683073661-clip-terminal)">
       <rect fill="#1a1a1a" x="0" y="1.5" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="25.9" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="50.3" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="74.7" width="854" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="74.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="74.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="99.1" width="36.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="97.6" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="109.8" y="99.1" width="793" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="902.8" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="99.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="99.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="123.5" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="97.6" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="109.8" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#e1e1e1" x="122" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="134.2" y="123.5" width="768.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="902.8" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="123.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="123.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="147.9" width="24.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="97.6" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="109.8" y="147.9" width="793" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="902.8" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="147.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="147.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="172.3" width="878.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="172.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="196.7" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="196.7" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="196.7" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="196.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="196.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="221.1" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="221.1" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="221.1" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="221.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="221.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="245.5" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="245.5" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="245.5" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="245.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="245.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="269.9" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="269.9" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="269.9" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="269.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="269.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="294.3" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="294.3" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="294.3" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="294.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="294.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="318.7" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="318.7" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="318.7" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="318.7" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="318.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="343.1" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="343.1" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="343.1" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="343.1" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="343.1" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="367.5" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="367.5" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="367.5" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="367.5" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="367.5" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="391.9" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="391.9" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="391.9" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="391.9" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="391.9" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="61" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="73.2" y="416.3" width="97.6" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="170.8" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="183" y="416.3" width="244" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="427" y="416.3" width="488" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="915" y="416.3" width="12.2" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="416.3" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#24292f" x="48.8" y="440.7" width="878.4" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="927.2" y="440.7" width="48.8" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="465.1" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="489.5" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="513.9" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="538.3" width="976" height="24.65" shape-rendering="crispEdges"/><rect fill="#1a1a1a" x="0" y="562.7" width="976" height="24.65" shape-rendering="crispEdges"/>
-      <g class="terminal-3973201778-matrix">
-      <text class="terminal-3973201778-r2" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3973201778-line-0)">
-  </text><text class="terminal-3973201778-r2" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-1)">
-  </text><text class="terminal-3973201778-r2" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-2)">
-  </text><text class="terminal-3973201778-r3" x="48.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-3)">▔</text><text class="terminal-3973201778-r3" x="61" y="93.2" textLength="854" clip-path="url(#terminal-3973201778-line-3)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-3973201778-r3" x="915" y="93.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-3)">▔</text><text class="terminal-3973201778-r2" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-3)">
-  </text><text class="terminal-3973201778-r2" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-4)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="142" textLength="12.2" clip-path="url(#terminal-3973201778-line-5)">🔎</text><text class="terminal-3973201778-r5" x="109.8" y="142" textLength="12.2" clip-path="url(#terminal-3973201778-line-5)">A</text><text class="terminal-3973201778-r2" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3973201778-line-5)">
-  </text><text class="terminal-3973201778-r2" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-6)">
-  </text><text class="terminal-3973201778-r2" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-7)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="215.2" textLength="97.6" clip-path="url(#terminal-3973201778-line-8)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-8)">a</text><text class="terminal-3973201778-r5" x="183" y="215.2" textLength="244" clip-path="url(#terminal-3973201778-line-8)">&#160;test&#160;of&#160;this&#160;code&#160;9</text><text class="terminal-3973201778-r2" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-8)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="239.6" textLength="97.6" clip-path="url(#terminal-3973201778-line-9)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="239.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-9)">a</text><text class="terminal-3973201778-r5" x="183" y="239.6" textLength="244" clip-path="url(#terminal-3973201778-line-9)">&#160;test&#160;of&#160;this&#160;code&#160;8</text><text class="terminal-3973201778-r2" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-9)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="264" textLength="97.6" clip-path="url(#terminal-3973201778-line-10)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="264" textLength="12.2" clip-path="url(#terminal-3973201778-line-10)">a</text><text class="terminal-3973201778-r5" x="183" y="264" textLength="244" clip-path="url(#terminal-3973201778-line-10)">&#160;test&#160;of&#160;this&#160;code&#160;7</text><text class="terminal-3973201778-r2" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3973201778-line-10)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="288.4" textLength="97.6" clip-path="url(#terminal-3973201778-line-11)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-11)">a</text><text class="terminal-3973201778-r5" x="183" y="288.4" textLength="244" clip-path="url(#terminal-3973201778-line-11)">&#160;test&#160;of&#160;this&#160;code&#160;6</text><text class="terminal-3973201778-r2" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-11)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="312.8" textLength="97.6" clip-path="url(#terminal-3973201778-line-12)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="312.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-12)">a</text><text class="terminal-3973201778-r5" x="183" y="312.8" textLength="244" clip-path="url(#terminal-3973201778-line-12)">&#160;test&#160;of&#160;this&#160;code&#160;5</text><text class="terminal-3973201778-r2" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-12)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="337.2" textLength="97.6" clip-path="url(#terminal-3973201778-line-13)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-13)">a</text><text class="terminal-3973201778-r5" x="183" y="337.2" textLength="244" clip-path="url(#terminal-3973201778-line-13)">&#160;test&#160;of&#160;this&#160;code&#160;4</text><text class="terminal-3973201778-r2" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-13)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="361.6" textLength="97.6" clip-path="url(#terminal-3973201778-line-14)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="361.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-14)">a</text><text class="terminal-3973201778-r5" x="183" y="361.6" textLength="244" clip-path="url(#terminal-3973201778-line-14)">&#160;test&#160;of&#160;this&#160;code&#160;3</text><text class="terminal-3973201778-r2" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-14)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="386" textLength="97.6" clip-path="url(#terminal-3973201778-line-15)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="386" textLength="12.2" clip-path="url(#terminal-3973201778-line-15)">a</text><text class="terminal-3973201778-r5" x="183" y="386" textLength="244" clip-path="url(#terminal-3973201778-line-15)">&#160;test&#160;of&#160;this&#160;code&#160;2</text><text class="terminal-3973201778-r2" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3973201778-line-15)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="410.4" textLength="97.6" clip-path="url(#terminal-3973201778-line-16)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="410.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-16)">a</text><text class="terminal-3973201778-r5" x="183" y="410.4" textLength="244" clip-path="url(#terminal-3973201778-line-16)">&#160;test&#160;of&#160;this&#160;code&#160;1</text><text class="terminal-3973201778-r2" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-16)">
-  </text><text class="terminal-3973201778-r5" x="73.2" y="434.8" textLength="97.6" clip-path="url(#terminal-3973201778-line-17)">This&#160;is&#160;</text><text class="terminal-3973201778-r7" x="170.8" y="434.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-17)">a</text><text class="terminal-3973201778-r5" x="183" y="434.8" textLength="244" clip-path="url(#terminal-3973201778-line-17)">&#160;test&#160;of&#160;this&#160;code&#160;0</text><text class="terminal-3973201778-r2" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-17)">
-  </text><text class="terminal-3973201778-r3" x="48.8" y="459.2" textLength="878.4" clip-path="url(#terminal-3973201778-line-18)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-3973201778-r2" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3973201778-line-18)">
-  </text><text class="terminal-3973201778-r2" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3973201778-line-19)">
-  </text><text class="terminal-3973201778-r2" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3973201778-line-20)">
-  </text><text class="terminal-3973201778-r2" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3973201778-line-21)">
-  </text><text class="terminal-3973201778-r2" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3973201778-line-22)">
+      <g class="terminal-3683073661-matrix">
+      <text class="terminal-3683073661-r2" x="976" y="20" textLength="12.2" clip-path="url(#terminal-3683073661-line-0)">
+  </text><text class="terminal-3683073661-r2" x="976" y="44.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-1)">
+  </text><text class="terminal-3683073661-r2" x="976" y="68.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-2)">
+  </text><text class="terminal-3683073661-r3" x="48.8" y="93.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-3)">▔</text><text class="terminal-3683073661-r3" x="61" y="93.2" textLength="854" clip-path="url(#terminal-3683073661-line-3)">▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔</text><text class="terminal-3683073661-r3" x="915" y="93.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-3)">▔</text><text class="terminal-3683073661-r2" x="976" y="93.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-3)">
+  </text><text class="terminal-3683073661-r2" x="976" y="117.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-4)">
+  </text><text class="terminal-3683073661-r5" x="73.2" y="142" textLength="12.2" clip-path="url(#terminal-3683073661-line-5)">🔎</text><text class="terminal-3683073661-r6" x="109.8" y="142" textLength="12.2" clip-path="url(#terminal-3683073661-line-5)">A</text><text class="terminal-3683073661-r2" x="976" y="142" textLength="12.2" clip-path="url(#terminal-3683073661-line-5)">
+  </text><text class="terminal-3683073661-r2" x="976" y="166.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-6)">
+  </text><text class="terminal-3683073661-r2" x="976" y="190.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-7)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="215.2" textLength="97.6" clip-path="url(#terminal-3683073661-line-8)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="215.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-8)">a</text><text class="terminal-3683073661-r6" x="183" y="215.2" textLength="244" clip-path="url(#terminal-3683073661-line-8)">&#160;test&#160;of&#160;this&#160;code&#160;9</text><text class="terminal-3683073661-r2" x="976" y="215.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-8)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="239.6" textLength="97.6" clip-path="url(#terminal-3683073661-line-9)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="239.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-9)">a</text><text class="terminal-3683073661-r6" x="183" y="239.6" textLength="244" clip-path="url(#terminal-3683073661-line-9)">&#160;test&#160;of&#160;this&#160;code&#160;8</text><text class="terminal-3683073661-r2" x="976" y="239.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-9)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="264" textLength="97.6" clip-path="url(#terminal-3683073661-line-10)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="264" textLength="12.2" clip-path="url(#terminal-3683073661-line-10)">a</text><text class="terminal-3683073661-r6" x="183" y="264" textLength="244" clip-path="url(#terminal-3683073661-line-10)">&#160;test&#160;of&#160;this&#160;code&#160;7</text><text class="terminal-3683073661-r2" x="976" y="264" textLength="12.2" clip-path="url(#terminal-3683073661-line-10)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="288.4" textLength="97.6" clip-path="url(#terminal-3683073661-line-11)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="288.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-11)">a</text><text class="terminal-3683073661-r6" x="183" y="288.4" textLength="244" clip-path="url(#terminal-3683073661-line-11)">&#160;test&#160;of&#160;this&#160;code&#160;6</text><text class="terminal-3683073661-r2" x="976" y="288.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-11)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="312.8" textLength="97.6" clip-path="url(#terminal-3683073661-line-12)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="312.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-12)">a</text><text class="terminal-3683073661-r6" x="183" y="312.8" textLength="244" clip-path="url(#terminal-3683073661-line-12)">&#160;test&#160;of&#160;this&#160;code&#160;5</text><text class="terminal-3683073661-r2" x="976" y="312.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-12)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="337.2" textLength="97.6" clip-path="url(#terminal-3683073661-line-13)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="337.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-13)">a</text><text class="terminal-3683073661-r6" x="183" y="337.2" textLength="244" clip-path="url(#terminal-3683073661-line-13)">&#160;test&#160;of&#160;this&#160;code&#160;4</text><text class="terminal-3683073661-r2" x="976" y="337.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-13)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="361.6" textLength="97.6" clip-path="url(#terminal-3683073661-line-14)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="361.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-14)">a</text><text class="terminal-3683073661-r6" x="183" y="361.6" textLength="244" clip-path="url(#terminal-3683073661-line-14)">&#160;test&#160;of&#160;this&#160;code&#160;3</text><text class="terminal-3683073661-r2" x="976" y="361.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-14)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="386" textLength="97.6" clip-path="url(#terminal-3683073661-line-15)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="386" textLength="12.2" clip-path="url(#terminal-3683073661-line-15)">a</text><text class="terminal-3683073661-r6" x="183" y="386" textLength="244" clip-path="url(#terminal-3683073661-line-15)">&#160;test&#160;of&#160;this&#160;code&#160;2</text><text class="terminal-3683073661-r2" x="976" y="386" textLength="12.2" clip-path="url(#terminal-3683073661-line-15)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="410.4" textLength="97.6" clip-path="url(#terminal-3683073661-line-16)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="410.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-16)">a</text><text class="terminal-3683073661-r6" x="183" y="410.4" textLength="244" clip-path="url(#terminal-3683073661-line-16)">&#160;test&#160;of&#160;this&#160;code&#160;1</text><text class="terminal-3683073661-r2" x="976" y="410.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-16)">
+  </text><text class="terminal-3683073661-r6" x="73.2" y="434.8" textLength="97.6" clip-path="url(#terminal-3683073661-line-17)">This&#160;is&#160;</text><text class="terminal-3683073661-r8" x="170.8" y="434.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-17)">a</text><text class="terminal-3683073661-r6" x="183" y="434.8" textLength="244" clip-path="url(#terminal-3683073661-line-17)">&#160;test&#160;of&#160;this&#160;code&#160;0</text><text class="terminal-3683073661-r2" x="976" y="434.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-17)">
+  </text><text class="terminal-3683073661-r3" x="48.8" y="459.2" textLength="878.4" clip-path="url(#terminal-3683073661-line-18)">▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁</text><text class="terminal-3683073661-r2" x="976" y="459.2" textLength="12.2" clip-path="url(#terminal-3683073661-line-18)">
+  </text><text class="terminal-3683073661-r2" x="976" y="483.6" textLength="12.2" clip-path="url(#terminal-3683073661-line-19)">
+  </text><text class="terminal-3683073661-r2" x="976" y="508" textLength="12.2" clip-path="url(#terminal-3683073661-line-20)">
+  </text><text class="terminal-3683073661-r2" x="976" y="532.4" textLength="12.2" clip-path="url(#terminal-3683073661-line-21)">
+  </text><text class="terminal-3683073661-r2" x="976" y="556.8" textLength="12.2" clip-path="url(#terminal-3683073661-line-22)">
   </text>
       </g>
       </g>
diff --git a/tests/snapshot_tests/test_snapshots.py b/tests/snapshot_tests/test_snapshots.py
--- a/tests/snapshot_tests/test_snapshots.py
+++ b/tests/snapshot_tests/test_snapshots.py
@@ -703,15 +703,12 @@ async def run_before(pilot) -> None:
 
 
 def test_command_palette(snap_compare) -> None:
-    from textual.command import CommandPalette
 
     async def run_before(pilot) -> None:
-        palette = pilot.app.query_one(CommandPalette)
-        palette_input = palette.query_one(Input)
-        palette_input.cursor_blink = False
-        await pilot.press("ctrl+backslash")
+        #await pilot.press("ctrl+backslash")
+        pilot.app.screen.query_one(Input).cursor_blink = False
         await pilot.press("A")
-        await pilot.app.query_one(CommandPalette).workers.wait_for_complete()
+        await pilot.app.screen.workers.wait_for_complete()
 
     assert snap_compare(SNAPSHOT_APPS_DIR / "command_palette.py", run_before=run_before)