Thrive Launcher

This is a release of the Thrive Launcher. Run the executable 'ThriveLauncher' to open.
The launcher allows downloading and playing available Thrive versions.

Source code is available online: https://github.com/Revolutionary-Games/Thrive-Launcher

Exact commit this build is made from is in revision.txt
dirty, diff:
diff --git a/CIConfiguration.yml b/CIConfiguration.yml
index 03d3153..96d0b6e 100644
--- a/CIConfiguration.yml
+++ b/CIConfiguration.yml
@@ -2,7 +2,7 @@ version: 1
 
 jobs:
   test:
-    image: thrive/devcenter-ci:v3
+    image: thrive/launcher:v3
     cache:
       loadFrom:
         - v3-{Branch}-build
@@ -12,6 +12,9 @@ jobs:
     steps:
       - run:
            command: dotnet restore
+      - run:
+          name: Generate icons
+          command: dotnet run --project Scripts -- icons
       - run:
           name: Build
           command: dotnet build
@@ -19,7 +22,7 @@ jobs:
           name: Test
           command: dotnet test
   lint:
-    image: thrive/devcenter-ci:v3
+    image: thrive/launcher:v3
     cache:
       loadFrom:
         - v3-{Branch}-build
@@ -37,12 +40,19 @@ jobs:
             cat files_to_check.txt
       - run:
           command: dotnet restore
+      - run:
+          name: Generate icons
+          command: dotnet run --project Scripts -- icons
       - run:
           name: Build with warnings
           command: dotnet run --project Scripts -- check compile
       - run:
           name: File based checks
           command: dotnet run --project Scripts -- check files
+      # Makes sure that there aren't any changes at this point to not make the CI trip up on them
+      - run:
+          name: Make sure no changes to git tracked files at this point
+          command: GIT_LFS_SKIP_SMUDGE=1 git reset --hard HEAD
       - run:
           name: Jetbrains inspectcode
           command: dotnet run --project Scripts -- check inspectcode
diff --git a/LauncherBackend/Services/ThriveRunner.cs b/LauncherBackend/Services/ThriveRunner.cs
index 4a71379..006dbfd 100644
--- a/LauncherBackend/Services/ThriveRunner.cs
+++ b/LauncherBackend/Services/ThriveRunner.cs
@@ -225,7 +225,6 @@ public class ThriveRunner : IThriveRunner
             return;
         }
 
-        // onGameEnded(signal, closeContainer, version.releaseNum, storeInfo.store, status,elapsed, gameOutput, detectedLogFile);
         OnThriveExited(workingDirectory, result.ExitCode, null, version, runTime.Elapsed);
     }
 
@@ -276,6 +275,9 @@ public class ThriveRunner : IThriveRunner
     private void OnThriveExited(string thriveFolder, int? exitCode, Exception? runFailException,
         IPlayableVersion version, TimeSpan elapsed)
     {
+        // TODO: remove
+        // HasReportableCrash = true;
+
         if (exitCode != null)
         {
             OnNormalOutput($"Child process exited with code {exitCode}");
@@ -288,6 +290,8 @@ public class ThriveRunner : IThriveRunner
             ActiveErrorSuggestion = ErrorSuggestionType.ExitedQuickly;
         }
 
+        // TODO: restart Thrive once if we didn't see the properly started Thrive log message
+
         // TODO: this constant might be totally wrong now
         if (exitCode == -1073741515)
         {
@@ -339,6 +343,8 @@ public class ThriveRunner : IThriveRunner
             // Should be fine to only detect this from the first log lines
             DetectThriveDataFoldersFromOutput(line);
 
+            // TODO: detect Thrive properly started
+
             return;
         }
 
diff --git a/Scripts/podman/ci/Dockerfile b/Scripts/podman/ci/Dockerfile
index f7e15ee..d1dd17e 100644
--- a/Scripts/podman/ci/Dockerfile
+++ b/Scripts/podman/ci/Dockerfile
@@ -1,4 +1,4 @@
 FROM fedora:36
 
-RUN dnf install -y --setopt=deltarpm=false git git-lfs dotnet-sdk-6.0 p7zip && dnf clean all
+RUN dnf install -y --setopt=deltarpm=false git git-lfs dotnet-sdk-6.0 p7zip ImageMagick && dnf clean all
 RUN git lfs install
diff --git a/Scripts/podman/release_builder/Dockerfile b/Scripts/podman/release_builder/Dockerfile
index 40bb982..2afc0a9 100644
--- a/Scripts/podman/release_builder/Dockerfile
+++ b/Scripts/podman/release_builder/Dockerfile
@@ -7,4 +7,4 @@ ENV TZ=Etc/UTC
 COPY packages-microsoft-prod.deb /packages-microsoft-prod.deb
 
 RUN apt-get update && apt-get install -y ca-certificates && dpkg -i /packages-microsoft-prod.deb && \
-    apt-get update && apt-get install -y dotnet-sdk-6.0 p7zip git rsync && apt-get clean
+    apt-get update && apt-get install -y dotnet-sdk-6.0 p7zip git rsync imagemagick && apt-get clean
diff --git a/ThriveLauncher/Program.cs b/ThriveLauncher/Program.cs
index 7ef63ef..6fa89a8 100644
--- a/ThriveLauncher/Program.cs
+++ b/ThriveLauncher/Program.cs
@@ -206,7 +206,6 @@ internal class Program
                         "Using seamless launcher mode, will attempt to launch before initializing GUI");
 
                     // TODO: handle transparent mode
