Repository: dynobo/normcap (language: python)

Issue:
The application does not remain in Tray after restarting the computer
### Describe your problem:

The application does not remain in Tray after restarting the computer.

### Solution you'd like to see:

An option that allows applications to be nested in the Tray.

### Alternatives you considered:

_No response_

### Additional information or remarks:

Adding the application to Autostart does not solve the problem because the scan starts immediately.


Discussion / hints:
Hi @Pawwwle , please use the `--background-mode` flag to start NormCap in background (in tray without capture at start). See also [this entry in the FAQs](https://dynobo.github.io/normcap/#faqs-start-in-background). 
Does that solve this issue?
I don't know if I did it right, but it still doesn't work. The application does not remain in the system tray after restarting the computer.

![Zrzut ekranu 2023-09-19 195435](https://github.com/dynobo/normcap/assets/115624603/0f9e46e8-3ba8-4dad-b19c-cac5b5e0f245)

@Pawwwle, which NormCap version are you running? (`normcap.exe --version`).
The switch `--background-mode` was introduced in v0.4.3. If it's not working for you, than that might be a bug. If this is the case, can you please run `normcap.exe -v debug` and post its output here?

**Edit:** Oh, I think there is a misunderstanding: `normcap.exe --background-mode` doesn't restart NormCap when the computer is restarted. You still have to configure the autostart yourself (as it depends a lot on the system and your preferences, how this should be done). It's just the command, that you should be put [e.g. into Windows Startup Folder or Task Scheduler](https://www.howtogeek.com/208224/how-to-add-a-program-to-startup-in-windows/) _yourself_, because it enables tray without showing the capture screen immediately. Or as stated in `normcap --help`:
```
  --background-mode     Start minimized to tray, without capturing
```

Note to myself: I should add an "How to autostart NormCap on boot?" to the FAQs

Fix patch:
diff --git a/bundle/deps.py b/bundle/deps.py
index 99a2b724..76404796 100644
--- a/bundle/deps.py
+++ b/bundle/deps.py
@@ -42,10 +42,9 @@ def run(cmd: str, check: bool = True) -> str:
 
 
 def display_manager_is_wayland() -> bool:
-    """Identify relevant display managers (Linux)."""
     xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "").lower()
-    wayland_display = os.environ.get("WAYLAND_DISPLAY", "").lower()
-    return "wayland" in wayland_display or "wayland" in xdg_session_type
+    has_wayland_display_env = os.environ.get("WAYLAND_DISPLAY", "") != ""
+    return "wayland" in xdg_session_type or has_wayland_display_env
 
 
 def identify_system() -> System:
diff --git a/docs/index.html b/docs/index.html
index e1ef1686..cfab3e84 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -353,530 +353,610 @@ <h2>Frequently Asked Questions</h2>
           <h3>A knowledge base for common issues and additional information.</h3>
         </div>
         <h4>General</h4>
-        <details id="faqs-languages">
-          <summary>How can I add additional languages to NormCap?</summary>
-          <p>
-            The <strong>prebuilt packages</strong> are shipped with support for English
-            only. To install additional languages, click the settings icon and in the
-            "Languages" section of the menu "add/remove...".
-          </p>
-          <p>
-            If you installed NormCap as <strong>Python package</strong>, refer to the
-            online documentation on how to install additional language for Tesseract on
-            your system.
-          </p>
-        </details>
-        <details id="faqs-improve-detection">
-          <summary>How can I improve the detection accuracy?</summary>
-          <p>
-            The quality of detections is mainly determined by
-            <a href="https://tesseract-ocr.github.io">Tesseract</a>, an open source
-            project for OCR mainly of <i>printed</i> text. NormCap builds upon this
-            great library and can influence the quality only a bit by preprocessing the
-            images regarding screen specific properties. <i>You</i>, the user, have much
-            more influence on the quality by paying attention to certain aspects:
-          </p>
-          <ol>
-            <li>
-              <b>Select the correct language</b> &ndash; To specify the correct
-              language(s) in the settings menu is the very important. But keep in mind:
-              selecting multiple languages at once slows down the recognition a bit.
-            </li>
-            <li>
-              <b>Avoid selecting decorations</b> &ndash; The text detection is very
-              sensible to elements <i>other</i> than text, for example borders, lines or
-              icons. If possible, do not select those:<br />
-              <img src="img/selections_1.png" alt="How to avoid borders" /><br />
-            </li>
-            <li>
-              <b>Avoid heterogeneous colors</b> &ndash; If the text you want to
-              recognize has different backgrounds, it can help to select those portions
-              of text separately:<br />
-              <img
-                src="img/selections_2.png"
-                alt="How to split sections with different colors in mulitple selection"
-              />
-            </li>
-            <li>
-              <b>Zoom in</b> &ndash; If possible, enlarge the region you want to detect,
-              before selecting it with NormCap. This has a huge effect in situations,
-              where zooming in doesn't decrease the quality, e.g. zooming into webpages,
-              PDF documents or images which are not yet at their full resolution. It has
-              little effect, if enlarging decreases the quality, e.g. for images with
-              low resolutions.
-            </li>
-            <li>
-              <b>Select more text</b> &ndash; Sometimes Tesseract struggles with
-              recognizing text with only very few characters, like a single word. In
-              this case, selecting a larger portion of text can improve the accuracy.
-            </li>
-            <li>
-              <b>Try different language models</b> &ndash; The prebuilt NormCap packages
-              are using
-              <a href="https://github.com/tesseract-ocr/tessdata_fast" target="_blank"
-                >tessdata-fast</a
-              >
-              models, which offer a very good accuracy to speed compromise. But you can
-              also try the slower and larger models from
-              <a href="https://github.com/tesseract-ocr/tessdata" target="_blank"
-                >tessdata</a
-              >
-              or
-              <a href="https://github.com/tesseract-ocr/tessdata_best" target="_blank"
-                >tessdata-best</a
-              >
-              instead.<br />
-              To find the directory in which you have to put the manually downloaded
-              models navigate to the "Language" section of NormCap's settings, then
-              click "add/remove" and finally "View tessdata folder in File Manager".
-            </li>
-            <li>
-              <b>Report examples</b> &ndash; If the results are still bad, please submit
-              a screenshot of the text you are trying to recognize
-              <a href="https://github.com/dynobo/normcap/issues">as an issue</a>.
-              Chances are small, but we might be able to improve something.
-            </li>
-          </ol>
-        </details>
-        <details id="faqs-cloud">
-          <summary>Is my image/text analyzed in The Cloud™?</summary>
-          <p>
-            No. The text recognition is performed offline using the OCR framework
-            <a href="https://github.com/tesseract-ocr/tesseract" target="_blank"
-              >Tesseract</a
-            >.
-          </p>
-        </details>
-        <details id="faqs-data-sent">
-          <summary>Is any other data send to the internet?</summary>
-          <p>
-            No telemetry data is collected and by default also no other data is sent
-            anywhere.
-          </p>
-          <p>
-            However, some (optional) features require accessing resources on the web and
-            therefore expose minimal information (like IP address) to the accessed
-            server:
-          </p>
-          <ul>
-            <li>
-              If you enable the check for updates on start, the application checks
-              NormCap's releases page on GitHub.
-            </li>
-            <li>
-              If you download additional languages, they are being fetched from GitHub,
-              too.
-            </li>
-          </ul>
-        </details>
-        <details id="faqs-shortcuts">
-          <summary>Can I start NormCap via a keyboard shortcut?</summary>
-          <p>
-            Yes, but you'll have to configure it on your own using your operating
-            system's tools:
-          </p>
-          <ul>
-            <li>
-              Linux:
-              <ul>
-                <li>
-                  Ubuntu/Gnome:
-                  <a
-                    href="https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html"
-                    >Set Keyboard Shortcuts</a
-                  >
-                </li>
-                <li>
-                  Manjaro/Xfce, Plasma:
-                  <a href="https://wiki.manjaro.org/index.php?title=Keyboard_Shortcuts"
-                    >Keyboard Shortcuts</a
-                  >
-                </li>
-              </ul>
-            </li>
-            <li>
-              macOS:
-              <a href="https://www.wikihow.com/Set-a-Keyboard-Shortcut-to-Open-Mac-Apps"
-                >Set a keyboard shortcut to open Mac apps</a
-              >
-            </li>
-            <li>
-              Windows 10:
-              <a
-                href="https://www.cnet.com/tech/computing/open-programs-with-keyboard-shortcuts-in-windows-10/"
-                >Open programs with keyboard shortcuts in Windows 10</a
-              >
-            </li>
-          </ul>
-          <p>
-            Ask your preferred search engine for support or different ways to do this.
-          </p>
-        </details>
-        <details id="faqs-start-in-background">
-          <summary>How can I start NormCap in the background?</summary>
-          <p>
-            To launch NormCap minimized to system tray without triggering a capture, use
-            the <code>background-mode</code> command line flag. This is e.g. useful, if
-            you want to autostart NormCap after system start.
-          </p>
-          <p>
-            Note that <code>--background-mode</code> automatically enables the setting
-            "Keep in system tray"!
-          </p>
-        </details>
-        <details id="faqs-windows-file-size">
-          <summary>Why is the Windows-Installer's file size so large?</summary>
-          <p>
-            NormCap's MSI installer is much larger than the ones for Linux and macOS
-            because the included
-            <a href="https://tesseract-ocr.github.io/">Tesseract</a> binaries are
-            larger.
-          </p>
-          <p>
-            NormCap used to include a set of smaller binaries, which resulted in more
-            consistent installer file sizes for all operating systems. Unfortunately,
-            they seemed to lack some dependencies and lead to issues on some Windows
-            systems. Hopefully, the larger binaries will fix this issue. This decision
-            is not set in stone, so please
-            <a href="https://github.com/dynobo/normcap/discussions"
-              >feel free to leave some feedback</a
-            >
-            regarding this topic!
-          </p>
-        </details>
-        <details id="faqs-alternatives">
-          <summary>Are there alternatives to NormCap?</summary>
-          <p>
-            Some applications offer similar features like NormCap and might be a good or
-            even better alternative for you: It completely depends on your use case and
-            requirements. Some similar open-source Projects are:
-          </p>
-          <ul>
-            <li>
-              <a href="https://github.com/RajSolai/TextSnatcher" target="_blank"
-                >TextSnatcher</a
-              >
-            </li>
-            <li>
-              <a href="https://getgreenshot.org" target="_blank">GreenShot</a>
-            </li>
-            <li>
-              <a href="https://github.com/ianzhao05/textshot" target="_blank"
-                >TextShot</a
-              >
-            </li>
-            <li>
-              <a href="https://github.com/manisandro/gImageReader" target="_blank"
-                >gImageReader</a
-              >
-            </li>
-            <li>
-              <a href="https://sourceforge.net/projects/capture2text" target="_blank"
-                >Capture2Text</a
-              >
-            </li>
-            <li>
-              <a href="https://github.com/TenderOwl/Frog" target="_blank">Frog</a>
-            </li>
-            <li>
-              <a href="https://github.com/RhetTbull/textinator" target="_blank"
-                >Textinator</a
+        <div>
+          <details id="faqs-improve-detection">
+            <summary>How can I improve the detection accuracy?</summary>
+            <p>
+              The quality of detections is mainly determined by
+              <a href="https://tesseract-ocr.github.io">Tesseract</a>, an open source
+              project for OCR mainly of <i>printed</i> text. NormCap builds upon this
+              great library and can influence the quality only a bit by preprocessing
+              the images regarding screen specific properties. <i>You</i>, the user,
+              have much more influence on the quality by paying attention to certain
+              aspects:
+            </p>
+            <ol>
+              <li>
+                <b>Select the correct language</b> &ndash; To specify the correct
+                language(s) in the settings menu is the very important. But keep in
+                mind: selecting multiple languages at once slows down the recognition a
+                bit.
+              </li>
+              <li>
+                <b>Avoid selecting decorations</b> &ndash; The text detection is very
+                sensible to elements <i>other</i> than text, for example borders, lines
+                or icons. If possible, do not select those:<br />
+                <img src="img/selections_1.png" alt="How to avoid borders" /><br />
+              </li>
+              <li>
+                <b>Avoid heterogeneous colors</b> &ndash; If the text you want to
+                recognize has different backgrounds, it can help to select those
+                portions of text separately:<br />
+                <img
+                  src="img/selections_2.png"
+                  alt="How to split sections with different colors in multiple selection"
+                />
+              </li>
+              <li>
+                <b>Zoom in</b> &ndash; If possible, enlarge the region you want to
+                detect, before selecting it with NormCap. This has a huge effect in
+                situations, where zooming in doesn't decrease the quality, e.g. zooming
+                into webpages, PDF documents or images which are not yet at their full
+                resolution. It has little effect, if enlarging decreases the quality,
+                e.g. for images with low resolutions.
+              </li>
+              <li>
+                <b>Select more text</b> &ndash; Sometimes Tesseract struggles with
+                recognizing text with only very few characters, like a single word. In
+                this case, selecting a larger portion of text can improve the accuracy.
+              </li>
+              <li>
+                <b>Try different language models</b> &ndash; The prebuilt NormCap
+                packages are using
+                <a href="https://github.com/tesseract-ocr/tessdata_fast" target="_blank"
+                  >tessdata-fast</a
+                >
+                models, which offer a very good accuracy to speed compromise. But you
+                can also try the slower and larger models from
+                <a href="https://github.com/tesseract-ocr/tessdata" target="_blank"
+                  >tessdata</a
+                >
+                or
+                <a href="https://github.com/tesseract-ocr/tessdata_best" target="_blank"
+                  >tessdata-best</a
+                >
+                instead.<br />
+                To find the directory in which you have to put the manually downloaded
+                models navigate to the "Language" section of NormCap's settings, then
+                click "add/remove" and finally "View tessdata folder in File Manager".
+              </li>
+              <li>
+                <b>Report examples</b> &ndash; If the results are still bad, please
+                submit a screenshot of the text you are trying to recognize
+                <a href="https://github.com/dynobo/normcap/issues">as an issue</a>.
+                Chances are small, but we might be able to improve something.
+              </li>
+            </ol>
+          </details>
+          <details id="faqs-start-via-cli">
+            <summary>How can I start NormCap via command line interface?</summary>
+            <p>
+              The command to run NormCap from the terminal/console depends on your
+              operating system and installation method:
+            </p>
+            <ul>
+              <li>
+                <strong>On Windows (MSI):</strong><br />
+                <p>
+                  <code>%LOCALAPPDATA%\Programs\NormCap\NormCap.exe</code>
+                </p>
+              </li>
+              <li>
+                <strong>On macOS (DMG):</strong>
+                <p>
+                  Run:
+                  <code>/Applications/NormCap.app/Contents/MacOS/NormCap</code>
+                </p>
+              </li>
+              <li>
+                <strong>On Linux (AppImage):</strong>
+                <p>Run: <code>./NormCap-{version}-x86_64.AppImage</code></p>
+              </li>
+              <li>
+                <strong>On Linux (FlatPak):</strong>
+                <p>
+                  Run:
+                  <code>flatpak run --command=normcap com.github.dynobo.normcap</code>
+                </p>
+              </li>
+              <li>
+                <strong>On Linux (AUR):</strong>
+                <p>Run: <code>normcap</code></p>
+              </li>
+              <li>
+                <strong>Installed as Python package:</strong><br />
+                <p>Run: <code>normcap</code></p>
+              </li>
+            </ul>
+            <p>
+              NormCap has some useful command line feature, you can list them by
+              appending the flag <code> --help</code> to the command mentioned above.
+            </p>
+          </details>
+          <details id="faqs-shortcuts">
+            <summary>How can I start NormCap via a keyboard shortcut?</summary>
+            <p>
+              You'll have to configure that using your operating system's functionality,
+              e.g. following these guides:
+            </p>
+            <ul>
+              <li>
+                Linux:
+                <ul>
+                  <li>
+                    Ubuntu/Gnome:
+                    <a
+                      href="https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html"
+                      >Set Keyboard Shortcuts</a
+                    >
+                  </li>
+                  <li>
+                    Manjaro/Xfce, Plasma:
+                    <a
+                      href="https://wiki.manjaro.org/index.php?title=Keyboard_Shortcuts"
+                      >Keyboard Shortcuts</a
+                    >
+                  </li>
+                </ul>
+              </li>
+              <li>
+                macOS:
+                <a
+                  href="https://www.wikihow.com/Set-a-Keyboard-Shortcut-to-Open-Mac-Apps"
+                  >Set a keyboard shortcut to open Mac apps</a
+                >
+              </li>
+              <li>
+                Windows 10:
+                <a
+                  href="https://www.cnet.com/tech/computing/open-programs-with-keyboard-shortcuts-in-windows-10/"
+                  >Open programs with keyboard shortcuts in Windows 10</a
+                >
+              </li>
+            </ul>
+            <p>
+              To identify the command to run NormCap, please see the FAQs entry
+              <a href="#faqs-start-via-cli"
+                >How can I start NormCap via command line interface?</a
               >
-            </li>
-            <li>
-              <a href="https://github.com/TheJoeFin/Text-Grab" target="_blank"
-                >Text-Grab</a
+            </p>
+          </details>
+          <details id="faqs-autostart">
+            <summary>How can I run NormCap automatically on system start?</summary>
+            <p>
+              Use your operating system's functionality to autostart applications after
+              boot. You can find guides on the internet, e.g.:
+            </p>
+            <ul>
+              <li>
+                Windows:
+                <a
+                  href="https://www.howtogeek.com/208224/how-to-add-a-program-to-startup-in-windows/"
+                  >How to Add a Program to Startup in Windows 10 or 11</a
+                >
+              </li>
+              <li>
+                macOS:
+                <a
+                  href="https://www.howtogeek.com/877239/how-to-change-startup-programs-on-a-mac/#how-to-add-a-startup-program-on-a-mac"
+                  >How to add a startup program on a Mac</a
+                >
+              </li>
+              <li>
+                Linux (Gnome):
+                <a
+                  href="https://www.simplified.guide/gnome/automatically-run-program-on-startup"
+                  >Automatically run program on startup</a
+                >
+              </li>
+              <li>
+                Linux (KDE):
+                <a
+                  href="https://www.simplified.guide/kde/automatically-run-program-on-startup"
+                  >How to automatically run program on KDE startup</a
+                >
+              </li>
+            </ul>
+            <p>
+              <strong>Important:</strong> Add the <code>--background-mode</code> flag to
+              the <a href="#faqs-start-via-cli">command used to start NormCap</a> to
+              launch NormCap minimized to system tray without triggering a capture on
+              application start.
+            </p>
+          </details>
+          <details id="faqs-run-in-background">
+            <summary>How can I start NormCap in the background?</summary>
+            <p>
+              First identify the command to run NormCap on your system as described in
+              the FAQ
+              <a href="#faqs-start-via-cli"
+                >How can I start NormCap via command line interface?</a
               >
-            </li>
-            <li>
-              <a href="https://github.com/TheJoeFin/Text-Grab" target="_blank"
-                >dpScreenOCR</a
+            </p>
+            <p>
+              To this command, append the flag
+              <code>--background-mode</code> to start NormCap right into the system
+              tray, without triggering a capture.
+            </p>
+            <p>
+              This is e.g. useful, if, you want to autostart NormCap after system start.
+            </p>
+          </details>
+          <details id="faqs-languages">
+            <summary>How can I add additional languages to NormCap?</summary>
+            <p>
+              The <strong>prebuilt packages</strong> are shipped with support for
+              English only. To install additional languages, click the settings icon and
+              in the "Languages" section of the menu "add/remove...".
+            </p>
+            <p>
+              If you installed NormCap as <strong>Python package</strong>, refer to the
+              online documentation on how to install additional language for Tesseract
+              on your system.
+            </p>
+          </details>
+          <details id="faqs-windows-file-size">
+            <summary>Why is the Windows-Installer's file size so large?</summary>
+            <p>
+              NormCap's MSI installer is much larger than the ones for Linux and macOS
+              because the included
+              <a href="https://tesseract-ocr.github.io/">Tesseract</a> binaries are
+              larger.
+            </p>
+            <p>
+              NormCap used to include a set of smaller binaries, which resulted in more
+              consistent installer file sizes for all operating systems. Unfortunately,
+              they seemed to lack some dependencies and lead to issues on some Windows
+              systems. Hopefully, the larger binaries will fix this issue. This decision
+              is not set in stone, so please
+              <a href="https://github.com/dynobo/normcap/discussions"
+                >feel free to leave some feedback</a
               >
-            </li>
-          </ul>
-        </details>
+              regarding this topic!
+            </p>
+          </details>
+          <details id="faqs-cloud">
+            <summary>Is my image/text analyzed in The Cloud™?</summary>
+            <p>
+              No. The text recognition is performed offline using the OCR framework
+              <a href="https://github.com/tesseract-ocr/tesseract" target="_blank"
+                >Tesseract</a
+              >.
+            </p>
+          </details>
+          <details id="faqs-data-sent">
+            <summary>Is any other data send to the internet?</summary>
+            <p>
+              No telemetry data is collected and by default also no other data is sent
+              anywhere.
+            </p>
+            <p>
+              However, some (optional) features require accessing resources on the web
+              and therefore expose minimal information (like IP address) to the accessed
+              server:
+            </p>
+            <ul>
+              <li>
+                If you enable the check for updates on start, the application checks
+                NormCap's releases page on GitHub.
+              </li>
+              <li>
+                If you download additional languages, they are being fetched from
+                GitHub, too.
+              </li>
+            </ul>
+          </details>
+          <details id="faqs-alternatives">
+            <summary>Are there alternatives to NormCap?</summary>
+            <p>
+              Some applications offer similar features like NormCap and might be a good
+              or even better alternative for you: It completely depends on your use case
+              and requirements. Some similar open-source Projects are:
+            </p>
+            <ul>
+              <li>
+                <a href="https://github.com/RajSolai/TextSnatcher" target="_blank"
+                  >TextSnatcher</a
+                >
+              </li>
+              <li>
+                <a href="https://getgreenshot.org" target="_blank">GreenShot</a>
+              </li>
+              <li>
+                <a href="https://github.com/ianzhao05/textshot" target="_blank"
+                  >TextShot</a
+                >
+              </li>
+              <li>
+                <a href="https://github.com/manisandro/gImageReader" target="_blank"
+                  >gImageReader</a
+                >
+              </li>
+              <li>
+                <a href="https://sourceforge.net/projects/capture2text" target="_blank"
+                  >Capture2Text</a
+                >
+              </li>
+              <li>
+                <a href="https://github.com/TenderOwl/Frog" target="_blank">Frog</a>
+              </li>
+              <li>
+                <a href="https://github.com/RhetTbull/textinator" target="_blank"
+                  >Textinator</a
+                >
+              </li>
+              <li>
+                <a href="https://github.com/TheJoeFin/Text-Grab" target="_blank"
+                  >Text-Grab</a
+                >
+              </li>
+              <li>
+                <a href="https://github.com/TheJoeFin/Text-Grab" target="_blank"
+                  >dpScreenOCR</a
+                >
+              </li>
+            </ul>
+          </details>
+        </div>
         <h4>Troubleshooting</h4>
-        <details id="faqs-debug">
-          <summary>How to get debug information?</summary>
-          <p>
-            You can start NormCap from the command line with the verbosity option to get
-            an idea about what it is doing. The command to run depends on the OS and
-            install method.
-          </p>
-          <ul>
-            <li>
-              <strong>With Python package:</strong><br />
-              <p>Run: <code>normcap -v debug</code></p>
-            </li>
-            <li>
-              <strong>On Windows (MSI):</strong><br />
-              <p>
-                Run:
-                <code>%LOCALAPPDATA%\Programs\NormCap\NormCap.exe -v debug</code>
-              </p>
-            </li>
-            <li>
-              <strong>On macOS (DMG):</strong>
-              <p>
-                Run:
-                <code>/Applications/NormCap.app/Contents/MacOS/NormCap -v debug</code>
-              </p>
-            </li>
-            <li>
-              <strong>On Linux (AppImage):</strong>
-              <p>Run: <code>./NormCap-{version}-x86_64.AppImage -v debug</code></p>
-            </li>
-            <li>
-              <strong>On Linux (FlatPak):</strong>
-              <p>
-                Run:
-                <code
-                  >flatpak run --command=normcap com.github.dynobo.normcap -v
-                  debug</code
+        <div>
+          <details id="faqs-debug">
+            <summary>How to get debug information?</summary>
+            <p>
+              Launch NormCap via a terminal/console using
+              <a href="#faqs-start-via-cli">the right command for your system</a>, to
+              which you can append the flag <code>--verbosity debug</code> or short
+              <code>-v debug</code>. This will print additional information to the
+              console, which can be useful to identify problems.
+            </p>
+          </details>
+          <details id="faqs-is-not-starting">
+            <summary>NormCap is not starting</summary>
+            <p>
+              Please try to take a look at the
+              <a href="#faqs-debug">debug information</a>. It might provide enough
+              information for you to solve the issue for yourself. If it doesn't help
+              you, don't hesitate to
+              <a href="https://github.com/dynobo/normcap/issues">report</a> your problem
+              description together with debug information.
+            </p>
+          </details>
+          <details id="faqs-windows-upgrade-failed">
+            <summary>[Windows] Upgrading NormCap failed</summary>
+            <p>
+              Did you run the msi-installer to upgrade from an older NormCap version,
+              but the installer stated an error or the NormCap can't be started anymore?
+            </p>
+            <p>
+              You did nothing wrong, this is the recommended way to upgrade NormCap. But
+              in rare cases, this does not work, because of incompatible changes in the
+              installer between certain versions.
+            </p>
+            <p>
+              In that case, please try to uninstall all existing NormCap versions from
+              your system before trying a clean installation. (In the process, your
+              settings
+              <i>might</i> get reset, and you <i>might</i> have to re-download
+              languages.)
+            </p>
+            <p>
+              If you still experience any problems after such a clean installation,
+              please
+              <a href="https://github.com/dynobo/normcap/issues/new/choose"
+                >report that issue</a
+              >.
+            </p>
+          </details>
+          <details id="faqs-doesnt-show-system-tray">
+            <summary>[Linux] Normcap does not show up in system tray</summary>
+            <p>
+              Is your display environment Gnome Shell? Then you probably need to install
+              a
+              <a href="https://extensions.gnome.org/" target="_blank"
+                >Gnome Shell extension</a
+              >
+              to support showing applications in the top bar, e.g.:
+            </p>
+            <ul>
+              <li>
+                <a
+                  href="https://extensions.gnome.org/extension/615/appindicator-support/"
+                  target="_blank"
+                  >AppIndicator Support</a
                 >
-              </p>
-            </li>
-            <li>
-              <strong>On Linux (AUR):</strong>
-              <p>Run: <code>normcap -v debug</code></p>
-            </li>
-          </ul>
-        </details>
-        <details id="faqs-is-not-starting">
-          <summary>NormCap is not starting</summary>
-          <p>
-            Please try to take a look at the
-            <a href="#faqs-debug">debug information</a>. It might provide enough
-            information for you to solve the issue for yourself. If it doesn't help you,
-            don't hesitate to
-            <a href="https://github.com/dynobo/normcap/issues">report</a> your problem
-            description together with debug information.
-          </p>
-        </details>
-        <details id="faqs-windows-upgrade-failed">
-          <summary>[Windows] Upgrading NormCap failed</summary>
-          <p>
-            Did you run the msi-installer to upgrade from an older NormCap version, but
-            the installer stated an error or the NormCap can't be started anymore?
-          </p>
-          <p>
-            You did nothing wrong, this is the recommended way to upgrade NormCap. But
-            in rare cases, this does not work, because of incompatible changes in the
-            installer between certain versions.
-          </p>
-          <p>
-            In that case, please try to uninstall all existing NormCap versions from
-            your system before trying a clean installation. (In the process, your
-            settings
-            <i>might</i> get reset, and you <i>might</i> have to re-download languages.)
-          </p>
-          <p>
-            If you still experience any problems after such a clean installation, please
-            <a href="https://github.com/dynobo/normcap/issues/new/choose"
-              >report that issue</a
-            >.
-          </p>
-        </details>
-        <details id="faqs-doesnt-show-system-tray">
-          <summary>[Linux] Normcap does not show up in system tray</summary>
-          <p>
-            Is your display environment Gnome Shell? Then you probably need to install a
-            <a href="https://extensions.gnome.org/" target="_blank"
-              >Gnome Shell extension</a
-            >
-            to support showing applications in the top bar, e.g.:
-          </p>
-          <ul>
-            <li>
-              <a
-                href="https://extensions.gnome.org/extension/615/appindicator-support/"
-                target="_blank"
-                >AppIndicator Support</a
+              </li>
+              <li>
+                <a
+                  href="https://extensions.gnome.org/extension/1301/ubuntu-appindicators/"
+                  target="_blank"
+                  >Ubuntu AppIndicators</a
+                >
+              </li>
+              <li>
+                <a
+                  href="https://extensions.gnome.org/extension/1503/tray-icons/"
+                  target="_blank"
+                  >Tray Icons</a
+                >
+              </li>
+              <li>
+                <a
+                  href="https://extensions.gnome.org/extension/2890/tray-icons-reloaded/"
+                  target="_blank"
+                  >Tray Icons: Reloaded</a
+                >
+              </li>
+            </ul>
+          </details>
+          <details id="faqs-doesnt-show-notification">
+            <summary>[Linux] NormCap doesn't show a notification after capture</summary>
+            <p>
+              NormCap's notifications depend on the system tray functionality. If you
+              start NormCap, but its Icon doesn't appear in the system tray, proceed
+              like in the question above.
+            </p>
+          </details>
+          <details id="faqs-couldnt-load-platform-plugin">
+            <summary>[Linux] Error: Could not load the Qt platform plugin</summary>
+            <p>In case you get an output like this...</p>
+            <pre><code>$ normcap
+QtFatalMsg - This application failed to start because no Qt platform plugin
+could be initialized. Reinstalling the application may fix this problem.
+Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen,
+vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.</code></pre>
+            <p>
+              ... the chances are, this can be solved by installing additional
+              dependencies:
+            </p>
+            <ul>
+              <li>Arch (Wayland): <code>pacman -S qt6-wayland</code></li>
+              <li>Arch (Xorg): <code>pacman -S libxcb xcb-util-cursor</code></li>
+              <li>Debian/Ubuntu (Wayland): <code>apt install qt6-wayland</code></li>
+              <li>
+                Debian/Ubuntu (Xorg): <code>apt install libxcb1 libxcb-cursor0</code>
+              </li>
+              <li>Fedora (Wayland): <code>dnf install qt6-qtwayland</code></li>
+              <li>Fedora (Xorg): <code>dnf install libxcb xcb-util-cursor</code></li>
+            </ul>
+          </details>
+          <details id="faqs-shortcut-doesnt-copy-to-clipboard">
+            <summary>
+              [Linux] NormCap doesn't copy the results to clipboard when launched via
+              shortcut
+            </summary>
+            <p>
+              This is behavior
+              <a href="https://github.com/dynobo/normcap/issues/422"
+                >was observed only on KDE + Wayland (#422)</a
               >
-            </li>
-            <li>
+              so far, and only when NormCap was started via a keyboard shortcut / key
+              binding. The root cause is still unknown, if you have any information or
+              ideas, please comment in the ticket above.
+            </p>
+            <p>
+              Strangely, a workaround seems to be to configure the keyboard shortcut via
+              "System Settings" → "Shortcuts" → "Add command" and configure the command
+              in a way, that it pipes the output to somewhere, e.g. /dev/null:
+            </p>
+            <pre><code>normcap 2>&1 | tee /dev/null</code></pre>
+          </details>
+          <details id="faqs-appimage-needs-fuse">
+            <summary>[Linux, AppImage] Error: AppImages require FUSE to run</summary>
+            <p>
+              This is not a NormCap issue but a requirement for AppImages. You need to
+              make sure, that the <code>FUSE</code> library is installed on your system.
+              E.g. on Ubuntu 22.04 you need to run
+              <code>sudo apt install libfuse2</code>. See
               <a
-                href="https://extensions.gnome.org/extension/1301/ubuntu-appindicators/"
-                target="_blank"
-                >Ubuntu AppIndicators</a
+                href="https://techpiezo.com/linux/error-appimages-require-fuse-to-run-in-ubuntu-22-04/"
               >
-            </li>
-            <li>
+                this blog post for details</a
+              >.
+            </p>
+          </details>
+          <details id="faqs-error-libcrypt">
+            <summary>
+              [Linux, AppImage] Error while loading shared libraries: libcrypt.so.1
+            </summary>
+            <p>
+              The
               <a
-                href="https://extensions.gnome.org/extension/1503/tray-icons/"
-                target="_blank"
-                >Tray Icons</a
+                href="https://gregoryszorc.com/docs/python-build-standalone/main/running.html#runtime-requirements"
+                >application used to package the AppImage</a
               >
-            </li>
-            <li>
-              <a
-                href="https://extensions.gnome.org/extension/2890/tray-icons-reloaded/"
-                target="_blank"
-                >Tray Icons: Reloaded</a
+              has a number of runtime requirements. One of those requirements is
+              <code>libcrypt.so.1</code>, which should be provided by most modern Linux
+              distributions, as it is mandated as part of the Linux Standard Base Core
+              Specification. However, some distributions don't include
+              <code>libcrypt.so.1</code> as part of the base OS configuration. This can
+              usually be fixed by installing the <code>libxcrypt-compat</code> package.
+            </p>
+          </details>
+          <details id="faqs-macos-empty-desktop">
+            <summary>
+              [macOS] When NormCap is started, an empty desktop shows up
+            </summary>
+            <p>
+              This issue usually occurs on the after installing NormCap, either for the
+              first time or after an update.
+            </p>
+            <p>
+              This is a known issue related to macOS's permissions settings: If NormCap
+              doesn't have the system's permission to take a screenshot, an empty
+              desktop will be shown.<br />
+              <small
+                >(To be precise: NormCap doesn't <em>know</em> that it lacks
+                permissions, tries to take a screenshot nevertheless, which results in a
+                screenshot of the empty desktop.)</small
               >
-            </li>
-          </ul>
-        </details>
-        <details id="faqs-doesnt-show-notification">
-          <summary>[Linux] NormCap doesn't show a notification after capture</summary>
-          <p>
-            NormCap's notifications depend on the system tray functionality. If you
-            start NormCap, but its Icon doesn't appear in the system tray, proceed like
-            in the question above.
-          </p>
-        </details>
-        <details id="faqs-couldnt-load-platform-plugin">
-          <summary>[Linux] Error: Could not load the Qt platform plugin</summary>
-          <p>In case you get an output like this...</p>
-          <pre><code>$ normcap
-QtFatalMsg - This application failed to start because no Qt platform plugin
-could be initialized. Reinstalling the application may fix this problem.
-Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen,
-vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.</code></pre>
-          <p>
-            ... the chances are, this can be solved by installing additional
-            dependencies:
-          </p>
-          <ul>
-            <li>Arch (Wayland): <code>pacman -S qt6-wayland</code></li>
-            <li>Arch (Xorg): <code>pacman -S libxcb xcb-util-cursor</code></li>
-            <li>Debian/Ubuntu (Wayland): <code>apt install qt6-wayland</code></li>
-            <li>
-              Debian/Ubuntu (Xorg): <code>apt install libxcb1 libxcb-cursor0</code>
-            </li>
-            <li>Fedora (Wayland): <code>dnf install qt6-qtwayland</code></li>
-            <li>Fedora (Xorg): <code>dnf install libxcb xcb-util-cursor</code></li>
-          </ul>
-        </details>
-        <details id="faqs-shortcut-doesnt-copy-to-clipboard">
-          <summary>
-            [Linux] NormCap doesn't copy the results to clipboard when launched via
-            shortcut
-          </summary>
-          <p>
-            This is behavior
-            <a href="https://github.com/dynobo/normcap/issues/422"
-              >was observed only on KDE + Wayland (#422)</a
-            >
-            so far, and only when NormCap was started via a keyboard shortcut / key
-            binding. The root cause is still unknown, if you have any information or
-            ideas, please comment in the ticket above.
-          </p>
-          <p>
-            Strangely, a workaround seems to be to configure the keyboard shortcut via
-            "System Settings" → "Shortcuts" → "Add command" and configure the command in
-            a way, that it pipes the output to somewhere, e.g. /dev/null:
-          </p>
-          <pre><code>normcap 2>&1 | tee /dev/null</code></pre>
-        </details>
-        <details id="faqs-appimage-needs-fuse">
-          <summary>[Linux, AppImage] Error: AppImages require FUSE to run</summary>
-          <p>
-            This is not a NormCap issue but a requirement for AppImages. You need to
-            make sure, that the <code>FUSE</code> library is installed on your system.
-            E.g. on Ubuntu 22.04 you need to run <code>sudo apt install libfuse2</code>.
-            See
-            <a
-              href="https://techpiezo.com/linux/error-appimages-require-fuse-to-run-in-ubuntu-22-04/"
-            >
-              this blog post for details</a
-            >.
-          </p>
-        </details>
-        <details id="faqs-error-libcrypt">
-          <summary>
-            [Linux, AppImage] Error while loading shared libraries: libcrypt.so.1
-          </summary>
-          <p>
-            The
-            <a
-              href="https://gregoryszorc.com/docs/python-build-standalone/main/running.html#runtime-requirements"
-              >application used to package the AppImage</a
-            >
-            has a number of runtime requirements. One of those requirements is
-            <code>libcrypt.so.1</code>, which should be provided by most modern Linux
-            distributions, as it is mandated as part of the Linux Standard Base Core
-            Specification. However, some distributions don't include
-            <code>libcrypt.so.1</code> as part of the base OS configuration. This can
-            usually be fixed by installing the <code>libxcrypt-compat</code> package.
-          </p>
-        </details>
-        <details id="faqs-macos-empty-desktop">
-          <summary>[macOS] When NormCap is started, an empty desktop shows up</summary>
-          <p>
-            This issue usually occurs on the after installing NormCap, either for the
-            first time or after an update.
-          </p>
-          <p>
-            This is a known issue related to macOS's permissions settings: If NormCap
-            doesn't have the system's permission to take a screenshot, an empty desktop
-            will be shown.<br />
-            <small
-              >(To be precise: NormCap doesn't <em>know</em> that it lacks permissions,
-              tries to take a screenshot nevertheless, which results in a screenshot of
-              the empty desktop.)</small
-            >
-          </p>
-          <p>Steps to solve this:</p>
-          <ol>
-            <li>Close NormCap, if it is running.</li>
-            <li>
-              Navigate to "System Preferences" → "Security & Privacy" → "Privacy" →
-              "Screen Recording" → "Click unlock".
-            </li>
-            <li>
-              Do you already see "NormCap" on the right side? If yes, "remove" [ – ] it.
-              <strong>Un-ticking the checkbox is not enough!</strong>
-            </li>
-            <li>Click "add" [＋] → "Applications" → "NormCap".</li>
-            <li>
-              Confirm that you see NormCap on the right side with a checkmark in front
-              of it.
-            </li>
-            <li>Start NormCap, it should work now.</li>
-            <li>
-              You might need to repeat those steps after installing a new version of
-              NormCap.
-            </li>
-          </ol>
-          <p>
-            Hopefully, this cumbersome user experience can be improved in a future
-            release.
-          </p>
-        </details>
+            </p>
+            <p>Steps to solve this:</p>
+            <ol>
+              <li>Close NormCap, if it is running.</li>
+              <li>
+                Navigate to "System Preferences" → "Security & Privacy" → "Privacy" →
+                "Screen Recording" → "Click unlock".
+              </li>
+              <li>
+                Do you already see "NormCap" on the right side? If yes, "remove" [ – ]
+                it.
+                <strong>Un-ticking the checkbox is not enough!</strong>
+              </li>
+              <li>Click "add" [＋] → "Applications" → "NormCap".</li>
+              <li>
+                Confirm that you see NormCap on the right side with a checkmark in front
+                of it.
+              </li>
+              <li>Start NormCap, it should work now.</li>
+              <li>
+                You might need to repeat those steps after installing a new version of
+                NormCap.
+              </li>
+            </ol>
+            <p>
+              Hopefully, this cumbersome user experience can be improved in a future
+              release.
+            </p>
+          </details>
+        </div>
         <h4>Development</h4>
-        <details id="faqs-no-such-file">
-          <summary>
-            "No such file or directory" error when running <code>briefcase build</code>
-          </summary>
-          <p>
-            To verify, if this is the issue you are facing, run the docker image
-            interactively and try to run the <code>linuxdeploy-*.AppImage</code> file
-            there:
-          </p>
-          <pre><code>$ docker run -it \
+        <div>
+          <details id="faqs-no-such-file">
+            <summary>
+              "No such file or directory" error when running
+              <code>briefcase build</code>
+            </summary>
+            <p>
+              To verify, if this is the issue you are facing, run the docker image
+              interactively and try to run the <code>linuxdeploy-*.AppImage</code> file
+              there:
+            </p>
+            <pre><code>$ docker run -it \
   --volume /home/&lt;USER&gt;/&lt;PROJECT PATH&gt;/normcap/linux:/app:z \
   --volume /home/&lt;USER&gt;/.briefcase:/home/brutus/.briefcase:z \
   --env VERSION=0.2.0 briefcase/eu.dynobo.normcap:py3.9 \
   /bin/bash
 $ /home/brutus/.briefcase/tools/linuxdeploy-x86_64.AppImage</code></pre>
-          <p>
-            If that results in a <code>No such file or directory</code> error, according
-            to
-            <a
-              href="https://github.com/AppImage/AppImageKit/issues/1027#issuecomment-641601097"
-              target="_blank"
-              >this issue</a
-            >
-            and
-            <a href="https://github.com/AppImage/AppImageKit/issues/828" target="_blank"
-              >this one</a
-            >
-            a workaround is to correct the "magic" bytes of the AppImage. This worked
-            for me:
-          </p>
-          <pre><code>sed '0,/AI\x02/{s|AI\x02|\x00\x00\x00|}' -i linuxdeploy-x86_64.AppImage</code></pre>
-        </details>
+            <p>
+              If that results in a <code>No such file or directory</code> error,
+              according to
+              <a
+                href="https://github.com/AppImage/AppImageKit/issues/1027#issuecomment-641601097"
+                target="_blank"
+                >this issue</a
+              >
+              and
+              <a
+                href="https://github.com/AppImage/AppImageKit/issues/828"
+                target="_blank"
+                >this one</a
+              >
+              a workaround is to correct the "magic" bytes of the AppImage. This worked
+              for me:
+            </p>
+            <pre><code>sed '0,/AI\x02/{s|AI\x02|\x00\x00\x00|}' -i linuxdeploy-x86_64.AppImage</code></pre>
+          </details>
+        </div>
       </article>
       <article id="python-package">
         <div class="hgroup">
@@ -886,7 +966,7 @@ <h3>
             packages.
           </h3>
         </div>
-        <details>
+        <details id="python-prebuilt-comparison">
           <summary>Comparison to prebuilt packages</summary>
           <div class="row comparison">
             <div class="col-sm-6">
@@ -985,7 +1065,7 @@ <h3>
                 Identify the path to Tesseract base folder. It should contain a
                 <code>/tessdata</code> subfolder and the
                 <code>tesseract.exe</code> binary. Depending on if you installed
-                Tesseract system-wide or in userspace, the base folder should be:
+                Tesseract system-wide or in user space, the base folder should be:
                 <pre><code>C:\Program Files\Tesseract-OCR
 or
 C:\Users\USERNAME\AppData\Local\Programs\Tesseract-OCR</code></pre>
diff --git a/docs/script.js b/docs/script.js
index 97546444..74a8d75a 100644
--- a/docs/script.js
+++ b/docs/script.js
@@ -30,34 +30,41 @@ themeSwitcher.init();
 
 
 const detailsToggler = {
-  onMutation(mutationList, observer) {
-    mutationList.forEach(function(mutation) {
-      if (mutation.type === 'attributes' && mutation.attributeName === 'open') {
-        let id = mutation.target.getAttribute("id");
-        if (id) {
-          history.pushState({},"", window.location.href.split('#')[0] + "#" + id);
-        }
-      }
-    })
-  },
-
-  init() {
-    // Open details if hash, adjust scroll a bit
-    const hash = document.location.hash
+  openDetailFromHash() {
+    let hash = window.location.hash;
     if (hash.startsWith("#faqs-") || hash.startsWith("#python-package-")) {
-      const id = hash.slice(1);
-      const detail = document.getElementById(id);
+      const detail = document.getElementById(hash.slice(1));
       detail.setAttribute("open", "");
-      window.setTimeout(function(){
-        window.scrollTo(window.scrollX, window.scrollY - 100);
-      }, 10);
     }
+  },
+
+  onDetailClick(event) {
+    let detail = event.target.parentNode;
+    let isDetail = detail.nodeName == "DETAILS";
+    let isOpened = !!(detail.getAttribute("open") != "");
+    if (isDetail && isOpened) {
+      history.replaceState(undefined, undefined, "#"+detail.id)
+    }
+  },
 
-    // Adjust hash on details open
-    const observer = new MutationObserver(this.onMutation);
+  addDetailStateChangeListeners(){
+    self = this;
     document.querySelectorAll("details").forEach(function(detail) {
-      observer.observe(detail, {attributes: true});
+      detail.addEventListener("click", self.onDetailClick)
     });
+  },
+
+  addHashChangeListener(){
+    self = this;
+    window.addEventListener('hashchange', function () {
+      self.openDetailFromHash()
+    });
+  },
+
+  init() {
+    this.openDetailFromHash();
+    this.addHashChangeListener();
+    this.addDetailStateChangeListeners();
   }
 }
 
diff --git a/docs/style.css b/docs/style.css
index aa05bcfc..0ed7b89f 100644
--- a/docs/style.css
+++ b/docs/style.css
@@ -148,8 +148,7 @@ small {
   background-repeat: no-repeat;
   background-size: cover;
   box-shadow: rgba(0, 0, 0, 0.06) 0px 1.125px 8px 0px,
-    rgba(0, 0, 0, 0.12) 0px 1.125px 16px 0px,
-    rgba(0, 0, 0, 0.035) 0px 0px 0px 1.0625px;
+    rgba(0, 0, 0, 0.12) 0px 1.125px 16px 0px, rgba(0, 0, 0, 0.035) 0px 0px 0px 1.0625px;
   margin-top: calc(var(--spacing) * 0.5);
   margin-bottom: calc(var(--spacing) * 1.5);
   color: #e1e6ea;
@@ -180,8 +179,22 @@ small {
   background-image: url("img/offline.png");
 }
 
-/* ACCORDEONS */
+/* ACCORDIONS */
 /**************/
+details {
+  padding-top: calc(var(--spacing) * 0.6);
+  padding-bottom: calc(var(--spacing) * 0.6);
+  margin: 0px;
+}
+
+details:first-child {
+  margin-top: calc(var(--spacing) * -1.6);
+}
+
+details:last-child {
+  margin-bottom: calc(var(--spacing) * 1.6);
+}
+
 details[open] > summary {
   margin-bottom: calc(var(--spacing) * 1.6);
   text-decoration: underline;
@@ -193,6 +206,10 @@ details[open] > summary:not(:focus) {
   color: var(--color);
 }
 
+details summary {
+  line-height: 1.2;
+}
+
 /* PYTHON PACKAGES */
 /*******************/
 .comparison > div > p {
@@ -208,7 +225,9 @@ footer {
 
 /* COFFEE */
 .coffee {
-  height: 40px !important; margin-top: 10px; opacity: 0.85;
+  height: 40px !important;
+  margin-top: 10px;
+  opacity: 0.85;
 }
 .coffee:hover {
   opacity: 1;
diff --git a/normcap/clipboard/linux.py b/normcap/clipboard/linux.py
index cbd6d46d..c1450a48 100644
--- a/normcap/clipboard/linux.py
+++ b/normcap/clipboard/linux.py
@@ -27,9 +27,9 @@ def _wl_copy(text: str) -> None:
 
 
 def _is_wayland_display_manager() -> bool:
-    wayland_display = os.environ.get("WAYLAND_DISPLAY", "")
-    xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "")
-    return "wayland" in wayland_display.lower() or "wayland" in xdg_session_type.lower()
+    xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "").lower()
+    has_wayland_display_env = os.environ.get("WAYLAND_DISPLAY", "") != ""
+    return "wayland" in xdg_session_type or has_wayland_display_env
 
 
 def get_copy_func() -> Callable:
diff --git a/normcap/gui/models.py b/normcap/gui/models.py
index 957c06d8..c9f3ac0d 100644
--- a/normcap/gui/models.py
+++ b/normcap/gui/models.py
@@ -76,10 +76,10 @@ class Rect:
     All points are inclusive (are part of the rectangle).
     """
 
-    left: int = 0
-    top: int = 0
-    right: int = 0
-    bottom: int = 0
+    left: int
+    top: int
+    right: int
+    bottom: int
 
     def __str__(self) -> str:
         return (
@@ -89,12 +89,12 @@ def __str__(self) -> str:
 
     @property
     def geometry(self) -> tuple[int, int, int, int]:
-        """Expose rect for usage with QT."""
+        """Expose rect for usage with QT as (left, top, width, height)."""
         return self.left, self.top, self.width, self.height
 
     @property
     def coords(self) -> tuple[int, int, int, int]:
-        """Expose rect as tuple of coordinates."""
+        """Expose rect as tuple of coordinates as (left, top, right, bottom)."""
         return self.left, self.top, self.right, self.bottom
 
     @property
@@ -113,7 +113,7 @@ def size(self) -> tuple[int, int]:
         return (self.width, self.height)
 
     # ONHOLD: Annotate as Self with Python 3.11
-    def scaled(self, scale_factor: float):  # noqa: ANN201
+    def scale_coords(self, scale_factor: float):  # noqa: ANN201
         """Create an integer-scaled copy of the Rect."""
         return Rect(
             top=int(self.top * scale_factor),
@@ -124,29 +124,26 @@ def scaled(self, scale_factor: float):  # noqa: ANN201
 
 
 @dataclass()
-class Screen:
-    """About an attached display."""
+class Screen(Rect):
+    """Extends Rect with screen specific properties."""
 
     device_pixel_ratio: float
-    rect: Rect
     index: int
-
     screenshot: Optional[QtGui.QImage] = None
 
-    @property
-    def width(self) -> int:
-        """Get screen width."""
-        return self.rect.width
-
-    @property
-    def height(self) -> int:
-        """Get screen height."""
-        return self.rect.height
+    def scale_geometry(self, factor: float | None = None) -> tuple[int, int, int, int]:
+        factor = factor or 1 / self.device_pixel_ratio
+        return self.scale_coords(factor).geometry
 
-    @property
-    def size(self) -> tuple[int, int]:
-        """Get screen width and height."""
-        return (self.width, self.height)
+    def scale_coords(self, factor: float | None):  # noqa: ANN201
+        """Create an integer-scaled copy of the Rect."""
+        factor = factor or 1 / self.device_pixel_ratio
+        return Rect(
+            top=int(self.top * factor),
+            bottom=int(self.bottom * factor),
+            left=int(self.left * factor),
+            right=int(self.right * factor),
+        )
 
 
 @dataclass()
@@ -159,7 +156,7 @@ class Capture:
     image: QtGui.QImage = field(default_factory=QtGui.QImage)
     screen: Optional[Screen] = None
     scale_factor: float = 1
-    rect: Rect = field(default_factory=Rect)
+    rect: Rect = field(default_factory=lambda: Rect(left=0, top=0, right=0, bottom=0))
 
     ocr_text: Optional[str] = None
     ocr_magic: Optional[str] = None
diff --git a/normcap/gui/system_info.py b/normcap/gui/system_info.py
index 5a6cbbdf..a4ad04ae 100644
--- a/normcap/gui/system_info.py
+++ b/normcap/gui/system_info.py
@@ -13,7 +13,7 @@
 
 from normcap import __version__
 from normcap.gui.localization import translate
-from normcap.gui.models import DesktopEnvironment, Rect, Screen
+from normcap.gui.models import DesktopEnvironment, Screen
 
 logger = logging.getLogger(__name__)
 
@@ -114,10 +114,9 @@ def get_tessdata_path() -> Optional[os.PathLike]:
 
 @functools.cache
 def display_manager_is_wayland() -> bool:
-    """Identify relevant display managers (Linux)."""
     xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "").lower()
-    wayland_display = os.environ.get("WAYLAND_DISPLAY", "").lower()
-    return "wayland" in wayland_display or "wayland" in xdg_session_type
+    has_wayland_display_env = os.environ.get("WAYLAND_DISPLAY", "") != ""
+    return "wayland" in xdg_session_type or has_wayland_display_env
 
 
 @functools.cache
@@ -147,12 +146,10 @@ def screens() -> list[Screen]:
     return [
         Screen(
             device_pixel_ratio=QtGui.QScreen.devicePixelRatio(screen),
-            rect=Rect(
-                left=screen.geometry().left(),
-                top=screen.geometry().top(),
-                right=screen.geometry().right(),
-                bottom=screen.geometry().bottom(),
-            ),
+            left=screen.geometry().left(),
+            top=screen.geometry().top(),
+            right=screen.geometry().right(),
+            bottom=screen.geometry().bottom(),
             index=idx,
         )
         for idx, screen in enumerate(QtWidgets.QApplication.screens())
diff --git a/normcap/gui/window.py b/normcap/gui/window.py
index 9bea37f1..6d6a831a 100644
--- a/normcap/gui/window.py
+++ b/normcap/gui/window.py
@@ -206,17 +206,20 @@ def _position_windows_on_wayland(self) -> None:
         client itself can't do this. However, there are DE dependent workarounds.
         """
         self.setFocus()
-        logger.debug("Move window %s to %s", self.screen_.index, self.screen_.rect)
+        logger.debug("Move window %s to %s", self.screen_.index, self.screen_)
         if system_info.desktop_environment() == DesktopEnvironment.GNOME:
-            _move_active_window_to_position_on_gnome(self.screen_.rect)
+            _move_active_window_to_position_on_gnome(self.screen_)
         elif system_info.desktop_environment() == DesktopEnvironment.KDE:
-            _move_active_window_to_position_on_kde(self.screen_.rect)
+            _move_active_window_to_position_on_kde(self.screen_)
         self.is_positioned = True
 
     def set_fullscreen(self) -> None:
         """Set window to full screen using platform specific methods."""
         logger.debug("Set window of screen %s to fullscreen", self.screen_.index)
 
+        if not self.screen_.screenshot:
+            raise ValueError("Screenshot is missing on screen %s", self.screen_)
+
         self.setWindowFlags(
             QtGui.Qt.WindowType.FramelessWindowHint
             | QtGui.Qt.WindowType.CustomizeWindowHint
@@ -225,7 +228,19 @@ def set_fullscreen(self) -> None:
         self.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
 
         # Moving window to corresponding monitor
-        self.setGeometry(*self.screen_.rect.geometry)
+        # Using scaled window dims to fit sizing with dpr in case scaling is enabled
+        # See: https://github.com/dynobo/normcap/issues/397
+        # TODO: Test in Multi Display setups with different scalings
+        # TODO: Test in Multi Display setups with differen position
+        # TODO: Position in Multi Display probably problematic!
+        if (
+            system_info.display_manager_is_wayland()
+            and self.screen_.size == self.screen_.screenshot.size().toTuple()
+            and self.screen_.device_pixel_ratio != 1
+        ):
+            self.setGeometry(*self.screen_.scale_geometry())
+        else:
+            self.setGeometry(*self.screen_.geometry)
 
         # On unity, setting min/max window size breaks fullscreen.
         if system_info.desktop_environment() != DesktopEnvironment.UNITY:
@@ -299,7 +314,9 @@ def mouseReleaseEvent(self, event: QtGui.QMouseEvent) -> None:  # noqa: N802
         self.selection_rect.setBottomRight(event.position().toPoint())
 
         selection_coords = cast(tuple, self.selection_rect.normalized().getCoords())
-        scaled_selection_rect = Rect(*selection_coords).scaled(self._get_scale_factor())
+        scaled_selection_rect = Rect(*selection_coords).scale_coords(
+            self._get_scale_factor()
+        )
 
         self.clear_selection()
 
@@ -369,12 +386,12 @@ def _draw_debug_infos(self, painter: QtGui.QPainter, rect: QtCore.QRect) -> None
             return
 
         selection = Rect(*cast(tuple, rect.normalized().getCoords()))
-        selection_scaled = selection.scaled(self.debug_info.scale_factor)
+        selection_scaled = selection.scale_coords(self.debug_info.scale_factor)
 
         lines = (
             "[ Screen ]",
             f"Size: {self.debug_info.screen.size}",
-            f"Position: {self.debug_info.screen.rect.coords}",
+            f"Position: {self.debug_info.screen.coords}",
             f"Selected region: {selection.geometry}",
             f"Device pixel ratio: {self.debug_info.screen.device_pixel_ratio}",
             "",
diff --git a/normcap/ocr/tesseract.py b/normcap/ocr/tesseract.py
index 31b1b312..a16eb9f9 100644
--- a/normcap/ocr/tesseract.py
+++ b/normcap/ocr/tesseract.py
@@ -102,8 +102,6 @@ def _run_tesseract(
         _ = _run_command(cmd_args=cmd_args)
 
         if logger.getEffectiveLevel() == logging.DEBUG:
-            files = Path(f"{input_image_path}.processed.tif").parent.glob("*.*")
-            logger.debug("Files: %s", list(files))
             _move_to_normcap_temp_dir(
                 input_file=Path(f"{input_image_path}.processed.tif"),
                 postfix="_processed_by_tesseract",
diff --git a/normcap/utils.py b/normcap/utils.py
index 06f99bec..9143d7df 100644
--- a/normcap/utils.py
+++ b/normcap/utils.py
@@ -18,10 +18,11 @@
 
 _ISSUES_URLS = "https://github.com/dynobo/normcap/issues/new"
 
+
 def _is_wayland_display_manager() -> bool:
-    wayland_display = os.environ.get("WAYLAND_DISPLAY", "")
-    xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "")
-    return "wayland" in wayland_display.lower() or "wayland" in xdg_session_type.lower()
+    xdg_session_type = os.environ.get("XDG_SESSION_TYPE", "").lower()
+    has_wayland_display_env = os.environ.get("WAYLAND_DISPLAY", "") != ""
+    return "wayland" in xdg_session_type or has_wayland_display_env
 
 
 def create_argparser() -> argparse.ArgumentParser:
@@ -179,7 +180,7 @@ def qt_log_wrapper(
                 "- Fedora/CentOS: \n"
                 "- OpenSuse: qt6-wayland\n"
             )
-            packages = (\
+            packages = (
                 "================================================\n"
                 "DISTRO               | REQUIRED PACKAGES\n"
                 "================================================\n"
@@ -191,7 +192,7 @@ def qt_log_wrapper(
                 "------------------------------------------------\n"
             )
         else:
-            packages = (\
+            packages = (
                 "================================================\n"
                 "DISTRO               | REQUIRED PACKAGES\n"
                 "================================================\n"
@@ -208,7 +209,8 @@ def qt_log_wrapper(
             "dependencies!\n"
             "Please make sure you have the following system packages installed:\n\n"
             f"{packages}\n"
-            f"If that doesn't solve the problem, please report it via GitHub:\n{_ISSUES_URLS}"
+            "If that doesn't solve the problem, please report it via GitHub:\n"
+            f"{_ISSUES_URLS}\n"
         )
         logger.error(message)
 
diff --git a/poetry.lock b/poetry.lock
index 3c443752..00081d08 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -2,29 +2,37 @@
 
 [[package]]
 name = "arrow"
-version = "1.2.3"
+version = "1.3.0"
 description = "Better dates & times for Python"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"},
-    {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"},
+    {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"},
+    {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"},
 ]
 
 [package.dependencies]
 python-dateutil = ">=2.7.0"
+types-python-dateutil = ">=2.8.10"
+
+[package.extras]
+doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"]
+test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"]
 
 [[package]]
 name = "babel"
-version = "2.12.1"
+version = "2.13.0"
 description = "Internationalization utilities"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"},
-    {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"},
+    {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"},
+    {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"},
 ]
 
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
 [[package]]
 name = "binaryornot"
 version = "0.4.4"
@@ -208,86 +216,101 @@ files = [
 
 [[package]]
 name = "charset-normalizer"
-version = "3.2.0"
+version = "3.3.0"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 optional = false
 python-versions = ">=3.7.0"
 files = [
-    {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"},
-    {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"},
+    {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"},
+    {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"},
+    {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"},
+    {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"},
+    {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"},
+    {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"},
+    {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"},
+    {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"},
 ]
 
 [[package]]
@@ -620,13 +643,13 @@ lxml = ["lxml"]
 
 [[package]]
 name = "identify"
-version = "2.5.29"
+version = "2.5.30"
 description = "File identification library for Python"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "identify-2.5.29-py2.py3-none-any.whl", hash = "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b"},
-    {file = "identify-2.5.29.tar.gz", hash = "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5"},
+    {file = "identify-2.5.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"},
+    {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"},
 ]
 
 [package.extras]
@@ -1101,13 +1124,13 @@ test = ["pytest"]
 
 [[package]]
 name = "packaging"
-version = "23.1"
+version = "23.2"
 description = "Core utilities for Python packages"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
-    {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
+    {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
+    {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
 ]
 
 [[package]]
@@ -1195,13 +1218,13 @@ testing = ["aboutcode-toolkit (>=6.0.0)", "black", "pytest (>=6,!=7.0.0)", "pyte
 
 [[package]]
 name = "platformdirs"
-version = "3.10.0"
+version = "3.11.0"
 description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"},
-    {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"},
+    {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"},
+    {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"},
 ]
 
 [package.extras]
@@ -1592,13 +1615,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
 [[package]]
 name = "rich"
-version = "13.5.3"
+version = "13.6.0"
 description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
 optional = false
 python-versions = ">=3.7.0"
 files = [
-    {file = "rich-13.5.3-py3-none-any.whl", hash = "sha256:9257b468badc3d347e146a4faa268ff229039d4c2d176ab0cffb4c4fbc73d5d9"},
-    {file = "rich-13.5.3.tar.gz", hash = "sha256:87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"},
+    {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"},
+    {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"},
 ]
 
 [package.dependencies]
@@ -1629,28 +1652,28 @@ release = ["pip-tools (>=6.12.1)", "toml (>=0.10.2)", "twine (>=4.0.2)"]
 
 [[package]]
 name = "ruff"
-version = "0.0.291"
+version = "0.0.292"
 description = "An extremely fast Python linter, written in Rust."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "ruff-0.0.291-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:b97d0d7c136a85badbc7fd8397fdbb336e9409b01c07027622f28dcd7db366f2"},
-    {file = "ruff-0.0.291-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:6ab44ea607967171e18aa5c80335237be12f3a1523375fa0cede83c5cf77feb4"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04b384f2d36f00d5fb55313d52a7d66236531195ef08157a09c4728090f2ef0"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b727c219b43f903875b7503a76c86237a00d1a39579bb3e21ce027eec9534051"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87671e33175ae949702774071b35ed4937da06f11851af75cd087e1b5a488ac4"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b75f5801547f79b7541d72a211949754c21dc0705c70eddf7f21c88a64de8b97"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b09b94efdcd162fe32b472b2dd5bf1c969fcc15b8ff52f478b048f41d4590e09"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d5b56bc3a2f83a7a1d7f4447c54d8d3db52021f726fdd55d549ca87bca5d747"},
-    {file = "ruff-0.0.291-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13f0d88e5f367b2dc8c7d90a8afdcfff9dd7d174e324fd3ed8e0b5cb5dc9b7f6"},
-    {file = "ruff-0.0.291-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b3eeee1b1a45a247758ecdc3ab26c307336d157aafc61edb98b825cadb153df3"},
-    {file = "ruff-0.0.291-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6c06006350c3bb689765d71f810128c9cdf4a1121fd01afc655c87bab4fb4f83"},
-    {file = "ruff-0.0.291-py3-none-musllinux_1_2_i686.whl", hash = "sha256:fd17220611047de247b635596e3174f3d7f2becf63bd56301fc758778df9b629"},
-    {file = "ruff-0.0.291-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5383ba67ad360caf6060d09012f1fb2ab8bd605ab766d10ca4427a28ab106e0b"},
-    {file = "ruff-0.0.291-py3-none-win32.whl", hash = "sha256:1d5f0616ae4cdc7a938b493b6a1a71c8a47d0300c0d65f6e41c281c2f7490ad3"},
-    {file = "ruff-0.0.291-py3-none-win_amd64.whl", hash = "sha256:8a69bfbde72db8ca1c43ee3570f59daad155196c3fbe357047cd9b77de65f15b"},
-    {file = "ruff-0.0.291-py3-none-win_arm64.whl", hash = "sha256:d867384a4615b7f30b223a849b52104214442b5ba79b473d7edd18da3cde22d6"},
-    {file = "ruff-0.0.291.tar.gz", hash = "sha256:c61109661dde9db73469d14a82b42a88c7164f731e6a3b0042e71394c1c7ceed"},
+    {file = "ruff-0.0.292-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:02f29db018c9d474270c704e6c6b13b18ed0ecac82761e4fcf0faa3728430c96"},
+    {file = "ruff-0.0.292-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:69654e564342f507edfa09ee6897883ca76e331d4bbc3676d8a8403838e9fade"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c3c91859a9b845c33778f11902e7b26440d64b9d5110edd4e4fa1726c41e0a4"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4476f1243af2d8c29da5f235c13dca52177117935e1f9393f9d90f9833f69e4"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be8eb50eaf8648070b8e58ece8e69c9322d34afe367eec4210fdee9a555e4ca7"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9889bac18a0c07018aac75ef6c1e6511d8411724d67cb879103b01758e110a81"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bdfabd4334684a4418b99b3118793f2c13bb67bf1540a769d7816410402a205"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7c77c53bfcd75dbcd4d1f42d6cabf2485d2e1ee0678da850f08e1ab13081a8"},
+    {file = "ruff-0.0.292-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e087b24d0d849c5c81516ec740bf4fd48bf363cfb104545464e0fca749b6af9"},
+    {file = "ruff-0.0.292-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f160b5ec26be32362d0774964e218f3fcf0a7da299f7e220ef45ae9e3e67101a"},
+    {file = "ruff-0.0.292-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ac153eee6dd4444501c4bb92bff866491d4bfb01ce26dd2fff7ca472c8df9ad0"},
+    {file = "ruff-0.0.292-py3-none-musllinux_1_2_i686.whl", hash = "sha256:87616771e72820800b8faea82edd858324b29bb99a920d6aa3d3949dd3f88fb0"},
+    {file = "ruff-0.0.292-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b76deb3bdbea2ef97db286cf953488745dd6424c122d275f05836c53f62d4016"},
+    {file = "ruff-0.0.292-py3-none-win32.whl", hash = "sha256:e854b05408f7a8033a027e4b1c7f9889563dd2aca545d13d06711e5c39c3d003"},
+    {file = "ruff-0.0.292-py3-none-win_amd64.whl", hash = "sha256:f27282bedfd04d4c3492e5c3398360c9d86a295be00eccc63914438b4ac8a83c"},
+    {file = "ruff-0.0.292-py3-none-win_arm64.whl", hash = "sha256:7f67a69c8f12fbc8daf6ae6d36705037bde315abf8b82b6e1f4c9e74eb750f68"},
+    {file = "ruff-0.0.292.tar.gz", hash = "sha256:1093449e37dd1e9b813798f6ad70932b57cf614e5c2b5c51005bf67d55db33ac"},
 ]
 
 [[package]]
@@ -1835,6 +1858,17 @@ files = [
     {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"},
 ]
 
+[[package]]
+name = "types-python-dateutil"
+version = "2.8.19.14"
+description = "Typing stubs for python-dateutil"
+optional = false
+python-versions = "*"
+files = [
+    {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"},
+    {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"},
+]
+
 [[package]]
 name = "types-toml"
 version = "0.10.8.7"
@@ -1884,13 +1918,13 @@ files = [
 
 [[package]]
 name = "urllib3"
-version = "2.0.5"
+version = "2.0.6"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"},
-    {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"},
+    {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"},
+    {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"},
 ]
 
 [package.extras]


Test patch:
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 1802ecfc..f4d1f12a 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -310,7 +310,7 @@ def test_qt_log_wrapper_platform_plugin_error_with_message(caplog):
     )
 
     assert "[qt]" in caplog.text.lower()
-    assert "make sure your system has the following packages" in caplog.text.lower()
+    assert "make sure you have the following system packages" in caplog.text.lower()
     assert "error" in caplog.text.lower()
 
 
diff --git a/tests/tests_clipboard/test_linux.py b/tests/tests_clipboard/test_linux.py
index 1141981f..9f67c189 100644
--- a/tests/tests_clipboard/test_linux.py
+++ b/tests/tests_clipboard/test_linux.py
@@ -15,8 +15,8 @@
         ("Wayland", "", True),
         ("", "Gnome Wayland", True),
         ("Wayland", "Gnome Wayland", True),
-        ("X11", "Gnome Wayland", True),
-        ("X11", "Gnome Shell", False),
+        ("", "Gnome Shell", False),
+        ("", "", False),
     ],
 )
 def test_is_wayland_display_manager(
diff --git a/tests/tests_gui/test_models.py b/tests/tests_gui/test_models.py
index 5a8ab44d..716555fa 100644
--- a/tests/tests_gui/test_models.py
+++ b/tests/tests_gui/test_models.py
@@ -34,7 +34,7 @@ def test_rect_scaled(coords, factor, expected_scaled_coords):
     rect = Rect(*coords)
 
     # WHEN it gets scaled through its method
-    rect_scaled = rect.scaled(factor)
+    rect_scaled = rect.scale_coords(factor)
 
     # THEN it should result in certain scaled coords
     assert rect_scaled.coords == expected_scaled_coords
@@ -54,7 +54,9 @@ def test_capture_image_area(capture: Capture, width, height, expected_area):
 
 def test_screen_properties():
     # GIVEN a Screen is instantiated with certain rect information
-    screen = Screen(device_pixel_ratio=2, rect=Rect(0, 0, 1920, 1080), index=1)
+    screen = Screen(
+        device_pixel_ratio=2, left=0, top=0, right=1920, bottom=1080, index=1
+    )
 
     # WHEN properties are accessed
     # THEN they should return correct values
diff --git a/tests/tests_gui/test_system_info.py b/tests/tests_gui/test_system_info.py
index b5269c8f..f7c885f7 100644
--- a/tests/tests_gui/test_system_info.py
+++ b/tests/tests_gui/test_system_info.py
@@ -25,7 +25,7 @@ def test_display_manager_is_not_wayland(monkeypatch):
     system_info.display_manager_is_wayland.cache_clear()
     assert not system_info.display_manager_is_wayland()
 
-    monkeypatch.setenv("WAYLAND_DISPLAY", "something")
+    monkeypatch.setenv("WAYLAND_DISPLAY", "")
     monkeypatch.setenv("XDG_SESSION_TYPE", "something")
     system_info.display_manager_is_wayland.cache_clear()
     assert not system_info.display_manager_is_wayland()
diff --git a/tests/tests_gui/test_window.py b/tests/tests_gui/test_window.py
index 9e287bc5..c10ce08d 100644
--- a/tests/tests_gui/test_window.py
+++ b/tests/tests_gui/test_window.py
@@ -14,7 +14,7 @@ def test_move_active_window_to_position_raises_on_non_linux():
 
     # THEN an exception should be raised, because those functions are not supposed to
     #   work on a non-Linux system
-    rect = models.Rect()
+    rect = models.Rect(left=0, top=0, right=0, bottom=0)
 
     with pytest.raises(TypeError, match="should only be called on Linux"):
         window._move_active_window_to_position_on_gnome(rect)
@@ -40,7 +40,10 @@ def test_window_get_scale_factor(
     image = QtGui.QImage(QtCore.QSize(*img_size), QtGui.QImage.Format.Format_RGB32)
     screen = models.Screen(
         device_pixel_ratio=1.0,
-        rect=models.Rect(0, 0, screen_size[0] - 1, screen_size[1] - 1),
+        left=0,
+        top=0,
+        right=screen_size[0] - 1,
+        bottom=screen_size[1] - 1,
         index=0,
         screenshot=image,
     )
@@ -59,7 +62,10 @@ def test_window_get_scale_factor_raises_if_missing(qtbot, temp_settings):
     image = QtGui.QImage(QtCore.QSize(640, 480), QtGui.QImage.Format.Format_RGB32)
     screen = models.Screen(
         device_pixel_ratio=1.0,
-        rect=models.Rect(0, 0, 600, 400),
+        left=0,
+        top=0,
+        right=600,
+        bottom=400,
         index=0,
         screenshot=image,
     )
@@ -83,7 +89,10 @@ def test_window_esc_key_pressed(qtbot, temp_settings):
     image = QtGui.QImage(600, 400, QtGui.QImage.Format.Format_RGB32)
     screen = models.Screen(
         device_pixel_ratio=1.0,
-        rect=models.Rect(0, 0, 600, 400),
+        left=0,
+        top=0,
+        right=600,
+        bottom=400,
         index=0,
         screenshot=image,
     )
@@ -104,7 +113,10 @@ def test_window_esc_key_pressed_while_selecting(qtbot, temp_settings):
     image = QtGui.QImage(600, 400, QtGui.QImage.Format.Format_RGB32)
     screen = models.Screen(
         device_pixel_ratio=1.0,
-        rect=models.Rect(0, 0, 600, 400),
+        left=0,
+        top=0,
+        right=600,
+        bottom=400,
         index=0,
         screenshot=image,
     )