diff --git a/style.css b/style.css index 89fdaf0..13b5886 100644 --- a/style.css +++ b/style.css @@ -1,429 +1,494 @@ -/* ============================================= */ -/* 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; - max-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.8fr 1fr; gap: 28px; } -@media (max-width: 1100px) { #manage-panel .manage-grid { grid-template-columns: 1fr; } } - -.stats-grid { display: grid; grid-template-columns: 1fr 1.9fr; gap: 28px; } -@media (max-width: 900px) { .stats-grid { grid-template-columns: 1fr; } } - -.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; } - -/* Stats-Tab: Chart größer */ -.stats-chart-card { display: flex; flex-direction: column; padding: 16px; border-radius: 12px; background: var(--card-bg); flex: 2; min-height: 500px; } -#uptimeChart { width: 100% !important; height: 100% !important; display: block; } \ No newline at end of file +/* ============================================= */ +/* 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; +}