/player-options")
@cache.cached()
def player_options(game: str):
- return render_options_page("playerOptions/playerOptions.html", game, is_complex=False)
+ try:
+ return render_options_page("playerOptions/playerOptions.html", game, is_complex=False)
+ except KeyError:
+ return abort(404)
# YAML generator for player-options
@@ -206,8 +209,11 @@ def generate_yaml(game: str):
if request.method == "POST":
options = {}
intent_generate = False
+
for key, val in request.form.items(multi=True):
- if key in options:
+ if val == "_ensure-empty-list":
+ options[key] = []
+ elif options.get(key):
if not isinstance(options[key], list):
options[key] = [options[key]]
options[key].append(val)
@@ -216,11 +222,11 @@ def generate_yaml(game: str):
for key, val in options.copy().items():
key_parts = key.rsplit("||", 2)
- # Detect and build ItemDict options from their name pattern
+ # Detect and build OptionCounter options from their name pattern
if key_parts[-1] == "qty":
if key_parts[0] not in options:
options[key_parts[0]] = {}
- if val != "0":
+ if val and val != "0":
options[key_parts[0]][key_parts[1]] = int(val)
del options[key]
diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt
index b7b14dea1e6f..c4267dc2846b 100644
--- a/WebHostLib/requirements.txt
+++ b/WebHostLib/requirements.txt
@@ -1,11 +1,13 @@
-flask>=3.0.3
-werkzeug>=3.0.6
-pony>=0.7.19
-waitress>=3.0.0
+flask>=3.1.1
+werkzeug>=3.1.3
+pony>=0.7.19; python_version <= '3.12'
+pony @ git+https://github.com/black-sliver/pony@7feb1221953b7fa4a6735466bf21a8b4d35e33ba#0.7.19; python_version >= '3.13'
+waitress>=3.0.2
Flask-Caching>=2.3.0
-Flask-Compress>=1.15
-Flask-Limiter>=3.8.0
-bokeh>=3.5.2
-markupsafe>=2.1.5
-Markdown>=3.7
-mdx-breakless-lists>=1.0.1
+Flask-Compress==1.18 # pkg_resources can't resolve the "backports.zstd" dependency of >1.18, breaking ModuleUpdate.py
+Flask-Limiter>=3.12
+bokeh>=3.6.3
+markupsafe>=3.0.2
+setproctitle>=1.3.5
+mistune>=3.1.3
+docutils>=0.22.2
diff --git a/WebHostLib/static/assets/faq/en.md b/WebHostLib/static/assets/faq/en.md
index e64535b42d03..5b42cc6fc6c5 100644
--- a/WebHostLib/static/assets/faq/en.md
+++ b/WebHostLib/static/assets/faq/en.md
@@ -22,8 +22,8 @@ players to rely upon each other to complete their game.
While a multiworld game traditionally requires all players to be playing the same game, a multi-game multiworld allows
players to randomize any of the supported games, and send items between them. This allows players of different
-games to interact with one another in a single multiplayer environment. Archipelago supports multi-game multiworld.
-Here is a list of our [Supported Games](https://archipelago.gg/games).
+games to interact with one another in a single multiplayer environment. Archipelago supports multi-game multiworlds.
+Here is a list of our [Supported Games](/games).
## Can I generate a single-player game with Archipelago?
@@ -33,7 +33,7 @@ play, open the Settings Page, pick your settings, and click Generate Game.
## How do I get started?
-We have a [Getting Started](https://archipelago.gg/tutorial/Archipelago/setup/en) guide that will help you get the
+We have a [Getting Started](/tutorial/Archipelago/setup/en) guide that will help you get the
software set up. You can use that guide to learn how to generate multiworlds. There are also basic instructions for
including multiple games, and hosting multiworlds on the website for ease and convenience.
@@ -57,7 +57,7 @@ their multiworld.
If a player must leave early, they can use Archipelago's release system. When a player releases their game, all items
in that game belonging to other players are sent out automatically. This allows other players to continue to play
-uninterrupted. Here is a list of all of our [Server Commands](https://archipelago.gg/tutorial/Archipelago/commands/en).
+uninterrupted. Here is a list of all of our [Server Commands](/tutorial/Archipelago/commands/en).
## What happens if an item is placed somewhere it is impossible to get?
@@ -66,7 +66,7 @@ is to ensure items necessary to complete the game will be accessible to the play
rules allowing certain items to be placed in normally unreachable locations, provided the player has indicated they are
comfortable exploiting certain glitches in the game.
-## I want to add a game to the Archipelago randomizer. How do I do that?
+## I want to develop a game implementation for Archipelago. How do I do that?
The best way to get started is to take a look at our code on GitHub:
[Archipelago GitHub Page](https://github.com/ArchipelagoMW/Archipelago).
@@ -77,4 +77,5 @@ There, you will find examples of games in the `worlds` folder:
You may also find developer documentation in the `docs` folder:
[/docs Folder in Archipelago Code](https://github.com/ArchipelagoMW/Archipelago/tree/main/docs).
-If you have more questions, feel free to ask in the **#ap-world-dev** channel on our Discord.
+If you have more questions regarding development of a game implementation, feel free to ask in the **#ap-world-dev**
+channel on our Discord.
diff --git a/WebHostLib/static/assets/gameInfo.js b/WebHostLib/static/assets/gameInfo.js
deleted file mode 100644
index b8c56905a50a..000000000000
--- a/WebHostLib/static/assets/gameInfo.js
+++ /dev/null
@@ -1,51 +0,0 @@
-window.addEventListener('load', () => {
- const gameInfo = document.getElementById('game-info');
- new Promise((resolve, reject) => {
- const ajax = new XMLHttpRequest();
- ajax.onreadystatechange = () => {
- if (ajax.readyState !== 4) { return; }
- if (ajax.status === 404) {
- reject("Sorry, this game's info page is not available in that language yet.");
- return;
- }
- if (ajax.status !== 200) {
- reject("Something went wrong while loading the info page.");
- return;
- }
- resolve(ajax.responseText);
- };
- ajax.open('GET', `${window.location.origin}/static/generated/docs/${gameInfo.getAttribute('data-game')}/` +
- `${gameInfo.getAttribute('data-lang')}_${gameInfo.getAttribute('data-game')}.md`, true);
- ajax.send();
- }).then((results) => {
- // Populate page with HTML generated from markdown
- showdown.setOption('tables', true);
- showdown.setOption('strikethrough', true);
- showdown.setOption('literalMidWordUnderscores', true);
- gameInfo.innerHTML += (new showdown.Converter()).makeHtml(results);
- adjustHeaderWidth();
-
- // Reset the id of all header divs to something nicer
- for (const header of document.querySelectorAll('h1, h2, h3, h4, h5, h6')) {
- const headerId = header.innerText.replace(/\s+/g, '-').toLowerCase();
- header.setAttribute('id', headerId);
- header.addEventListener('click', () => {
- window.location.hash = `#${headerId}`;
- header.scrollIntoView();
- });
- }
-
- // Manually scroll the user to the appropriate header if anchor navigation is used
- document.fonts.ready.finally(() => {
- if (window.location.hash) {
- const scrollTarget = document.getElementById(window.location.hash.substring(1));
- scrollTarget?.scrollIntoView();
- }
- });
- }).catch((error) => {
- console.error(error);
- gameInfo.innerHTML =
- `This page is out of logic!
- Click here to return to safety.
`;
- });
-});
diff --git a/WebHostLib/static/assets/hostGame.js b/WebHostLib/static/assets/hostGame.js
index db1ab1ddde3e..01a8da06e5dc 100644
--- a/WebHostLib/static/assets/hostGame.js
+++ b/WebHostLib/static/assets/hostGame.js
@@ -6,6 +6,4 @@ window.addEventListener('load', () => {
document.getElementById('file-input').addEventListener('change', () => {
document.getElementById('host-game-form').submit();
});
-
- adjustFooterHeight();
});
diff --git a/WebHostLib/static/assets/minecraftTracker.js b/WebHostLib/static/assets/minecraftTracker.js
deleted file mode 100644
index a698214b8dd6..000000000000
--- a/WebHostLib/static/assets/minecraftTracker.js
+++ /dev/null
@@ -1,49 +0,0 @@
-window.addEventListener('load', () => {
- // Reload tracker every 15 seconds
- const url = window.location;
- setInterval(() => {
- const ajax = new XMLHttpRequest();
- ajax.onreadystatechange = () => {
- if (ajax.readyState !== 4) { return; }
-
- // Create a fake DOM using the returned HTML
- const domParser = new DOMParser();
- const fakeDOM = domParser.parseFromString(ajax.responseText, 'text/html');
-
- // Update item tracker
- document.getElementById('inventory-table').innerHTML = fakeDOM.getElementById('inventory-table').innerHTML;
- // Update only counters in the location-table
- let counters = document.getElementsByClassName('counter');
- const fakeCounters = fakeDOM.getElementsByClassName('counter');
- for (let i = 0; i < counters.length; i++) {
- counters[i].innerHTML = fakeCounters[i].innerHTML;
- }
- };
- ajax.open('GET', url);
- ajax.send();
- }, 15000)
-
- // Collapsible advancement sections
- const categories = document.getElementsByClassName("location-category");
- for (let i = 0; i < categories.length; i++) {
- let hide_id = categories[i].id.split('-')[0];
- if (hide_id == 'Total') {
- continue;
- }
- categories[i].addEventListener('click', function() {
- // Toggle the advancement list
- document.getElementById(hide_id).classList.toggle("hide");
- // Change text of the header
- const tab_header = document.getElementById(hide_id+'-header').children[0];
- const orig_text = tab_header.innerHTML;
- let new_text;
- if (orig_text.includes("▼")) {
- new_text = orig_text.replace("▼", "▲");
- }
- else {
- new_text = orig_text.replace("▲", "▼");
- }
- tab_header.innerHTML = new_text;
- });
- }
-});
diff --git a/WebHostLib/static/assets/sc2Tracker.js b/WebHostLib/static/assets/sc2Tracker.js
index 30d4acd60b7e..19cff21c0fa2 100644
--- a/WebHostLib/static/assets/sc2Tracker.js
+++ b/WebHostLib/static/assets/sc2Tracker.js
@@ -1,49 +1,43 @@
-window.addEventListener('load', () => {
- // Reload tracker every 15 seconds
- const url = window.location;
- setInterval(() => {
- const ajax = new XMLHttpRequest();
- ajax.onreadystatechange = () => {
- if (ajax.readyState !== 4) { return; }
+let updateSection = (sectionName, fakeDOM) => {
+ document.getElementById(sectionName).innerHTML = fakeDOM.getElementById(sectionName).innerHTML;
+}
- // Create a fake DOM using the returned HTML
- const domParser = new DOMParser();
- const fakeDOM = domParser.parseFromString(ajax.responseText, 'text/html');
+window.addEventListener('load', () => {
+ // Reload tracker every 60 seconds (sync'd)
+ const url = window.location;
+ // Note: This synchronization code is adapted from code in trackerCommon.js
+ const targetSecond = parseInt(document.getElementById('player-tracker').getAttribute('data-second')) + 3;
+ console.log("Target second of refresh: " + targetSecond);
- // Update item tracker
- document.getElementById('inventory-table').innerHTML = fakeDOM.getElementById('inventory-table').innerHTML;
- // Update only counters in the location-table
- let counters = document.getElementsByClassName('counter');
- const fakeCounters = fakeDOM.getElementsByClassName('counter');
- for (let i = 0; i < counters.length; i++) {
- counters[i].innerHTML = fakeCounters[i].innerHTML;
- }
+ let getSleepTimeSeconds = () => {
+ // -40 % 60 is -40, which is absolutely wrong and should burn
+ var sleepSeconds = (((targetSecond - new Date().getSeconds()) % 60) + 60) % 60;
+ return sleepSeconds || 60;
};
- ajax.open('GET', url);
- ajax.send();
- }, 15000)
- // Collapsible advancement sections
- const categories = document.getElementsByClassName("location-category");
- for (let category of categories) {
- let hide_id = category.id.split('_')[0];
- if (hide_id === 'Total') {
- continue;
- }
- category.addEventListener('click', function() {
- // Toggle the advancement list
- document.getElementById(hide_id).classList.toggle("hide");
- // Change text of the header
- const tab_header = document.getElementById(hide_id+'_header').children[0];
- const orig_text = tab_header.innerHTML;
- let new_text;
- if (orig_text.includes("▼")) {
- new_text = orig_text.replace("▼", "▲");
- }
- else {
- new_text = orig_text.replace("▲", "▼");
- }
- tab_header.innerHTML = new_text;
- });
- }
+ let updateTracker = () => {
+ const ajax = new XMLHttpRequest();
+ ajax.onreadystatechange = () => {
+ if (ajax.readyState !== 4) { return; }
+
+ // Create a fake DOM using the returned HTML
+ const domParser = new DOMParser();
+ const fakeDOM = domParser.parseFromString(ajax.responseText, 'text/html');
+
+ // Update dynamic sections
+ updateSection('player-info', fakeDOM);
+ updateSection('section-filler', fakeDOM);
+ updateSection('section-terran', fakeDOM);
+ updateSection('section-zerg', fakeDOM);
+ updateSection('section-protoss', fakeDOM);
+ updateSection('section-nova', fakeDOM);
+ updateSection('section-kerrigan', fakeDOM);
+ updateSection('section-keys', fakeDOM);
+ updateSection('section-locations', fakeDOM);
+ };
+ ajax.open('GET', url);
+ ajax.send();
+ updater = setTimeout(updateTracker, getSleepTimeSeconds() * 1000);
+ };
+ window.updater = setTimeout(updateTracker, getSleepTimeSeconds() * 1000);
});
diff --git a/WebHostLib/static/assets/tutorial.js b/WebHostLib/static/assets/tutorial.js
deleted file mode 100644
index 1db08d85b352..000000000000
--- a/WebHostLib/static/assets/tutorial.js
+++ /dev/null
@@ -1,58 +0,0 @@
-window.addEventListener('load', () => {
- const tutorialWrapper = document.getElementById('tutorial-wrapper');
- new Promise((resolve, reject) => {
- const ajax = new XMLHttpRequest();
- ajax.onreadystatechange = () => {
- if (ajax.readyState !== 4) { return; }
- if (ajax.status === 404) {
- reject("Sorry, the tutorial is not available in that language yet.");
- return;
- }
- if (ajax.status !== 200) {
- reject("Something went wrong while loading the tutorial.");
- return;
- }
- resolve(ajax.responseText);
- };
- ajax.open('GET', `${window.location.origin}/static/generated/docs/` +
- `${tutorialWrapper.getAttribute('data-game')}/${tutorialWrapper.getAttribute('data-file')}_` +
- `${tutorialWrapper.getAttribute('data-lang')}.md`, true);
- ajax.send();
- }).then((results) => {
- // Populate page with HTML generated from markdown
- showdown.setOption('tables', true);
- showdown.setOption('strikethrough', true);
- showdown.setOption('literalMidWordUnderscores', true);
- showdown.setOption('disableForced4SpacesIndentedSublists', true);
- tutorialWrapper.innerHTML += (new showdown.Converter()).makeHtml(results);
- adjustHeaderWidth();
-
- const title = document.querySelector('h1')
- if (title) {
- document.title = title.textContent;
- }
-
- // Reset the id of all header divs to something nicer
- for (const header of document.querySelectorAll('h1, h2, h3, h4, h5, h6')) {
- const headerId = header.innerText.replace(/\s+/g, '-').toLowerCase();
- header.setAttribute('id', headerId);
- header.addEventListener('click', () => {
- window.location.hash = `#${headerId}`;
- header.scrollIntoView();
- });
- }
-
- // Manually scroll the user to the appropriate header if anchor navigation is used
- document.fonts.ready.finally(() => {
- if (window.location.hash) {
- const scrollTarget = document.getElementById(window.location.hash.substring(1));
- scrollTarget?.scrollIntoView();
- }
- });
- }).catch((error) => {
- console.error(error);
- tutorialWrapper.innerHTML =
- `This page is out of logic!
- Click here to return to safety.
`;
- });
-});
diff --git a/WebHostLib/static/assets/tutorialLanding.js b/WebHostLib/static/assets/tutorialLanding.js
deleted file mode 100644
index b820cc34653a..000000000000
--- a/WebHostLib/static/assets/tutorialLanding.js
+++ /dev/null
@@ -1,81 +0,0 @@
-const showError = () => {
- const tutorial = document.getElementById('tutorial-landing');
- document.getElementById('page-title').innerText = 'This page is out of logic!';
- tutorial.removeChild(document.getElementById('loading'));
- const userMessage = document.createElement('h3');
- const homepageLink = document.createElement('a');
- homepageLink.innerText = 'Click here';
- homepageLink.setAttribute('href', '/');
- userMessage.append(homepageLink);
- userMessage.append(' to go back to safety!');
- tutorial.append(userMessage);
-};
-
-window.addEventListener('load', () => {
- const ajax = new XMLHttpRequest();
- ajax.onreadystatechange = () => {
- if (ajax.readyState !== 4) { return; }
- const tutorialDiv = document.getElementById('tutorial-landing');
- if (ajax.status !== 200) { return showError(); }
-
- try {
- const games = JSON.parse(ajax.responseText);
- games.forEach((game) => {
- const gameTitle = document.createElement('h2');
- gameTitle.innerText = game.gameTitle;
- gameTitle.id = `${encodeURIComponent(game.gameTitle)}`;
- tutorialDiv.appendChild(gameTitle);
-
- game.tutorials.forEach((tutorial) => {
- const tutorialName = document.createElement('h3');
- tutorialName.innerText = tutorial.name;
- tutorialDiv.appendChild(tutorialName);
-
- const tutorialDescription = document.createElement('p');
- tutorialDescription.innerText = tutorial.description;
- tutorialDiv.appendChild(tutorialDescription);
-
- const intro = document.createElement('p');
- intro.innerText = 'This guide is available in the following languages:';
- tutorialDiv.appendChild(intro);
-
- const fileList = document.createElement('ul');
- tutorial.files.forEach((file) => {
- const listItem = document.createElement('li');
- const anchor = document.createElement('a');
- anchor.innerText = file.language;
- anchor.setAttribute('href', `${window.location.origin}/tutorial/${file.link}`);
- listItem.appendChild(anchor);
-
- listItem.append(' by ');
- for (let author of file.authors) {
- listItem.append(author);
- if (file.authors.indexOf(author) !== (file.authors.length -1)) {
- listItem.append(', ');
- }
- }
-
- fileList.appendChild(listItem);
- });
- tutorialDiv.appendChild(fileList);
- });
- });
-
- tutorialDiv.removeChild(document.getElementById('loading'));
- } catch (error) {
- showError();
- console.error(error);
- }
-
- // Check if we are on an anchor when coming in, and scroll to it.
- const hash = window.location.hash;
- if (hash) {
- const offset = 128; // To account for navbar banner at top of page.
- window.scrollTo(0, 0);
- const rect = document.getElementById(hash.slice(1)).getBoundingClientRect();
- window.scrollTo(rect.left, rect.top - offset);
- }
- };
- ajax.open('GET', `${window.location.origin}/static/generated/tutorials.json`, true);
- ajax.send();
-});
diff --git a/WebHostLib/static/styles/globalStyles.css b/WebHostLib/static/styles/globalStyles.css
index 1a0144830e7c..adcee6581be4 100644
--- a/WebHostLib/static/styles/globalStyles.css
+++ b/WebHostLib/static/styles/globalStyles.css
@@ -36,6 +36,13 @@ html{
body{
margin: 0;
+ display: flex;
+ flex-direction: column;
+ min-height: calc(100vh - 110px);
+}
+
+main {
+ flex-grow: 1;
}
a{
diff --git a/WebHostLib/static/styles/markdown.css b/WebHostLib/static/styles/markdown.css
index 5ead2c60f791..ac06dea59d13 100644
--- a/WebHostLib/static/styles/markdown.css
+++ b/WebHostLib/static/styles/markdown.css
@@ -28,7 +28,6 @@
font-weight: normal;
font-family: LondrinaSolid-Regular, sans-serif;
text-transform: uppercase;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
width: 100%;
text-shadow: 1px 1px 4px #000000;
}
@@ -37,7 +36,6 @@
font-size: 38px;
font-weight: normal;
font-family: LondrinaSolid-Light, sans-serif;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
width: 100%;
margin-top: 20px;
margin-bottom: 0.5rem;
@@ -50,7 +48,6 @@
font-family: LexendDeca-Regular, sans-serif;
text-transform: none;
text-align: left;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
width: 100%;
margin-bottom: 0.5rem;
}
@@ -59,7 +56,6 @@
font-family: LexendDeca-Regular, sans-serif;
text-transform: none;
font-size: 24px;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
margin-bottom: 24px;
}
@@ -67,14 +63,12 @@
font-family: LexendDeca-Regular, sans-serif;
text-transform: none;
font-size: 22px;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
}
.markdown h6, .markdown details summary.h6{
font-family: LexendDeca-Regular, sans-serif;
text-transform: none;
font-size: 20px;
- cursor: pointer; /* TODO: remove once we drop showdown.js */
}
.markdown h4, .markdown h5, .markdown h6{
diff --git a/WebHostLib/static/styles/minecraftTracker.css b/WebHostLib/static/styles/minecraftTracker.css
deleted file mode 100644
index 224cdcdc55a0..000000000000
--- a/WebHostLib/static/styles/minecraftTracker.css
+++ /dev/null
@@ -1,102 +0,0 @@
-#player-tracker-wrapper{
- margin: 0;
-}
-
-#inventory-table{
- border-top: 2px solid #000000;
- border-left: 2px solid #000000;
- border-right: 2px solid #000000;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- padding: 3px 3px 10px;
- width: 384px;
- background-color: #42b149;
-}
-
-#inventory-table td{
- width: 40px;
- height: 40px;
- text-align: center;
- vertical-align: middle;
-}
-
-#inventory-table img{
- height: 100%;
- max-width: 40px;
- max-height: 40px;
- filter: grayscale(100%) contrast(75%) brightness(30%);
-}
-
-#inventory-table img.acquired{
- filter: none;
-}
-
-#inventory-table div.counted-item {
- position: relative;
-}
-
-#inventory-table div.item-count {
- position: absolute;
- color: white;
- font-family: "Minecraftia", monospace;
- font-weight: bold;
- bottom: 0;
- right: 0;
-}
-
-#location-table{
- width: 384px;
- border-left: 2px solid #000000;
- border-right: 2px solid #000000;
- border-bottom: 2px solid #000000;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- background-color: #42b149;
- padding: 0 3px 3px;
- font-family: "Minecraftia", monospace;
- font-size: 14px;
- cursor: default;
-}
-
-#location-table th{
- vertical-align: middle;
- text-align: left;
- padding-right: 10px;
-}
-
-#location-table td{
- padding-top: 2px;
- padding-bottom: 2px;
- line-height: 20px;
-}
-
-#location-table td.counter {
- text-align: right;
- font-size: 14px;
-}
-
-#location-table td.toggle-arrow {
- text-align: right;
-}
-
-#location-table tr#Total-header {
- font-weight: bold;
-}
-
-#location-table img{
- height: 100%;
- max-width: 30px;
- max-height: 30px;
-}
-
-#location-table tbody.locations {
- font-size: 12px;
-}
-
-#location-table td.location-name {
- padding-left: 16px;
-}
-
-.hide {
- display: none;
-}
diff --git a/WebHostLib/static/styles/sc2Tracker.css b/WebHostLib/static/styles/sc2Tracker.css
index 29a719a110c8..28a4e7bc8a22 100644
--- a/WebHostLib/static/styles/sc2Tracker.css
+++ b/WebHostLib/static/styles/sc2Tracker.css
@@ -1,160 +1,276 @@
-#player-tracker-wrapper{
- margin: 0;
+*{
+ margin: 0;
+ font-family: "JuraBook", monospace;
}
-
-#tracker-table td {
- vertical-align: top;
+body{
+ --icon-size: 36px;
+ --item-class-padding: 4px;
}
-
-.inventory-table-area{
- border: 2px solid #000000;
- border-radius: 4px;
- padding: 3px 10px 3px 10px;
+a{
+ color: #1ae;
}
-.inventory-table-area:has(.inventory-table-terran) {
- width: 690px;
- background-color: #525494;
+/* Section colours */
+#player-info{
+ background-color: #37a;
}
-
-.inventory-table-area:has(.inventory-table-zerg) {
- width: 360px;
- background-color: #9d60d2;
+.player-tracker{
+ max-width: 100%;
}
-
-.inventory-table-area:has(.inventory-table-protoss) {
- width: 400px;
- background-color: #d2b260;
+.tracker-section{
+ background-color: grey;
}
-
-#tracker-table .inventory-table td{
- width: 40px;
- height: 40px;
- text-align: center;
- vertical-align: middle;
+#terran-items{
+ background-color: #3a7;
}
-
-.inventory-table td.title{
- padding-top: 10px;
- height: 20px;
- font-family: "JuraBook", monospace;
- font-size: 16px;
- font-weight: bold;
+#zerg-items{
+ background-color: #d94;
}
-
-.inventory-table img{
- height: 100%;
- max-width: 40px;
- max-height: 40px;
- border: 1px solid #000000;
- filter: grayscale(100%) contrast(75%) brightness(20%);
- background-color: black;
+#protoss-items{
+ background-color: #37a;
}
-
-.inventory-table img.acquired{
- filter: none;
- background-color: black;
+#nova-items{
+ background-color: #777;
}
-
-.inventory-table .tint-terran img.acquired {
- filter: sepia(100%) saturate(300%) brightness(130%) hue-rotate(120deg)
+#kerrigan-items{
+ background-color: #a37;
}
-
-.inventory-table .tint-protoss img.acquired {
- filter: sepia(100%) saturate(1000%) brightness(110%) hue-rotate(180deg)
+#keys{
+ background-color: #aa2;
}
-.inventory-table .tint-level-1 img.acquired {
- filter: sepia(100%) saturate(1000%) brightness(110%) hue-rotate(60deg)
+/* Sections */
+.section-body{
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: flex-start;
+ align-items: flex-start;
+ padding-bottom: 3px;
}
-
-.inventory-table .tint-level-2 img.acquired {
- filter: sepia(100%) saturate(1000%) brightness(110%) hue-rotate(60deg) hue-rotate(120deg)
+.section-body-2{
+ display: flex;
+ flex-direction: column;
}
-
-.inventory-table .tint-level-3 img.acquired {
- filter: sepia(100%) saturate(1000%) brightness(110%) hue-rotate(60deg) hue-rotate(240deg)
+.tracker-section:has(input.collapse-section[type=checkbox]:checked) .section-body,
+.tracker-section:has(input.collapse-section[type=checkbox]:checked) .section-body-2{
+ display: none;
}
-
-.inventory-table div.counted-item {
- position: relative;
+.section-title{
+ position: relative;
+ border-bottom: 3px solid black;
+ /* Prevent text selection */
+ user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
}
-
-.inventory-table div.item-count {
- width: 160px;
- text-align: left;
- color: black;
- font-family: "JuraBook", monospace;
- font-weight: bold;
+input[type="checkbox"]{
+ position: absolute;
+ cursor: pointer;
+ opacity: 0;
+ z-index: 1;
+ width: 100%;
+ height: 100%;
}
-
-#location-table{
- border: 2px solid #000000;
- border-radius: 4px;
- background-color: #87b678;
- padding: 10px 3px 3px;
- font-family: "JuraBook", monospace;
- font-size: 16px;
- font-weight: bold;
- cursor: default;
+.section-title:hover h2{
+ text-shadow: 0 0 4px #ddd;
}
-
-#location-table table{
- width: 100%;
+.f {
+ display: flex;
+ overflow: hidden;
}
-#location-table th{
- vertical-align: middle;
- text-align: left;
- padding-right: 10px;
+/* Acquire item filters */
+.tracker-section img{
+ height: 100%;
+ width: var(--icon-size);
+ height: var(--icon-size);
+ background-color: black;
}
-
-#location-table td{
- padding-top: 2px;
- padding-bottom: 2px;
- line-height: 20px;
+.unacquired, .lvl-0 .f{
+ filter: grayscale(100%) contrast(80%) brightness(42%) blur(0.5px);
}
-
-#location-table td.counter {
- text-align: right;
- font-size: 14px;
+.spacer{
+ width: var(--icon-size);
+ height: var(--icon-size);
}
-#location-table td.toggle-arrow {
- text-align: right;
+/* Item groups */
+.item-class{
+ display: flex;
+ flex-flow: column;
+ justify-content: center;
+ padding: var(--item-class-padding);
}
-
-#location-table tr#Total-header {
- font-weight: bold;
+.item-class-header{
+ display: flex;
+ flex-flow: row;
+}
+.item-class-upgrades{
+ /* Note: {display: flex; flex-flow: column wrap} */
+ /* just breaks on Firefox (width does not scale to content) */
+ display: grid;
+ grid-template-rows: repeat(4, auto);
+ grid-auto-flow: column;
}
-#location-table img{
- height: 100%;
- max-width: 30px;
- max-height: 30px;
+/* Subsections */
+.section-toc{
+ display: flex;
+ flex-direction: row;
+}
+.toc-box{
+ position: relative;
+ padding-left: 15px;
+ padding-right: 15px;
+}
+.toc-box:hover{
+ text-shadow: 0 0 7px white;
+}
+.ss-header{
+ position: relative;
+ text-align: center;
+ writing-mode: sideways-lr;
+ user-select: none;
+ padding-top: 5px;
+ font-size: 115%;
+}
+.tracker-section:has(input.ss-1-toggle:checked) .ss-1{
+ display: none;
+}
+.tracker-section:has(input.ss-2-toggle:checked) .ss-2{
+ display: none;
+}
+.tracker-section:has(input.ss-3-toggle:checked) .ss-3{
+ display: none;
+}
+.tracker-section:has(input.ss-4-toggle:checked) .ss-4{
+ display: none;
+}
+.tracker-section:has(input.ss-5-toggle:checked) .ss-5{
+ display: none;
+}
+.tracker-section:has(input.ss-6-toggle:checked) .ss-6{
+ display: none;
+}
+.tracker-section:has(input.ss-7-toggle:checked) .ss-7{
+ display: none;
+}
+.tracker-section:has(input.ss-1-toggle:hover) .ss-1{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-2-toggle:hover) .ss-2{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-3-toggle:hover) .ss-3{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-4-toggle:hover) .ss-4{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-5-toggle:hover) .ss-5{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-6-toggle:hover) .ss-6{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
+}
+.tracker-section:has(input.ss-7-toggle:hover) .ss-7{
+ background-color: #fff5;
+ box-shadow: 0 0 1px 1px white;
}
-#location-table tbody.locations {
- font-size: 16px;
+/* Progressive items */
+.progressive{
+ max-height: var(--icon-size);
+ display: contents;
}
-#location-table td.location-name {
- padding-left: 16px;
+.lvl-0 > :nth-child(2),
+.lvl-0 > :nth-child(3),
+.lvl-0 > :nth-child(4),
+.lvl-0 > :nth-child(5){
+ display: none;
+}
+.lvl-1 > :nth-child(2),
+.lvl-1 > :nth-child(3),
+.lvl-1 > :nth-child(4),
+.lvl-1 > :nth-child(5){
+ display: none;
+}
+.lvl-2 > :nth-child(1),
+.lvl-2 > :nth-child(3),
+.lvl-2 > :nth-child(4),
+.lvl-2 > :nth-child(5){
+ display: none;
+}
+.lvl-3 > :nth-child(1),
+.lvl-3 > :nth-child(2),
+.lvl-3 > :nth-child(4),
+.lvl-3 > :nth-child(5){
+ display: none;
+}
+.lvl-4 > :nth-child(1),
+.lvl-4 > :nth-child(2),
+.lvl-4 > :nth-child(3),
+.lvl-4 > :nth-child(5){
+ display: none;
+}
+.lvl-5 > :nth-child(1),
+.lvl-5 > :nth-child(2),
+.lvl-5 > :nth-child(3),
+.lvl-5 > :nth-child(4){
+ display: none;
}
-#location-table td:has(.location-column) {
- vertical-align: top;
+/* Filler item counters */
+.item-counter{
+ display: table;
+ text-align: center;
+ padding: var(--item-class-padding);
+}
+.item-count{
+ display: table-cell;
+ vertical-align: middle;
+ padding-left: 3px;
+ padding-right: 15px;
}
-#location-table .location-column {
- width: 100%;
- height: 100%;
+/* Hidden items */
+.hidden-class:not(:has(.f:not(.unacquired))), .hidden-item{
+ display: none;
}
-#location-table .location-column .spacer {
- min-height: 24px;
+/* Keys */
+#keys ol, #keys ul{
+ columns: 3;
+ -webkit-columns: 3;
+ -moz-columns: 3;
+}
+#keys li{
+ padding-right: 15pt;
}
-.hide {
- display: none;
+/* Locations */
+#section-locations{
+ padding-left: 5px;
+}
+@media only screen and (min-width: 120ch){
+ #section-locations ul{
+ columns: 2;
+ -webkit-columns: 2;
+ -moz-columns: 2;
+ }
}
+#locations li.checked{
+ list-style-type: "✔ ";
+}
+
+/* Allowing scrolling down a little further */
+.bottom-padding{
+ min-height: 33vh;
+}
\ No newline at end of file
diff --git a/WebHostLib/static/styles/sc2TrackerAtlas.css b/WebHostLib/static/styles/sc2TrackerAtlas.css
new file mode 100644
index 000000000000..7fc8746f6f90
--- /dev/null
+++ b/WebHostLib/static/styles/sc2TrackerAtlas.css
@@ -0,0 +1,3965 @@
+.abilityicon_spawnbanelings_square-png{
+ clip-path: xywh(0 0.0% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.93694829760403%);
+}
+
+.abilityicon_spawnbroodlings_square-png{
+ clip-path: xywh(0 0.12610340479192939% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.810844892812106%);
+}
+
+.biomassrecovery_coop-png{
+ clip-path: xywh(0 0.25220680958385877% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.68474148802018%);
+}
+
+.btn-ability-dehaka-airbonusdamage-png{
+ clip-path: xywh(0 0.37831021437578816% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.558638083228246%);
+}
+
+.btn-ability-hornerhan-fleethyperjump-png{
+ clip-path: xywh(0 0.5044136191677175% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.43253467843632%);
+}
+
+.btn-ability-hornerhan-raven-analyzetarget-png{
+ clip-path: xywh(0 0.6305170239596469% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.306431273644385%);
+}
+
+.btn-ability-hornerhan-reaper-flightmode-png{
+ clip-path: xywh(0 0.7566204287515763% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.18032786885246%);
+}
+
+.btn-ability-hornerhan-salvagebonus-png{
+ clip-path: xywh(0 0.8827238335435057% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 49.05422446406053%);
+}
+
+.btn-ability-hornerhan-viking-missileupgrade-png{
+ clip-path: xywh(0 1.008827238335435% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.9281210592686%);
+}
+
+.btn-ability-hornerhan-viking-piercingattacks-png{
+ clip-path: xywh(0 1.1349306431273645% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.80201765447667%);
+}
+
+.btn-ability-hornerhan-widowmine-attackrange-png{
+ clip-path: xywh(0 1.2610340479192939% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.675914249684745%);
+}
+
+.btn-ability-hornerhan-widowmine-deathblossom-png{
+ clip-path: xywh(0 1.3871374527112232% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.54981084489281%);
+}
+
+.btn-ability-hornerhan-wraith-attackspeed-png{
+ clip-path: xywh(0 1.5132408575031526% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.423707440100884%);
+}
+
+.btn-ability-kerrigan-abilityefficiency-png{
+ clip-path: xywh(0 1.639344262295082% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.29760403530895%);
+}
+
+.btn-ability-kerrigan-apocalypse-png{
+ clip-path: xywh(0 1.7654476670870114% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.17150063051702%);
+}
+
+.btn-ability-kerrigan-automatedextractors-png{
+ clip-path: xywh(0 1.8915510718789408% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 48.0453972257251%);
+}
+
+.btn-ability-kerrigan-broodlingnest-png{
+ clip-path: xywh(0 2.01765447667087% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.91929382093316%);
+}
+
+.btn-ability-kerrigan-droppods-png{
+ clip-path: xywh(0 2.1437578814627996% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.793190416141236%);
+}
+
+.btn-ability-kerrigan-fury-png{
+ clip-path: xywh(0 2.269861286254729% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.66708701134931%);
+}
+
+.btn-ability-kerrigan-heroicfortitude-png{
+ clip-path: xywh(0 2.3959646910466583% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.540983606557376%);
+}
+
+.btn-ability-kerrigan-improvedoverlords-png{
+ clip-path: xywh(0 2.5220680958385877% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.41488020176545%);
+}
+
+.btn-ability-kerrigan-kineticblast-png{
+ clip-path: xywh(0 2.648171500630517% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.288776796973515%);
+}
+
+.btn-ability-kerrigan-leapingstrike-png{
+ clip-path: xywh(0 2.7742749054224465% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.16267339218159%);
+}
+
+.btn-ability-kerrigan-malignantcreep-png{
+ clip-path: xywh(0 2.900378310214376% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 47.03656998738966%);
+}
+
+.btn-ability-kerrigan-psychicshift-png{
+ clip-path: xywh(0 3.0264817150063053% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.91046658259773%);
+}
+
+.btn-ability-kerrigan-revive-png{
+ clip-path: xywh(0 3.1525851197982346% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.7843631778058%);
+}
+
+.btn-ability-kerrigan-twindrones-png{
+ clip-path: xywh(0 3.278688524590164% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.658259773013874%);
+}
+
+.btn-ability-kerrigan-vespeneefficiency-png{
+ clip-path: xywh(0 3.4047919293820934% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.53215636822194%);
+}
+
+.btn-ability-kerrigan-wildmutation-png{
+ clip-path: xywh(0 3.530895334174023% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.406052963430014%);
+}
+
+.btn-ability-kerrigan-zerglingreconstitution-png{
+ clip-path: xywh(0 3.656998738965952% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.27994955863808%);
+}
+
+.btn-ability-mengsk-battlecruiser-decksights-png{
+ clip-path: xywh(0 3.7831021437578816% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.15384615384615%);
+}
+
+.btn-ability-mengsk-ghost-pyrokineticimmolation_orange-png{
+ clip-path: xywh(0 3.909205548549811% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 46.02774274905423%);
+}
+
+.btn-ability-mengsk-ghost-staticempblast-png{
+ clip-path: xywh(0 4.03530895334174% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.90163934426229%);
+}
+
+.btn-ability-mengsk-ghost-tacticalmissilestrike-png{
+ clip-path: xywh(0 4.16141235813367% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.775535939470366%);
+}
+
+.btn-ability-mengsk-medivac-doublehealbeam-png{
+ clip-path: xywh(0 4.287515762925599% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.64943253467844%);
+}
+
+.btn-ability-mengsk-medivac-igniteafterburners-png{
+ clip-path: xywh(0 4.4136191677175285% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.523329129886505%);
+}
+
+.btn-ability-mengsk-siegetank-flyingtankarmament-png{
+ clip-path: xywh(0 4.539722572509458% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.39722572509458%);
+}
+
+.btn-ability-mengsk-viking-speed-png{
+ clip-path: xywh(0 4.665825977301387% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.27112232030265%);
+}
+
+.btn-ability-nova-domination-png{
+ clip-path: xywh(0 4.791929382093317% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.14501891551072%);
+}
+
+.btn-ability-protoss-adept-spiritform-png{
+ clip-path: xywh(0 4.918032786885246% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 45.01891551071879%);
+}
+
+.btn-ability-protoss-astralwind-png{
+ clip-path: xywh(0 5.044136191677175% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.89281210592686%);
+}
+
+.btn-ability-protoss-barrier-upgraded-png{
+ clip-path: xywh(0 5.170239596469105% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.76670870113493%);
+}
+
+.btn-ability-protoss-blink-color-png{
+ clip-path: xywh(0 5.296343001261034% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.640605296343004%);
+}
+
+.btn-ability-protoss-blinkshieldrestore-png{
+ clip-path: xywh(0 5.422446406052964% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.51450189155107%);
+}
+
+.btn-ability-protoss-carrierrepairdrones-png{
+ clip-path: xywh(0 5.548549810844893% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.388398486759144%);
+}
+
+.btn-ability-protoss-chargedblast-png{
+ clip-path: xywh(0 5.674653215636822% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.26229508196721%);
+}
+
+.btn-ability-protoss-coronabeam-png{
+ clip-path: xywh(0 5.800756620428752% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.13619167717528%);
+}
+
+.btn-ability-protoss-disintegration-png{
+ clip-path: xywh(0 5.926860025220681% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 44.010088272383356%);
+}
+
+.btn-ability-protoss-disruptionblast-png{
+ clip-path: xywh(0 6.0529634300126105% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.88398486759142%);
+}
+
+.btn-ability-protoss-doubleshieldrecharge-png{
+ clip-path: xywh(0 6.17906683480454% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.757881462799496%);
+}
+
+.btn-ability-protoss-dragoonchassis-png{
+ clip-path: xywh(0 6.305170239596469% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.63177805800757%);
+}
+
+.btn-ability-protoss-dualgravitonbeam-png{
+ clip-path: xywh(0 6.431273644388399% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.505674653215635%);
+}
+
+.btn-ability-protoss-entomb-png{
+ clip-path: xywh(0 6.557377049180328% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.37957124842371%);
+}
+
+.btn-ability-protoss-feedback-color-png{
+ clip-path: xywh(0 6.683480453972257% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.25346784363178%);
+}
+
+.btn-ability-protoss-firebeam-png{
+ clip-path: xywh(0 6.809583858764187% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.12736443883985%);
+}
+
+.btn-ability-protoss-forcefield-color-png{
+ clip-path: xywh(0 6.935687263556116% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 43.00126103404792%);
+}
+
+.btn-ability-protoss-forceofwill-png{
+ clip-path: xywh(0 7.061790668348046% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.87515762925599%);
+}
+
+.btn-ability-protoss-gravitonbeam-color-png{
+ clip-path: xywh(0 7.187894073139975% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.74905422446406%);
+}
+
+.btn-ability-protoss-hallucination-color-png{
+ clip-path: xywh(0 7.313997477931904% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.622950819672134%);
+}
+
+.btn-ability-protoss-lightningdash-png{
+ clip-path: xywh(0 7.440100882723834% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.4968474148802%);
+}
+
+.btn-ability-protoss-massrecall-png{
+ clip-path: xywh(0 7.566204287515763% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.37074401008827%);
+}
+
+.btn-ability-protoss-mindblast-png{
+ clip-path: xywh(0 7.6923076923076925% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.24464060529634%);
+}
+
+.btn-ability-protoss-oracle-stasiscalibration-png{
+ clip-path: xywh(0 7.818411097099622% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 42.11853720050441%);
+}
+
+.btn-ability-protoss-oraclepulsarcannonon-png{
+ clip-path: xywh(0 7.944514501891551% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.992433795712486%);
+}
+
+.btn-ability-protoss-phantomdash-png{
+ clip-path: xywh(0 8.07061790668348% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.86633039092055%);
+}
+
+.btn-ability-protoss-prismaticrange-png{
+ clip-path: xywh(0 8.19672131147541% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.740226986128626%);
+}
+
+.btn-ability-protoss-purify-png{
+ clip-path: xywh(0 8.32282471626734% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.6141235813367%);
+}
+
+.btn-ability-protoss-recallondeath-png{
+ clip-path: xywh(0 8.448928121059268% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.488020176544765%);
+}
+
+.btn-ability-protoss-reclamation-png{
+ clip-path: xywh(0 8.575031525851198% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.36191677175284%);
+}
+
+.btn-ability-protoss-shadowdash-png{
+ clip-path: xywh(0 8.701134930643127% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.23581336696091%);
+}
+
+.btn-ability-protoss-shadowfury-png{
+ clip-path: xywh(0 8.827238335435057% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 41.10970996216898%);
+}
+
+.btn-ability-protoss-shieldrecharge-png{
+ clip-path: xywh(0 8.953341740226985% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.98360655737705%);
+}
+
+.btn-ability-protoss-stasistrap-png{
+ clip-path: xywh(0 9.079445145018916% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.85750315258512%);
+}
+
+.btn-ability-protoss-supplicant-sacrificeon-png{
+ clip-path: xywh(0 9.205548549810844% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.73139974779319%);
+}
+
+.btn-ability-protoss-veilofshadowsvorazun-png{
+ clip-path: xywh(0 9.331651954602775% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.60529634300126%);
+}
+
+.btn-ability-protoss-voidstasis-png{
+ clip-path: xywh(0 9.457755359394703% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.47919293820933%);
+}
+
+.btn-ability-protoss-vulcanblaster-png{
+ clip-path: xywh(0 9.583858764186633% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.3530895334174%);
+}
+
+.btn-ability-protoss-warprelocatelvl2-png{
+ clip-path: xywh(0 9.709962168978562% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.22698612862547%);
+}
+
+.btn-ability-protoss-whirlwind-png{
+ clip-path: xywh(0 9.836065573770492% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 40.10088272383354%);
+}
+
+.btn-ability-spearofadun-chronomancy-png{
+ clip-path: xywh(0 9.96216897856242% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.974779319041616%);
+}
+
+.btn-ability-spearofadun-chronosurge-png{
+ clip-path: xywh(0 10.08827238335435% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.84867591424968%);
+}
+
+.btn-ability-spearofadun-deploypylon-png{
+ clip-path: xywh(0 10.21437578814628% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.722572509457756%);
+}
+
+.btn-ability-spearofadun-guardianshell-png{
+ clip-path: xywh(0 10.34047919293821% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.59646910466583%);
+}
+
+.btn-ability-spearofadun-massrecall-png{
+ clip-path: xywh(0 10.466582597730138% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.470365699873895%);
+}
+
+.btn-ability-spearofadun-matrixoverload-png{
+ clip-path: xywh(0 10.592686002522068% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.34426229508197%);
+}
+
+.btn-ability-spearofadun-nexusovercharge-png{
+ clip-path: xywh(0 10.718789407313997% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.21815889029004%);
+}
+
+.btn-ability-spearofadun-orbitalassimilator-png{
+ clip-path: xywh(0 10.844892812105927% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 39.09205548549811%);
+}
+
+.btn-ability-spearofadun-orbitalstrike-png{
+ clip-path: xywh(0 10.970996216897856% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.96595208070618%);
+}
+
+.btn-ability-spearofadun-purifierbeam-png{
+ clip-path: xywh(0 11.097099621689786% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.83984867591425%);
+}
+
+.btn-ability-spearofadun-reconstructionbeam-png{
+ clip-path: xywh(0 11.223203026481714% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.71374527112232%);
+}
+
+.btn-ability-spearofadun-shieldovercharge-png{
+ clip-path: xywh(0 11.349306431273645% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.58764186633039%);
+}
+
+.btn-ability-spearofadun-solarbombardment-png{
+ clip-path: xywh(0 11.475409836065573% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.46153846153846%);
+}
+
+.btn-ability-spearofadun-solarlance-png{
+ clip-path: xywh(0 11.601513240857503% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.33543505674653%);
+}
+
+.btn-ability-spearofadun-temporalfield-png{
+ clip-path: xywh(0 11.727616645649432% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.2093316519546%);
+}
+
+.btn-ability-spearofadun-timestop-png{
+ clip-path: xywh(0 11.853720050441362% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 38.08322824716267%);
+}
+
+.btn-ability-spearofadun-warpharmonization-png{
+ clip-path: xywh(0 11.97982345523329% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.957124842370746%);
+}
+
+.btn-ability-spearofadun-warpinreinforcements-png{
+ clip-path: xywh(0 12.105926860025221% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.83102143757881%);
+}
+
+.btn-ability-stetmann-banelingmanashield-png{
+ clip-path: xywh(0 12.23203026481715% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.704918032786885%);
+}
+
+.btn-ability-stetmann-corruptormissilebarrage-png{
+ clip-path: xywh(0 12.35813366960908% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.57881462799496%);
+}
+
+.btn-ability-stukov-plaugedmunitions-png{
+ clip-path: xywh(0 12.484237074401008% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.452711223203025%);
+}
+
+.btn-ability-swarm-kerrigan-chainreaction-png{
+ clip-path: xywh(0 12.610340479192939% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.3266078184111%);
+}
+
+.btn-ability-swarm-kerrigan-crushinggrip-png{
+ clip-path: xywh(0 12.736443883984867% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.20050441361917%);
+}
+
+.btn-ability-terran-calldownextrasupplies-color-png{
+ clip-path: xywh(0 12.862547288776797% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 37.07440100882724%);
+}
+
+.btn-ability-terran-cloak-color-png{
+ clip-path: xywh(0 12.988650693568726% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.94829760403531%);
+}
+
+.btn-ability-terran-detectionconedebuff-png{
+ clip-path: xywh(0 13.114754098360656% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.82219419924338%);
+}
+
+.btn-ability-terran-electricfield-png{
+ clip-path: xywh(0 13.240857503152585% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.69609079445145%);
+}
+
+.btn-ability-terran-emergencythrusters-png{
+ clip-path: xywh(0 13.366960907944515% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.56998738965952%);
+}
+
+.btn-ability-terran-emp-color-png{
+ clip-path: xywh(0 13.493064312736443% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.44388398486759%);
+}
+
+.btn-ability-terran-goliath-jetpack-png{
+ clip-path: xywh(0 13.619167717528374% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.31778058007566%);
+}
+
+.btn-ability-terran-hercules-tacticaljump-png{
+ clip-path: xywh(0 13.745271122320302% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.19167717528373%);
+}
+
+.btn-ability-terran-ignorearmor-png{
+ clip-path: xywh(0 13.871374527112232% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 36.0655737704918%);
+}
+
+.btn-ability-terran-liftoff-png{
+ clip-path: xywh(0 13.997477931904161% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.939470365699876%);
+}
+
+.btn-ability-terran-nuclearstrike-color-png{
+ clip-path: xywh(0 14.123581336696091% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.81336696090794%);
+}
+
+.btn-ability-terran-psidisruption-png{
+ clip-path: xywh(0 14.24968474148802% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.687263556116015%);
+}
+
+.btn-ability-terran-punishergrenade-color-png{
+ clip-path: xywh(0 14.37578814627995% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.56116015132409%);
+}
+
+.btn-ability-terran-restorationscbw-png{
+ clip-path: xywh(0 14.501891551071878% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.435056746532155%);
+}
+
+.btn-ability-terran-scannersweep-color-png{
+ clip-path: xywh(0 14.627994955863809% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.30895334174023%);
+}
+
+.btn-ability-terran-shreddermissile-color-png{
+ clip-path: xywh(0 14.754098360655737% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.1828499369483%);
+}
+
+.btn-ability-terran-spidermine-png{
+ clip-path: xywh(0 14.880201765447667% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 35.05674653215637%);
+}
+
+.btn-ability-terran-stimpack-color-png{
+ clip-path: xywh(0 15.006305170239596% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.93064312736444%);
+}
+
+.btn-ability-terran-unloadall-png{
+ clip-path: xywh(0 15.132408575031526% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.80453972257251%);
+}
+
+.btn-ability-terran-warpjump-png{
+ clip-path: xywh(0 15.258511979823455% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.67843631778058%);
+}
+
+.btn-ability-terran-widowminehidden-png{
+ clip-path: xywh(0 15.384615384615385% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.552332912988646%);
+}
+
+.btn-ability-thor-330mm-png{
+ clip-path: xywh(0 15.510718789407314% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.42622950819672%);
+}
+
+.btn-ability-tychus-herc-heavyimpact-png{
+ clip-path: xywh(0 15.636822194199244% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.30012610340479%);
+}
+
+.btn-ability-tychus-medivac-png{
+ clip-path: xywh(0 15.762925598991172% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.17402269861286%);
+}
+
+.btn-ability-zeratul-avatarofform-psionicblast-png{
+ clip-path: xywh(0 15.889029003783103% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 34.04791929382093%);
+}
+
+.btn-ability-zeratul-chargedcrystal-psionicwinds-png{
+ clip-path: xywh(0 16.01513240857503% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.921815889029006%);
+}
+
+.btn-ability-zeratul-darkarchon-maelstrom-png{
+ clip-path: xywh(0 16.14123581336696% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.79571248423707%);
+}
+
+.btn-ability-zeratul-immortal-forcecannon-png{
+ clip-path: xywh(0 16.26733921815889% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.669609079445145%);
+}
+
+.btn-ability-zeratul-observer-sensorarray-png{
+ clip-path: xywh(0 16.39344262295082% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.54350567465322%);
+}
+
+.btn-ability-zeratul-topbar-serdathlegion-png{
+ clip-path: xywh(0 16.51954602774275% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.417402269861284%);
+}
+
+.btn-ability-zerg-abathur-corrosivebilelarge-png{
+ clip-path: xywh(0 16.64564943253468% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.29129886506936%);
+}
+
+.btn-ability-zerg-acidspores-png{
+ clip-path: xywh(0 16.77175283732661% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.16519546027743%);
+}
+
+.btn-ability-zerg-burrow-color-png{
+ clip-path: xywh(0 16.897856242118536% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 33.0390920554855%);
+}
+
+.btn-ability-zerg-causticspray-png{
+ clip-path: xywh(0 17.023959646910466% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.91298865069357%);
+}
+
+.btn-ability-zerg-corruption-color-png{
+ clip-path: xywh(0 17.150063051702396% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.786885245901644%);
+}
+
+.btn-ability-zerg-creepspread-png{
+ clip-path: xywh(0 17.276166456494327% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.66078184110971%);
+}
+
+.btn-ability-zerg-creepteleport-png{
+ clip-path: xywh(0 17.402269861286253% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.534678436317776%);
+}
+
+.btn-ability-zerg-darkswarm-png{
+ clip-path: xywh(0 17.528373266078184% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.40857503152586%);
+}
+
+.btn-ability-zerg-deeptunnel-png{
+ clip-path: xywh(0 17.654476670870114% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.28247162673392%);
+}
+
+.btn-ability-zerg-dehaka-essencecollector-png{
+ clip-path: xywh(0 17.780580075662044% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.15636822194199%);
+}
+
+.btn-ability-zerg-dehaka-guardian-explosivespores-png{
+ clip-path: xywh(0 17.90668348045397% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 32.03026481715006%);
+}
+
+.btn-ability-zerg-dehaka-guardian-primordialfury-png{
+ clip-path: xywh(0 18.0327868852459% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.904161412358135%);
+}
+
+.btn-ability-zerg-dehaka-impaler-tenderize-png{
+ clip-path: xywh(0 18.15889029003783% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.778058007566205%);
+}
+
+.btn-ability-zerg-dehaka-tyrannozor-barrageofspikes-png{
+ clip-path: xywh(0 18.284993694829762% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.651954602774275%);
+}
+
+.btn-ability-zerg-dehaka-tyrannozor-tyrantprotection-png{
+ clip-path: xywh(0 18.41109709962169% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.525851197982345%);
+}
+
+.btn-ability-zerg-dehaka-ultralisk-brutalcharge-png{
+ clip-path: xywh(0 18.53720050441362% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.399747793190418%);
+}
+
+.btn-ability-zerg-dehaka-ultralisk-healingadaptation-png{
+ clip-path: xywh(0 18.66330390920555% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.273644388398488%);
+}
+
+.btn-ability-zerg-dehaka-ultralisk-impalingstrike-png{
+ clip-path: xywh(0 18.78940731399748% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.147540983606557%);
+}
+
+.btn-ability-zerg-fireroach-increasefiredamage-png{
+ clip-path: xywh(0 18.915510718789406% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 31.021437578814627%);
+}
+
+.btn-ability-zerg-fungalgrowth-color-png{
+ clip-path: xywh(0 19.041614123581336% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.8953341740227%);
+}
+
+.btn-ability-zerg-genemutation-thornsaura-png{
+ clip-path: xywh(0 19.167717528373267% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.76923076923077%);
+}
+
+.btn-ability-zerg-generatecreep-color-png{
+ clip-path: xywh(0 19.293820933165197% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.64312736443884%);
+}
+
+.btn-ability-zerg-overlord-oversight-off-png{
+ clip-path: xywh(0 19.419924337957124% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.51702395964691%);
+}
+
+.btn-ability-zerg-parasiticbomb-png{
+ clip-path: xywh(0 19.546027742749054% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.390920554854983%);
+}
+
+.btn-ability-zerg-rapidregeneration-color-png{
+ clip-path: xywh(0 19.672131147540984% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.264817150063053%);
+}
+
+.btn-ability-zerg-stukov-ensnare-png{
+ clip-path: xywh(0 19.798234552332914% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.138713745271122%);
+}
+
+.btn-ability-zerg-stukov-ensnarecdr-png{
+ clip-path: xywh(0 19.92433795712484% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 30.012610340479192%);
+}
+
+.btn-ability-zerg-transfusion-color-png{
+ clip-path: xywh(0 20.05044136191677% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.886506935687265%);
+}
+
+.btn-abilty-terran-lockdownscbw-png{
+ clip-path: xywh(0 20.1765447667087% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.760403530895335%);
+}
+
+.btn-accelerated-warp-png{
+ clip-path: xywh(0 20.302648171500632% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.634300126103405%);
+}
+
+.btn-adaptive-medpacks-png{
+ clip-path: xywh(0 20.42875157629256% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.508196721311474%);
+}
+
+.btn-advanced-construction-png{
+ clip-path: xywh(0 20.55485498108449% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.382093316519548%);
+}
+
+.btn-advanced-defensive-matrix-png{
+ clip-path: xywh(0 20.68095838587642% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.255989911727617%);
+}
+
+.btn-advanced-photon-blasters-png{
+ clip-path: xywh(0 20.80706179066835% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.129886506935687%);
+}
+
+.btn-advanced-targeting-png{
+ clip-path: xywh(0 20.933165195460276% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 29.003783102143757%);
+}
+
+.btn-afterburners-valkyrie-png{
+ clip-path: xywh(0 21.059268600252206% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.87767969735183%);
+}
+
+.btn-all-terrain-treads-png{
+ clip-path: xywh(0 21.185372005044137% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.7515762925599%);
+}
+
+.btn-amonshardsarmor-png{
+ clip-path: xywh(0 21.311475409836067% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.62547288776797%);
+}
+
+.btn-anti-surface-countermeasures-png{
+ clip-path: xywh(0 21.437578814627994% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.49936948297604%);
+}
+
+.btn-apial-sensors-png{
+ clip-path: xywh(0 21.563682219419924% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.373266078184113%);
+}
+
+.btn-arc-inducers-png{
+ clip-path: xywh(0 21.689785624211854% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.247162673392182%);
+}
+
+.btn-argus-talisman-png{
+ clip-path: xywh(0 21.815889029003785% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 28.121059268600252%);
+}
+
+.btn-armor-metling-blasters-png{
+ clip-path: xywh(0 21.94199243379571% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.994955863808322%);
+}
+
+.btn-atx-batteries-png{
+ clip-path: xywh(0 22.06809583858764% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.868852459016395%);
+}
+
+.btn-automated-mitosis-lvl1-png{
+ clip-path: xywh(0 22.194199243379572% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.742749054224465%);
+}
+
+.btn-banshee-cross-spectrum-dampeners-png{
+ clip-path: xywh(0 22.320302648171502% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.616645649432535%);
+}
+
+.btn-behemoth-stellarskin-png{
+ clip-path: xywh(0 22.44640605296343% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.490542244640604%);
+}
+
+.btn-blood-amulet-png{
+ clip-path: xywh(0 22.57250945775536% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.364438839848678%);
+}
+
+.btn-building-protoss-photoncannon-png{
+ clip-path: xywh(0 22.69861286254729% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.238335435056747%);
+}
+
+.btn-building-protoss-shieldbattery-png{
+ clip-path: xywh(0 22.82471626733922% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 27.112232030264817%);
+}
+
+.btn-building-stukov-infestedbunker-png{
+ clip-path: xywh(0 22.950819672131146% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.986128625472887%);
+}
+
+.btn-building-stukov-infestedturret-png{
+ clip-path: xywh(0 23.076923076923077% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.86002522068096%);
+}
+
+.btn-building-terran-autoturret-png{
+ clip-path: xywh(0 23.203026481715007% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.73392181588903%);
+}
+
+.btn-building-terran-bunker-png{
+ clip-path: xywh(0 23.329129886506937% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.6078184110971%);
+}
+
+.btn-building-terran-bunkerneosteel-png{
+ clip-path: xywh(0 23.455233291298864% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.48171500630517%);
+}
+
+.btn-building-terran-hivemindemulator-png{
+ clip-path: xywh(0 23.581336696090794% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.355611601513242%);
+}
+
+.btn-building-terran-missileturret-png{
+ clip-path: xywh(0 23.707440100882724% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.229508196721312%);
+}
+
+.btn-building-terran-planetaryfortress-png{
+ clip-path: xywh(0 23.833543505674655% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 26.103404791929382%);
+}
+
+.btn-building-terran-refineryautomated-png{
+ clip-path: xywh(0 23.95964691046658% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.97730138713745%);
+}
+
+.btn-building-terran-sensordome-png{
+ clip-path: xywh(0 24.08575031525851% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.851197982345525%);
+}
+
+.btn-building-terran-sigmaprojector-png{
+ clip-path: xywh(0 24.211853720050442% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.725094577553595%);
+}
+
+.btn-building-terran-techreactor-png{
+ clip-path: xywh(0 24.337957124842372% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.598991172761664%);
+}
+
+.btn-building-zerg-hive-png{
+ clip-path: xywh(0 24.4640605296343% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.472887767969734%);
+}
+
+.btn-building-zerg-nydusworm-png{
+ clip-path: xywh(0 24.59016393442623% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.346784363177807%);
+}
+
+.btn-building-zerg-spinecrawler-png{
+ clip-path: xywh(0 24.71626733921816% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.220680958385877%);
+}
+
+.btn-building-zerg-sporecannon-png{
+ clip-path: xywh(0 24.84237074401009% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 25.094577553593947%);
+}
+
+.btn-building-zerg-sporecrawler-png{
+ clip-path: xywh(0 24.968474148802017% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.968474148802017%);
+}
+
+.btn-caladrius-structure-png{
+ clip-path: xywh(0 25.094577553593947% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.84237074401009%);
+}
+
+.btn-chronostatic-reinforcement-png{
+ clip-path: xywh(0 25.220680958385877% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.71626733921816%);
+}
+
+.btn-command-cancel-png{
+ clip-path: xywh(0 25.346784363177807% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.59016393442623%);
+}
+
+.btn-concentrated-antimatter-png{
+ clip-path: xywh(0 25.472887767969734% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.4640605296343%);
+}
+
+.btn-disintegrating-particles-png{
+ clip-path: xywh(0 25.598991172761664% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.337957124842372%);
+}
+
+.btn-disruptor-dispersion-png{
+ clip-path: xywh(0 25.725094577553595% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.211853720050442%);
+}
+
+.btn-endless-servitude-png{
+ clip-path: xywh(0 25.851197982345525% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 24.08575031525851%);
+}
+
+.btn-enhanced-servo-striders-png{
+ clip-path: xywh(0 25.97730138713745% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.95964691046658%);
+}
+
+.btn-enhanced-shield-generator-png{
+ clip-path: xywh(0 26.103404791929382% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.833543505674655%);
+}
+
+.btn-eye-of-wrath-png{
+ clip-path: xywh(0 26.229508196721312% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.707440100882724%);
+}
+
+.btn-fire-suppression-system-lvl2-png{
+ clip-path: xywh(0 26.355611601513242% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.581336696090794%);
+}
+
+.btn-fleshfused-targeting-optics-png{
+ clip-path: xywh(0 26.48171500630517% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.455233291298864%);
+}
+
+.btn-forged-chassis-png{
+ clip-path: xywh(0 26.6078184110971% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.329129886506937%);
+}
+
+.btn-gaping-maw-png{
+ clip-path: xywh(0 26.73392181588903% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.203026481715007%);
+}
+
+.btn-gravitic-thrusters-png{
+ clip-path: xywh(0 26.86002522068096% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 23.076923076923077%);
+}
+
+.btn-high-explosive-munition-png{
+ clip-path: xywh(0 26.986128625472887% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.950819672131146%);
+}
+
+.btn-high-voltage-capacitors-png{
+ clip-path: xywh(0 27.112232030264817% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.82471626733922%);
+}
+
+.btn-hostile-environment-adaptation-png{
+ clip-path: xywh(0 27.238335435056747% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.69861286254729%);
+}
+
+.btn-hull-of-past-glories-png{
+ clip-path: xywh(0 27.364438839848678% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.57250945775536%);
+}
+
+.btn-hunter-seeker-weapon-png{
+ clip-path: xywh(0 27.490542244640604% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.44640605296343%);
+}
+
+.btn-iconic-wavelength-flux-png{
+ clip-path: xywh(0 27.616645649432535% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.320302648171502%);
+}
+
+.btn-improved-osmosis-png{
+ clip-path: xywh(0 27.742749054224465% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.194199243379572%);
+}
+
+.btn-infested-liberator-ag-png{
+ clip-path: xywh(0 27.868852459016395% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 22.06809583858764%);
+}
+
+.btn-integrated-power-png{
+ clip-path: xywh(0 27.994955863808322% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.94199243379571%);
+}
+
+.btn-jerry-rigged-patchjob-png{
+ clip-path: xywh(0 28.121059268600252% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.815889029003785%);
+}
+
+.btn-juggernaut-plating-herc-png{
+ clip-path: xywh(0 28.247162673392182% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.689785624211854%);
+}
+
+.btn-juggernaut-plating-marauder-png{
+ clip-path: xywh(0 28.373266078184113% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.563682219419924%);
+}
+
+.btn-jump-png{
+ clip-path: xywh(0 28.49936948297604% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.437578814627994%);
+}
+
+.btn-kryhas-cloak-png{
+ clip-path: xywh(0 28.62547288776797% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.311475409836067%);
+}
+
+.btn-latticed-shielding-png{
+ clip-path: xywh(0 28.7515762925599% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.185372005044137%);
+}
+
+.btn-launch-vector-compensator-png{
+ clip-path: xywh(0 28.87767969735183% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 21.059268600252206%);
+}
+
+.btn-lesser-shadow-fury-png{
+ clip-path: xywh(0 29.003783102143757% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.933165195460276%);
+}
+
+.btn-magellan-computation-systems-png{
+ clip-path: xywh(0 29.129886506935687% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.80706179066835%);
+}
+
+.btn-mobility-protocols-png{
+ clip-path: xywh(0 29.255989911727617% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.68095838587642%);
+}
+
+.btn-modernized-servos-png{
+ clip-path: xywh(0 29.382093316519548% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.55485498108449%);
+}
+
+.btn-moirai-impulse-drive-png{
+ clip-path: xywh(0 29.508196721311474% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.42875157629256%);
+}
+
+.btn-monstrous-resilience-aberration-png{
+ clip-path: xywh(0 29.634300126103405% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.302648171500632%);
+}
+
+.btn-monstrous-resilience-corruptor-png{
+ clip-path: xywh(0 29.760403530895335% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.1765447667087%);
+}
+
+.btn-neutron-shields-png{
+ clip-path: xywh(0 29.886506935687265% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 20.05044136191677%);
+}
+
+.btn-null-shroud-png{
+ clip-path: xywh(0 30.012610340479192% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.92433795712484%);
+}
+
+.btn-obliterate-png{
+ clip-path: xywh(0 30.138713745271122% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.798234552332914%);
+}
+
+.btn-orbital-fortress-png{
+ clip-path: xywh(0 30.264817150063053% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.672131147540984%);
+}
+
+.btn-pacification-protocols-png{
+ clip-path: xywh(0 30.390920554854983% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.546027742749054%);
+}
+
+.btn-peer-contempt-png{
+ clip-path: xywh(0 30.51702395964691% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.419924337957124%);
+}
+
+.btn-permacloak-banshee-png{
+ clip-path: xywh(0 30.64312736443884% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.293820933165197%);
+}
+
+.btn-permacloak-ghost-png{
+ clip-path: xywh(0 30.76923076923077% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.167717528373267%);
+}
+
+.btn-permacloak-medivac-png{
+ clip-path: xywh(0 30.8953341740227% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 19.041614123581336%);
+}
+
+.btn-permacloak-reaper-png{
+ clip-path: xywh(0 31.021437578814627% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.915510718789406%);
+}
+
+.btn-permacloak-spectre-png{
+ clip-path: xywh(0 31.147540983606557% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.78940731399748%);
+}
+
+.btn-permacloak-wraith-png{
+ clip-path: xywh(0 31.273644388398488% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.66330390920555%);
+}
+
+.btn-phase-blaster-png{
+ clip-path: xywh(0 31.399747793190418% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.53720050441362%);
+}
+
+.btn-phase-cloak-png{
+ clip-path: xywh(0 31.525851197982345% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.41109709962169%);
+}
+
+.btn-prescient-spores-png{
+ clip-path: xywh(0 31.651954602774275% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.284993694829762%);
+}
+
+.btn-progression-hornerhan-6-mirabuildtime-png{
+ clip-path: xywh(0 31.778058007566205% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.15889029003783%);
+}
+
+.btn-progression-protoss-fenix-1-zealotsuit-png{
+ clip-path: xywh(0 31.904161412358135% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 18.0327868852459%);
+}
+
+.btn-progression-protoss-fenix-6-forgeresearch-png{
+ clip-path: xywh(0 32.03026481715006% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.90668348045397%);
+}
+
+.btn-progression-zerg-dehaka-15-genemutation-png{
+ clip-path: xywh(0 32.156368221941996% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.780580075662044%);
+}
+
+.btn-progression-zerg-dehaka-7-newdehakaabilities-png{
+ clip-path: xywh(0 32.28247162673392% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.65447667087011%);
+}
+
+.btn-propellant-sacs-png{
+ clip-path: xywh(0 32.40857503152585% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.528373266078184%);
+}
+
+.btn-rapid-metamorph-png{
+ clip-path: xywh(0 32.53467843631778% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.402269861286257%);
+}
+
+.btn-regenerativebiosteel-blue-png{
+ clip-path: xywh(0 32.66078184110971% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.276166456494323%);
+}
+
+.btn-regenerativebiosteel-green-png{
+ clip-path: xywh(0 32.78688524590164% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.150063051702396%);
+}
+
+.btn-reintigrated-framework-png{
+ clip-path: xywh(0 32.91298865069357% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 17.02395964691047%);
+}
+
+.btn-research-terran-commandcenterreactor-png{
+ clip-path: xywh(0 33.0390920554855% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.897856242118536%);
+}
+
+.btn-research-terran-microfiltering-png{
+ clip-path: xywh(0 33.16519546027743% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.77175283732661%);
+}
+
+.btn-research-terran-orbitaldepots-png{
+ clip-path: xywh(0 33.29129886506936% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.645649432534675%);
+}
+
+.btn-research-terran-orbitalstrikerally-png{
+ clip-path: xywh(0 33.417402269861284% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.51954602774275%);
+}
+
+.btn-research-terran-ultracapacitors-png{
+ clip-path: xywh(0 33.54350567465322% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.393442622950822%);
+}
+
+.btn-research-terran-vanadiumplating-png{
+ clip-path: xywh(0 33.669609079445145% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.267339218158888%);
+}
+
+.btn-research-zerg-cellularreactor-png{
+ clip-path: xywh(0 33.79571248423707% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.14123581336696%);
+}
+
+.btn-research-zerg-fortifiedbunker-png{
+ clip-path: xywh(0 33.921815889029006% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 16.015132408575035%);
+}
+
+.btn-research-zerg-regenerativebio-steel-png{
+ clip-path: xywh(0 34.04791929382093% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.8890290037831%);
+}
+
+.btn-rogue-forces-png{
+ clip-path: xywh(0 34.17402269861286% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.762925598991174%);
+}
+
+.btn-royalliberator-png{
+ clip-path: xywh(0 34.30012610340479% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.63682219419924%);
+}
+
+.btn-scatter-veil-png{
+ clip-path: xywh(0 34.42622950819672% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.510718789407314%);
+}
+
+.btn-scv-cliffjump-png{
+ clip-path: xywh(0 34.55233291298865% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.384615384615387%);
+}
+
+.btn-seismic-sonar-png{
+ clip-path: xywh(0 34.67843631778058% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.258511979823453%);
+}
+
+.btn-shadow-guard-training-png{
+ clip-path: xywh(0 34.80453972257251% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.132408575031526%);
+}
+
+.btn-shield-capacity-png{
+ clip-path: xywh(0 34.93064312736444% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 15.0063051702396%);
+}
+
+.btn-side-missiles-png{
+ clip-path: xywh(0 35.05674653215637% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.880201765447666%);
+}
+
+.btn-skyward-chronoanomaly-png{
+ clip-path: xywh(0 35.182849936948294% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.754098360655739%);
+}
+
+.btn-solarite-lens-png{
+ clip-path: xywh(0 35.30895334174023% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.627994955863805%);
+}
+
+.btn-solarite-payload-png{
+ clip-path: xywh(0 35.435056746532155% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.501891551071878%);
+}
+
+.btn-stabilized-electrodes-png{
+ clip-path: xywh(0 35.56116015132409% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.375788146279952%);
+}
+
+.btn-sustaining-disruption-png{
+ clip-path: xywh(0 35.687263556116015% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.249684741488018%);
+}
+
+.btn-techupgrade-kinetic-foam-png{
+ clip-path: xywh(0 35.81336696090794% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 14.123581336696091%);
+}
+
+.btn-techupgrade-terran-cloakdistortionfield-color-png{
+ clip-path: xywh(0 35.939470365699876% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.997477931904164%);
+}
+
+.btn-techupgrade-terran-combatshield-color-png{
+ clip-path: xywh(0 36.0655737704918% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.87137452711223%);
+}
+
+.btn-techupgrade-terran-hellstormbatteries-color-png{
+ clip-path: xywh(0 36.19167717528373% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.745271122320304%);
+}
+
+.btn-techupgrade-terran-immortalityprotocol-color-png{
+ clip-path: xywh(0 36.31778058007566% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.61916771752837%);
+}
+
+.btn-techupgrade-terran-impalerrounds-color-png{
+ clip-path: xywh(0 36.44388398486759% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.493064312736443%);
+}
+
+.btn-techupgrade-terran-missilepods-color-level1-png{
+ clip-path: xywh(0 36.569987389659524% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.366960907944517%);
+}
+
+.btn-techupgrade-terran-ocularimplants-png{
+ clip-path: xywh(0 36.69609079445145% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.240857503152583%);
+}
+
+.btn-techupgrade-terran-psioniclash-color-png{
+ clip-path: xywh(0 36.82219419924338% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 13.114754098360656%);
+}
+
+.btn-techupgrade-terran-rapiddeployment-color-png{
+ clip-path: xywh(0 36.94829760403531% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.98865069356873%);
+}
+
+.btn-techupgrade-terran-shapedblast-color-png{
+ clip-path: xywh(0 37.07440100882724% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.862547288776796%);
+}
+
+.btn-techupgrade-terran-shapedhull-colored-png{
+ clip-path: xywh(0 37.200504413619164% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.736443883984869%);
+}
+
+.btn-techupgrade-terran-titaniumhousing-color-png{
+ clip-path: xywh(0 37.3266078184111% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.610340479192935%);
+}
+
+.btn-techupgrade-terran-tomahawkpowercell-color-png{
+ clip-path: xywh(0 37.452711223203025% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.484237074401008%);
+}
+
+.btn-techupgrade-terran-u238rounds-color-png{
+ clip-path: xywh(0 37.57881462799496% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.358133669609082%);
+}
+
+.btn-tips-armory-png{
+ clip-path: xywh(0 37.704918032786885% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.232030264817148%);
+}
+
+.btn-tips-flamingbetty-png{
+ clip-path: xywh(0 37.83102143757881% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 12.105926860025221%);
+}
+
+.btn-tips-laserdrillantiair-png{
+ clip-path: xywh(0 37.957124842370746% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.979823455233294%);
+}
+
+.btn-tips-terran-energynova-png{
+ clip-path: xywh(0 38.08322824716267% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.85372005044136%);
+}
+
+.btn-twilight-chassis-png{
+ clip-path: xywh(0 38.2093316519546% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.727616645649434%);
+}
+
+.btn-ued-rocketry-technology-png{
+ clip-path: xywh(0 38.33543505674653% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.6015132408575%);
+}
+
+.btn-ultrasonic-pulse-color-png{
+ clip-path: xywh(0 38.46153846153846% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.475409836065573%);
+}
+
+.btn-unit-biomechanicaldrone-png{
+ clip-path: xywh(0 38.587641866330394% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.349306431273646%);
+}
+
+.btn-unit-collection-primal-roachupgrade-png{
+ clip-path: xywh(0 38.71374527112232% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.223203026481713%);
+}
+
+.btn-unit-collection-primal-tyrannozor-png{
+ clip-path: xywh(0 38.83984867591425% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 11.097099621689786%);
+}
+
+.btn-unit-collection-probe-remastered-png{
+ clip-path: xywh(0 38.96595208070618% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.97099621689786%);
+}
+
+.btn-unit-collection-purifier-carrier-png{
+ clip-path: xywh(0 39.09205548549811% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.844892812105925%);
+}
+
+.btn-unit-collection-purifier-disruptor-png{
+ clip-path: xywh(0 39.218158890290034% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.718789407313999%);
+}
+
+.btn-unit-collection-purifier-immortal-png{
+ clip-path: xywh(0 39.34426229508197% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.592686002522065%);
+}
+
+.btn-unit-collection-taldarim-carrier-png{
+ clip-path: xywh(0 39.470365699873895% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.466582597730138%);
+}
+
+.btn-unit-collection-taldarim-phoenix-png{
+ clip-path: xywh(0 39.59646910466583% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.340479192938211%);
+}
+
+.btn-unit-collection-vikingfighter-covertops-png{
+ clip-path: xywh(0 39.722572509457756% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.214375788146278%);
+}
+
+.btn-unit-collection-wraith-junker-png{
+ clip-path: xywh(0 39.84867591424968% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 10.08827238335435%);
+}
+
+.btn-unit-hunterling-png{
+ clip-path: xywh(0 39.974779319041616% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.962168978562424%);
+}
+
+.btn-unit-infested-infestedmedic-png{
+ clip-path: xywh(0 40.10088272383354% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.83606557377049%);
+}
+
+.btn-unit-protoss-adept-purifier-png{
+ clip-path: xywh(0 40.22698612862547% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.709962168978564%);
+}
+
+.btn-unit-protoss-alarak-taldarim-supplicant-png{
+ clip-path: xywh(0 40.3530895334174% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.58385876418663%);
+}
+
+.btn-unit-protoss-arbiter-png{
+ clip-path: xywh(0 40.47919293820933% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.457755359394703%);
+}
+
+.btn-unit-protoss-archon-upgraded-png{
+ clip-path: xywh(0 40.605296343001264% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.331651954602776%);
+}
+
+.btn-unit-protoss-archon-png{
+ clip-path: xywh(0 40.73139974779319% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.205548549810842%);
+}
+
+.btn-unit-protoss-carrier-png{
+ clip-path: xywh(0 40.85750315258512% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 9.079445145018916%);
+}
+
+.btn-unit-protoss-colossus-taldarim-png{
+ clip-path: xywh(0 40.98360655737705% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.953341740226989%);
+}
+
+.btn-unit-protoss-colossus-png{
+ clip-path: xywh(0 41.10970996216898% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.827238335435055%);
+}
+
+.btn-unit-protoss-corsair-png{
+ clip-path: xywh(0 41.235813366960905% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.701134930643128%);
+}
+
+.btn-unit-protoss-darktemplar-aiur-png{
+ clip-path: xywh(0 41.36191677175284% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.575031525851195%);
+}
+
+.btn-unit-protoss-darktemplar-taldarim-png{
+ clip-path: xywh(0 41.488020176544765% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.448928121059268%);
+}
+
+.btn-unit-protoss-darktemplar-png{
+ clip-path: xywh(0 41.6141235813367% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.322824716267341%);
+}
+
+.btn-unit-protoss-dragoon-void-png{
+ clip-path: xywh(0 41.740226986128626% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.196721311475407%);
+}
+
+.btn-unit-protoss-fenix-png{
+ clip-path: xywh(0 41.86633039092055% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 8.07061790668348%);
+}
+
+.btn-unit-protoss-hightemplar-nerazim-png{
+ clip-path: xywh(0 41.992433795712486% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.944514501891554%);
+}
+
+.btn-unit-protoss-hightemplar-taldarim-png{
+ clip-path: xywh(0 42.11853720050441% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.81841109709962%);
+}
+
+.btn-unit-protoss-hightemplar-png{
+ clip-path: xywh(0 42.24464060529634% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.692307692307693%);
+}
+
+.btn-unit-protoss-immortal-nerazim-png{
+ clip-path: xywh(0 42.37074401008827% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.56620428751576%);
+}
+
+.btn-unit-protoss-immortal-taldarim-png{
+ clip-path: xywh(0 42.4968474148802% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.440100882723833%);
+}
+
+.btn-unit-protoss-immortal-png{
+ clip-path: xywh(0 42.622950819672134% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.313997477931906%);
+}
+
+.btn-unit-protoss-khaydarinmonolith-png{
+ clip-path: xywh(0 42.74905422446406% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.187894073139972%);
+}
+
+.btn-unit-protoss-mothership-taldarim-png{
+ clip-path: xywh(0 42.87515762925599% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 7.061790668348046%);
+}
+
+.btn-unit-protoss-observer-png{
+ clip-path: xywh(0 43.00126103404792% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.935687263556119%);
+}
+
+.btn-unit-protoss-oracle-png{
+ clip-path: xywh(0 43.12736443883985% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.809583858764185%);
+}
+
+.btn-unit-protoss-phoenix-purifier-png{
+ clip-path: xywh(0 43.253467843631775% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.683480453972258%);
+}
+
+.btn-unit-protoss-phoenix-png{
+ clip-path: xywh(0 43.37957124842371% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.5573770491803245%);
+}
+
+.btn-unit-protoss-probe-warpin-png{
+ clip-path: xywh(0 43.505674653215635% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.431273644388398%);
+}
+
+.btn-unit-protoss-probe-png{
+ clip-path: xywh(0 43.63177805800757% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.305170239596471%);
+}
+
+.btn-unit-protoss-reaver-png{
+ clip-path: xywh(0 43.757881462799496% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.179066834804537%);
+}
+
+.btn-unit-protoss-scout-png{
+ clip-path: xywh(0 43.88398486759142% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 6.0529634300126105%);
+}
+
+.btn-unit-protoss-scoutnerazim-png{
+ clip-path: xywh(0 44.010088272383356% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.926860025220684%);
+}
+
+.btn-unit-protoss-scoutpurifier-png{
+ clip-path: xywh(0 44.13619167717528% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.80075662042875%);
+}
+
+.btn-unit-protoss-scouttaldarim-png{
+ clip-path: xywh(0 44.26229508196721% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.674653215636823%);
+}
+
+.btn-unit-protoss-sentry-purifier-png{
+ clip-path: xywh(0 44.388398486759144% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.548549810844889%);
+}
+
+.btn-unit-protoss-sentry-taldarim-png{
+ clip-path: xywh(0 44.51450189155107% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.422446406052963%);
+}
+
+.btn-unit-protoss-sentry-png{
+ clip-path: xywh(0 44.640605296343004% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.296343001261036%);
+}
+
+.btn-unit-protoss-stalker-purifier-png{
+ clip-path: xywh(0 44.76670870113493% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.170239596469102%);
+}
+
+.btn-unit-protoss-stalker-taldarim-collection-ds-png{
+ clip-path: xywh(0 44.89281210592686% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 5.044136191677175%);
+}
+
+.btn-unit-protoss-stalker-png{
+ clip-path: xywh(0 45.01891551071879% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.918032786885249%);
+}
+
+.btn-unit-protoss-tempest-purifier-png{
+ clip-path: xywh(0 45.14501891551072% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.791929382093315%);
+}
+
+.btn-unit-protoss-voidray-purifier-png{
+ clip-path: xywh(0 45.271122320302645% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.665825977301388%);
+}
+
+.btn-unit-protoss-voidray-taldarim-png{
+ clip-path: xywh(0 45.39722572509458% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.539722572509454%);
+}
+
+.btn-unit-protoss-warpprism-png{
+ clip-path: xywh(0 45.523329129886505% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.413619167717528%);
+}
+
+.btn-unit-protoss-warpray-png{
+ clip-path: xywh(0 45.64943253467844% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.287515762925601%);
+}
+
+.btn-unit-protoss-zealot-nerazim-png{
+ clip-path: xywh(0 45.775535939470366% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.161412358133667%);
+}
+
+.btn-unit-protoss-zealot-purifier-png{
+ clip-path: xywh(0 45.90163934426229% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 4.03530895334174%);
+}
+
+.btn-unit-protoss-zealot-png{
+ clip-path: xywh(0 46.02774274905423% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.9092055485498136%);
+}
+
+.btn-unit-terran-autoturretblackops-png{
+ clip-path: xywh(0 46.15384615384615% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.78310214375788%);
+}
+
+.btn-unit-terran-banshee-mengsk-png{
+ clip-path: xywh(0 46.27994955863808% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.656998738965953%);
+}
+
+.btn-unit-terran-banshee-png{
+ clip-path: xywh(0 46.406052963430014% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.5308953341740192%);
+}
+
+.btn-unit-terran-bansheemercenary-png{
+ clip-path: xywh(0 46.53215636822194% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.4047919293820925%);
+}
+
+.btn-unit-terran-battlecruiser-png{
+ clip-path: xywh(0 46.658259773013874% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.278688524590166%);
+}
+
+.btn-unit-terran-battlecruiserloki-png{
+ clip-path: xywh(0 46.7843631778058% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.152585119798232%);
+}
+
+.btn-unit-terran-battlecruisermengsk-png{
+ clip-path: xywh(0 46.91046658259773% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 3.0264817150063053%);
+}
+
+.btn-unit-terran-cobra-png{
+ clip-path: xywh(0 47.03656998738966% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.9003783102143785%);
+}
+
+.btn-unit-terran-cyclone-png{
+ clip-path: xywh(0 47.16267339218159% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.7742749054224447%);
+}
+
+.btn-unit-terran-deathhead-png{
+ clip-path: xywh(0 47.288776796973515% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.648171500630518%);
+}
+
+.btn-unit-terran-firebat-png{
+ clip-path: xywh(0 47.41488020176545% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.522068095838584%);
+}
+
+.btn-unit-terran-firebatmercenary-png{
+ clip-path: xywh(0 47.540983606557376% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.3959646910466574%);
+}
+
+.btn-unit-terran-ghost-png{
+ clip-path: xywh(0 47.66708701134931% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.2698612862547307%);
+}
+
+.btn-unit-terran-ghostmengsk-png{
+ clip-path: xywh(0 47.793190416141236% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.143757881462797%);
+}
+
+.btn-unit-terran-goliath-mengsk-png{
+ clip-path: xywh(0 47.91929382093316% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 2.01765447667087%);
+}
+
+.btn-unit-terran-goliath-png{
+ clip-path: xywh(0 48.0453972257251% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.8915510718789434%);
+}
+
+.btn-unit-terran-goliathmercenary-png{
+ clip-path: xywh(0 48.17150063051702% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.7654476670870096%);
+}
+
+.btn-unit-terran-hellion-png{
+ clip-path: xywh(0 48.29760403530895% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.639344262295083%);
+}
+
+.btn-unit-terran-hellionbattlemode-png{
+ clip-path: xywh(0 48.423707440100884% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.513240857503149%);
+}
+
+.btn-unit-terran-herc-png{
+ clip-path: xywh(0 48.54981084489281% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.3871374527112224%);
+}
+
+.btn-unit-terran-hercules-png{
+ clip-path: xywh(0 48.675914249684745% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.2610340479192956%);
+}
+
+.btn-unit-terran-liberator-png{
+ clip-path: xywh(0 48.80201765447667% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.1349306431273618%);
+}
+
+.btn-unit-terran-liberatorblackops-png{
+ clip-path: xywh(0 48.9281210592686% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 1.008827238335435%);
+}
+
+.btn-unit-terran-marauder-png{
+ clip-path: xywh(0 49.05422446406053% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.8827238335435084%);
+}
+
+.btn-unit-terran-maraudermengsk-png{
+ clip-path: xywh(0 49.18032786885246% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.7566204287515745%);
+}
+
+.btn-unit-terran-maraudermercenary-png{
+ clip-path: xywh(0 49.306431273644385% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.6305170239596478%);
+}
+
+.btn-unit-terran-marine-mengsk-png{
+ clip-path: xywh(0 49.43253467843632% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.504413619167714%);
+}
+
+.btn-unit-terran-marine-png{
+ clip-path: xywh(0 49.558638083228246% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.37831021437578727%);
+}
+
+.btn-unit-terran-marinemercenary-png{
+ clip-path: xywh(0 49.68474148802018% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.25220680958386055%);
+}
+
+.btn-unit-terran-medic-mengsk-png{
+ clip-path: xywh(0 49.810844892812106% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.12610340479192672%);
+}
+
+.btn-unit-terran-medic-png{
+ clip-path: xywh(0 49.93694829760403% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, 0.0%);
+}
+
+.btn-unit-terran-medicelite-png{
+ clip-path: xywh(0 50.06305170239597% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.12610340479192672%);
+}
+
+.btn-unit-terran-medivac-png{
+ clip-path: xywh(0 50.189155107187894% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.25220680958386055%);
+}
+
+.btn-unit-terran-merc-thor-png{
+ clip-path: xywh(0 50.31525851197982% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.37831021437578727%);
+}
+
+.btn-unit-terran-mule-png{
+ clip-path: xywh(0 50.441361916771754% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.504413619167714%);
+}
+
+.btn-unit-terran-perditionturret-png{
+ clip-path: xywh(0 50.56746532156368% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.6305170239596478%);
+}
+
+.btn-unit-terran-predator-png{
+ clip-path: xywh(0 50.693568726355615% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.7566204287515745%);
+}
+
+.btn-unit-terran-raven-png{
+ clip-path: xywh(0 50.81967213114754% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -0.8827238335435084%);
+}
+
+.btn-unit-terran-reaper-png{
+ clip-path: xywh(0 50.94577553593947% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.008827238335435%);
+}
+
+.btn-unit-terran-sciencevessel-png{
+ clip-path: xywh(0 51.0718789407314% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.1349306431273618%);
+}
+
+.btn-unit-terran-siegetank-png{
+ clip-path: xywh(0 51.19798234552333% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.2610340479192956%);
+}
+
+.btn-unit-terran-siegetankmengsk-png{
+ clip-path: xywh(0 51.324085750315255% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.3871374527112224%);
+}
+
+.btn-unit-terran-siegetankmercenary-tank-png{
+ clip-path: xywh(0 51.45018915510719% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.513240857503149%);
+}
+
+.btn-unit-terran-spectre-png{
+ clip-path: xywh(0 51.576292559899116% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.639344262295083%);
+}
+
+.btn-unit-terran-thor-png{
+ clip-path: xywh(0 51.70239596469105% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.7654476670870096%);
+}
+
+.btn-unit-terran-thormengsk-png{
+ clip-path: xywh(0 51.82849936948298% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -1.8915510718789434%);
+}
+
+.btn-unit-terran-thorsiegemode-png{
+ clip-path: xywh(0 51.9546027742749% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.01765447667087%);
+}
+
+.btn-unit-terran-troopermengsk-png{
+ clip-path: xywh(0 52.08070617906684% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.143757881462797%);
+}
+
+.btn-unit-terran-valkyriescbw-png{
+ clip-path: xywh(0 52.206809583858764% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.2698612862547307%);
+}
+
+.btn-unit-terran-vikingfighter-png{
+ clip-path: xywh(0 52.33291298865069% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.3959646910466574%);
+}
+
+.btn-unit-terran-vikingmengskfighter-png{
+ clip-path: xywh(0 52.459016393442624% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.522068095838584%);
+}
+
+.btn-unit-terran-vikingmercenary-fighter-png{
+ clip-path: xywh(0 52.58511979823455% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.648171500630518%);
+}
+
+.btn-unit-terran-vulture-png{
+ clip-path: xywh(0 52.711223203026485% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.7742749054224447%);
+}
+
+.btn-unit-terran-warhound-png{
+ clip-path: xywh(0 52.83732660781841% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -2.9003783102143785%);
+}
+
+.btn-unit-terran-widowmine-png{
+ clip-path: xywh(0 52.96343001261034% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.0264817150063053%);
+}
+
+.btn-unit-terran-wraith-mengsk-png{
+ clip-path: xywh(0 53.08953341740227% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.152585119798232%);
+}
+
+.btn-unit-terran-wraith-png{
+ clip-path: xywh(0 53.2156368221942% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.278688524590166%);
+}
+
+.btn-unit-voidray-aiur-png{
+ clip-path: xywh(0 53.341740226986126% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.4047919293820925%);
+}
+
+.btn-unit-zerg-aberration-png{
+ clip-path: xywh(0 53.46784363177806% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.5308953341740192%);
+}
+
+.btn-unit-zerg-baneling-hunter-png{
+ clip-path: xywh(0 53.593947036569986% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.656998738965953%);
+}
+
+.btn-unit-zerg-baneling-png{
+ clip-path: xywh(0 53.72005044136192% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.78310214375788%);
+}
+
+.btn-unit-zerg-broodlord-png{
+ clip-path: xywh(0 53.84615384615385% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -3.9092055485498136%);
+}
+
+.btn-unit-zerg-broodqueen-png{
+ clip-path: xywh(0 53.97225725094577% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.03530895334174%);
+}
+
+.btn-unit-zerg-bullfrog-png{
+ clip-path: xywh(0 54.09836065573771% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.161412358133667%);
+}
+
+.btn-unit-zerg-classicqueen-png{
+ clip-path: xywh(0 54.224464060529634% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.287515762925601%);
+}
+
+.btn-unit-zerg-corruptor-png{
+ clip-path: xywh(0 54.35056746532156% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.413619167717528%);
+}
+
+.btn-unit-zerg-defilerscbw-png{
+ clip-path: xywh(0 54.476670870113495% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.539722572509454%);
+}
+
+.btn-unit-zerg-devourerex3-png{
+ clip-path: xywh(0 54.60277427490542% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.665825977301388%);
+}
+
+.btn-unit-zerg-hydralisk-remastered-png{
+ clip-path: xywh(0 54.728877679697355% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.791929382093315%);
+}
+
+.btn-unit-zerg-hydralisk-png{
+ clip-path: xywh(0 54.85498108448928% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -4.918032786885249%);
+}
+
+.btn-unit-zerg-impaler-png{
+ clip-path: xywh(0 54.98108448928121% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.044136191677175%);
+}
+
+.btn-unit-zerg-infestedbanshee-png{
+ clip-path: xywh(0 55.10718789407314% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.170239596469102%);
+}
+
+.btn-unit-zerg-infesteddiamondback-png{
+ clip-path: xywh(0 55.23329129886507% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.296343001261036%);
+}
+
+.btn-unit-zerg-infestedliberator-png{
+ clip-path: xywh(0 55.359394703656996% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.422446406052963%);
+}
+
+.btn-unit-zerg-infestedmarine-png{
+ clip-path: xywh(0 55.48549810844893% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.548549810844889%);
+}
+
+.btn-unit-zerg-infestedsiegetank-png{
+ clip-path: xywh(0 55.611601513240856% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.674653215636823%);
+}
+
+.btn-unit-zerg-infestor-png{
+ clip-path: xywh(0 55.73770491803279% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.80075662042875%);
+}
+
+.btn-unit-zerg-kerriganascended-png{
+ clip-path: xywh(0 55.86380832282472% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -5.926860025220684%);
+}
+
+.btn-unit-zerg-kerriganghost-png{
+ clip-path: xywh(0 55.989911727616644% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.0529634300126105%);
+}
+
+.btn-unit-zerg-kerriganinfested-png{
+ clip-path: xywh(0 56.11601513240858% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.179066834804537%);
+}
+
+.btn-unit-zerg-larva-png{
+ clip-path: xywh(0 56.242118537200504% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.305170239596471%);
+}
+
+.btn-unit-zerg-leviathan-png{
+ clip-path: xywh(0 56.36822194199243% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.431273644388398%);
+}
+
+.btn-unit-zerg-lurker-png{
+ clip-path: xywh(0 56.494325346784365% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.5573770491803245%);
+}
+
+.btn-unit-zerg-mutalisk-png{
+ clip-path: xywh(0 56.62042875157629% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.683480453972258%);
+}
+
+.btn-unit-zerg-nydusdragon-png{
+ clip-path: xywh(0 56.746532156368225% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.809583858764185%);
+}
+
+.btn-unit-zerg-overlordscbw-png{
+ clip-path: xywh(0 56.87263556116015% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -6.935687263556119%);
+}
+
+.btn-unit-zerg-overseer-png{
+ clip-path: xywh(0 56.99873896595208% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.061790668348046%);
+}
+
+.btn-unit-zerg-primalguardian-png{
+ clip-path: xywh(0 57.12484237074401% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.187894073139972%);
+}
+
+.btn-unit-zerg-ravager-png{
+ clip-path: xywh(0 57.25094577553594% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.313997477931906%);
+}
+
+.btn-unit-zerg-roach-corpser-png{
+ clip-path: xywh(0 57.377049180327866% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.440100882723833%);
+}
+
+.btn-unit-zerg-roach-vile-png{
+ clip-path: xywh(0 57.5031525851198% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.56620428751576%);
+}
+
+.btn-unit-zerg-roach-png{
+ clip-path: xywh(0 57.62925598991173% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.692307692307693%);
+}
+
+.btn-unit-zerg-roach_collection-png{
+ clip-path: xywh(0 57.75535939470366% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.81841109709962%);
+}
+
+.btn-unit-zerg-scourge-png{
+ clip-path: xywh(0 57.88146279949559% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -7.944514501891554%);
+}
+
+.btn-unit-zerg-swarmhost-carrion-png{
+ clip-path: xywh(0 58.007566204287514% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.07061790668348%);
+}
+
+.btn-unit-zerg-swarmhost-creeper-png{
+ clip-path: xywh(0 58.13366960907945% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.196721311475407%);
+}
+
+.btn-unit-zerg-swarmhost-png{
+ clip-path: xywh(0 58.259773013871374% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.322824716267341%);
+}
+
+.btn-unit-zerg-ultralisk-noxious-png{
+ clip-path: xywh(0 58.3858764186633% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.448928121059268%);
+}
+
+.btn-unit-zerg-ultralisk-rcz-png{
+ clip-path: xywh(0 58.511979823455235% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.575031525851195%);
+}
+
+.btn-unit-zerg-ultralisk-remastered-png{
+ clip-path: xywh(0 58.63808322824716% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.701134930643128%);
+}
+
+.btn-unit-zerg-ultralisk-torrasque-png{
+ clip-path: xywh(0 58.764186633039095% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.827238335435055%);
+}
+
+.btn-unit-zerg-ultralisk-png{
+ clip-path: xywh(0 58.89029003783102% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -8.953341740226989%);
+}
+
+.btn-unit-zerg-viper-png{
+ clip-path: xywh(0 59.01639344262295% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.079445145018916%);
+}
+
+.btn-unit-zerg-zergling-raptor-png{
+ clip-path: xywh(0 59.14249684741488% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.205548549810842%);
+}
+
+.btn-unit-zerg-zergling-scr-png{
+ clip-path: xywh(0 59.26860025220681% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.331651954602776%);
+}
+
+.btn-unit-zerg-zergling-swarmling-png{
+ clip-path: xywh(0 59.394703656998736% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.457755359394703%);
+}
+
+.btn-unit-zerg-zergling-png{
+ clip-path: xywh(0 59.52080706179067% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.58385876418663%);
+}
+
+.btn-unshackled-psionic-storm-png{
+ clip-path: xywh(0 59.6469104665826% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.709962168978564%);
+}
+
+.btn-upgrade-afaidofthedark-png{
+ clip-path: xywh(0 59.77301387137453% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.83606557377049%);
+}
+
+.btn-upgrade-artanis-healingpsionicstorm-png{
+ clip-path: xywh(0 59.89911727616646% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -9.962168978562424%);
+}
+
+.btn-upgrade-artanis-scarabsplashradius-png{
+ clip-path: xywh(0 60.025220680958384% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.08827238335435%);
+}
+
+.btn-upgrade-artanis-singularitycharge-png{
+ clip-path: xywh(0 60.15132408575032% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.214375788146278%);
+}
+
+.btn-upgrade-custom-triple-scourge-png{
+ clip-path: xywh(0 60.277427490542244% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.340479192938211%);
+}
+
+.btn-upgrade-increasedupgraderesearchspeed-png{
+ clip-path: xywh(0 60.40353089533417% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.466582597730138%);
+}
+
+.btn-upgrade-karax-energyregen200-png{
+ clip-path: xywh(0 60.529634300126105% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.592686002522065%);
+}
+
+.btn-upgrade-karax-pylonwarpininstantly-png{
+ clip-path: xywh(0 60.65573770491803% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.718789407313999%);
+}
+
+.btn-upgrade-karax-turretattackspeed-png{
+ clip-path: xywh(0 60.781841109709966% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.844892812105925%);
+}
+
+.btn-upgrade-karax-turretrange-png{
+ clip-path: xywh(0 60.90794451450189% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -10.97099621689786%);
+}
+
+.btn-upgrade-kerrigan-assimilationaura-png{
+ clip-path: xywh(0 61.03404791929382% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.097099621689786%);
+}
+
+.btn-upgrade-kerrigan-broodlordspeed-png{
+ clip-path: xywh(0 61.16015132408575% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.223203026481713%);
+}
+
+.btn-upgrade-kerrigan-crushinggripwave-png{
+ clip-path: xywh(0 61.28625472887768% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.349306431273646%);
+}
+
+.btn-upgrade-kerrigan-seismicspines-png{
+ clip-path: xywh(0 61.412358133669606% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.475409836065573%);
+}
+
+.btn-upgrade-mengsk-engineeringbay-dominionarmorlevel2-png{
+ clip-path: xywh(0 61.53846153846154% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.6015132408575%);
+}
+
+.btn-upgrade-mengsk-engineeringbay-dominionweaponslevel0-png{
+ clip-path: xywh(0 61.66456494325347% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.727616645649434%);
+}
+
+.btn-upgrade-mengsk-engineeringbay-neosteelfortifiedarmor-png{
+ clip-path: xywh(0 61.7906683480454% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.85372005044136%);
+}
+
+.btn-upgrade-mengsk-engineeringbay-orbitaldrop-png{
+ clip-path: xywh(0 61.91677175283733% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -11.979823455233294%);
+}
+
+.btn-upgrade-mengsk-ghostacademy-guidedtacticalstrike-png{
+ clip-path: xywh(0 62.042875157629254% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.105926860025221%);
+}
+
+.btn-upgrade-mengsk-trooper-flamethrower-png{
+ clip-path: xywh(0 62.16897856242119% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.232030264817148%);
+}
+
+.btn-upgrade-mengsk-trooper-missilelauncher-png{
+ clip-path: xywh(0 62.295081967213115% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.358133669609082%);
+}
+
+.btn-upgrade-mengsk-trooper-plasmarifle-png{
+ clip-path: xywh(0 62.42118537200504% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.484237074401008%);
+}
+
+.btn-upgrade-nova-blink-png{
+ clip-path: xywh(0 62.547288776796975% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.610340479192935%);
+}
+
+.btn-upgrade-nova-btn-upgrade-nova-flashgrenade-png{
+ clip-path: xywh(0 62.6733921815889% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.736443883984869%);
+}
+
+.btn-upgrade-nova-btn-upgrade-nova-pulsegrenade-png{
+ clip-path: xywh(0 62.799495586380836% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.862547288776796%);
+}
+
+.btn-upgrade-nova-equipment-apolloinfantrysuit-png{
+ clip-path: xywh(0 62.92559899117276% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -12.98865069356873%);
+}
+
+.btn-upgrade-nova-equipment-blinksuit-png{
+ clip-path: xywh(0 63.05170239596469% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.114754098360656%);
+}
+
+.btn-upgrade-nova-equipment-canisterrifle-png{
+ clip-path: xywh(0 63.17780580075662% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.240857503152583%);
+}
+
+.btn-upgrade-nova-equipment-ghostvisor-png{
+ clip-path: xywh(0 63.30390920554855% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.366960907944517%);
+}
+
+.btn-upgrade-nova-equipment-gunblade_sword-png{
+ clip-path: xywh(0 63.430012610340476% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.493064312736443%);
+}
+
+.btn-upgrade-nova-equipment-monomolecularblade-png{
+ clip-path: xywh(0 63.55611601513241% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.61916771752837%);
+}
+
+.btn-upgrade-nova-equipment-plasmagun-png{
+ clip-path: xywh(0 63.68221941992434% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.745271122320304%);
+}
+
+.btn-upgrade-nova-equipment-rangefinderoculus-png{
+ clip-path: xywh(0 63.80832282471627% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.87137452711223%);
+}
+
+.btn-upgrade-nova-equipment-shotgun-png{
+ clip-path: xywh(0 63.9344262295082% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -13.997477931904164%);
+}
+
+.btn-upgrade-nova-equipment-stealthsuit-png{
+ clip-path: xywh(0 64.06052963430012% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.123581336696091%);
+}
+
+.btn-upgrade-nova-holographicdecoy-png{
+ clip-path: xywh(0 64.18663303909206% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.249684741488025%);
+}
+
+.btn-upgrade-nova-jetpack-png{
+ clip-path: xywh(0 64.31273644388399% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.375788146279945%);
+}
+
+.btn-upgrade-nova-tacticalstealthsuit-png{
+ clip-path: xywh(0 64.43883984867591% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.501891551071878%);
+}
+
+.btn-upgrade-protoss-adeptshieldupgrade-png{
+ clip-path: xywh(0 64.56494325346785% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.627994955863812%);
+}
+
+.btn-upgrade-protoss-airarmorlevel1-png{
+ clip-path: xywh(0 64.69104665825978% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.754098360655732%);
+}
+
+.btn-upgrade-protoss-airarmorlevel2-png{
+ clip-path: xywh(0 64.8171500630517% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -14.880201765447666%);
+}
+
+.btn-upgrade-protoss-airarmorlevel3-png{
+ clip-path: xywh(0 64.94325346784363% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.0063051702396%);
+}
+
+.btn-upgrade-protoss-airarmorlevel4-png{
+ clip-path: xywh(0 65.06935687263557% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.13240857503152%);
+}
+
+.btn-upgrade-protoss-airarmorlevel5-png{
+ clip-path: xywh(0 65.19546027742749% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.258511979823453%);
+}
+
+.btn-upgrade-protoss-airweaponslevel1-png{
+ clip-path: xywh(0 65.32156368221942% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.384615384615387%);
+}
+
+.btn-upgrade-protoss-airweaponslevel2-png{
+ clip-path: xywh(0 65.44766708701135% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.51071878940732%);
+}
+
+.btn-upgrade-protoss-airweaponslevel3-png{
+ clip-path: xywh(0 65.57377049180327% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.63682219419924%);
+}
+
+.btn-upgrade-protoss-airweaponslevel4-png{
+ clip-path: xywh(0 65.69987389659521% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.762925598991174%);
+}
+
+.btn-upgrade-protoss-airweaponslevel5-png{
+ clip-path: xywh(0 65.82597730138714% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -15.889029003783108%);
+}
+
+.btn-upgrade-protoss-alarak-ascendantspsiorbtravelsfurther-png{
+ clip-path: xywh(0 65.95208070617906% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.015132408575028%);
+}
+
+.btn-upgrade-protoss-alarak-ascendantspermanentlybetter-png{
+ clip-path: xywh(0 66.078184110971% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.14123581336696%);
+}
+
+.btn-upgrade-protoss-alarak-graviticdrive-png{
+ clip-path: xywh(0 66.20428751576293% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.267339218158895%);
+}
+
+.btn-upgrade-protoss-alarak-havoctargetlockbuffed-png{
+ clip-path: xywh(0 66.33039092055486% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.393442622950815%);
+}
+
+.btn-upgrade-protoss-alarak-melleeweapon-png{
+ clip-path: xywh(0 66.45649432534678% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.51954602774275%);
+}
+
+.btn-upgrade-protoss-alarak-permanentcloak-png{
+ clip-path: xywh(0 66.58259773013872% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.645649432534682%);
+}
+
+.btn-upgrade-protoss-alarak-rangeincrease-png{
+ clip-path: xywh(0 66.70870113493065% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.771752837326602%);
+}
+
+.btn-upgrade-protoss-alarak-rangeweapon-png{
+ clip-path: xywh(0 66.83480453972257% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -16.897856242118536%);
+}
+
+.btn-upgrade-protoss-alarak-supplicantarmor-png{
+ clip-path: xywh(0 66.9609079445145% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.02395964691047%);
+}
+
+.btn-upgrade-protoss-alarak-supplicantextrashields-png{
+ clip-path: xywh(0 67.08701134930644% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.15006305170239%);
+}
+
+.btn-upgrade-protoss-fenix-adept-recochetglaiveupgraded-png{
+ clip-path: xywh(0 67.21311475409836% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.276166456494323%);
+}
+
+.btn-upgrade-protoss-fenix-adeptchampionbounceattack-png{
+ clip-path: xywh(0 67.33921815889029% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.402269861286257%);
+}
+
+.btn-upgrade-protoss-fenix-carrier-solarbeam-png{
+ clip-path: xywh(0 67.46532156368222% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.52837326607819%);
+}
+
+.btn-upgrade-protoss-fenix-disruptorpermanentcloak-png{
+ clip-path: xywh(0 67.59142496847414% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.65447667087011%);
+}
+
+.btn-upgrade-protoss-fenix-dragoonsolariteflare-png{
+ clip-path: xywh(0 67.71752837326608% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.780580075662044%);
+}
+
+.btn-upgrade-protoss-fenix-scoutchampionrange-png{
+ clip-path: xywh(0 67.84363177805801% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -17.906683480453978%);
+}
+
+.btn-upgrade-protoss-fenix-stasisfield-png{
+ clip-path: xywh(0 67.96973518284993% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.032786885245898%);
+}
+
+.btn-upgrade-protoss-fenix-zealotsuit-armorplate-png{
+ clip-path: xywh(0 68.09583858764186% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.15889029003783%);
+}
+
+.btn-upgrade-protoss-fluxvanes-png{
+ clip-path: xywh(0 68.2219419924338% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.284993694829765%);
+}
+
+.btn-upgrade-protoss-graviticbooster-png{
+ clip-path: xywh(0 68.34804539722572% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.411097099621685%);
+}
+
+.btn-upgrade-protoss-graviticdrive-png{
+ clip-path: xywh(0 68.47414880201765% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.53720050441362%);
+}
+
+.btn-upgrade-protoss-gravitoncatapult-png{
+ clip-path: xywh(0 68.60025220680959% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.663303909205553%);
+}
+
+.btn-upgrade-protoss-groundarmorlevel1-png{
+ clip-path: xywh(0 68.72635561160152% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.789407313997472%);
+}
+
+.btn-upgrade-protoss-groundarmorlevel2-png{
+ clip-path: xywh(0 68.85245901639344% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -18.915510718789406%);
+}
+
+.btn-upgrade-protoss-groundarmorlevel3-png{
+ clip-path: xywh(0 68.97856242118537% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.04161412358134%);
+}
+
+.btn-upgrade-protoss-groundarmorlevel4-png{
+ clip-path: xywh(0 69.1046658259773% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.16771752837326%);
+}
+
+.btn-upgrade-protoss-groundarmorlevel5-png{
+ clip-path: xywh(0 69.23076923076923% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.293820933165193%);
+}
+
+.btn-upgrade-protoss-groundweaponslevel1-png{
+ clip-path: xywh(0 69.35687263556116% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.419924337957127%);
+}
+
+.btn-upgrade-protoss-groundweaponslevel2-png{
+ clip-path: xywh(0 69.4829760403531% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.54602774274906%);
+}
+
+.btn-upgrade-protoss-groundweaponslevel3-png{
+ clip-path: xywh(0 69.60907944514501% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.67213114754098%);
+}
+
+.btn-upgrade-protoss-groundweaponslevel4-png{
+ clip-path: xywh(0 69.73518284993695% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.798234552332914%);
+}
+
+.btn-upgrade-protoss-groundweaponslevel5-png{
+ clip-path: xywh(0 69.86128625472888% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -19.92433795712485%);
+}
+
+.btn-upgrade-protoss-increasedscarabcapacityscbw-png{
+ clip-path: xywh(0 69.9873896595208% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.050441361916768%);
+}
+
+.btn-upgrade-protoss-khaydarinamulet-png{
+ clip-path: xywh(0 70.11349306431273% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.1765447667087%);
+}
+
+.btn-upgrade-protoss-phoenixrange-png{
+ clip-path: xywh(0 70.23959646910467% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.302648171500635%);
+}
+
+.btn-upgrade-protoss-researchbosoniccore-png{
+ clip-path: xywh(0 70.36569987389659% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.428751576292555%);
+}
+
+.btn-upgrade-protoss-researchgravitysling-png{
+ clip-path: xywh(0 70.49180327868852% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.55485498108449%);
+}
+
+.btn-upgrade-protoss-resonatingglaives-png{
+ clip-path: xywh(0 70.61790668348046% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.680958385876423%);
+}
+
+.btn-upgrade-protoss-shieldslevel1-png{
+ clip-path: xywh(0 70.74401008827239% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.807061790668342%);
+}
+
+.btn-upgrade-protoss-shieldslevel2-png{
+ clip-path: xywh(0 70.87011349306431% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -20.933165195460276%);
+}
+
+.btn-upgrade-protoss-shieldslevel3-png{
+ clip-path: xywh(0 70.99621689785624% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.05926860025221%);
+}
+
+.btn-upgrade-protoss-shieldslevel4-png{
+ clip-path: xywh(0 71.12232030264818% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.18537200504413%);
+}
+
+.btn-upgrade-protoss-shieldslevel5-png{
+ clip-path: xywh(0 71.2484237074401% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.311475409836063%);
+}
+
+.btn-upgrade-protoss-stalkerpurifier-reconstruction-png{
+ clip-path: xywh(0 71.37452711223203% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.437578814627997%);
+}
+
+.btn-upgrade-protoss-tectonicdisruptors-png{
+ clip-path: xywh(0 71.50063051702396% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.56368221941993%);
+}
+
+.btn-upgrade-protoss-vanguard-aoeradiusincreased-png{
+ clip-path: xywh(0 71.62673392181588% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.68978562421185%);
+}
+
+.btn-upgrade-protoss-vanguard-increasedarmordamage-png{
+ clip-path: xywh(0 71.75283732660782% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.815889029003785%);
+}
+
+.btn-upgrade-protoss-wrathwalker-cantargetairunits-png{
+ clip-path: xywh(0 71.87894073139975% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -21.94199243379572%);
+}
+
+.btn-upgrade-protoss-wrathwalker-chargetimeimproved-png{
+ clip-path: xywh(0 72.00504413619167% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.068095838587638%);
+}
+
+.btn-upgrade-psi-indoctrinator-png{
+ clip-path: xywh(0 72.1311475409836% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.194199243379572%);
+}
+
+.btn-upgrade-raynor-cerberusmines-png{
+ clip-path: xywh(0 72.25725094577554% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.320302648171506%);
+}
+
+.btn-upgrade-raynor-improvedsiegemode-png{
+ clip-path: xywh(0 72.38335435056746% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.446406052963425%);
+}
+
+.btn-upgrade-raynor-incineratorgauntlets-png{
+ clip-path: xywh(0 72.50945775535939% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.57250945775536%);
+}
+
+.btn-upgrade-raynor-juggernautplating-png{
+ clip-path: xywh(0 72.63556116015133% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.698612862547293%);
+}
+
+.btn-upgrade-raynor-maelstromrounds-png{
+ clip-path: xywh(0 72.76166456494326% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.824716267339213%);
+}
+
+.btn-upgrade-raynor-phobosclassweaponssystem-png{
+ clip-path: xywh(0 72.88776796973518% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -22.950819672131146%);
+}
+
+.btn-upgrade-raynor-replenishablemagazine-png{
+ clip-path: xywh(0 73.01387137452711% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.07692307692308%);
+}
+
+.btn-upgrade-raynor-ripwavemissiles-png{
+ clip-path: xywh(0 73.13997477931905% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.203026481715%);
+}
+
+.btn-upgrade-raynor-shockwavemissilebattery-png{
+ clip-path: xywh(0 73.26607818411097% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.329129886506934%);
+}
+
+.btn-upgrade-raynor-stabilizermedpacks-png{
+ clip-path: xywh(0 73.3921815889029% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.455233291298867%);
+}
+
+.btn-upgrade-reducedupgraderesearchcost-png{
+ clip-path: xywh(0 73.51828499369483% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.5813366960908%);
+}
+
+.btn-upgrade-siegetank-spidermines-png{
+ clip-path: xywh(0 73.64438839848675% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.70744010088272%);
+}
+
+.btn-upgrade-stetmann-banelingmanashieldefficiency-png{
+ clip-path: xywh(0 73.77049180327869% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.833543505674655%);
+}
+
+.btn-upgrade-stetmann-mechachitinousplating-png{
+ clip-path: xywh(0 73.89659520807062% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -23.95964691046659%);
+}
+
+.btn-upgrade-stetmann-zerglinghardenedshield-png{
+ clip-path: xywh(0 74.02269861286254% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.085750315258508%);
+}
+
+.btn-upgrade-swann-aresclasstargetingsystem-png{
+ clip-path: xywh(0 74.14880201765448% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.211853720050442%);
+}
+
+.btn-upgrade-swann-defensivematrix-png{
+ clip-path: xywh(0 74.27490542244641% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.337957124842376%);
+}
+
+.btn-upgrade-swann-displacementfield-png{
+ clip-path: xywh(0 74.40100882723833% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.464060529634295%);
+}
+
+.btn-upgrade-swann-firesuppressionsystem-png{
+ clip-path: xywh(0 74.52711223203026% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.59016393442623%);
+}
+
+.btn-upgrade-swann-hellarmor-png{
+ clip-path: xywh(0 74.6532156368222% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.716267339218163%);
+}
+
+.btn-upgrade-swann-improvedburstlaser-png{
+ clip-path: xywh(0 74.77931904161413% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.842370744010083%);
+}
+
+.btn-upgrade-swann-improvednanorepair-png{
+ clip-path: xywh(0 74.90542244640605% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -24.968474148802017%);
+}
+
+.btn-upgrade-swann-improvedturretattackspeed-png{
+ clip-path: xywh(0 75.03152585119798% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.09457755359395%);
+}
+
+.btn-upgrade-swann-multilockweaponsystem-png{
+ clip-path: xywh(0 75.15762925598992% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.22068095838587%);
+}
+
+.btn-upgrade-swann-scvdoublerepair-png{
+ clip-path: xywh(0 75.28373266078184% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.346784363177804%);
+}
+
+.btn-upgrade-swann-targetingoptics-png{
+ clip-path: xywh(0 75.40983606557377% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.472887767969738%);
+}
+
+.btn-upgrade-swann-vehiclerangeincrease-png{
+ clip-path: xywh(0 75.5359394703657% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.59899117276167%);
+}
+
+.btn-upgrade-terran-advanceballistics-png{
+ clip-path: xywh(0 75.66204287515762% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.72509457755359%);
+}
+
+.btn-upgrade-terran-behemothreactor-png{
+ clip-path: xywh(0 75.78814627994956% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.851197982345525%);
+}
+
+.btn-upgrade-terran-buildingarmor-png{
+ clip-path: xywh(0 75.91424968474149% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -25.97730138713746%);
+}
+
+.btn-upgrade-terran-cyclonerangeupgrade-png{
+ clip-path: xywh(0 76.04035308953341% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.10340479192938%);
+}
+
+.btn-upgrade-terran-durablematerials-png{
+ clip-path: xywh(0 76.16645649432535% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.229508196721312%);
+}
+
+.btn-upgrade-terran-highcapacityfueltanks-png{
+ clip-path: xywh(0 76.29255989911728% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.355611601513246%);
+}
+
+.btn-upgrade-terran-hisecautotracking-png{
+ clip-path: xywh(0 76.4186633039092% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.481715006305166%);
+}
+
+.btn-upgrade-terran-hyperflightrotors-png{
+ clip-path: xywh(0 76.54476670870113% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.6078184110971%);
+}
+
+.btn-upgrade-terran-infantryarmorlevel1-png{
+ clip-path: xywh(0 76.67087011349307% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.733921815889033%);
+}
+
+.btn-upgrade-terran-infantryarmorlevel2-png{
+ clip-path: xywh(0 76.796973518285% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.860025220680953%);
+}
+
+.btn-upgrade-terran-infantryarmorlevel3-png{
+ clip-path: xywh(0 76.92307692307692% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -26.986128625472887%);
+}
+
+.btn-upgrade-terran-infantryarmorlevel4-png{
+ clip-path: xywh(0 77.04918032786885% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.11223203026482%);
+}
+
+.btn-upgrade-terran-infantryarmorlevel5-png{
+ clip-path: xywh(0 77.17528373266079% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.23833543505674%);
+}
+
+.btn-upgrade-terran-infantryweaponslevel1-png{
+ clip-path: xywh(0 77.3013871374527% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.364438839848674%);
+}
+
+.btn-upgrade-terran-infantryweaponslevel2-png{
+ clip-path: xywh(0 77.42749054224464% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.490542244640608%);
+}
+
+.btn-upgrade-terran-infantryweaponslevel3-png{
+ clip-path: xywh(0 77.55359394703657% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.61664564943254%);
+}
+
+.btn-upgrade-terran-infantryweaponslevel4-png{
+ clip-path: xywh(0 77.6796973518285% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.74274905422446%);
+}
+
+.btn-upgrade-terran-infantryweaponslevel5-png{
+ clip-path: xywh(0 77.80580075662043% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.868852459016395%);
+}
+
+.btn-upgrade-terran-infernalpreigniter-png{
+ clip-path: xywh(0 77.93190416141236% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -27.99495586380833%);
+}
+
+.btn-upgrade-terran-interferencematrix-png{
+ clip-path: xywh(0 78.05800756620428% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.12105926860025%);
+}
+
+.btn-upgrade-terran-internalizedtechmodule-png{
+ clip-path: xywh(0 78.18411097099622% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.247162673392182%);
+}
+
+.btn-upgrade-terran-jumpjets-png{
+ clip-path: xywh(0 78.31021437578815% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.373266078184116%);
+}
+
+.btn-upgrade-terran-kd8chargeex3-png{
+ clip-path: xywh(0 78.43631778058007% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.499369482976036%);
+}
+
+.btn-upgrade-terran-lazertargetingsystem-png{
+ clip-path: xywh(0 78.562421185372% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.62547288776797%);
+}
+
+.btn-upgrade-terran-magfieldaccelerator-png{
+ clip-path: xywh(0 78.68852459016394% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.751576292559903%);
+}
+
+.btn-upgrade-terran-magrailmunitions-png{
+ clip-path: xywh(0 78.81462799495587% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -28.877679697351823%);
+}
+
+.btn-upgrade-terran-medivacemergencythrusters-png{
+ clip-path: xywh(0 78.94073139974779% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.003783102143757%);
+}
+
+.btn-upgrade-terran-neosteelframe-png{
+ clip-path: xywh(0 79.06683480453972% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.12988650693569%);
+}
+
+.btn-upgrade-terran-nova-bansheemissilestrik-png{
+ clip-path: xywh(0 79.19293820933166% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.25598991172761%);
+}
+
+.btn-upgrade-terran-nova-hellfiremissiles-png{
+ clip-path: xywh(0 79.31904161412358% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.382093316519544%);
+}
+
+.btn-upgrade-terran-nova-personaldefensivematrix-png{
+ clip-path: xywh(0 79.44514501891551% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.508196721311478%);
+}
+
+.btn-upgrade-terran-nova-siegetankrange-png{
+ clip-path: xywh(0 79.57124842370744% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.634300126103412%);
+}
+
+.btn-upgrade-terran-nova-specialordance-png{
+ clip-path: xywh(0 79.69735182849936% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.76040353089533%);
+}
+
+.btn-upgrade-terran-nova-terrandefendermodestructureattack-png{
+ clip-path: xywh(0 79.8234552332913% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -29.886506935687265%);
+}
+
+.btn-upgrade-terran-optimizedlogistics-png{
+ clip-path: xywh(0 79.94955863808323% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.0126103404792%);
+}
+
+.btn-upgrade-terran-reapercombatdrugs-png{
+ clip-path: xywh(0 80.07566204287515% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.13871374527112%);
+}
+
+.btn-upgrade-terran-replenishablemagazinelvl2-png{
+ clip-path: xywh(0 80.20176544766709% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.264817150063053%);
+}
+
+.btn-upgrade-terran-researchdrillingclaws-png{
+ clip-path: xywh(0 80.32786885245902% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.390920554854986%);
+}
+
+.btn-upgrade-terran-shipplatinglevel1-png{
+ clip-path: xywh(0 80.45397225725094% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.517023959646906%);
+}
+
+.btn-upgrade-terran-shipplatinglevel2-png{
+ clip-path: xywh(0 80.58007566204287% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.64312736443884%);
+}
+
+.btn-upgrade-terran-shipplatinglevel3-png{
+ clip-path: xywh(0 80.7061790668348% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.769230769230774%);
+}
+
+.btn-upgrade-terran-shipplatinglevel4-png{
+ clip-path: xywh(0 80.83228247162674% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -30.895334174022693%);
+}
+
+.btn-upgrade-terran-shipplatinglevel5-png{
+ clip-path: xywh(0 80.95838587641866% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.021437578814627%);
+}
+
+.btn-upgrade-terran-shipweaponslevel1-png{
+ clip-path: xywh(0 81.0844892812106% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.14754098360656%);
+}
+
+.btn-upgrade-terran-shipweaponslevel2-png{
+ clip-path: xywh(0 81.21059268600253% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.27364438839848%);
+}
+
+.btn-upgrade-terran-shipweaponslevel3-png{
+ clip-path: xywh(0 81.33669609079445% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.399747793190414%);
+}
+
+.btn-upgrade-terran-shipweaponslevel4-png{
+ clip-path: xywh(0 81.46279949558638% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.525851197982348%);
+}
+
+.btn-upgrade-terran-shipweaponslevel5-png{
+ clip-path: xywh(0 81.58890290037832% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.651954602774282%);
+}
+
+.btn-upgrade-terran-superstimppack-png{
+ clip-path: xywh(0 81.71500630517023% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.7780580075662%);
+}
+
+.btn-upgrade-terran-transformationservos-png{
+ clip-path: xywh(0 81.84110970996217% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -31.904161412358135%);
+}
+
+.btn-upgrade-terran-trilithium-power-cell-png{
+ clip-path: xywh(0 81.9672131147541% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.03026481715007%);
+}
+
+.btn-upgrade-terran-tungsten-spikes-png{
+ clip-path: xywh(0 82.09331651954602% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.15636822194199%);
+}
+
+.btn-upgrade-terran-twin-linkedflamethrower-color-png{
+ clip-path: xywh(0 82.21941992433796% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.28247162673392%);
+}
+
+.btn-upgrade-terran-vehicleplatinglevel1-png{
+ clip-path: xywh(0 82.34552332912989% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.40857503152586%);
+}
+
+.btn-upgrade-terran-vehicleplatinglevel2-png{
+ clip-path: xywh(0 82.47162673392181% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.534678436317776%);
+}
+
+.btn-upgrade-terran-vehicleplatinglevel3-png{
+ clip-path: xywh(0 82.59773013871374% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.66078184110971%);
+}
+
+.btn-upgrade-terran-vehicleplatinglevel4-png{
+ clip-path: xywh(0 82.72383354350568% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.786885245901644%);
+}
+
+.btn-upgrade-terran-vehicleplatinglevel5-png{
+ clip-path: xywh(0 82.84993694829761% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -32.91298865069356%);
+}
+
+.btn-upgrade-terran-vehicleweaponslevel1-png{
+ clip-path: xywh(0 82.97604035308953% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.0390920554855%);
+}
+
+.btn-upgrade-terran-vehicleweaponslevel2-png{
+ clip-path: xywh(0 83.10214375788146% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.16519546027743%);
+}
+
+.btn-upgrade-terran-vehicleweaponslevel3-png{
+ clip-path: xywh(0 83.2282471626734% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.29129886506935%);
+}
+
+.btn-upgrade-terran-vehicleweaponslevel4-png{
+ clip-path: xywh(0 83.35435056746532% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.417402269861284%);
+}
+
+.btn-upgrade-terran-vehicleweaponslevel5-png{
+ clip-path: xywh(0 83.48045397225725% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.54350567465322%);
+}
+
+.btn-upgrade-vorazun-corsairpermanentlycloaked-png{
+ clip-path: xywh(0 83.60655737704919% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.66960907944514%);
+}
+
+.btn-upgrade-vorazun-oraclepermanentlycloaked-png{
+ clip-path: xywh(0 83.7326607818411% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.79571248423707%);
+}
+
+.btn-upgrade-zagara-aberrationarmorcover-png{
+ clip-path: xywh(0 83.85876418663304% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -33.921815889029006%);
+}
+
+.btn-upgrade-zagara-increasebilelauncherrange-png{
+ clip-path: xywh(0 83.98486759142497% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.04791929382094%);
+}
+
+.btn-upgrade-zagara-scourgesplashdamage-png{
+ clip-path: xywh(0 84.11097099621689% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.17402269861286%);
+}
+
+.btn-upgrade-zerg-abathur-abduct-png{
+ clip-path: xywh(0 84.23707440100883% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.30012610340479%);
+}
+
+.btn-upgrade-zerg-abathur-biomass-png{
+ clip-path: xywh(0 84.36317780580076% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.42622950819673%);
+}
+
+.btn-upgrade-zerg-abathur-biomechanicaltransfusion-png{
+ clip-path: xywh(0 84.48928121059268% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.552332912988646%);
+}
+
+.btn-upgrade-zerg-abathur-castrange-png{
+ clip-path: xywh(0 84.61538461538461% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.67843631778058%);
+}
+
+.btn-upgrade-zerg-abathur-devourer-corrosivespray-png{
+ clip-path: xywh(0 84.74148802017655% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.804539722572514%);
+}
+
+.btn-upgrade-zerg-abathur-improvedmend-png{
+ clip-path: xywh(0 84.86759142496848% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -34.930643127364434%);
+}
+
+.btn-upgrade-zerg-abathur-incubationchamber-png{
+ clip-path: xywh(0 84.9936948297604% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.05674653215637%);
+}
+
+.btn-upgrade-zerg-abathur-prolongeddispersion-png{
+ clip-path: xywh(0 85.11979823455233% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.1828499369483%);
+}
+
+.btn-upgrade-zerg-adaptivecarapace-png{
+ clip-path: xywh(0 85.24590163934427% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.30895334174022%);
+}
+
+.btn-upgrade-zerg-adaptivetalons-png{
+ clip-path: xywh(0 85.37200504413619% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.435056746532155%);
+}
+
+.btn-upgrade-zerg-adrenaloverload-png{
+ clip-path: xywh(0 85.49810844892812% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.56116015132409%);
+}
+
+.btn-upgrade-zerg-airattacks-level1-png{
+ clip-path: xywh(0 85.62421185372006% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.68726355611601%);
+}
+
+.btn-upgrade-zerg-airattacks-level2-png{
+ clip-path: xywh(0 85.75031525851198% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.81336696090794%);
+}
+
+.btn-upgrade-zerg-airattacks-level3-png{
+ clip-path: xywh(0 85.87641866330391% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -35.939470365699876%);
+}
+
+.btn-upgrade-zerg-airattacks-level4-png{
+ clip-path: xywh(0 86.00252206809584% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.06557377049181%);
+}
+
+.btn-upgrade-zerg-airattacks-level5-png{
+ clip-path: xywh(0 86.12862547288776% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.19167717528373%);
+}
+
+.btn-upgrade-zerg-anabolicsynthesis-png{
+ clip-path: xywh(0 86.2547288776797% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.31778058007566%);
+}
+
+.btn-upgrade-zerg-ancillaryarmor-png{
+ clip-path: xywh(0 86.38083228247163% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.4438839848676%);
+}
+
+.btn-upgrade-zerg-buildingarmor-png{
+ clip-path: xywh(0 86.50693568726355% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.56998738965952%);
+}
+
+.btn-upgrade-zerg-burrowcharge-png{
+ clip-path: xywh(0 86.63303909205548% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.69609079445145%);
+}
+
+.btn-upgrade-zerg-burrowmove-png{
+ clip-path: xywh(0 86.75914249684742% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.822194199243384%);
+}
+
+.btn-upgrade-zerg-celldivisionon-png{
+ clip-path: xywh(0 86.88524590163935% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -36.948297604035304%);
+}
+
+.btn-upgrade-zerg-centrifugalhooks-png{
+ clip-path: xywh(0 87.01134930643127% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.07440100882724%);
+}
+
+.btn-upgrade-zerg-chitinousplating-png{
+ clip-path: xywh(0 87.1374527112232% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.20050441361917%);
+}
+
+.btn-upgrade-zerg-concentrated-spew-png{
+ clip-path: xywh(0 87.26355611601514% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.32660781841109%);
+}
+
+.btn-upgrade-zerg-corrosiveacid-png{
+ clip-path: xywh(0 87.38965952080706% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.452711223203025%);
+}
+
+.btn-upgrade-zerg-dehaka-tenderize-png{
+ clip-path: xywh(0 87.51576292559899% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.57881462799496%);
+}
+
+.btn-upgrade-zerg-demolition-png{
+ clip-path: xywh(0 87.64186633039093% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.70491803278688%);
+}
+
+.btn-upgrade-zerg-enduringcorruption-png{
+ clip-path: xywh(0 87.76796973518285% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.83102143757881%);
+}
+
+.btn-upgrade-zerg-evolveincreasedlocustlifetime-png{
+ clip-path: xywh(0 87.89407313997478% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -37.957124842370746%);
+}
+
+.btn-upgrade-zerg-evolvemuscularaugments-png{
+ clip-path: xywh(0 88.02017654476671% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.08322824716268%);
+}
+
+.btn-upgrade-zerg-explosiveglaive-png{
+ clip-path: xywh(0 88.14627994955863% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.2093316519546%);
+}
+
+.btn-upgrade-zerg-flyercarapace-level1-png{
+ clip-path: xywh(0 88.27238335435057% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.33543505674653%);
+}
+
+.btn-upgrade-zerg-flyercarapace-level2-png{
+ clip-path: xywh(0 88.3984867591425% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.46153846153847%);
+}
+
+.btn-upgrade-zerg-flyercarapace-level3-png{
+ clip-path: xywh(0 88.52459016393442% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.58764186633039%);
+}
+
+.btn-upgrade-zerg-flyercarapace-level4-png{
+ clip-path: xywh(0 88.65069356872635% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.71374527112232%);
+}
+
+.btn-upgrade-zerg-flyercarapace-level5-png{
+ clip-path: xywh(0 88.77679697351829% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.839848675914254%);
+}
+
+.btn-upgrade-zerg-frenzy-png{
+ clip-path: xywh(0 88.90290037831022% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -38.965952080706174%);
+}
+
+.btn-upgrade-zerg-glialreconstitution-png{
+ clip-path: xywh(0 89.02900378310214% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.09205548549811%);
+}
+
+.btn-upgrade-zerg-groovedspines-png{
+ clip-path: xywh(0 89.15510718789407% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.21815889029004%);
+}
+
+.btn-upgrade-zerg-groundcarapace-level1-png{
+ clip-path: xywh(0 89.28121059268601% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.34426229508196%);
+}
+
+.btn-upgrade-zerg-groundcarapace-level2-png{
+ clip-path: xywh(0 89.40731399747793% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.470365699873895%);
+}
+
+.btn-upgrade-zerg-groundcarapace-level3-png{
+ clip-path: xywh(0 89.53341740226986% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.59646910466583%);
+}
+
+.btn-upgrade-zerg-groundcarapace-level4-png{
+ clip-path: xywh(0 89.6595208070618% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.72257250945775%);
+}
+
+.btn-upgrade-zerg-groundcarapace-level5-png{
+ clip-path: xywh(0 89.78562421185372% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.84867591424968%);
+}
+
+.btn-upgrade-zerg-hardenedcarapace-png{
+ clip-path: xywh(0 89.91172761664565% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -39.974779319041616%);
+}
+
+.btn-upgrade-zerg-hotsgroovedspines-png{
+ clip-path: xywh(0 90.03783102143758% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.10088272383355%);
+}
+
+.btn-upgrade-zerg-hotsmetabolicboost-png{
+ clip-path: xywh(0 90.1639344262295% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.22698612862547%);
+}
+
+.btn-upgrade-zerg-hotstunnelingclaws-png{
+ clip-path: xywh(0 90.29003783102144% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.3530895334174%);
+}
+
+.btn-upgrade-zerg-hydriaticacid-png{
+ clip-path: xywh(0 90.41614123581337% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.47919293820934%);
+}
+
+.btn-upgrade-zerg-meleeattacks-level1-png{
+ clip-path: xywh(0 90.54224464060529% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.60529634300126%);
+}
+
+.btn-upgrade-zerg-meleeattacks-level2-png{
+ clip-path: xywh(0 90.66834804539722% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.73139974779319%);
+}
+
+.btn-upgrade-zerg-meleeattacks-level3-png{
+ clip-path: xywh(0 90.79445145018916% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.857503152585124%);
+}
+
+.btn-upgrade-zerg-meleeattacks-level4-png{
+ clip-path: xywh(0 90.92055485498109% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -40.983606557377044%);
+}
+
+.btn-upgrade-zerg-meleeattacks-level5-png{
+ clip-path: xywh(0 91.04665825977301% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.10970996216898%);
+}
+
+.btn-upgrade-zerg-missileattacks-level1-png{
+ clip-path: xywh(0 91.17276166456494% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.23581336696091%);
+}
+
+.btn-upgrade-zerg-missileattacks-level2-png{
+ clip-path: xywh(0 91.29886506935688% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.36191677175283%);
+}
+
+.btn-upgrade-zerg-missileattacks-level3-png{
+ clip-path: xywh(0 91.4249684741488% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.488020176544765%);
+}
+
+.btn-upgrade-zerg-missileattacks-level4-png{
+ clip-path: xywh(0 91.55107187894073% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.6141235813367%);
+}
+
+.btn-upgrade-zerg-missileattacks-level5-png{
+ clip-path: xywh(0 91.67717528373267% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.74022698612862%);
+}
+
+.btn-upgrade-zerg-monarchblades-png{
+ clip-path: xywh(0 91.80327868852459% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.86633039092055%);
+}
+
+.btn-upgrade-zerg-organiccarapace-png{
+ clip-path: xywh(0 91.92938209331652% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -41.992433795712486%);
+}
+
+.btn-upgrade-zerg-pneumatizedcarapace-png{
+ clip-path: xywh(0 92.05548549810845% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.11853720050442%);
+}
+
+.btn-upgrade-zerg-pressurizedglands-png{
+ clip-path: xywh(0 92.18158890290037% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.24464060529634%);
+}
+
+.btn-upgrade-zerg-rapidincubation-png{
+ clip-path: xywh(0 92.3076923076923% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.37074401008827%);
+}
+
+.btn-upgrade-zerg-rapidregeneration-png{
+ clip-path: xywh(0 92.43379571248424% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.49684741488021%);
+}
+
+.btn-upgrade-zerg-regenerativebile-png{
+ clip-path: xywh(0 92.55989911727616% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.62295081967213%);
+}
+
+.btn-upgrade-zerg-rupture-png{
+ clip-path: xywh(0 92.6860025220681% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.74905422446406%);
+}
+
+.btn-upgrade-zerg-stukov-bansheeburrowregeneration-png{
+ clip-path: xywh(0 92.81210592686003% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -42.875157629255995%);
+}
+
+.btn-upgrade-zerg-stukov-bansheemorelife-png{
+ clip-path: xywh(0 92.93820933165196% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.001261034047914%);
+}
+
+.btn-upgrade-zerg-stukov-bunkerformliferegenupgraded-png{
+ clip-path: xywh(0 93.06431273644388% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.12736443883985%);
+}
+
+.btn-upgrade-zerg-stukov-bunkerresearchbundle_05-png{
+ clip-path: xywh(0 93.19041614123581% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.25346784363178%);
+}
+
+.btn-upgrade-zerg-stukov-bunkerupgradeii_14-png{
+ clip-path: xywh(0 93.31651954602775% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.3795712484237%);
+}
+
+.btn-upgrade-zerg-stukov-diamondbacksnailtrail-png{
+ clip-path: xywh(0 93.44262295081967% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.505674653215635%);
+}
+
+.btn-upgrade-zerg-stukov-infestedbunkermorelife-png{
+ clip-path: xywh(0 93.5687263556116% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.63177805800757%);
+}
+
+.btn-upgrade-zerg-stukov-infestedliberatoraoe-png{
+ clip-path: xywh(0 93.69482976040354% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.75788146279949%);
+}
+
+.btn-upgrade-zerg-stukov-infestedliberatorswarmcloud-png{
+ clip-path: xywh(0 93.82093316519546% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -43.88398486759142%);
+}
+
+.btn-upgrade-zerg-stukov-infestedmarinerangeupgrade-png{
+ clip-path: xywh(0 93.94703656998739% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.010088272383356%);
+}
+
+.btn-upgrade-zerg-stukov-infestedspawnbroodling-png{
+ clip-path: xywh(0 94.07313997477932% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.13619167717529%);
+}
+
+.btn-upgrade-zerg-stukov-queenenergyregen-png{
+ clip-path: xywh(0 94.19924337957124% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.26229508196721%);
+}
+
+.btn-upgrade-zerg-stukov-researchqueenfungalgrowth-png{
+ clip-path: xywh(0 94.32534678436318% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.388398486759144%);
+}
+
+.btn-upgrade-zerg-stukov-siegetankammoregen-png{
+ clip-path: xywh(0 94.45145018915511% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.51450189155108%);
+}
+
+.btn-upgrade-zerg-stukov-siegetankbonusdamage-png{
+ clip-path: xywh(0 94.57755359394703% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.640605296343%);
+}
+
+.btn-upgrade-zerg-swarmfrenzy-png{
+ clip-path: xywh(0 94.70365699873896% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.76670870113493%);
+}
+
+.btn-upgrade-zerg-tissueassimilation-png{
+ clip-path: xywh(0 94.8297604035309% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -44.892812105926865%);
+}
+
+.btn-upgrade-zerg-tunnelingjaws-png{
+ clip-path: xywh(0 94.95586380832283% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.018915510718784%);
+}
+
+.btn-upgrade-zerg-ventralsacs-png{
+ clip-path: xywh(0 95.08196721311475% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.14501891551072%);
+}
+
+.btn-upgrade-zerg-viciousglaive-png{
+ clip-path: xywh(0 95.20807061790669% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.27112232030265%);
+}
+
+.btn-upgrade-zergling-armorshredding-png{
+ clip-path: xywh(0 95.33417402269862% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.39722572509457%);
+}
+
+.btn-veil-of-the-judicator-png{
+ clip-path: xywh(0 95.46027742749054% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.523329129886505%);
+}
+
+.btn-warp-refraction-png{
+ clip-path: xywh(0 95.58638083228247% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.64943253467844%);
+}
+
+.evolution_coop-png{
+ clip-path: xywh(0 95.7124842370744% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.77553593947036%);
+}
+
+.icon-bargain-bin-prices-png{
+ clip-path: xywh(0 95.83858764186633% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -45.90163934426229%);
+}
+
+.icon-gas-terran-nobg-png{
+ clip-path: xywh(0 95.96469104665826% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.02774274905423%);
+}
+
+.icon-health-nobg-png{
+ clip-path: xywh(0 96.0907944514502% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.15384615384616%);
+}
+
+.icon-mineral-nobg-png{
+ clip-path: xywh(0 96.21689785624211% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.27994955863808%);
+}
+
+.icon-shields-png{
+ clip-path: xywh(0 96.34300126103405% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.406052963430014%);
+}
+
+.icon-supply-protoss_nobg-png{
+ clip-path: xywh(0 96.46910466582598% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.53215636822195%);
+}
+
+.icon-supply-terran_nobg-png{
+ clip-path: xywh(0 96.5952080706179% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.65825977301387%);
+}
+
+.icon-supply-zerg_nobg-png{
+ clip-path: xywh(0 96.72131147540983% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.7843631778058%);
+}
+
+.icon-time-protoss-png{
+ clip-path: xywh(0 96.84741488020177% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -46.910466582597735%);
+}
+
+.potentbile_coop-png{
+ clip-path: xywh(0 96.9735182849937% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.036569987389655%);
+}
+
+.predatorcharge-png{
+ clip-path: xywh(0 97.09962168978562% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.16267339218159%);
+}
+
+.predatorvespene-png{
+ clip-path: xywh(0 97.22572509457756% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.28877679697352%);
+}
+
+.talent-artanis-level03-warpgatecharges-png{
+ clip-path: xywh(0 97.35182849936949% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.41488020176544%);
+}
+
+.talent-artanis-level14-startingmaxsupply-png{
+ clip-path: xywh(0 97.47793190416141% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.540983606557376%);
+}
+
+.talent-raynor-level03-firebatmedicrange-png{
+ clip-path: xywh(0 97.60403530895334% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.66708701134931%);
+}
+
+.talent-raynor-level08-orbitaldroppods-png{
+ clip-path: xywh(0 97.73013871374528% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.79319041614123%);
+}
+
+.talent-raynor-level14-infantryattackspeed-png{
+ clip-path: xywh(0 97.8562421185372% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -47.91929382093316%);
+}
+
+.talent-swann-level12-immortalityprotocol-png{
+ clip-path: xywh(0 97.98234552332913% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.0453972257251%);
+}
+
+.talent-swann-level14-vehiclehealthincrease-png{
+ clip-path: xywh(0 98.10844892812106% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.17150063051703%);
+}
+
+.talent-tychus-level02-additionaloutlaw-png{
+ clip-path: xywh(0 98.23455233291298% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.29760403530895%);
+}
+
+.talent-tychus-level07-firstdiscount-png{
+ clip-path: xywh(0 98.36065573770492% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.423707440100884%);
+}
+
+.talent-vorazun-level01-shadowstalk-png{
+ clip-path: xywh(0 98.48675914249685% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.54981084489282%);
+}
+
+.talent-vorazun-level05-unlockdarkarchon-png{
+ clip-path: xywh(0 98.61286254728877% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.67591424968474%);
+}
+
+.talent-zagara-level12-unlockswarmling-png{
+ clip-path: xywh(0 98.7389659520807% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.80201765447667%);
+}
+
+.talent-zagara-level14-unlocksplitterling-png{
+ clip-path: xywh(0 98.86506935687264% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -48.928121059268605%);
+}
+
+.tip_terrazinefog-png{
+ clip-path: xywh(0 98.99117276166457% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.054224464060525%);
+}
+
+.ui_aicommand_build_open_aggressivepush-png{
+ clip-path: xywh(0 99.11727616645649% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.18032786885246%);
+}
+
+.ui_btn_generic_exclemation_red-png{
+ clip-path: xywh(0 99.24337957124843% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.30643127364439%);
+}
+
+.ui_glues_help_armyicon_protoss-png{
+ clip-path: xywh(0 99.36948297604036% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.43253467843631%);
+}
+
+.ui_glues_help_armyicon_terran-png{
+ clip-path: xywh(0 99.49558638083228% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.558638083228246%);
+}
+
+.ui_glues_help_armyicon_zerg-png{
+ clip-path: xywh(0 99.62168978562421% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.68474148802018%);
+}
+
+.ui_tipicon_evolution_hydralisk-waves-png{
+ clip-path: xywh(0 99.74779319041615% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.8108448928121%);
+}
+
+.vultureautolaunchers-png{
+ clip-path: xywh(0 99.87389659520807% 100% 0.12610340479192939%);
+ transform: scale(1, 793) translate(0, -49.93694829760403%);
+}
+
diff --git a/WebHostLib/static/styles/themes/ocean-island.css b/WebHostLib/static/styles/themes/ocean-island.css
index 2b45fb9d167c..3216e5e3e2df 100644
--- a/WebHostLib/static/styles/themes/ocean-island.css
+++ b/WebHostLib/static/styles/themes/ocean-island.css
@@ -72,3 +72,13 @@ code{
padding-right: 0.25rem;
color: #000000;
}
+
+code.grassy {
+ background-color: #b5e9a4;
+ border: 1px solid #2a6c2f;
+ white-space: preserve;
+ text-align: left;
+ display: block;
+ font-size: 14px;
+ line-height: 20px;
+}
diff --git a/WebHostLib/static/styles/timespinnerTracker.css b/WebHostLib/static/styles/timespinnerTracker.css
index 007c6a19ba9a..640b5846840b 100644
--- a/WebHostLib/static/styles/timespinnerTracker.css
+++ b/WebHostLib/static/styles/timespinnerTracker.css
@@ -75,6 +75,27 @@
#inventory-table img.acquired.green{ /*32CD32*/
filter: hue-rotate(84deg) saturate(10) brightness(0.7);
}
+#inventory-table img.acquired.hotpink{ /*FF69B4*/
+ filter: sepia(100%) hue-rotate(300deg) saturate(10);
+}
+#inventory-table img.acquired.lightsalmon{ /*FFA07A*/
+ filter: sepia(100%) hue-rotate(347deg) saturate(10);
+}
+#inventory-table img.acquired.crimson{ /*DB143B*/
+ filter: sepia(100%) hue-rotate(318deg) saturate(10) brightness(0.86);
+}
+
+#inventory-table span{
+ color: #B4B4A0;
+ font-size: 40px;
+ max-width: 40px;
+ max-height: 40px;
+ filter: grayscale(100%) contrast(75%) brightness(30%);
+}
+
+#inventory-table span.acquired{
+ filter: none;
+}
#inventory-table div.image-stack{
display: grid;
diff --git a/WebHostLib/static/styles/waitSeed.css b/WebHostLib/static/styles/waitSeed.css
index 85d281b20dff..0b4e4c328c34 100644
--- a/WebHostLib/static/styles/waitSeed.css
+++ b/WebHostLib/static/styles/waitSeed.css
@@ -13,3 +13,7 @@
min-height: 360px;
text-align: center;
}
+
+h2, h4 {
+ color: #ffffff;
+}
diff --git a/WebHostLib/stats.py b/WebHostLib/stats.py
index 36545ac96f1f..2ce25c2cc7a2 100644
--- a/WebHostLib/stats.py
+++ b/WebHostLib/stats.py
@@ -1,4 +1,3 @@
-import typing
from collections import Counter, defaultdict
from colorsys import hsv_to_rgb
from datetime import datetime, timedelta, date
@@ -18,21 +17,23 @@
PLOT_WIDTH = 600
-def get_db_data(known_games: typing.Set[str]) -> typing.Tuple[typing.Counter[str],
- typing.DefaultDict[datetime.date, typing.Dict[str, int]]]:
- games_played = defaultdict(Counter)
- total_games = Counter()
+def get_db_data(known_games: set[str]) -> tuple[Counter[str], defaultdict[date, dict[str, int]]]:
+ games_played: defaultdict[date, dict[str, int]] = defaultdict(Counter)
+ total_games: Counter[str] = Counter()
cutoff = date.today() - timedelta(days=30)
room: Room
for room in select(room for room in Room if room.creation_time >= cutoff):
for slot in room.seed.slots:
if slot.game in known_games:
- total_games[slot.game] += 1
- games_played[room.creation_time.date()][slot.game] += 1
+ current_game = slot.game
+ else:
+ current_game = "Other"
+ total_games[current_game] += 1
+ games_played[room.creation_time.date()][current_game] += 1
return total_games, games_played
-def get_color_palette(colors_needed: int) -> typing.List[RGB]:
+def get_color_palette(colors_needed: int) -> list[RGB]:
colors = []
# colors_needed +1 to prevent first and last color being too close to each other
colors_needed += 1
@@ -47,8 +48,7 @@ def get_color_palette(colors_needed: int) -> typing.List[RGB]:
return colors
-def create_game_played_figure(all_games_data: typing.Dict[datetime.date, typing.Dict[str, int]],
- game: str, color: RGB) -> figure:
+def create_game_played_figure(all_games_data: dict[date, dict[str, int]], game: str, color: RGB) -> figure:
occurences = []
days = [day for day, game_data in all_games_data.items() if game_data[game]]
for day in days:
@@ -84,7 +84,7 @@ def stats():
days = sorted(games_played)
color_palette = get_color_palette(len(total_games))
- game_to_color: typing.Dict[str, RGB] = {game: color for game, color in zip(total_games, color_palette)}
+ game_to_color: dict[str, RGB] = {game: color for game, color in zip(total_games, color_palette)}
for game in sorted(total_games):
occurences = []
diff --git a/WebHostLib/templates/404.html b/WebHostLib/templates/404.html
index 9d567510eeef..6c91fed4ac89 100644
--- a/WebHostLib/templates/404.html
+++ b/WebHostLib/templates/404.html
@@ -1,5 +1,6 @@
{% extends 'pageWrapper.html' %}
{% import "macros.html" as macros %}
+{% set show_footer = True %}
{% block head %}
Page Not Found (404)
@@ -13,5 +14,4 @@ This page is out of logic!
The page you're looking for doesn't exist.
Click here to return to safety.
- {% include 'islandFooter.html' %}
{% endblock %}
diff --git a/WebHostLib/templates/gameInfo.html b/WebHostLib/templates/gameInfo.html
deleted file mode 100644
index 3b908004b1be..000000000000
--- a/WebHostLib/templates/gameInfo.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends 'pageWrapper.html' %}
-
-{% block head %}
- {{ game }} Info
-
-
-
-{% endblock %}
-
-{% block body %}
- {% include 'header/'+theme+'Header.html' %}
-
-
-
-{% endblock %}
diff --git a/WebHostLib/templates/genericTracker.html b/WebHostLib/templates/genericTracker.html
index b92097ceea08..2598aa12194b 100644
--- a/WebHostLib/templates/genericTracker.html
+++ b/WebHostLib/templates/genericTracker.html
@@ -98,7 +98,7 @@
{% if hint.finding_player == player %}
{{ player_names_with_alias[(team, hint.finding_player)] }}
- {% elif get_slot_info(team, hint.finding_player).type == 2 %}
+ {% elif get_slot_info(hint.finding_player).type == 2 %}
{{ player_names_with_alias[(team, hint.finding_player)] }}
{% else %}
@@ -109,7 +109,7 @@
|
{% if hint.receiving_player == player %}
{{ player_names_with_alias[(team, hint.receiving_player)] }}
- {% elif get_slot_info(team, hint.receiving_player).type == 2 %}
+ {% elif get_slot_info(hint.receiving_player).type == 2 %}
{{ player_names_with_alias[(team, hint.receiving_player)] }}
{% else %}
diff --git a/WebHostLib/templates/hostGame.html b/WebHostLib/templates/hostGame.html
index 2bcb993af572..d7d0a9633129 100644
--- a/WebHostLib/templates/hostGame.html
+++ b/WebHostLib/templates/hostGame.html
@@ -1,4 +1,5 @@
{% extends 'pageWrapper.html' %}
+{% set show_footer = True %}
{% block head %}
Upload Multidata
@@ -27,6 +28,4 @@ Host Game
-
- {% include 'islandFooter.html' %}
{% endblock %}
diff --git a/WebHostLib/templates/hostRoom.html b/WebHostLib/templates/hostRoom.html
index c5996d181ee0..10ff5e84470a 100644
--- a/WebHostLib/templates/hostRoom.html
+++ b/WebHostLib/templates/hostRoom.html
@@ -58,8 +58,7 @@
Open Log File...
- {% set log = get_log() -%}
- {%- set log_len = log | length - 1 if log.endswith("…") else log | length -%}
+ {% set log, log_len = get_log() -%}
{{ log }}
{% block head %}
Archipelago
{% endblock %}
+
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+
+ {% for message in messages | unique %}
+ {{ message }}
+ {% endfor %}
+
+ {% endif %}
+ {% endwith %}
-{% with messages = get_flashed_messages() %}
- {% if messages %}
-
- {% for message in messages | unique %}
- {{ message }}
- {% endfor %}
-
- {% endif %}
-{% endwith %}
-
-{% block body %}
-{% endblock %}
+ {% block body %}
+ {% endblock %}
+
+ {% if show_footer %}
+ {% include "islandFooter.html" %}
+ {% endif %}
|