Files
uptime-monitor/style.css
2025-12-06 15:13:59 +00:00

495 lines
14 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================= */
/* UPTIME MONITOR STYLE.CSS 2025 */
/* Modern Popup Kompakt & Clean */
/* Optionspage bleibt unverändert */
/* ============================================= */
/* === Farbvariablen === */
:root {
--bg-color: #f0f2f5;
--card-bg: #ffffff;
--text-color: #1c1e21;
--text-secondary: #65676b;
--border-color: #dddfe2;
--shadow-color: rgba(0, 0, 0, 0.08);
--accent-color: #1877f2;
--online-color: #31a24c;
--offline-color: #e4606d;
--unknown-color: #8e8e93;
}
@media (prefers-color-scheme: dark) {
:root {
--bg-color: #18191a;
--card-bg: #242526;
--text-color: #e4e6eb;
--text-secondary: #b0b3b8;
--border-color: #3e4042;
--shadow-color: rgba(0, 0, 0, 0.3);
--accent-color: #2d88ff;
}
}
/* === Resets === */
*, *::before, *::after { box-sizing: border-box; }
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--bg-color);
color: var(--text-color);
font-size: 15px;
line-height: 1.5;
}
/* ==================== POPUP Rahmen & Glas ==================== */
.popup-body { margin: 0; padding: 0; background: transparent; }
.popup {
width: 450px;
height: 540px; /* Feste Höhe hinzugefügt */
display: flex;
flex-direction: column; /* Layout für Header und Content-Bereich */
background: var(--bg-color);
border-radius: 20px;
overflow: hidden;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
position: relative;
outline: 2px solid rgba(255, 255, 255, 0.28);
outline-offset: -2px;
}
.popup::before {
content: '';
position: absolute;
inset: 0;
border-radius: 20px;
padding: 1px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.15) 40%, transparent);
-webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: destination-out;
mask-composite: exclude;
pointer-events: none;
z-index: 10;
}
.header {
flex-shrink: 0; /* Verhindert, dass der Header schrumpft */
padding: 20px 24px 16px;
text-align: center;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.7));
border-bottom: 1px solid var(--border-color);
z-index: 2;
position: relative;
}
@media (prefers-color-scheme: dark) {
.header { background: linear-gradient(135deg, rgba(36, 37, 38, 0.95), rgba(30, 31, 32, 0.85)); }
}
.header h1 {
margin: 0;
font-size: 19px;
font-weight: 700;
position: relative;
}
/* Header Status Dot nur im Header */
.header .status-dot {
position: absolute;
top: 50%;
right: 22px;
width: 13px;
height: 13px;
border-radius: 50%;
background: var(--unknown-color);
transform: translateY(-50%);
z-index: 4;
pointer-events: none;
box-shadow: none;
}
/* Zahnrad-Button im Header */
.icon-btn#settings-btn {
position: absolute;
left: 20px;
top: 50%;
transform: translateY(-50%);
width: 28px;
height: 28px;
padding: 0;
border: none;
background: transparent;
cursor: pointer;
color: var(--text-secondary);
display: flex;
align-items: center;
justify-content: center;
z-index: 3;
}
.icon-btn#settings-btn svg {
width: 20px;
height: 20px;
pointer-events: none;
}
.icon-btn#settings-btn:hover {
background: rgba(24, 119, 242, 0.08);
color: var(--accent-color);
border-radius: 6px;
}
/* ==================== STATUS DOTS für Server ==================== */
.status-dot.small {
width: 10px;
height: 10px;
border-radius: 50%;
display: inline-block;
margin-right: 8px;
}
.status-dot.small.online { background: var(--online-color); box-shadow: 0 0 6px rgba(49, 162, 76, 0.25); }
.status-dot.small.offline { background: var(--offline-color); box-shadow: 0 0 6px rgba(228, 96, 109, 0.25); }
.status-dot.small.unknown { background: var(--unknown-color); box-shadow: none; opacity: 0.8; }
.status-dot.green.pulse { background: #31a24c; animation: pulse-green 2s infinite; }
.status-dot.orange { background: #ff9f0a; animation: pulse-orange 2.5s infinite; }
.status-dot.red { background: #e4606d; animation: pulse-red 2s infinite; }
@keyframes pulse-green { 0% { box-shadow: 0 0 0 0 rgba(49, 162, 76, 0.7); } 70% { box-shadow: 0 0 0 12px rgba(49, 162, 76, 0); } 100% { box-shadow: 0 0 0 0 rgba(49, 162, 76, 0); } }
@keyframes pulse-orange { 0% { box-shadow: 0 0 0 0 rgba(255, 159, 10, 0.7); } 70% { box-shadow: 0 0 0 12px rgba(255, 159, 10, 0); } 100% { box-shadow: 0 0 0 0 rgba(255, 159, 10, 0); } }
@keyframes pulse-red { 0% { box-shadow: 0 0 0 0 rgba(228, 96, 109, 0.7); } 70% { box-shadow: 0 0 0 12px rgba(228, 96, 109, 0); } 100% { box-shadow: 0 0 0 0 rgba(228, 96, 109, 0); } }
/* ==================== POPUP-SERVICE-LISTE GRID ==================== */
.services {
flex-grow: 1; /* Füllt den verfügbaren Platz im Flexbox-Container */
padding: 14px 14px 18px;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
overflow: hidden; /* Kein Scrollen */
}
/* Modifikator-Klasse für 8 oder weniger Server */
.services.few-servers {
grid-template-columns: 1fr; /* Wechsel zu einer Spalte */
}
/* Kompakte kleine Kacheln */
.service-card {
display: flex;
flex-direction: column;
gap: 6px;
padding: 12px 14px;
background: var(--card-bg);
border-radius: 14px;
border: 1px solid var(--border-color);
transition: all 0.25s ease;
}
.service-card:hover {
transform: translateY(-3px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
border-color: transparent;
}
/* Titel + Untertitel */
.service-info h2 { margin: 0; font-size: 15px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.service-info p { margin: 0; font-size: 12px; opacity: 0.8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Status Badge */
.status-badge {
padding: 4px 10px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
text-align: center;
align-self: flex-start;
}
.status-badge.online { background: rgba(49, 162, 76, 0.15); color: #31a24c; }
.status-badge.offline { background: rgba(228, 96, 109, 0.15); color: #e4606d; }
.status-badge.unknown { background: rgba(142, 142, 147, 0.15); color: #8e8e93; }
/* Mini Response-Time */
.service-card .response-time { font-size: 11px; opacity: 0.65; }
/* ==================== EMPTY STATE ==================== */
.empty-state {
text-align: center;
padding: 60px 20px;
color: var(--text-secondary);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.empty-icon {
width: 80px;
height: 80px;
margin-bottom: 20px;
background: var(--border-color);
border-radius: 20px;
opacity: 0.2;
}
/* ==================== NEU: POPUP SERVER SELECTION ==================== */
.popup-server-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 10px;
margin-top: 15px;
/* ANGEPASST: Feste Höhe für eigenen Scrollbalk */
height: 300px;
overflow-y: auto;
padding-right: 5px;
}
.popup-server-item {
display: flex;
align-items: center;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 8px;
background: var(--card-bg);
transition: all 0.2s ease;
}
.popup-server-item:hover {
background: rgba(24, 119, 242, 0.05);
border-color: var(--accent-color);
}
.popup-server-item input[type="checkbox"] {
margin-right: 10px;
width: 18px;
height: 18px;
accent-color: var(--accent-color);
cursor: pointer;
}
.popup-server-item .server-info {
flex: 1;
cursor: pointer;
}
.popup-server-item .server-name {
font-weight: 600;
margin-bottom: 3px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.popup-server-item .server-address {
font-size: 12px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.selection-info {
padding: 8px 12px;
background: rgba(24, 119, 242, 0.1);
border-radius: 8px;
margin-bottom: 10px;
font-weight: 500;
color: var(--accent-color);
}
/* ==================== FOOTER ==================== */
.footer {
padding: 16px 24px 20px;
text-align: center;
background: var(--card-bg);
border-top: 1px solid var(--border-color);
}
.footer a {
color: var(--accent-color);
font-weight: 600;
font-size: 15px;
padding: 10px 20px;
border-radius: 12px;
}
.footer a:hover { background: rgba(24, 119, 242, 0.1); }
/* ==================== OPTIONS PAGE ==================== */
.options-page { background: var(--bg-color); color: var(--text-color); padding: 20px; min-height: 100vh; }
.options-grid-container { max-width: 1400px; margin: 0 auto; display: flex; flex-direction: column; gap: 20px; }
.card, .widget-card {
background: var(--card-bg);
border-radius: 12px;
padding: 24px;
box-shadow: 0 4px 12px var(--shadow-color);
border: 1px solid var(--border-color);
}
.card h1, .card h2, .widget-card h2 {
margin: 0 0 20px 0;
font-size: 20px;
font-weight: 600;
color: var(--text-color);
}
.tab-nav {
display: flex;
background: var(--card-bg);
border-radius: 12px;
padding: 4px;
margin-bottom: 20px;
border: 1px solid var(--border-color);
}
.tab-btn { flex: 1; padding: 12px 20px; background: none; color: var(--text-secondary); border: none; border-radius: 8px; cursor: pointer; }
.tab-btn.active { background: var(--accent-color); color: white; }
.tab-panel { display: none; }
.tab-panel.active { display: block; }
#manage-panel .manage-grid { display: grid; grid-template-columns: 1fr 3.5fr 1.2fr; gap: 28px; }
@media (max-width: 1100px) { #manage-panel .manage-grid { grid-template-columns: 1fr; } }
.stats-grid {
display: grid;
grid-template-columns: 1fr 800px;
gap: 28px;
}
@media (max-width: 800px) {
.stats-grid {
grid-template-columns: 1fr;
}
}
/* ANGEPASST: Feste Größe für Chart-Karte */
.stats-chart-card {
display: flex;
flex-direction: column;
padding: 16px;
border-radius: 10px;
background: var(--card-bg);
width: 800px;
height: 500px;
overflow-y: auto;
}
#uptimeChart { width: 100% !important; height: 100% !important; display: block; }
.form-section { display: flex; flex-direction: column; gap: 20px; }
.form-group { margin-bottom: 16px; }
label { display: block; margin-bottom: 6px; color: var(--text-secondary); }
input, select { width: 100%; padding: 12px 16px; border: 1px solid var(--border-color); border-radius: 8px; }
.input-group { display: flex; gap: 8px; }
#service-protocol { width: 130px; }
.btn { padding: 12px 20px; border-radius: 8px; font-size: 15px; cursor: pointer; border: none; }
.btn-primary { background: var(--accent-color); color: white; }
.btn-primary:hover { background: #166fe5; }
.btn-secondary { background: #eee; color: #333; }
.btn-secondary:hover { background: #ddd; }
.checkbox-group { display: flex; align-items: center; gap: 12px; margin: 12px 0; }
.checkbox-group input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--accent-color); }
.service-item { padding: 16px; border: 1px solid var(--border-color); border-radius: 8px; margin-bottom: 12px; }
.service-item:hover { box-shadow: 0 2px 8px var(--shadow-color); }
.response-time { font-size: 12px; opacity: 0.7; }
/* =========================== */
/* Styles für die verbesserte Serverliste (Stats-Tab) */
/* =========================== */
.services-stat-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.service-stat-item {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
padding: 12px;
border-radius: 12px;
border: 1px solid var(--border-color);
background: var(--card-bg);
transition: box-shadow .12s, transform .12s;
}
.service-stat-item:hover { transform: translateY(-2px); box-shadow: 0 6px 18px rgba(0, 0, 0, 0.06); }
.service-stat-item.selected { outline: 2px solid rgba(24, 119, 242, 0.12); box-shadow: 0 8px 22px rgba(24, 119, 242, 0.06); }
.service-left { display: flex; flex-direction: column; min-width: 0; gap: 4px; }
.service-name { font-weight: 600; font-size: 14px; color: var(--text-color); cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.service-sub { font-size: 12px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.service-right { display: flex; align-items: center; gap: 12px; }
.service-meta { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-secondary); }
/* icon buttons */
.icon-btn { display: inline-flex; align-items: center; justify-content: center; padding: 6px; border-radius: 8px; border: none; background: transparent; cursor: pointer; transition: background .12s, color .12s; color: var(--text-secondary); }
.icon-btn:hover { background: rgba(24, 119, 242, 0.06); color: var(--accent-color); }
.icon-btn.delete:hover { background: rgba(228, 96, 109, 0.06); color: var(--offline-color); }
/* edit inline */
.service-stat-item.editing { padding: 8px; }
.edit-left { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.edit-left input { padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border-color); background: var(--card-bg); }
.edit-actions { display: flex; gap: 8px; align-items: center; }
.btn-save, .btn-cancel { padding: 6px 10px; border-radius: 8px; border: none; cursor: pointer; font-weight: 600; }
.btn-save { background: var(--accent-color); color: white; }
.btn-cancel { background: #eee; color: #333; }
/* ============================================= */
/* ABSTAND FÜR WIDGETS IN DER SEITENLEISTE */
/* ============================================= */
/* Fügt einen Abstand zwischen den Widgets in der rechten Seitenleiste hinzu */
.widget-area-right .widget-card + .widget-card {
margin-top: 20px;
}
/* ============================================= */
/* GITEA REPOSITORY WIDGET LINKS */
/* ============================================= */
#gitea-repos-list a {
color: white;
}
/* ============================================= */
/* DISCORD SUPPORT WIDGET BUTTON */
/* ============================================= */
.discord-link {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
padding: 12px 16px;
margin-top: 16px;
background-color: #5865F2;
color: white;
text-decoration: none;
border-radius: 8px;
font-weight: 600;
transition: background-color 0.2s ease;
}
.discord-link:hover {
background-color: #4752C4;
}