diff --git a/assets/screenshots/status-collage.png b/assets/screenshots/status-collage.png
index 0c1bf92..476c096 100644
Binary files a/assets/screenshots/status-collage.png and b/assets/screenshots/status-collage.png differ
diff --git a/assets/screenshots/status-dark.png b/assets/screenshots/status-dark.png
index 8e6b807..2947305 100644
Binary files a/assets/screenshots/status-dark.png and b/assets/screenshots/status-dark.png differ
diff --git a/assets/screenshots/status.png b/assets/screenshots/status.png
index 3be75fd..670dc0e 100644
Binary files a/assets/screenshots/status.png and b/assets/screenshots/status.png differ
diff --git a/index.html b/index.html
index 3a2dbd5..7e8502d 100644
--- a/index.html
+++ b/index.html
@@ -4,12 +4,31 @@
Status Page
+
+
+
+
diff --git a/public/favicon-dark.svg b/public/favicon-dark.svg
new file mode 100644
index 0000000..f1cb60d
--- /dev/null
+++ b/public/favicon-dark.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..3507818
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/components/ui.tsx b/src/components/ui.tsx
index a0efb75..5846a4f 100644
--- a/src/components/ui.tsx
+++ b/src/components/ui.tsx
@@ -68,14 +68,19 @@ const THEME_ICONS: Record = {
const STORAGE_KEY = 'statuspage-theme'
function applyTheme(theme: Theme) {
- const link = document.getElementById('theme-dark') as HTMLLinkElement | null
- if (!link) return
- link.media =
- theme === 'dark'
- ? 'all'
- : theme === 'light'
- ? 'not all'
- : '(prefers-color-scheme: dark)'
+ const light = document.getElementById('theme-light') as HTMLLinkElement | null
+ const dark = document.getElementById('theme-dark') as HTMLLinkElement | null
+ if (!light || !dark) return
+ if (theme === 'dark') {
+ light.media = 'not all'
+ dark.media = 'all'
+ } else if (theme === 'light') {
+ light.media = 'all'
+ dark.media = 'not all'
+ } else {
+ light.media = '(prefers-color-scheme: light)'
+ dark.media = '(prefers-color-scheme: dark)'
+ }
}
function readTheme(): Theme {
diff --git a/public/dark.css b/src/dark.css
similarity index 79%
rename from public/dark.css
rename to src/dark.css
index 6a5e4d4..25b374d 100644
--- a/public/dark.css
+++ b/src/dark.css
@@ -1,4 +1,4 @@
-:root:root {
+:root {
color-scheme: dark;
--bg: #0f1210;
@@ -39,11 +39,17 @@
--err: #ff6b70;
--border-ink: #3a403a;
+ --border: 2px solid var(--border-ink);
--border-muted: #3a403a;
--shadow-color: #000;
+ --shadow: 0.35rem 0.35rem 0 var(--shadow-color);
+ --shadow-lg: 0.55rem 0.55rem 0 var(--shadow-color);
--overlay: rgba(0, 0, 0, 0.6);
--sheen: rgba(255, 255, 255, 0.07);
--sheen-strong: rgba(255, 255, 255, 0.12);
+ --on-accent: #111;
--incidents-ink: #e8e8e8;
+ --radius: 0.5rem;
+ --mono: "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, monospace;
}
diff --git a/src/light.css b/src/light.css
new file mode 100644
index 0000000..20fbdd3
--- /dev/null
+++ b/src/light.css
@@ -0,0 +1,57 @@
+:root {
+ color-scheme: light;
+
+ /* accents */
+ --green: #1aad4b;
+ --green-glow: rgba(26, 173, 75, 0.7);
+ --yellow: #e5b400;
+ --red: #e5484d;
+ --ok-soft: #c7ecd3;
+ --ok-ink: #0a5c22;
+ --fail-soft: #ffd6d6;
+ --fail-ink: #9c0000;
+ --err: #a00;
+
+ /* surfaces */
+ --bg: #f2f2f2;
+ --card: #fafafa;
+ --surface: #fff;
+ --surface-muted: #e5e5e5;
+ --status-up-bg: #d9f2e0;
+ --status-degraded-bg: #fff3b8;
+ --status-down-bg: #2b2b2b;
+ --status-unknown-bg: #e4e4e4;
+ --down-chip-bg: #2a2a2a;
+ --down-chip-ink: #eee;
+ --down-chip-border: #555;
+ --dark-surface: #111;
+ --code-bg: #1a1d1a;
+ --code-ink: #e9f7ea;
+ --code-border: #2a2e2a;
+
+ /* text */
+ --ink: #111;
+ --ink-invert: #f2f2f2;
+ --muted: #777;
+ --muted-2: #888;
+ --muted-3: #999;
+ --muted-4: #555;
+ --muted-5: #bbb;
+ --muted-dot: #ccc;
+ --white: #fff;
+ --on-accent: #111;
+
+ /* lines & shadows */
+ --border-ink: #111;
+ --border: 2px solid var(--border-ink);
+ --border-muted: #bbb;
+ --shadow-color: #888;
+ --shadow: 0.35rem 0.35rem 0 var(--shadow-color);
+ --shadow-lg: 0.55rem 0.55rem 0 var(--shadow-color);
+ --overlay: rgba(0, 0, 0, 0.35);
+ --sheen: rgba(255, 255, 255, 0.75);
+ --sheen-strong: rgba(255, 255, 255, 0.9);
+
+ --radius: 0.5rem;
+ --mono: "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, monospace;
+}
diff --git a/src/main.tsx b/src/main.tsx
index 874b630..de99384 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -5,6 +5,5 @@ import '@fontsource/inria-sans/700.css'
import '@fontsource/inria-sans/400-italic.css'
import '@fontsource/jetbrains-mono/400.css'
import '@fontsource/jetbrains-mono/600.css'
-import './styles.css'
render(, document.getElementById('app')!)
diff --git a/src/styles.css b/src/styles.css
index 0c6ef4f..fd7d79c 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -1,61 +1,3 @@
-:root {
- color-scheme: light;
-
- /* accents */
- --green: #1aad4b;
- --green-glow: rgba(26, 173, 75, 0.7);
- --yellow: #e5b400;
- --red: #e5484d;
- --ok-soft: #c7ecd3;
- --ok-ink: #0a5c22;
- --fail-soft: #ffd6d6;
- --fail-ink: #9c0000;
- --err: #a00;
-
- /* surfaces */
- --bg: #f2f2f2;
- --card: #fafafa;
- --surface: #fff;
- --surface-muted: #e5e5e5;
- --status-up-bg: #d9f2e0;
- --status-degraded-bg: #fff3b8;
- --status-down-bg: #2b2b2b;
- --status-unknown-bg: #e4e4e4;
- --down-chip-bg: #2a2a2a;
- --down-chip-ink: #eee;
- --down-chip-border: #555;
- --dark-surface: #111;
- --code-bg: #1a1d1a;
- --code-ink: #e9f7ea;
- --code-border: #2a2e2a;
-
- /* text */
- --ink: #111;
- --ink-invert: #f2f2f2;
- --muted: #777;
- --muted-2: #888;
- --muted-3: #999;
- --muted-4: #555;
- --muted-5: #bbb;
- --muted-dot: #ccc;
- --white: #fff;
- --on-accent: #111;
-
- /* lines & shadows */
- --border-ink: #111;
- --border: 2px solid var(--border-ink);
- --border-muted: #bbb;
- --shadow-color: #888;
- --shadow: 0.35rem 0.35rem 0 var(--shadow-color);
- --shadow-lg: 0.55rem 0.55rem 0 var(--shadow-color);
- --overlay: rgba(0, 0, 0, 0.35);
- --sheen: rgba(255, 255, 255, 0.75);
- --sheen-strong: rgba(255, 255, 255, 0.9);
-
- --radius: 0.5rem;
- --mono: "JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, monospace;
-}
-
* {
box-sizing: border-box;
}