-                    throw new NotImplementedException();
                 }
             }
             else
diff --git a/src/thrive.css b/src/thrive.css
deleted file mode 100644
index 97be4f9..0000000
--- a/src/thrive.css
+++ /dev/null
@@ -1,856 +0,0 @@
-/*
-  Thrive style for the launcher
-*/
-
-
-body {
-  /* Thrive site font */
-  font-family: Roboto;
-  background-image: url('../assets/Planet-1.jpg');
-  background-size: cover;
-}
-
-/* 100% height */
-html,
-body {
-  height: 100%;
-  margin: 0;
-  padding: 0;
-}
-
-h1,
-h2 {
-  color: #fff;
-  font-family: Century Gothic, Arial, sans-serif;
-  font-size: 2.5em;
-  text-align: justify;
-  margin-top: 8px;
-  margin-bottom: 8px;
-  padding-left: 5px;
-}
-
-h2 {
-  font-size: 1.7em;
-}
-
-a {
-  color: #6acdeb;
-}
-
-a:hover {
-  color: #56a7bf;
-}
-
-hr {
-  border: 0;
-  height: 2px;
-  background-image: linear-gradient(to right, #4dd5ff, #52e5ff, rgba(0, 0, 0, 0));
-}
-
-hr.style2 {
-  border: 0;
-  height: 2px;
-  background-image: linear-gradient(to right, rgba(0, 0, 0, 0), #0ff, rgba(0, 0, 0, 0));
-}
-
-.Inline {
-  display: inline-block;
-}
-
-#titleBar {
-  width: 100%;
-  height: 25px;
-  background-color: rgb(22, 22, 22);
-  position: relative;
-  z-index: 2;
-}
-
-#titleDraggableRegion {
-  height: 22px;
-  width: 100%;
-  -webkit-app-region: drag;
-  position: absolute;
-  bottom: 0;
-}
-
-.TopLogo {
-  color: #bbb;
-  float: left;
-  line-height: 100%;
-  user-select: none;
-}
-
-img.TopLogo {
-  margin: auto 5px auto 5px;
-}
-
-.WindowButton {
-  margin-top: -3px;
-  width: 35px;
-  height: 20px;
-  color: #fff;
-  -webkit-app-region: no-drag;
-  float: right;
-  cursor: pointer;
-  text-align: center;
-  padding: 2.5px;
-}
-
-#windowClose {
-  height: 15px;
-  padding: 5px;
-}
-
-.WindowButton:hover {
-  background-color: rgb(63, 63, 63);
-}
-
-#windowClose:hover {
-  background-color: #f5457a;
-}
-
-/* News boxes */
-.ContentBlock {
-  overflow: auto;
-  display: inline-block;
-  height: auto;
-  width: auto;
-  vertical-align: top;
-  position: absolute;
-  background: linear-gradient(to top left, rgb(41, 41, 41), rgba(48, 48, 48, 0.2));
-}
-
-.BottomFade {
-  display: block;
-  height: auto;
-  width: auto;
-  z-index: 1;
-  position: fixed;
-  pointer-events: none;
-  background: linear-gradient(to top, rgb(20, 20, 20), rgba(0, 0, 0, 0));
-}
-
-#buttonContainerParent {
-  height: 14%;
-  max-height: 14%;
-  width: 100%;
-  position: absolute;
-  bottom: 0;
-  overflow: hidden;
-  border-top: 1px solid rgba(68, 68, 68, 0.46);
-  background: linear-gradient(to bottom, rgb(48, 48, 48), rgba(20, 20, 20, 0.9));
-  box-sizing: border-box;
-}
-
-#buttonContainerLeft {
-  width: 65%;
-  min-width: 65%;
-  height: 100%;
-  text-align: end;
-  box-sizing: border-box;
-  display: inline-block;
-}
-
-#buttonContainerRight {
-  /* Without this the left buttons just explode */
-  position: fixed;
-  width: 35%;
-  height: 14%;
-  max-height: 14%;
-  vertical-align: middle;
-  box-sizing: border-box;
-  font-size: 1.1em;
-  display: inline-block;
-}
-
-.InnerButtons {
-  display: inline-block;
-  height: auto;
-  width: auto;
-  position: relative;
-  top: 50%;
-  transform: perspective(1px) translateY(-50%);
-  user-select: none;
-}
-
-#linksButton {
-  min-height: 54px;
-}
-
-::-webkit-scrollbar {
-  width: 10px;
-  height: 10px;
-  background-color: rgba(44, 44, 44, 0.178);
-  -webkit-border-radius: 150px;
-  border-radius: 150px;
-}
-
-::-webkit-scrollbar:hover {
-  background-color: rgba(0, 0, 0, 0.15);
-}
-
-::-webkit-scrollbar-thumb:vertical {
-  background: #4dd5ff;
-  -webkit-border-radius: 150px;
-  border-radius: 150px;
-}
-
-::-webkit-scrollbar-thumb:vertical:active {
-  background: #1dffff;
-  -webkit-border-radius: 150px;
-  border-radius: 150px;
-}
-
-/* A nice green colour: #73AD21 */
-
-.BottomButton {
-  vertical-align: middle;
-  text-align: center;
-  display: inline-block;
-  color: #dedede;
-  border-radius: 2px;
-  background: linear-gradient(to top, rgba(22, 22, 22, 0.6), rgb(63, 63, 63));
-  padding-left: 5px;
-  padding-right: 5px;
-  cursor: pointer;
-  user-select: none;
-}
-
-.BottomButton:hover {
-  background: rgb(43, 43, 43);
-}
-
-.DevCenterStatusBox {
-  display: inline-flex;
-  height: 100%;
-  min-height: 100%;
-  align-items: center;
-  width: auto;
-  user-select: none;
-  color: #dedede;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-
-#devCenterPopupOpen {
-  width: 250px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-#devCenterStatusMessage {
-  margin-right: 3px;
-}
-
-.Dangerous {
-  color: #dedede;
-  background: rgba(128, 21, 21, 1);
-}
-
-.Dangerous:hover {
-  background: rgba(212, 106, 106, 1);
-}
-
-#playText:hover {
-  background: radial-gradient(#62c3e0, rgba(108, 193, 214, 0.37), rgba(0, 0, 0, 0));
-}
-
-#playComboPopup:hover {
-  background: radial-gradient(#66c5e2, rgba(108, 193, 214, 0.37), rgba(0, 0, 0, 0));
-}
-
-#playButton {
-  font-size: 1.3em;
-  border: 4px solid #55dbdb;
-  background: #4890a7;
-  padding: 0;
-  user-select: none;
-}
-
-/* Button Stuff */
-
-.Clickable {
-  cursor: pointer;
-}
-
-.CloseButton {
-  text-align: center;
-  display: inline-block;
-  margin-left: auto;
-  margin-right: auto;
-  color: #dedede;
-  border-radius: 5px;
-  background: rgba(43, 43, 43, 0.9);
-  font-size: 1.7em;
-  cursor: pointer;
-  user-select: none;
-}
-
-.CloseButton:hover {
-  background: rgba(20, 20, 20, 1);
-}
-
-.AfterPlayReport {
-  text-align: center;
-  display: inline-block;
-  margin-left: 5px;
-  margin-right: auto;
-  color: #dedede;
-  border-radius: 5px;
-  background: rgba(43, 43, 43, 0.9);
-  font-size: 1.7em;
-  cursor: pointer;
-  user-select: none;
-}
-
-.AfterPlayReport:hover {
-  background: rgba(20, 20, 20, 1);
-}
-
-/** Feed style **/
-.FeedPost {
-  color: #0ff;
-  display: block;
-}
-
-.FeedInfoBox {
-  padding-left: 15px;
-  color: #dedede;
-  display: block;
-}
-
-/* .FeedAuthorAndDate { */
-
-/* } */
-
-.FeedAuthor {
-  display: inline-block;
-  color: #0ff;
-}
-
-.FeedPreview {
-  /* text body colour */
-  color: white;
-  margin-top: 12px;
-  margin-bottom: 30px;
-  margin-left: 10px;
-  margin-right: 3px;
-  font-size: 1em;
-
-  /* Margin doesn't work without this */
-  display: block;
-}
-
-.FeedTitle {
-  margin-left: 10px;
-  margin-bottom: 5px;
-  margin-top: 2px;
-}
-
-
-.FeedCategories {
-  display: block;
-  padding-left: 30px;
-  font-size: 0.8em;
-  color: darkgray;
-}
-
-.RedWordFeedTruncated {
-  color: #d43a3a;
-}
-
-.FeedPost img {
-  max-width: 100%;
-  height: auto;
-}
-
-.FeedPost iframe {
-  max-width: 100%;
-}
-
-.emoji {
-  width: 24px;
-  height: auto;
-}
-
-
-.UpdateButtonContainer {
-  width: 100%;
-  height: auto;
-  display: block;
-  text-align: center;
-  margin-top: 35px;
-  margin-bottom: 10px;
-}
-
-
-.UnpackProgressLog {
-  width: 100%;
-  height: auto;
-
-  /* max-height: 350px; */
-  overflow: auto;
-  display: block;
-}
-
-/* The Modal (background) */
-.modal {
-  display: none; /* Hidden by default */
-  position: fixed; /* Stay in place */
-  z-index: 1; /* Sit on top */
-  left: 0;
-  top: 0;
-  width: 100%; /* Full width */
-  height: 100%; /* Full height */
-  overflow: auto;
-  background-color: rgba(0, 0, 0, 0.4);
-}
-
-/* Modal Content/Box */
-.modal-content {
-  display: none;
-  background-color: #fefefe;
-  margin-left: auto;
-  margin-right: auto;
-  margin-top: 8%;
-  margin-bottom: auto;
-
-  /* margin: 15% auto; /* 15% from the top and centered */
-
-  padding: 20px;
-  border: 1px solid #888;
-  width: 70%; /* Could be more or less, depending on screen size */
-  max-width: 70%;
-  max-height: 80%;
-  overflow: auto;
-
-  /* overflow: auto; */
-
-  /* animation-name: animatetop; */
-
-  /* animation-duration: 0.4s */
-}
-
-#playModalDialog {
-  /* Make the play popup's position and size fixed */
-  position: absolute;
-  max-height: 500px;
-  width: 650px;
-  max-width: 650px;
-  margin-top: 25px;
-  top: 5%;
-  left: 50%;
-  transform: translateX(-50%);
-  overflow: hidden;
-}
-
-#playModalContent {
-  min-height: 500px;
-  max-height: 500px;
-  overflow: hidden;
-  box-sizing: border-box;
-  display: flex;
-  flex-direction: column;
-}
-
-#playModalContent div {
-  flex: 0 1 0;
-}
-
-#playingInternalP {
-  display: flex;
-  flex-direction: column;
-  flex-grow: 1 !important;
-}
-
-.gameOutput {
-  display: flex;
-  flex-direction: column;
-  flex-grow: 1 !important;
-  overflow-y: auto;
-  padding-top: 5px;
-  padding-bottom: 1px;
-  min-height: 20px;
-}
-
-#settingsModalDialog {
-  background: none;
-  margin-left: auto;
-  margin-right: auto;
-  margin-top: 8%;
-  margin-bottom: auto;
-
-  /* margin: 15% auto; /* 15% from the top and centered */
-
-  padding: 0;
-  border: none;
-  width: 75%; /* Could be more or less, depending on screen size */
-  max-width: 75%;
-  max-height: 80%;
-  overflow: auto;
-}
-
-#devCenterModalDialog {
-  background: none;
-  margin-left: auto;
-  margin-right: auto;
-  margin-top: 8%;
-  margin-bottom: auto;
-
-  /* margin: 15% auto; /* 15% from the top and centered */
-
-  padding: 0;
-  border: none;
-  width: 75%; /* Could be more or less, depending on screen size */
-  max-width: 75%;
-  max-height: 80%;
-  overflow: auto;
-}
-
-#latestDevBuildsList {
-  overflow-y: scroll;
-  max-height: 240px;
-}
-
-a.DevBuildLink {
-  color: #6acdeb;
-  cursor: pointer;
-}
-
-a.DevBuildLink:hover {
-  color: #56a7bf;
-  cursor: pointer;
-}
-
-/* @keyframes animatetop { */
-
-/*     from {margin-top: -50px; opacity: 0} */
-
-/*     to {margin-top: 15%; opacity: 1} */
-
-/* } */
-
-/* The Close Button */
-.close {
-  color: #aaa;
-  float: right;
-  font-size: 28px;
-  font-weight: bold;
-  z-index: 1;
-  cursor: pointer;
-  user-select: none;
-}
-
-.close:hover,
-.close:focus {
-  color: black;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-
-.ComboPopup {
-  display: none;
-  position: fixed;
-  z-index: 1;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 100%;
-  overflow: auto;
-  background-color: rgba(0, 0, 0, 0);
-}
-
-.ComboContent {
-  background: white;
-  max-height: 60%;
-  height: auto;
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-  position: absolute;
-  overflow: auto;
-  display: none;
-  padding: 5px;
-
-  /* this is overwritten when opened */
-  width: 400px;
-}
-
-.ComboVersionSelect {
-  font-size: 1.2em;
-  background: none;
-}
-
-.ComboVersionSelect:hover {
-  background: #02a2a2;
-}
-
-/* Links in the "Links" dialog */
-.SiteLink {
-  font-size: 1.1em;
-  padding-bottom: 3px;
-}
-
-/* Error suggestions in dialogs */
-.ErrorSuggestions {
-  margin-top: 5px;
-  display: block;
-  margin-bottom: 5px;
-}
-
-
-.VersionDeleteButton {
-  margin-left: 5px;
-  vertical-align: middle;
-  text-align: center;
-  display: inline-block;
-  color: #dedede;
-  border-radius: 2px;
-  background: rgba(128, 21, 21, 1);
-  padding-left: 4px;
-  padding-right: 4px;
-  cursor: pointer;
-  user-select: none;
-}
-
-.VersionDeleteButton:hover {
-  background: rgba(212, 106, 106, 1);
-}
-
-#listOfInstalledVersions {
-  overflow: auto;
-  max-height: 320px;
-}
-
-#crashReportingContent ul {
-  overflow: auto;
-  max-height: 220px;
-}
-
-textarea.Report {
-  width: 600px;
-  height: 80px;
-}
-
-input[type="text"].Report {
-  width: 200px;
-}
-
-
-.Submit {
-  text-align: center;
-  display: inline-block;
-  font-size: 1.8em;
-  margin-left: auto;
-  margin-right: auto;
-  color: #dedede;
-  border-radius: 5px;
-  background: rgba(43, 43, 43, 0.9);
-  cursor: pointer;
-  user-select: none;
-}
-
-.Submit:hover {
-  background: rgba(20, 20, 20, 1);
-}
-
-.Submit.Disabled {
-  color: #222;
-  cursor: not-allowed;
-}
-
-.Submit.Disabled:hover {
-  background: rgba(43, 43, 43, 0.9);
-}
-
-#resetInstallLocation {
-  height: auto;
-}
-
-/* Tooltip container */
-.ResetInstallLocationTooltip {
-  position: relative;
-  display: inline-block;
-}
-
-.ResetInstallLocationTooltip.Disabled {
-  pointer-events: none;
-}
-
-/* Tooltip text */
-.ResetInstallLocationTooltip .ResetInstallLocationTooltipText {
-  visibility: hidden;
-  width: 150px;
-  background-color: #555;
-  color: #fff;
-  text-align: center;
-  padding: 5px 0;
-  border-radius: 6px;
-
-  /* Position the tooltip text */
-  position: absolute;
-  z-index: 1;
-  bottom: 5px;
-  left: 450%;
-  margin-left: -60px;
-  font-size: 0.5em;
-
-  /* Fade in tooltip */
-  opacity: 0;
-  transition: opacity 0.3s;
-  pointer-events: none;
-}
-
-/* Tooltip arrow */
-.ResetInstallLocationTooltip .ResetInstallLocationTooltipText::after {
-  content: " ";
-  position: absolute;
-  top: 50%;
-  right: 100%; /* To the left of the tooltip */
-  margin-top: -5px;
-  border-width: 5px;
-  border-style: solid;
-  border-color: transparent #555 transparent transparent;
-}
-
-#resetInstallLocation:hover .ResetInstallLocationTooltipText {
-  visibility: visible;
-  opacity: 1;
-}
-
-/* Tooltip container TODO: reduce duplication with the above rules */
-.ResetCacheLocationTooltip {
-  position: relative;
-  display: inline-block;
-}
-
-.ResetCacheLocationTooltip.Disabled {
-  pointer-events: none;
-}
-
-/* Tooltip text */
-.ResetCacheLocationTooltip .ResetCacheLocationTooltipText {
-  visibility: hidden;
-  width: 150px;
-  background-color: #555;
-  color: #fff;
-  text-align: center;
-  padding: 5px 0;
-  border-radius: 6px;
-
-  /* Position the tooltip text */
-  position: absolute;
-  z-index: 1;
-  bottom: 5px;
-  left: 450%;
-  margin-left: -60px;
-  font-size: 0.5em;
-
-  /* Fade in tooltip */
-  opacity: 0;
-  transition: opacity 0.3s;
-  pointer-events: none;
-}
-
-/* Tooltip arrow */
-.ResetCacheLocationTooltip .ResetCacheLocationTooltipText::after {
-  content: " ";
-  position: absolute;
-  top: 50%;
-  right: 100%; /* To the left of the tooltip */
-  margin-top: -5px;
-  border-width: 5px;
-  border-style: solid;
-  border-color: transparent #555 transparent transparent;
-}
-
-#resetDehydrateCacheLocation:hover .ResetCacheLocationTooltipText {
-  visibility: visible;
-  opacity: 1;
-}
-
-/* Tooltip container TODO: reduce duplication with the above rules */
-.ResetTemporaryLocationTooltip {
-  position: relative;
-  display: inline-block;
-}
-
-.ResetTemporaryLocationTooltip.Disabled {
-  pointer-events: none;
-}
-
-/* Tooltip text */
-.ResetTemporaryLocationTooltip .ResetTemporaryLocationTooltipText {
-  visibility: hidden;
-  width: 150px;
-  background-color: #555;
-  color: #fff;
-  text-align: center;
-  padding: 5px 0;
-  border-radius: 6px;
-
-  /* Position the tooltip text */
-  position: absolute;
-  z-index: 1;
-  bottom: 5px;
-  left: 450%;
-  margin-left: -60px;
-  font-size: 0.5em;
-
-  /* Fade in tooltip */
-  opacity: 0;
-  transition: opacity 0.3s;
-  pointer-events: none;
-}
-
-/* Tooltip arrow */
-.ResetTemporaryLocationTooltip .ResetTemporaryLocationTooltipText::after {
-  content: " ";
-  position: absolute;
-  top: 50%;
-  right: 100%; /* To the left of the tooltip */
-  margin-top: -5px;
-  border-width: 5px;
-  border-style: solid;
-  border-color: transparent #555 transparent transparent;
-}
-
-#resetTemporaryLocation:hover .ResetTemporaryLocationTooltipText {
-  visibility: visible;
-  opacity: 1;
-}
-
-.progress-bar {
-  --color: #000;
-
-  border: var(--color) solid 2px;
-  box-sizing: border-box;
-  padding: 2px;
-  position: relative;
-}
-
-.progress-bar .progress-inner {
-  background-color: var(--color);
-  box-sizing: border-box;
-  height: 23px;
-  width: 0;
-}
-
-.progress-bar .progress-label {
-  color: #fff;
-  left: 0;
-  mix-blend-mode: difference; /* From https://css-tricks.com/methods-contrasting-text-backgrounds/ */
-  padding: 4px 5px;
-  position: absolute;
-  top: 0;
-}
-
-.Hidden {
-  display: none;
-}
-
-#storeVersionSettings {
-  margin-bottom: 8px;
-}
