fix: improve the ui for monitor page

This commit is contained in:
2026-09-04 11:54:01 +07:00
parent a13fd064d8
commit f21d99a7c9
4 changed files with 882 additions and 431 deletions
@@ -50,7 +50,7 @@ export function LatencySparkline({ checks }: { checks: Check[] }) {
<ChartTooltip <ChartTooltip
content={ content={
<ChartTooltipContent <ChartTooltipContent
className="min-w-36 gap-1.5 rounded-[6px] border-(--hairline) bg-white/97 px-3 py-2.5 shadow-[0_8px_24px_rgb(24_74_52/0.1),0_2px_6px_rgb(0_0_0/0.04)] backdrop-blur-sm" className="monitor-chart-tooltip min-w-36 gap-1.5 rounded-[6px] border-(--hairline) bg-white/97 px-3 py-2.5 shadow-[0_8px_24px_rgb(24_74_52/0.1),0_2px_6px_rgb(0_0_0/0.04)] backdrop-blur-sm"
labelFormatter={(_, payload) => new Date((payload[0].payload as LatencyDatum).t).toLocaleString()} labelFormatter={(_, payload) => new Date((payload[0].payload as LatencyDatum).t).toLocaleString()}
/> />
} }
+1 -1
View File
@@ -99,7 +99,7 @@ export function UptimeBar({ checks }: { checks: Check[] }) {
<ChartTooltip <ChartTooltip
content={ content={
<ChartTooltipContent <ChartTooltipContent
className="min-w-36 gap-1.5 rounded-[6px] border-(--hairline) bg-white/97 px-3 py-2.5 shadow-[0_8px_24px_rgb(24_74_52/0.1),0_2px_6px_rgb(0_0_0/0.04)] backdrop-blur-sm" className="monitor-chart-tooltip min-w-36 gap-1.5 rounded-[6px] border-(--hairline) bg-white/97 px-3 py-2.5 shadow-[0_8px_24px_rgb(24_74_52/0.1),0_2px_6px_rgb(0_0_0/0.04)] backdrop-blur-sm"
hideIndicator={false} hideIndicator={false}
nameKey="status" nameKey="status"
labelFormatter={(_, payload) => formatBucketTime(payload[0].payload as UptimeDatum)} labelFormatter={(_, payload) => formatBucketTime(payload[0].payload as UptimeDatum)}
+1 -429
View File
@@ -5,6 +5,7 @@
@import './styles/LoginPage.css'; @import './styles/LoginPage.css';
@import './styles/StatusPage.css'; @import './styles/StatusPage.css';
@import './styles/DashboardPage.css'; @import './styles/DashboardPage.css';
@import './styles/MonitorDetailPage.css';
@custom-variant dark (&:is(.dark *)); @custom-variant dark (&:is(.dark *));
@@ -406,9 +407,6 @@ button {
animation: spin 900ms linear infinite; animation: spin 900ms linear infinite;
} }
.detail-main {
padding-top: 34px;
}
.back-link { .back-link {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
@@ -427,246 +425,6 @@ button {
width: 15px; width: 15px;
height: 15px; height: 15px;
} }
.detail-hero {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 32px;
margin-top: 34px;
padding-bottom: 36px;
border-bottom: 1px solid #e7e7e7;
}
.detail-title {
display: flex;
align-items: center;
gap: 18px;
min-width: 0;
}
.status-orb {
flex: 0 0 auto;
width: 16px;
height: 16px;
border: 4px solid #f2d4d4;
border-radius: 50%;
background: #c74f4f;
box-shadow: 0 0 0 8px #fff;
}
.status-orb.online {
border-color: #c5f1df;
background: var(--primary-deep);
}
.status-orb.pending {
border-color: #f6e2c8;
background: #d8892f;
}
.status-orb.checking {
border-color: #eee5bd;
background: #c6aa38;
}
.detail-title h1 {
margin: 0;
overflow: hidden;
font-size: 40px;
font-weight: 500;
line-height: 1.1;
letter-spacing: -1.5px;
text-overflow: ellipsis;
white-space: nowrap;
}
.detail-title a {
display: inline-flex;
align-items: center;
gap: 6px;
max-width: min(70vw, 680px);
margin-top: 9px;
overflow: hidden;
font:
400 13px/1.4 'IBM Plex Mono',
monospace;
color: var(--muted);
text-overflow: ellipsis;
white-space: nowrap;
}
.detail-title a:hover {
color: var(--primary-deep);
}
.detail-title a svg {
flex: 0 0 auto;
width: 13px;
height: 13px;
}
.detail-actions {
display: flex;
align-items: center;
gap: 18px;
}
.muted-alert {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: var(--muted);
}
.muted-alert svg {
width: 14px;
height: 14px;
}
.sla-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 12px;
margin-top: 24px;
}
.sla-card {
min-width: 0;
padding: 20px;
border: 1px solid #e3e3e3;
border-radius: 8px;
background: #fff;
}
.sla-card p {
margin: 0 0 17px;
font-size: 12px;
color: var(--muted);
}
.sla-card strong {
display: block;
font:
500 23px/1 'IBM Plex Mono',
monospace;
letter-spacing: -1px;
}
.sla-card span {
display: block;
margin-top: 11px;
overflow: hidden;
font-size: 11px;
color: var(--faint);
text-overflow: ellipsis;
white-space: nowrap;
}
.sla-card.incident-summary {
background: #fafafa;
}
.sla-card.incident-summary.has-incident {
border-color: #e8c3c3;
background: #fff8f8;
}
.sla-card.incident-summary.has-incident strong {
color: #a83e3e;
}
.detail-grid {
display: grid;
grid-template-columns: minmax(0, 1.55fr) minmax(300px, 0.75fr);
gap: 16px;
margin-top: 16px;
}
.detail-grid.lower-grid {
align-items: stretch;
}
.lower-grid > .data-panel {
height: 100%;
}
.data-panel {
overflow: hidden;
border: 1px solid #dedede;
border-radius: 8px;
background: #fff;
}
.data-panel-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
min-height: 82px;
padding: 18px 22px;
border-bottom: 1px solid #ededed;
}
.data-panel-heading .overline {
margin-bottom: 5px;
}
.data-panel-heading h2 {
margin: 0;
font-size: 18px;
font-weight: 500;
}
.data-panel-heading > span {
font:
400 11px/1.4 'IBM Plex Mono',
monospace;
color: var(--faint);
}
.configuration-panel {
margin-top: 16px;
}
.config-list {
margin: 0;
}
.config-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: 14px 22px;
border-bottom: 1px solid #f0f0f0;
}
.config-row:last-child {
border-bottom: 0;
}
.config-row dt {
font-size: 12px;
color: var(--muted);
}
.config-row dd {
margin: 0;
font:
400 13px/1.4 'IBM Plex Mono',
monospace;
color: var(--ink);
}
.config-row .config-row-actions {
display: flex;
align-items: center;
gap: 10px;
}
.config-row-actions .row-action {
font-family: 'DM Sans', 'Helvetica Neue', sans-serif;
}
.config-danger {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 16px 22px;
border-top: 1px solid #ededed;
background: #fdfafa;
}
.config-danger p {
margin: 0;
font-size: 12px;
color: var(--muted);
}
.chart-panel {
min-height: 330px;
}
.sparkline-wrap {
position: relative;
height: 245px;
padding: 26px 24px 24px;
background: linear-gradient(180deg, #fdfefe, #fff);
}
.chart-scale {
position: absolute;
inset: 19px 22px 20px auto;
display: flex;
flex-direction: column;
justify-content: space-between;
pointer-events: none;
font:
400 9px/1 'IBM Plex Mono',
monospace;
color: #aaa;
}
.table-empty { .table-empty {
display: grid; display: grid;
min-height: 150px; min-height: 150px;
@@ -676,141 +434,11 @@ button {
color: var(--muted); color: var(--muted);
text-align: center; text-align: center;
} }
.uptime-panel {
min-height: 330px;
}
.uptime-bar {
height: 148px;
padding: 24px 22px 18px;
background: linear-gradient(180deg, #fcfefd 0%, #fff 100%);
}
.uptime-legend {
display: flex;
justify-content: space-between;
padding: 14px 22px 0;
border-top: 1px solid #f0f0f0;
font-size: 10px;
color: #999;
}
.uptime-legend span {
display: inline-flex;
align-items: center;
gap: 5px;
}
.uptime-legend i {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--primary-deep);
}
.uptime-legend i.legend-down {
margin-left: 5px;
background: var(--chart-down);
}
.uptime-legend i.legend-degraded {
margin-left: 5px;
background: var(--chart-degraded);
}
.data-table-wrap {
overflow-x: auto;
}
.recent-checks-panel {
display: flex;
min-height: 0;
flex-direction: column;
}
.incidents-panel { .incidents-panel {
display: flex; display: flex;
min-height: 0; min-height: 0;
flex-direction: column; flex-direction: column;
} }
.recent-checks-scroll,
.incident-list {
max-height: clamp(320px, 52vh, 556px);
overflow: auto;
overscroll-behavior: contain;
scrollbar-color: #b8c7c0 #f4f6f5;
scrollbar-gutter: stable;
scrollbar-width: thin;
}
.recent-checks-scroll:focus-visible,
.incident-list:focus-visible {
outline: 2px solid rgb(36 180 126 / 0.45);
outline-offset: -2px;
}
.recent-checks-scroll::-webkit-scrollbar,
.incident-list::-webkit-scrollbar {
width: 9px;
height: 9px;
}
.recent-checks-scroll::-webkit-scrollbar-track,
.incident-list::-webkit-scrollbar-track {
background: #f4f6f5;
}
.recent-checks-scroll::-webkit-scrollbar-thumb,
.incident-list::-webkit-scrollbar-thumb {
border: 2px solid #f4f6f5;
border-radius: 999px;
background: #b8c7c0;
}
.recent-checks-scroll::-webkit-scrollbar-thumb:hover,
.incident-list::-webkit-scrollbar-thumb:hover {
background: #91a69d;
}
.incident-list {
min-height: 0;
}
.incident-list article {
display: flex;
gap: 13px;
padding: 18px 20px;
}
.incident-list article > div {
min-width: 0;
}
.incident-list article + article {
border-top: 1px solid #ededed;
}
.incident-list article > span {
display: grid;
flex: 0 0 auto;
width: 30px;
height: 30px;
place-items: center;
border-radius: 50%;
color: #16885b;
background: #eaf9f2;
}
.incident-list article.open > span {
color: #aa4141;
background: #fff0f0;
}
.incident-list article svg {
width: 15px;
height: 15px;
}
.incident-list strong {
font-size: 13px;
font-weight: 500;
}
.incident-list p {
margin: 4px 0 6px;
overflow-wrap: anywhere;
font-size: 12px;
line-height: 1.45;
color: var(--muted);
}
.incident-list small {
font:
400 10px/1.4 'IBM Plex Mono',
monospace;
color: #aaa;
}
.incident-list .incident-raw {
display: block;
margin: -1px 0 5px;
overflow-wrap: anywhere;
}
.settings-main { .settings-main {
width: min(760px, calc(100% - 48px)); width: min(760px, calc(100% - 48px));
margin: 0 auto; margin: 0 auto;
@@ -1532,13 +1160,6 @@ button {
.form-actions.compact-actions { .form-actions.compact-actions {
grid-column: span 2; grid-column: span 2;
} }
.sla-grid {
grid-template-columns: repeat(3, 1fr);
}
.detail-grid,
.detail-grid.lower-grid {
grid-template-columns: 1fr;
}
} }
@media (max-width: 760px) { @media (max-width: 760px) {
@@ -1566,29 +1187,6 @@ button {
.form-actions button { .form-actions button {
flex: 1; flex: 1;
} }
.detail-hero {
align-items: flex-start;
flex-direction: column;
}
.detail-actions {
flex-wrap: wrap;
}
.config-row {
flex-wrap: wrap;
}
.config-danger {
align-items: flex-start;
flex-direction: column;
}
.detail-title h1 {
font-size: 34px;
}
.sla-grid {
grid-template-columns: repeat(2, 1fr);
}
.sla-card.incident-summary {
grid-column: 1 / -1;
}
.settings-main { .settings-main {
width: min(100% - 32px, 760px); width: min(100% - 32px, 760px);
} }
@@ -1674,21 +1272,6 @@ button {
.row-action-icon { .row-action-icon {
width: 40px; width: 40px;
} }
.detail-title {
align-items: flex-start;
}
.status-orb {
margin-top: 11px;
}
.sla-grid {
grid-template-columns: 1fr;
}
.sla-card.incident-summary {
grid-column: auto;
}
.data-panel-heading {
padding: 16px;
}
.settings-heading h1 { .settings-heading h1 {
font-size: 34px; font-size: 34px;
} }
@@ -1750,17 +1333,6 @@ button {
} }
} }
.incident-detail-link {
display: inline-flex;
align-items: center;
gap: 10px;
border: 0;
padding: 0;
background: transparent;
color: inherit;
cursor: pointer;
}
@media (max-width: 640px) { @media (max-width: 640px) {
.panel-heading { .panel-heading {
grid-template-columns: 1fr; grid-template-columns: 1fr;
+879
View File
@@ -0,0 +1,879 @@
/* ==========================================================================
Monitor Detail
========================================================================== */
.detail-main {
padding-top: 34px;
}
.detail-hero {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 32px;
margin-top: 34px;
padding-bottom: 36px;
border-bottom: 1px solid #e7e7e7;
}
.detail-title {
display: flex;
align-items: center;
gap: 18px;
min-width: 0;
}
.status-orb {
flex: 0 0 auto;
width: 16px;
height: 16px;
border: 4px solid #f2d4d4;
border-radius: 50%;
background: #c74f4f;
box-shadow: 0 0 0 8px #fff;
}
.status-orb.online {
border-color: #c5f1df;
background: var(--primary-deep);
}
.status-orb.pending {
border-color: #f6e2c8;
background: #d8892f;
}
.status-orb.checking {
border-color: #eee5bd;
background: #c6aa38;
}
.detail-title h1 {
margin: 0;
overflow: hidden;
font-size: 40px;
font-weight: 500;
line-height: 1.1;
letter-spacing: -1.5px;
text-overflow: ellipsis;
white-space: nowrap;
}
.detail-title a {
display: inline-flex;
align-items: center;
gap: 6px;
max-width: min(70vw, 680px);
margin-top: 9px;
overflow: hidden;
font:
400 13px/1.4 'IBM Plex Mono',
monospace;
color: var(--muted);
text-overflow: ellipsis;
white-space: nowrap;
}
.detail-title a:hover {
color: var(--primary-deep);
}
.detail-title a svg {
flex: 0 0 auto;
width: 13px;
height: 13px;
}
.detail-actions {
display: flex;
align-items: center;
gap: 18px;
}
.muted-alert {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: var(--muted);
}
.muted-alert svg {
width: 14px;
height: 14px;
}
.sla-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 12px;
margin-top: 24px;
}
.sla-card {
min-width: 0;
padding: 20px;
border: 1px solid #e3e3e3;
border-radius: 8px;
background: #fff;
}
.sla-card p {
margin: 0 0 17px;
font-size: 12px;
color: var(--muted);
}
.sla-card strong {
display: block;
font:
500 23px/1 'IBM Plex Mono',
monospace;
letter-spacing: -1px;
}
.sla-card span {
display: block;
margin-top: 11px;
overflow: hidden;
font-size: 11px;
color: var(--faint);
text-overflow: ellipsis;
white-space: nowrap;
}
.sla-card.incident-summary {
background: #fafafa;
}
.sla-card.incident-summary.has-incident {
border-color: #e8c3c3;
background: #fff8f8;
}
.sla-card.incident-summary.has-incident strong {
color: #a83e3e;
}
.detail-grid {
display: grid;
grid-template-columns: minmax(0, 1.55fr) minmax(300px, 0.75fr);
gap: 16px;
margin-top: 16px;
}
.detail-grid.lower-grid {
align-items: stretch;
}
.lower-grid > .data-panel {
height: 100%;
}
.data-panel {
overflow: hidden;
border: 1px solid #dedede;
border-radius: 8px;
background: #fff;
}
.data-panel-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
min-height: 82px;
padding: 18px 22px;
border-bottom: 1px solid #ededed;
}
.data-panel-heading .overline {
margin-bottom: 5px;
}
.data-panel-heading h2 {
margin: 0;
font-size: 18px;
font-weight: 500;
}
.data-panel-heading > span {
font:
400 11px/1.4 'IBM Plex Mono',
monospace;
color: var(--faint);
}
.configuration-panel {
margin-top: 16px;
}
.config-list {
margin: 0;
}
.config-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: 14px 22px;
border-bottom: 1px solid #f0f0f0;
}
.config-row:last-child {
border-bottom: 0;
}
.config-row dt {
font-size: 12px;
color: var(--muted);
}
.config-row dd {
margin: 0;
font:
400 13px/1.4 'IBM Plex Mono',
monospace;
color: var(--ink);
}
.config-row .config-row-actions {
display: flex;
align-items: center;
gap: 10px;
}
.config-row-actions .row-action {
font-family: 'DM Sans', 'Helvetica Neue', sans-serif;
}
.config-danger {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 16px 22px;
border-top: 1px solid #ededed;
background: #fdfafa;
}
.config-danger p {
margin: 0;
font-size: 12px;
color: var(--muted);
}
.chart-panel,
.uptime-panel {
min-height: 330px;
}
.sparkline-wrap {
position: relative;
height: 245px;
padding: 26px 24px 24px;
background: linear-gradient(180deg, #fdfefe, #fff);
}
.chart-scale {
position: absolute;
inset: 19px 22px 20px auto;
display: flex;
flex-direction: column;
justify-content: space-between;
pointer-events: none;
font:
400 9px/1 'IBM Plex Mono',
monospace;
color: #aaa;
}
.uptime-bar {
height: 148px;
padding: 24px 22px 18px;
background: linear-gradient(180deg, #fcfefd 0%, #fff 100%);
}
.uptime-legend {
display: flex;
justify-content: space-between;
padding: 14px 22px 0;
border-top: 1px solid #f0f0f0;
font-size: 10px;
color: #999;
}
.uptime-legend span {
display: inline-flex;
align-items: center;
gap: 5px;
}
.uptime-legend i {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--primary-deep);
}
.uptime-legend i.legend-down {
margin-left: 5px;
background: var(--chart-down);
}
.uptime-legend i.legend-degraded {
margin-left: 5px;
background: var(--chart-degraded);
}
.data-table-wrap {
overflow-x: auto;
}
.recent-checks-panel {
display: flex;
min-height: 0;
flex-direction: column;
}
.recent-checks-scroll,
.incident-list {
max-height: clamp(320px, 52vh, 556px);
overflow: auto;
overscroll-behavior: contain;
scrollbar-color: #b8c7c0 #f4f6f5;
scrollbar-gutter: stable;
scrollbar-width: thin;
}
.recent-checks-scroll:focus-visible,
.incident-list:focus-visible {
outline: 2px solid rgb(36 180 126 / 0.45);
outline-offset: -2px;
}
.recent-checks-scroll::-webkit-scrollbar,
.incident-list::-webkit-scrollbar {
width: 9px;
height: 9px;
}
.recent-checks-scroll::-webkit-scrollbar-track,
.incident-list::-webkit-scrollbar-track {
background: #f4f6f5;
}
.recent-checks-scroll::-webkit-scrollbar-thumb,
.incident-list::-webkit-scrollbar-thumb {
border: 2px solid #f4f6f5;
border-radius: 999px;
background: #b8c7c0;
}
.recent-checks-scroll::-webkit-scrollbar-thumb:hover,
.incident-list::-webkit-scrollbar-thumb:hover {
background: #91a69d;
}
.incident-list {
min-height: 0;
}
.incident-list article {
display: flex;
gap: 13px;
padding: 18px 20px;
}
.incident-list article > div {
min-width: 0;
}
.incident-list article + article {
border-top: 1px solid #ededed;
}
.incident-list article > span {
display: grid;
flex: 0 0 auto;
width: 30px;
height: 30px;
place-items: center;
border-radius: 50%;
color: #16885b;
background: #eaf9f2;
}
.incident-list article.open > span {
color: #aa4141;
background: #fff0f0;
}
.incident-list article svg {
width: 15px;
height: 15px;
}
.incident-list strong {
font-size: 13px;
font-weight: 500;
}
.incident-list p {
margin: 4px 0 6px;
overflow-wrap: anywhere;
font-size: 12px;
line-height: 1.45;
color: var(--muted);
}
.incident-list small {
font:
400 10px/1.4 'IBM Plex Mono',
monospace;
color: #aaa;
}
.incident-list .incident-raw {
display: block;
margin: -1px 0 5px;
overflow-wrap: anywhere;
}
.incident-detail-link {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 0;
border: 0;
color: inherit;
background: transparent;
cursor: pointer;
}
@media (max-width: 1000px) {
.sla-grid {
grid-template-columns: repeat(3, 1fr);
}
.detail-grid,
.detail-grid.lower-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 760px) {
.detail-hero {
align-items: flex-start;
flex-direction: column;
}
.detail-actions {
flex-wrap: wrap;
}
.config-row {
flex-wrap: wrap;
}
.config-danger {
align-items: flex-start;
flex-direction: column;
}
.detail-title h1 {
font-size: 34px;
}
.sla-grid {
grid-template-columns: repeat(2, 1fr);
}
.sla-card.incident-summary {
grid-column: 1 / -1;
}
}
@media (max-width: 520px) {
.detail-title {
align-items: flex-start;
}
.status-orb {
margin-top: 11px;
}
.sla-grid {
grid-template-columns: 1fr;
}
.sla-card.incident-summary {
grid-column: auto;
}
.data-panel-heading {
padding: 16px;
}
}
/* Dark operations console. */
.dark .detail-main {
position: relative;
isolation: isolate;
}
.dark .detail-main::before {
position: absolute;
z-index: -1;
top: -110px;
left: 50%;
width: min(920px, 92vw);
height: 430px;
background:
radial-gradient(circle at 35% 20%, rgb(62 207 142 / 0.075), transparent 45%),
linear-gradient(90deg, rgb(255 255 255 / 0.018) 1px, transparent 1px), linear-gradient(rgb(255 255 255 / 0.018) 1px, transparent 1px);
background-size:
auto,
44px 44px,
44px 44px;
content: '';
mask-image: linear-gradient(to bottom, #000 0%, transparent 82%);
pointer-events: none;
transform: translateX(-50%);
}
.dark .back-link {
color: #858d9a;
transition: color 160ms ease;
}
.dark .back-link:hover {
color: #f3f4f6;
}
.dark .back-link svg {
color: #4ade80;
}
.dark .detail-hero {
border-bottom-color: rgb(255 255 255 / 0.09);
}
.dark .detail-title h1 {
color: #f8fafc;
text-shadow: 0 1px 18px rgb(0 0 0 / 0.22);
}
.dark .detail-title a {
color: #929aa7;
}
.dark .detail-title a:hover {
color: #4ade80;
}
.dark .status-orb {
border-color: rgb(248 113 113 / 0.24);
background: #f87171;
box-shadow:
0 0 0 8px #090b0d,
0 0 22px rgb(248 113 113 / 0.32);
}
.dark .status-orb.online {
border-color: rgb(62 207 142 / 0.22);
background: #3ecf8e;
box-shadow:
0 0 0 8px #090b0d,
0 0 24px rgb(62 207 142 / 0.38);
}
.dark .status-orb.pending {
border-color: rgb(245 158 11 / 0.24);
background: #f0a440;
box-shadow:
0 0 0 8px #090b0d,
0 0 22px rgb(245 158 11 / 0.28);
}
.dark .status-orb.checking {
border-color: rgb(250 204 21 / 0.22);
background: #e6c94b;
box-shadow:
0 0 0 8px #090b0d,
0 0 22px rgb(250 204 21 / 0.25);
}
.dark .muted-alert {
color: #929aa7;
}
.dark .sla-card {
position: relative;
border-color: rgb(255 255 255 / 0.085);
background: linear-gradient(145deg, #13161b 0%, #0f1115 100%);
box-shadow:
0 10px 26px rgb(0 0 0 / 0.22),
inset 0 1px rgb(255 255 255 / 0.035);
transition:
border-color 180ms ease,
transform 180ms ease,
box-shadow 180ms ease;
}
.dark .sla-card::before {
position: absolute;
top: -1px;
left: 20px;
width: 34px;
height: 1px;
background: rgb(62 207 142 / 0.65);
content: '';
}
.dark .sla-card p {
color: #929aa7;
}
.dark .sla-card strong {
color: #f4f7f6;
}
.dark .sla-card span {
color: #737c89;
}
.dark .sla-card.incident-summary {
background: linear-gradient(145deg, #15171b 0%, #101216 100%);
}
.dark .sla-card.incident-summary::before {
background: rgb(148 163 184 / 0.48);
}
.dark .sla-card.incident-summary.has-incident {
border-color: rgb(248 113 113 / 0.3);
background: linear-gradient(145deg, rgb(73 28 31 / 0.58), #151114 100%);
}
.dark .sla-card.incident-summary.has-incident::before {
background: #f87171;
}
.dark .sla-card.incident-summary.has-incident strong {
color: #fca5a5;
}
@media (hover: hover) {
.dark .sla-card:hover {
border-color: rgb(62 207 142 / 0.24);
box-shadow:
0 14px 34px rgb(0 0 0 / 0.3),
0 0 0 1px rgb(62 207 142 / 0.035),
inset 0 1px rgb(255 255 255 / 0.05);
transform: translateY(-2px);
}
}
.dark .data-panel {
border-color: rgb(255 255 255 / 0.085);
background: #101216;
box-shadow:
0 16px 38px rgb(0 0 0 / 0.27),
inset 0 1px rgb(255 255 255 / 0.03);
}
.dark .data-panel-heading {
border-bottom-color: rgb(255 255 255 / 0.075);
background: linear-gradient(180deg, rgb(255 255 255 / 0.022), transparent);
}
.dark .data-panel-heading h2 {
color: #f3f5f7;
}
.dark .data-panel-heading > span {
color: #7e8794;
}
.dark .sparkline-wrap,
.dark .uptime-bar {
background: linear-gradient(180deg, rgb(62 207 142 / 0.025), transparent 55%), #0d0f13;
}
.dark .sparkline-wrap .recharts-cartesian-grid line {
stroke: rgb(255 255 255 / 0.075);
}
.dark .chart-scale {
color: #68717e;
}
.dark .monitor-chart-tooltip {
border-color: rgb(255 255 255 / 0.12);
color: #e5e7eb;
background: rgb(19 22 27 / 0.96);
box-shadow:
0 16px 40px rgb(0 0 0 / 0.55),
inset 0 1px rgb(255 255 255 / 0.045);
}
.dark .uptime-legend {
border-top-color: rgb(255 255 255 / 0.065);
color: #747d89;
background: #0f1115;
}
.dark .recent-checks-scroll,
.dark .incident-list {
scrollbar-color: #3c4650 #0c0e11;
}
.dark .recent-checks-scroll::-webkit-scrollbar-track,
.dark .incident-list::-webkit-scrollbar-track {
background: #0c0e11;
}
.dark .recent-checks-scroll::-webkit-scrollbar-thumb,
.dark .incident-list::-webkit-scrollbar-thumb {
border-color: #0c0e11;
background: #3c4650;
}
.dark .recent-checks-scroll::-webkit-scrollbar-thumb:hover,
.dark .incident-list::-webkit-scrollbar-thumb:hover {
background: #53606b;
}
.dark .recent-checks-panel [data-slot='table-row'] {
transition: background-color 140ms ease;
}
.dark .recent-checks-panel [data-slot='table-body'] [data-slot='table-row']:hover {
background: rgb(255 255 255 / 0.022);
}
.dark .recent-checks-panel code {
color: #c7ced7;
}
.dark .incident-list article + article {
border-top-color: rgb(255 255 255 / 0.065);
}
.dark .incident-list article {
transition: background-color 140ms ease;
}
.dark .incident-list article:hover {
background: rgb(255 255 255 / 0.022);
}
.dark .incident-list article > span {
color: #4ade80;
background: rgb(62 207 142 / 0.105);
box-shadow: inset 0 0 0 1px rgb(62 207 142 / 0.12);
}
.dark .incident-list article.open > span {
color: #f87171;
background: rgb(248 113 113 / 0.1);
box-shadow: inset 0 0 0 1px rgb(248 113 113 / 0.14);
}
.dark .incident-list strong {
color: #e8ebef;
}
.dark .incident-detail-link:hover strong {
color: #4ade80;
}
.dark .incident-list p {
color: #9ca3af;
}
.dark .incident-list small {
color: #747d89;
}
.dark .config-row {
border-bottom-color: rgb(255 255 255 / 0.065);
transition: background-color 140ms ease;
}
.dark .config-row:hover {
background: rgb(255 255 255 / 0.018);
}
.dark .config-row dt {
color: #929aa7;
}
.dark .config-row dd {
color: #e5e7eb;
}
.dark .config-row-actions > span {
color: #4ade80;
}
.dark .config-danger {
border-top-color: rgb(248 113 113 / 0.14);
background: linear-gradient(90deg, rgb(127 29 29 / 0.11), transparent 52%), #111215;
}
.dark .config-danger p {
color: #929aa7;
}
.dark .detail-hero,
.dark .sla-grid,
.dark .detail-grid,
.dark .configuration-panel {
animation: monitor-detail-enter 420ms both cubic-bezier(0.22, 1, 0.36, 1);
}
.dark .sla-grid {
animation-delay: 45ms;
}
.dark .detail-grid {
animation-delay: 90ms;
}
.dark .detail-grid.lower-grid {
animation-delay: 135ms;
}
.dark .configuration-panel {
animation-delay: 180ms;
}
@keyframes monitor-detail-enter {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (max-width: 520px) {
.dark .detail-main::before {
top: -80px;
height: 330px;
background-size:
auto,
34px 34px,
34px 34px;
}
.dark .sla-card {
padding: 18px;
}
}