Redesign, fixes and improvements

This commit is contained in:
Denis Romanov
2025-06-01 23:32:17 +04:00
committed by GitHub
parent 864edf0de6
commit ae807d2ae1

632
main.css
View File

@@ -1,328 +1,442 @@
/* Base theme settings */ /* Colors and settings. */
:root { :root {
/* Base theme colors */ /* Palette colors. */
--color-black: #666; --color-gray: rgb(130, 135, 140);
--color-green: #1aad3a; --color-red: rgb(200, 70, 60);
--color-blue: #087fe7; --color-orange: rgb(210, 135, 0);
--color-teal: #27918d; --color-teal: rgb(0, 130, 140);
--color-yellow: #ffaf0f; --color-blue: rgb(15, 115, 180);
--color-orange: #ff6f00; --color-green: rgb(45, 150, 90);
--color-red: #f64831;
--color-gray: #77726e;
--body-color: #212529; /* Palette RGB colors. */
--body-bg: #fff; --rgb-color-gray: 130, 135, 140;
--heading-color: #000; --rgb-color-red: 200, 70, 60;
--secondary-color: var(--color-gray); --rgb-color-orange: 210, 135, 0;
--rgb-color-yellow: 255, 175, 15;
--rgb-color-teal: 0, 130, 140;
--rgb-color-blue: 15, 115, 180;
--rgb-color-green: 45, 150, 90;
--block-bg: #f6f5f4; /* Light theme colors. */
--color-bg: rgb(255, 255, 255);
--color-text: rgb(85, 85, 85);
--color-text-title: rgb(20, 20, 20);
--color-text-secondary: rgb(140, 140, 140);
--color-btn-secondary: transparent;
--color-btn-secondary-hover: rgb(230, 230, 230);
--color-btn-secondary-active: rgb(210, 210, 210);
--color-btn-secondary-border: rgba(0, 0, 0, .16);
--color-border: rgba(0, 0, 0, .13);
--color-block: rgb(242, 242, 242);
--color-monitor: rgb(255, 255, 255);
/* Incident block colors */ /* Settings. */
--incident-color: #fff; --container-width: 864px;
--incident-info-bg: var(--color-teal); --border-radius-block: .5rem;
--incident-warning-bg: var(--color-orange); --border-radius-btn: .375rem;
--incident-danger-bg: var(--color-red); --spacing-1: .5rem;
--incident-primary-bg: var(--color-green); --spacing-2: .75rem;
--incident-light-bg: var(--color-gray); --spacing-3: 1rem;
--incident-dark-bg: var(--color-black); --spacing-4: 2rem;
--btn-padding: 6px 12px;
/* Main status block colors */ --font-size-title: 18px;
--overall-status-color: #fff; --monitor-width-min: 30ch;
--overall-status-ok-bg: var(--color-green); --monitor-width-max: 1fr;
--overall-status-warning-bg: var(--color-yellow); --logo-width: 48px;
--overall-status-danger-bg: var(--color-red); --logo-height: 48px;
--overall-status-maintenance-bg: var(--color-blue); --beat-height: 1.25rem;
--monitor-items-margin: 4px;
/* Maintenance block colors */ }
--maintenance-color: var(--color-blue); /* Dark theme colors. */
--maintenance-bg: #ebf5fe; .dark {
--color-bg: rgb(8, 8, 8);
/* Colors of timeslot in the maintenance block */ --color-text: rgb(175, 175, 175);
--timeslot-color: #2383e2; --color-text-title: rgb(240, 240, 240);
--timeslot-bg: rgba(35, 131, 226, .14); --color-text-secondary: rgb(125, 125, 125);
--timeslot-border-color: rgba(35, 131, 226, .35); --color-btn-secondary: transparent;
--color-btn-secondary-hover: rgb(41, 41, 41);
/* Uptime percentage color */ --color-btn-secondary-active: rgb(31, 31, 31);
--badge-color: #7f7f7f; --color-btn-secondary-border: rgba(255, 255, 255, .13);
--color-border: rgba(255, 255, 255, .06);
/* Colors of HP bar beat */ --color-block: rgb(21, 21, 21);
--beat-ok-bg: var(--color-green); --color-monitor: rgb(31, 31, 31);
--beat-empty-bg: var(--color-gray);
--beat-down-bg: var(--color-red);
--beat-pending-bg: var(--color-yellow);
--beat-maintenance-bg: var(--color-blue);
/* Color of time under the HP bar */
--word-color: #7f7f7f;
/* Layout settings */
--min-item-width: 32ch;
--max-item-width: 1fr;
/* Colors for dark theme */
.dark {
--body-color: #dee2e6;
--body-bg: #151515;
--heading-color: #fff;
--block-bg: #232323;
--maintenance-bg: rgba(35, 131, 226, .07);
}
} }
body { body {
background-color: var(--body-bg) !important; background-color: var(--color-bg) !important;
color: var(--color-text) !important;
}
a:not(.btn),
.dark a:not(.btn) {
color: inherit;
}
a:not(.btn):hover,
.dark a:not(.btn):hover {
color: var(--color-blue);
} }
.container { .container {
width: 97.5%; margin-top: 0 !important;
max-width: 54rem; padding-top: var(--spacing-4);
padding-right: var(--spacing-3);
padding-left: var(--spacing-3);
max-width: var(--container-width);
} }
/* Center the logo */ /* Element with logo and title. */
.title-flex {
margin-bottom: var(--spacing-4) !important;
}
/* Center the logo. */
.logo-wrapper { .logo-wrapper {
margin-right: auto; margin-right: auto;
margin-left: auto; margin-left: auto;
} }
/* Remove the title adjacent to the logo */ /* Resize the logo. */
.logo-wrapper img[data-v-b8247e57] {
width: var(--logo-width);
height: var(--logo-height);
}
/* Remove the title adjacent to the logo. */
span[data-v-7d4a7f28] { span[data-v-7d4a7f28] {
display: none; display: none;
} }
/* Fix vertical margin of admin buttons on mobile */ /* Fix vertical margin of admin buttons on mobile. */
.mb-4[data-v-b8247e57]:has(.btn-info) { .mb-4[data-v-b8247e57]:has(.btn-info) {
margin-bottom: 2.5rem !important; margin-bottom: var(--spacing-4) !important;
}
.mb-4[data-v-b8247e57]:has(.btn-info) div {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-1);
}
.mb-4[data-v-b8247e57]:has(.btn-info) div button {
margin: 0 !important;
}
div { /* Block with admin buttons. */
gap: 1rem; .mb-4[data-v-b8247e57]:has(.btn-info) {
display: flex; border-radius: var(--border-radius-block);
flex-wrap: wrap; background-color: var(--color-block);
padding: var(--spacing-3);
& button { }
margin: 0 !important;
} /* Admin button. */
} .btn-info[data-v-b8247e57] {
box-shadow: none;
border: 1px solid var(--color-btn-secondary-border);
border-radius: var(--border-radius-btn);
background-color: var(--color-btn-secondary);
padding: var(--btn-padding);
color: var(--color-text-title);
font-weight: 500;
font-size: 14px;
}
.btn-info[data-v-b8247e57]:hover {
background-color: var(--color-btn-secondary-hover);
}
.btn-info[data-v-b8247e57]:active {
box-shadow: none;
background-color: var(--color-btn-secondary-active);
}
.btn-info[data-v-b8247e57] svg {
display: none;
} }
/* Incident block */ /* Incident block */
.incident { .incident[data-v-b8247e57] {
margin-bottom: 1rem !important; margin-bottom: var(--spacing-3) !important;
border-radius: 1rem; border-radius: var(--border-radius-block);
color: var(--incident-color) !important; padding: var(--spacing-3) !important;
color: var(--color-text-title) !important;
&.bg-info { }
background-color: var(--incident-info-bg) !important; .incident[data-v-b8247e57].bg-info {
} background-color: rgba(var(--rgb-color-teal), .15) !important;
}
&.bg-warning { .incident[data-v-b8247e57].bg-warning {
background-color: var(--incident-warning-bg) !important; background-color: rgba(var(--rgb-color-orange), .15) !important;
} }
.incident[data-v-b8247e57].bg-danger {
&.bg-danger { background-color: rgba(var(--rgb-color-red), .15) !important;
background-color: var(--incident-danger-bg) !important; }
} .incident[data-v-b8247e57].bg-primary {
background-color: rgba(var(--rgb-color-green), .15) !important;
&.bg-primary { }
background-color: var(--incident-primary-bg) !important; .incident[data-v-b8247e57].bg-light {
} background-color: rgba(var(--rgb-color-gray), .3) !important;
}
&.bg-light { .incident[data-v-b8247e57].bg-dark {
background-color: var(--incident-light-bg) !important; background-color: rgba(var(--rgb-color-gray), .15) !important;
} }
.incident[data-v-b8247e57] h4 {
&.bg-dark { font-size: var(--font-size-title);
background-color: var(--incident-dark-bg) !important; }
} .incident[data-v-b8247e57] div {
color: var(--color-text);
} }
/* Main status block */ /* Main status block. */
.overall-status { .overall-status[data-v-b8247e57] {
display: block; margin-bottom: var(--spacing-3) !important;
margin-bottom: 1rem !important;
padding: 1rem 1.5rem !important;
border-radius: 1rem;
color: var(--overall-status-color);
font-weight: 600 !important;
font-size: 1.5rem !important;
box-shadow: none; box-shadow: none;
border-radius: var(--border-radius-block);
&:has(.ok) { padding: var(--spacing-3) !important;
background-color: var(--overall-status-ok-bg) !important; color: #fff;
} font-weight: 500;
font-size: var(--font-size-title);
&:has(.warning) { line-height: 1;
background-color: var(--overall-status-warning-bg) !important; }
} .overall-status[data-v-b8247e57]:has(.ok) {
background-color: var(--color-green);
&:has(.danger) { }
background-color: var(--overall-status-danger-bg) !important; .overall-status[data-v-b8247e57]:has(.warning) {
} background-color: var(--color-orange);
}
&:has(.status-maintenance) { .overall-status[data-v-b8247e57]:has(.danger) {
background-color: var(--overall-status-maintenance-bg) !important; background-color: var(--color-red);
} }
.overall-status[data-v-b8247e57]:has(.status-maintenance) {
svg { background-color: var(--color-blue);
display: none; }
} .overall-status[data-v-b8247e57] svg {
display: none;
} }
/* Maintenance block */ /* Maintenance block. */
.shadow-box.bg-maintenance { .shadow-box.bg-maintenance {
margin-top: 1rem !important; margin-top: var(--spacing-3) !important;
padding: 1.5rem !important; margin-bottom: var(--spacing-3) !important;
border-radius: 1rem; box-shadow: none;
color: var(--maintenance-color) !important; border-radius: var(--border-radius-block);
background-color: var(--maintenance-bg) !important; background-color: rgba(var(--rgb-color-blue), .15) !important;
box-shadow: none !important; padding: var(--spacing-3) !important;
color: var(--color-text-title) !important;
}
.shadow-box.bg-maintenance .alert-heading {
color: var(--color-text-title);
font-weight: 500;
font-size: var(--font-size-title);
}
.shadow-box.bg-maintenance .content {
color: var(--color-text);
}
.shadow-box.bg-maintenance div[data-v-b8247e57]:not([class]) div:not([class]) {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-1);
} }
/* Timeslot in the maintenance block */ /* Timeslot in the maintenance block. */
.timeslot { .timeslot {
border: 1px solid var(--timeslot-border-color); margin-top: 0;
margin-right: 0 !important;
border: 1px solid rgba(var(--rgb-color-blue), .25);
border-radius: 2rem; border-radius: 2rem;
color: var(--timeslot-color) !important; background-color: rgba(var(--rgb-color-blue), .15) !important;
background-color: var(--timeslot-bg) !important; color: var(--color-blue) !important;
} }
/* Description */ /* User markdown elements. */
div > .alert-heading.p-2 { .alert-heading.p-2 {
color: var(--body-color); margin-bottom: var(--spacing-4);
text-align: center; padding: 0 !important;
}
.alert-heading.p-2 p {
margin: 0;
} }
/* Monitor group title */ /* Page description. */
div > .alert-heading.p-2:has(*) {
margin-top: var(--spacing-4);
border-radius: var(--border-radius-block);
background-color: var(--color-block);
padding: var(--spacing-3) !important;
}
/* Monitor group. */
div[data-v-f71ca08e]:has(> .group-title) {
margin-bottom: var(--spacing-3) !important;
border-radius: var(--border-radius-block);
background-color: var(--color-block);
padding: var(--spacing-3);
}
/* Monitor group title. */
.group-title { .group-title {
color: var(--heading-color); margin-bottom: var(--spacing-3);
font-weight: 600 !important; color: var(--color-text-title);
font-size: 1.5rem !important; font-size: var(--font-size-title);
} }
/* Monitor group */ /* Monitor elements in the group. */
.shadow-box.monitor-list { .shadow-box.monitor-list {
margin-top: 1rem !important; margin-top: 0 !important;
padding: 0; box-shadow: none;
background-color: transparent !important; background-color: transparent !important;
box-shadow: none !important; padding: 0;
}
.shadow-box.monitor-list > .monitor-list {
display: grid;
grid-template-columns: repeat(
auto-fill,
minmax(
min(var(--monitor-width-min), 100%),
var(--monitor-width-max)
)
);
grid-gap: var(--spacing-3);
}
& > .monitor-list { /* Adjusting grid layout at certain viewport sizes. */
display: grid; /* It's not perfect, but it works. */
grid-template-columns: repeat(auto-fill, minmax(var(--min-item-width), var(--max-item-width))); @media (min-width: 540px) and (max-width: 604px) {
grid-gap: 1rem; .shadow-box.monitor-list > .monitor-list {
grid-template-columns: repeat(
auto-fill,
minmax(
min(20ch, 100%),
var(--monitor-width-max)
)
);
} }
} }
/* Monitor item */ /* Monitor item. */
.item { .monitor-list .item {
padding: 1.25rem 1.25rem 1rem !important; border: 1px solid var(--color-border);
border-radius: 1rem !important; border-radius: var(--border-radius-block);
background-color: var(--block-bg); background-color: var(--color-monitor);
padding: var(--spacing-3) !important;
& > .row { }
flex-direction: column; .monitor-list .item:hover {
background-color: var(--color-monitor) !important;
& > div { }
width: 100%; .monitor-list .item > .row {
} flex-direction: column;
} }
.monitor-list .item > .row > div {
&:hover { width: 100%;
background-color: var(--block-bg) !important;
}
} }
/* Correct behavior in a strange way */ /* Monitor name and badge container. */
@media (max-width: 768px) {
:root {
--min-item-width: 26ch;
}
}
/* Monitor name and badge container */
.info { .info {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 4px; margin-bottom: var(--spacing-1);
} }
/* Monitor name */ /* Monitor name. */
.item-name { .item-name[data-v-f71ca08e] {
padding-right: 0 !important; padding-right: 0;
padding-left: 4px !important; padding-left: var(--monitor-items-margin);
overflow: hidden; overflow: hidden;
color: var(--heading-color); color: var(--color-text-title);
font-weight: 500;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
/* Uptime percentage badge (now just text) */ /* Uptime percentage badge (now just text). */
.badge { .badge {
all: unset; all: unset;
order: 2; order: 2;
padding-right: 2px !important;
color: var(--badge-color) !important;
background-color: transparent !important; background-color: transparent !important;
padding-right: var(--monitor-items-margin);
color: var(--color-gray) !important;
}
.badge.bg-danger {
color: var(--color-red) !important;
}
.badge.bg-warning {
color: var(--color-orange) !important;
}
.badge.bg-primary {
color: var(--color-green) !important;
}
.badge.bg-maintenance {
color: var(--color-blue) !important;
} }
/* Hmm... */ /* Extra vertical indentation. */
@media (max-width: 600px) { .extra-info[data-v-f71ca08e] {
.badge {
padding-right: 4px !important;
}
}
/* Extra vertical indentation */
.extra-info {
display: none !important;
}
/* HP bar and time container */
.wrap {
padding: 4px 2px !important;
}
/* Beat of HP bar */
.beat {
height: 1.5rem !important;
background-color: var(--beat-ok-bg) !important;
&.empty {
background-color: var(--beat-empty-bg) !important;
}
&.down {
background-color: var(--beat-down-bg) !important;
}
&.pending {
background-color: var(--beat-pending-bg) !important;
}
&.maintenance {
background-color: var(--beat-maintenance-bg) !important;
}
}
/* Time under the HP bar */
.word {
padding-right: 2px !important;
padding-left: 2px !important;
color: var(--word-color) !important;
}
/* Custom footer and Uptime Kuma branding */
footer p,
footer p a {
color: var(--secondary-color) !important;
}
/* Remove a refresh timer.
Comment "display: none" to return */
.refresh-info {
display: none; display: none;
opacity: 1 !important; }
color: var(--secondary-color);
/* Wrapper for the uptime history timeline and daily uptime text. */
.wrap {
padding: 0 !important;
}
.mobile .wrap {
padding-bottom: 6px !important;
}
/* Uptime history timeline. */
.hp-bar-big {
display: flex;
justify-content: center;
padding-bottom: var(--spacing-1);
}
.mobile .hp-bar-big {
padding-bottom: 0;
}
/* Daily bar in the uptime history timeline. */
.hp-bar-big .beat[data-v-636dc6a9] {
margin: 0 2px !important;
background-color: var(--color-green);
height: var(--beat-height) !important;
}
.hp-bar-big .beat[data-v-636dc6a9]:not(.empty):hover {
transform: none;
opacity: .75;
transition: all ease-in-out .15s;
}
.hp-bar-big .beat[data-v-636dc6a9]:first-of-type {
margin-left: 0 !important;
}
.hp-bar-big .beat[data-v-636dc6a9]:last-of-type {
margin-right: 0 !important;
}
.hp-bar-big .beat[data-v-636dc6a9].empty {
background-color: var(--color-gray);
}
.hp-bar-big .beat[data-v-636dc6a9].down {
background-color: var(--color-red);
}
.hp-bar-big .beat[data-v-636dc6a9].pending {
background-color: var(--color-orange);
}
.hp-bar-big .beat[data-v-636dc6a9].maintenance {
background-color: var(--color-blue);
}
/* Daily uptime text (below day bars). */
.word[data-v-636dc6a9] {
margin-right: var(--monitor-items-margin);
margin-left: var(--monitor-items-margin) !important;
color: var(--color-text);
}
/* Footer with user markdown, Uptime Kuma branding, and refresh timer. */
footer[data-v-b8247e57] {
margin-top: var(--spacing-4) !important;
margin-bottom: var(--spacing-4) !important;
color: var(--color-text-secondary);
}
/* Extra spacing if the user footer has anything. */
footer .alert-heading.p-2:has(*) {
margin-bottom: var(--spacing-3) !important;
}
/* Hide refresh timer in footer. */
/* Remove/comment "display: none" to restore visibility. */
.refresh-info[data-v-b8247e57] {
display: none;
opacity: 1;
margin-bottom: 0 !important;
} }