Dark Mode for admin panel and Status page #336

Open
opened 2026-04-05 16:19:23 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @katmakhan on 10/25/2025

Dark mode will be better, as a config.env environment to switch admin panel status page

and toggle to set default mode on each individual status page

Currently I have added custom css to achieve the same

/* OneUptime Status Page - Dark Theme */

/* Main background and text colors */
body {
  background-color: #0f172a !important;
  color: #e2e8f0 !important;
}

/* Header section */
header, .header {
  background-color: #1e293b !important;
  border-bottom: 1px solid #334155 !important;
}

/* Cards and containers */
.card, .container, .component-container, .incident-container {
  background-color: #1e293b !important;
  border-color: #334155 !important;
  color: #e2e8f0 !important;
}

/* Status indicators - keep their colors but adjust slightly for dark theme */
.operational {
  background-color: #10b981 !important;
}

.degraded-performance {
  background-color: #f59e0b !important;
}

.partial-outage {
  background-color: #ef4444 !important;
}

.major-outage {
  background-color: #dc2626 !important;
}

/* Text elements */
h1, h2, h3, h4, h5, h6 {
  color: #f1f5f9 !important;
}

p, span, div {
  color: #e2e8f0 !important;
}

/* Links */
a {
  color: #60a5fa !important;
}

a:hover {
  color: #93c5fd !important;
}

/* Buttons */
button, .button, .btn {
  background-color: #334155 !important;
  color: #e2e8f0 !important;
  border-color: #475569 !important;
}

button:hover, .button:hover, .btn:hover {
  background-color: #475569 !important;
}

/* Tables */
table {
  background-color: #1e293b !important;
  color: #e2e8f0 !important;
}

thead {
  background-color: #334155 !important;
}

tbody tr {
  border-bottom: 1px solid #334155 !important;
}

tbody tr:hover {
  background-color: #334155 !important;
}

/* Footer */
footer, .footer {
  background-color: transparent !important;
  border-top: 1px solid #334155 !important;
  color: #94a3b8 !important;
}

/* Input fields */
input, textarea, select {
  background-color: #334155 !important;
  color: #e2e8f0 !important;
  border-color: #475569 !important;
}

input::placeholder, textarea::placeholder {
  color: #64748b !important;
}

/* Navigation container */
[data-testid="nav-children"] {
  background-color: #1e293b !important;
  border-color: #334155 !important;
}

/* Navigation items - default state */
[data-testid="nav-children"] a {
  color: #e2e8f0 !important;
  background-color: transparent !important;
}

/* Navigation items - hover state */
[data-testid="nav-children"] a:hover {
  background-color: #334155 !important;
  color: #f1f5f9 !important;
}

/* Navigation items - active/selected state */
[data-testid="nav-children"] a.bg-gray-100 {
  background-color: #60a5fa !important;
  color: #0f172a !important;
}

/* SVG icons in navigation */
[data-testid="nav-children"] svg {
  stroke: currentColor !important;
}

/* Sidebar navigation */
nav.space-y-3 a {
  color: #e2e8f0 !important;
  background-color: transparent !important;
}

nav.space-y-3 a:hover {
  background-color: #334155 !important;
  color: #f1f5f9 !important;
}

nav.space-y-3 a.bg-gray-100 {
  background-color: #60a5fa !important;
  color: #0f172a !important;
}

nav.space-y-3 svg {
  stroke: currentColor !important;
  color: inherit !important;
}

/* Tab items with data-testid */
[data-testid^="tab-"] {
  background-color: transparent !important;
  color: #94a3b8 !important;
  border: 1px solid transparent !important;
}

[data-testid^="tab-"]:hover {
  background-color: #334155 !important;
  color: #e2e8f0 !important;
}

[data-testid^="tab-"].bg-gray-100 {
  background-color: #60a5fa !important;
  color: #0f172a !important;
  border-color: #60a5fa !important;
}

/* Tabs (general) */
.tab, [role="tab"], .nav-tab, .tab-item {
  background-color: transparent !important;
  color: #94a3b8 !important;
  border-color: transparent !important;
}

.tab:hover, [role="tab"]:hover, .nav-tab:hover, .tab-item:hover {
  background-color: #334155 !important;
  color: #e2e8f0 !important;
}

.tab.active, [role="tab"][aria-selected="true"], .nav-tab.active, .tab-item.active,
.tab-active, .selected {
  background-color: #1e293b !important;
  color: #60a5fa !important;
  border-bottom: 2px solid #60a5fa !important;
}

/* Tab selection/focus states */
.tab:focus, [role="tab"]:focus, .nav-tab:focus, .tab-item:focus {
  outline: 2px solid #60a5fa !important;
  outline-offset: 2px !important;
}

/* Badges and labels */
.badge, .label, .tag {
  background-color: #334155 !important;
  color: #e2e8f0 !important;
}

/* Timeline items */
.timeline-item, .incident-update {
  background-color: #1e293b !important;
  border-left-color: #475569 !important;
}

/* Metric graphs and charts */
.chart-container, .metric-container {
  background-color: #1e293b !important;
}

/* Scrollbars (for webkit browsers) */
::-webkit-scrollbar {
  width: 12px;
  height: 12px;
}

::-webkit-scrollbar-track {
  background: #1e293b;
}

::-webkit-scrollbar-thumb {
  background: #475569;
  border-radius: 6px;
}

