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 @@ + + + S + 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 @@ + + + S + 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; }