mirror of
https://github.com/dermv/cute-kuma.git
synced 2025-12-29 16:14:45 +00:00
Initial commit
This commit is contained in:
BIN
.github/assets/dark.png
vendored
Normal file
BIN
.github/assets/dark.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 115 KiB |
BIN
.github/assets/light.png
vendored
Normal file
BIN
.github/assets/light.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
50
README.md
Normal file
50
README.md
Normal file
@@ -0,0 +1,50 @@
|
||||
<h3 align="center">Cute Kuma</h3>
|
||||
|
||||
<p align="center">
|
||||
Cute CSS for <a href="https://github.com/louislam/uptime-kuma">Uptime Kuma</a> status page with a simple and modern look
|
||||
<br>
|
||||
<a href="https://status.denisromanov.ru"><strong>Live demo »</strong></a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://github.com/dermv/cute-kuma/tree/main#features">Features</a>
|
||||
·
|
||||
<a href="https://github.com/dermv/cute-kuma/tree/main#installation">Installation</a>
|
||||
·
|
||||
<a href="https://github.com/dermv/cute-kuma/tree/main#personalization">Personalization</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./.github/assets/dark.png">
|
||||
<source media="(prefers-color-scheme: light)" srcset="./.github/assets/light.png">
|
||||
<img alt="Marzbanify Template" src="./.github/assets/dark.png">
|
||||
</picture>
|
||||
</p>
|
||||
|
||||
# Features
|
||||
|
||||
- Simple and modern design, inspired by the pages of major monitoring services.
|
||||
- Light and dark themes support.
|
||||
- Removed the refresh timer (easily restored if needed).
|
||||
- Clean and understandable code, easily customizable to fit your needs.
|
||||
|
||||
# Installation
|
||||
|
||||
1. In your Uptime Kuma dashboard, navigate to status page.
|
||||
2. Click `Edit Status Page`.
|
||||
3. Scroll down to `Custom CSS`.
|
||||
4. Copy the contents of `main.css` and paste it into the Custom CSS field.
|
||||
5. Click `Save` at the bottom.
|
||||
|
||||
# Personalization
|
||||
|
||||
You can modify the values inside `:root {}` to fit your needs.
|
||||
|
||||
By default, the refresh timer is removed. To restore it, simply comment `display: none;` in `.refresh-info` as shown here:
|
||||
```
|
||||
.refresh-info {
|
||||
/* display: none; */
|
||||
opacity: 1 !important;
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
```
|
||||
328
main.css
Normal file
328
main.css
Normal file
@@ -0,0 +1,328 @@
|
||||
/* Base theme settings */
|
||||
:root {
|
||||
/* Base theme colors */
|
||||
--color-black: #666;
|
||||
--color-green: #1aad3a;
|
||||
--color-blue: #087fe7;
|
||||
--color-teal: #27918d;
|
||||
--color-yellow: #ffaf0f;
|
||||
--color-orange: #ff6f00;
|
||||
--color-red: #f64831;
|
||||
--color-gray: #77726e;
|
||||
|
||||
--body-color: #212529;
|
||||
--body-bg: #fff;
|
||||
--heading-color: #000;
|
||||
--secondary-color: var(--color-gray);
|
||||
|
||||
--block-bg: #f6f5f4;
|
||||
|
||||
/* Incident block colors */
|
||||
--incident-color: #fff;
|
||||
--incident-info-bg: var(--color-teal);
|
||||
--incident-warning-bg: var(--color-orange);
|
||||
--incident-danger-bg: var(--color-red);
|
||||
--incident-primary-bg: var(--color-green);
|
||||
--incident-light-bg: var(--color-gray);
|
||||
--incident-dark-bg: var(--color-black);
|
||||
|
||||
/* Main status block colors */
|
||||
--overall-status-color: #fff;
|
||||
--overall-status-ok-bg: var(--color-green);
|
||||
--overall-status-warning-bg: var(--color-yellow);
|
||||
--overall-status-danger-bg: var(--color-red);
|
||||
--overall-status-maintenance-bg: var(--color-blue);
|
||||
|
||||
/* Maintenance block colors */
|
||||
--maintenance-color: var(--color-blue);
|
||||
--maintenance-bg: #ebf5fe;
|
||||
|
||||
/* Colors of timeslot in the maintenance block */
|
||||
--timeslot-color: #2383e2;
|
||||
--timeslot-bg: rgba(35, 131, 226, .14);
|
||||
--timeslot-border-color: rgba(35, 131, 226, .35);
|
||||
|
||||
/* Uptime percentage color */
|
||||
--badge-color: #7f7f7f;
|
||||
|
||||
/* Colors of HP bar beat */
|
||||
--beat-ok-bg: var(--color-green);
|
||||
--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 {
|
||||
background-color: var(--body-bg) !important;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 97.5%;
|
||||
max-width: 54rem;
|
||||
}
|
||||
|
||||
/* Center the logo */
|
||||
.logo-wrapper {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
/* Remove the title adjacent to the logo */
|
||||
span[data-v-7d4a7f28] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Fix vertical margin of admin buttons on mobile */
|
||||
.mb-4[data-v-b8247e57]:has(.btn-info) {
|
||||
margin-bottom: 2.5rem !important;
|
||||
|
||||
div {
|
||||
gap: 1rem;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
& button {
|
||||
margin: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Incident block */
|
||||
.incident {
|
||||
margin-bottom: 1rem !important;
|
||||
border-radius: 1rem;
|
||||
color: var(--incident-color) !important;
|
||||
|
||||
&.bg-info {
|
||||
background-color: var(--incident-info-bg) !important;
|
||||
}
|
||||
|
||||
&.bg-warning {
|
||||
background-color: var(--incident-warning-bg) !important;
|
||||
}
|
||||
|
||||
&.bg-danger {
|
||||
background-color: var(--incident-danger-bg) !important;
|
||||
}
|
||||
|
||||
&.bg-primary {
|
||||
background-color: var(--incident-primary-bg) !important;
|
||||
}
|
||||
|
||||
&.bg-light {
|
||||
background-color: var(--incident-light-bg) !important;
|
||||
}
|
||||
|
||||
&.bg-dark {
|
||||
background-color: var(--incident-dark-bg) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main status block */
|
||||
.overall-status {
|
||||
display: block;
|
||||
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;
|
||||
|
||||
&:has(.ok) {
|
||||
background-color: var(--overall-status-ok-bg) !important;
|
||||
}
|
||||
|
||||
&:has(.warning) {
|
||||
background-color: var(--overall-status-warning-bg) !important;
|
||||
}
|
||||
|
||||
&:has(.danger) {
|
||||
background-color: var(--overall-status-danger-bg) !important;
|
||||
}
|
||||
|
||||
&:has(.status-maintenance) {
|
||||
background-color: var(--overall-status-maintenance-bg) !important;
|
||||
}
|
||||
|
||||
svg {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Maintenance block */
|
||||
.shadow-box.bg-maintenance {
|
||||
margin-top: 1rem !important;
|
||||
padding: 1.5rem !important;
|
||||
border-radius: 1rem;
|
||||
color: var(--maintenance-color) !important;
|
||||
background-color: var(--maintenance-bg) !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* Timeslot in the maintenance block */
|
||||
.timeslot {
|
||||
border: 1px solid var(--timeslot-border-color);
|
||||
border-radius: 2rem;
|
||||
color: var(--timeslot-color) !important;
|
||||
background-color: var(--timeslot-bg) !important;
|
||||
}
|
||||
|
||||
/* Description */
|
||||
div > .alert-heading.p-2 {
|
||||
color: var(--body-color);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Monitor group title */
|
||||
.group-title {
|
||||
color: var(--heading-color);
|
||||
font-weight: 600 !important;
|
||||
font-size: 1.5rem !important;
|
||||
}
|
||||
|
||||
/* Monitor group */
|
||||
.shadow-box.monitor-list {
|
||||
margin-top: 1rem !important;
|
||||
padding: 0;
|
||||
background-color: transparent !important;
|
||||
box-shadow: none !important;
|
||||
|
||||
& > .monitor-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(var(--min-item-width), var(--max-item-width)));
|
||||
grid-gap: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Monitor item */
|
||||
.item {
|
||||
padding: 1.25rem 1.25rem 1rem !important;
|
||||
border-radius: 1rem !important;
|
||||
background-color: var(--block-bg);
|
||||
|
||||
& > .row {
|
||||
flex-direction: column;
|
||||
|
||||
& > div {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: var(--block-bg) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Correct behavior in a strange way */
|
||||
@media (max-width: 768px) {
|
||||
:root {
|
||||
--min-item-width: 26ch;
|
||||
}
|
||||
}
|
||||
|
||||
/* Monitor name and badge container */
|
||||
.info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
/* Monitor name */
|
||||
.item-name {
|
||||
padding-right: 0 !important;
|
||||
padding-left: 4px !important;
|
||||
overflow: hidden;
|
||||
color: var(--heading-color);
|
||||
font-weight: 500;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Uptime percentage badge (now just text) */
|
||||
.badge {
|
||||
all: unset;
|
||||
order: 2;
|
||||
padding-right: 2px !important;
|
||||
color: var(--badge-color) !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
/* Hmm... */
|
||||
@media (max-width: 600px) {
|
||||
.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;
|
||||
opacity: 1 !important;
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
Reference in New Issue
Block a user