::-webkit-scrollbar-thumb:hover {
  background: #64748b;
}

/* Additional utility overrides */
.bg-white {
  background-color: #1e293b !important;
}

.text-gray-900, .text-black {
  color: #e2e8f0 !important;
}

.border-gray-200 {
  border-color: #334155 !important;
}
*Originally created by @katmakhan on 10/25/2025* Dark mode will be better, as a config.env environment to switch admin panel status page and toggle to set default mode on each individual status page Currently I have added custom css to achieve the same ``` /* OneUptime Status Page - Dark Theme */ /* Main background and text colors */ body { background-color: #0f172a !important; color: #e2e8f0 !important; } /* Header section */ header, .header { background-color: #1e293b !important; border-bottom: 1px solid #334155 !important; } /* Cards and containers */ .card, .container, .component-container, .incident-container { background-color: #1e293b !important; border-color: #334155 !important; color: #e2e8f0 !important; } /* Status indicators - keep their colors but adjust slightly for dark theme */ .operational { background-color: #10b981 !important; } .degraded-performance { background-color: #f59e0b !important; } .partial-outage { background-color: #ef4444 !important; } .major-outage { background-color: #dc2626 !important; } /* Text elements */ h1, h2, h3, h4, h5, h6 { color: #f1f5f9 !important; } p, span, div { color: #e2e8f0 !important; } /* Links */ a { color: #60a5fa !important; } a:hover { color: #93c5fd !important; } /* Buttons */ button, .button, .btn { background-color: #334155 !important; color: #e2e8f0 !important; border-color: #475569 !important; } button:hover, .button:hover, .btn:hover { background-color: #475569 !important; } /* Tables */ table { background-color: #1e293b !important; color: #e2e8f0 !important; } thead { background-color: #334155 !important; } tbody tr { border-bottom: 1px solid #334155 !important; } tbody tr:hover { background-color: #334155 !important; } /* Footer */ footer, .footer { background-color: transparent !important; border-top: 1px solid #334155 !important; color: #94a3b8 !important; } /* Input fields */ input, textarea, select { background-color: #334155 !important; color: #e2e8f0 !important; border-color: #475569 !important; } input::placeholder, textarea::placeholder { color: #64748b !important; } /* Navigation container */ [data-testid="nav-children"] { background-color: #1e293b !important; border-color: #334155 !important; } /* Navigation items - default state */ [data-testid="nav-children"] a { color: #e2e8f0 !important; background-color: transparent !important; } /* Navigation items - hover state */ [data-testid="nav-children"] a:hover { background-color: #334155 !important; color: #f1f5f9 !important; } /* Navigation items - active/selected state */ [data-testid="nav-children"] a.bg-gray-100 { background-color: #60a5fa !important; color: #0f172a !important; } /* SVG icons in navigation */ [data-testid="nav-children"] svg { stroke: currentColor !important; } /* Sidebar navigation */ nav.space-y-3 a { color: #e2e8f0 !important; background-color: transparent !important; } nav.space-y-3 a:hover { background-color: #334155 !important; color: #f1f5f9 !important; } nav.space-y-3 a.bg-gray-100 { background-color: #60a5fa !important; color: #0f172a !important; } nav.space-y-3 svg { stroke: currentColor !important; color: inherit !important; } /* Tab items with data-testid */ [data-testid^="tab-"] { background-color: transparent !important; color: #94a3b8 !important; border: 1px solid transparent !important; } [data-testid^="tab-"]:hover { background-color: #334155 !important; color: #e2e8f0 !important; } [data-testid^="tab-"].bg-gray-100 { background-color: #60a5fa !important; color: #0f172a !important; border-color: #60a5fa !important; } /* Tabs (general) */ .tab, [role="tab"], .nav-tab, .tab-item { background-color: transparent !important; color: #94a3b8 !important; border-color: transparent !important; } .tab:hover, [role="tab"]:hover, .nav-tab:hover, .tab-item:hover { background-color: #334155 !important; color: #e2e8f0 !important; } .tab.active, [role="tab"][aria-selected="true"], .nav-tab.active, .tab-item.active, .tab-active, .selected { background-color: #1e293b !important; color: #60a5fa !important; border-bottom: 2px solid #60a5fa !important; } /* Tab selection/focus states */ .tab:focus, [role="tab"]:focus, .nav-tab:focus, .tab-item:focus { outline: 2px solid #60a5fa !important; outline-offset: 2px !important; } /* Badges and labels */ .badge, .label, .tag { background-color: #334155 !important; color: #e2e8f0 !important; } /* Timeline items */ .timeline-item, .incident-update { background-color: #1e293b !important; border-left-color: #475569 !important; } /* Metric graphs and charts */ .chart-container, .metric-container { background-color: #1e293b !important; } /* Scrollbars (for webkit browsers) */ ::-webkit-scrollbar { width: 12px; height: 12px; } ::-webkit-scrollbar-track { background: #1e293b; } ::-webkit-scrollbar-thumb { background: #475569; border-radius: 6px; } ::-webkit-scrollbar-thumb:hover { background: #64748b; } /* Additional utility overrides */ .bg-white { background-color: #1e293b !important; } .text-gray-900, .text-black { color: #e2e8f0 !important; } .border-gray-200 { border-color: #334155 !important; } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/oneuptime#336