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
Y2qFh&HLn7S62Fz^#@1)bjl5$151>LTrT_o{
literal 0
HcmV?d00001
diff --git a/logo-512.png b/logo-512.png
new file mode 100644
index 0000000000000000000000000000000000000000..0eaa7132587f76f62c796ba29406a2cd3b6044fc
GIT binary patch
literal 11226
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
literal 0
HcmV?d00001
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 000000000..491d3a797
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,20 @@
+{
+ "background_color": "#ffffff",
+ "theme_color": "#333333",
+ "name": "Upptime",
+ "short_name": "Upptime",
+ "display": "minimal-ui",
+ "start_url": "/",
+ "icons": [
+ {
+ "src": "logo-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ]
+}
diff --git a/service-worker-index.html b/service-worker-index.html
new file mode 100644
index 000000000..a5249d88a
--- /dev/null
+++ b/service-worker-index.html
@@ -0,0 +1,26 @@
+
\ No newline at end of file
diff --git a/service-worker.js b/service-worker.js
new file mode 100644
index 000000000..28aec59f3
--- /dev/null
+++ b/service-worker.js
@@ -0,0 +1 @@
+!function(){"use strict";self.addEventListener("install",(function(){self.skipWaiting()})),self.addEventListener("activate",(function(){self.registration.unregister().then((function(){return self.clients.matchAll()})).then((function(t){t.forEach((t=>t.navigate(t.url)))})).catch((function(){}))}))}();
diff --git a/themes/dark.css b/themes/dark.css
new file mode 100644
index 000000000..f98f57e7f
--- /dev/null
+++ b/themes/dark.css
@@ -0,0 +1,26 @@
+:root {
+ --body-background-color: #001716;
+ --body-text-color: #f0ffff;
+ --card-background-color: #002b29;
+ --nav-background-color: #002b29;
+ --nav-border-bottom-color: #015450;
+ --nav-current-border-bottom-color: #1abc9c;
+ --card-border-color: #015450;
+ --down-border-left-color: #eb3b5a;
+ --down-background-color: #6b1020;
+ --degraded-border-left-color: #f7b731;
+ --up-border-left-color: #20bf6b;
+ --tag-color: #002b29;
+ --tag-up-background-color: #20bf6b;
+ --tag-down-background-color: #eb3b5a;
+ --tag-degraded-background-color: #f7b731;
+ --change-background-color: #f7b731;
+ --error-button-border-color: #1a46ad;
+ --error-button-background-color: #3867d6;
+ --error-button-color: #ffffff;
+ --submit-button-border-color: #1a46ad;
+ --submit-button-background-color: #3867d6;
+ --submit-button-color: #ffffff;
+ --graph-opacity: 1;
+ --graph-filter: none;
+}
diff --git a/themes/light.css b/themes/light.css
new file mode 100644
index 000000000..a9f32a873
--- /dev/null
+++ b/themes/light.css
@@ -0,0 +1,26 @@
+:root {
+ --body-background-color: #f0f7f7;
+ --body-text-color: #002626;
+ --card-background-color: #ffffff;
+ --nav-background-color: #ffffff;
+ --nav-border-bottom-color: #d8e8e4;
+ --nav-current-border-bottom-color: #1abc9c;
+ --card-border-color: #d8e8e4;
+ --down-border-left-color: #eb3b5a;
+ --down-background-color: #ffd0d2;
+ --degraded-border-left-color: #f7b731;
+ --up-border-left-color: #20bf6b;
+ --tag-color: #ffffff;
+ --tag-up-background-color: #20bf6b;
+ --tag-down-background-color: #eb3b5a;
+ --tag-degraded-background-color: #f7b731;
+ --change-background-color: #f7b731;
+ --error-button-border-color: #1a46ad;
+ --error-button-background-color: #3867d6;
+ --error-button-color: #ffffff;
+ --submit-button-border-color: #1a46ad;
+ --submit-button-background-color: #3867d6;
+ --submit-button-color: #ffffff;
+ --graph-opacity: 1;
+ --graph-filter: none;
+}
diff --git a/themes/night.css b/themes/night.css
new file mode 100644
index 000000000..f40900796
--- /dev/null
+++ b/themes/night.css
@@ -0,0 +1,26 @@
+:root {
+ --body-background-color: #0d1117;
+ --body-text-color: #c9d1d9;
+ --card-background-color: #30363D;
+ --nav-background-color: #161b22;
+ --nav-border-bottom-color: #161b22;
+ --nav-current-border-bottom-color: #1abc9c;
+ --card-border-color: #30363D;
+ --down-border-left-color: #eb3b5a;
+ --down-background-color: #6b1020;
+ --degraded-border-left-color: #f7b731;
+ --up-border-left-color: #22993D;
+ --tag-color: #0d1117;
+ --tag-up-background-color: #22993D;
+ --tag-down-background-color: #F03A17;
+ --tag-degraded-background-color: #f7b731;
+ --change-background-color: #f7b731;
+ --error-button-border-color: #1a46ad;
+ --error-button-background-color: #3867d6;
+ --error-button-color: #ffffff;
+ --submit-button-border-color: #1a46ad;
+ --submit-button-background-color: #3867d6;
+ --submit-button-color: #ffffff;
+ --graph-opacity: 1;
+ /* --graph-filter: brightness(0.35) sepia(1) hue-rotate(88deg) saturate(8); */
+}
diff --git a/themes/ocean.css b/themes/ocean.css
new file mode 100644
index 000000000..b32ba63d4
--- /dev/null
+++ b/themes/ocean.css
@@ -0,0 +1,26 @@
+:root {
+ --body-background-color: #011945;
+ --body-text-color: #f0ffff;
+ --card-background-color: #0d2f6e;
+ --nav-background-color: #0d2f6e;
+ --nav-border-bottom-color: #002d80;
+ --nav-current-border-bottom-color: #1abc9c;
+ --card-border-color: #002d80;
+ --down-border-left-color: #eb3b5a;
+ --down-background-color: #6b1020;
+ --degraded-border-left-color: #f7b731;
+ --up-border-left-color: #20bf6b;
+ --tag-color: #0d2f6e;
+ --tag-up-background-color: #20bf6b;
+ --tag-down-background-color: #eb3b5a;
+ --tag-degraded-background-color: #f7b731;
+ --change-background-color: #f7b731;
+ --error-button-border-color: #1a46ad;
+ --error-button-background-color: #3867d6;
+ --error-button-color: #ffffff;
+ --submit-button-border-color: #1a46ad;
+ --submit-button-background-color: #3867d6;
+ --submit-button-color: #ffffff;
+ --graph-opacity: 1;
+ --graph-filter: none;
+}
diff --git a/upptime-icon.svg b/upptime-icon.svg
new file mode 100644
index 000000000..f909d51a2
--- /dev/null
+++ b/upptime-icon.svg
@@ -0,0 +1,4 @@
+