/* ═══════════════════════════════════════════════════════════════ KALLISCOPE — KalliLab Dashboard Theme v7 (Bugfix) Fixes: • Sektions-Akzentfarben via box-shadow statt ::before (vermeidet Konflikt mit Homepage's eigenem ::before) • Card-Tint-Opacity 8% → 14% (jetzt sichtbar) • Bookmark-Kontrast stark erhöht • Emojis aus CSS-Selektoren entfernt (Gruppen ohne Emoji) • Tab-Styling verfeinert ═══════════════════════════════════════════════════════════════ */ /* ───────────────────────────────────────────── 1. DESIGN TOKENS ───────────────────────────────────────────── */ :root { /* Signalfarben */ --sig-control: 0, 200, 255; --sig-infra: 99, 179, 237; --sig-monitor: 72, 199, 142; --sig-security: 252, 92, 101; --sig-cloud: 170, 135, 255; --sig-media: 250, 176, 5; --sig-backends: 119, 131, 143; /* Flächen */ --bg-section: rgba(10, 16, 30, 0.58); --bg-card: rgba(14, 20, 38, 0.78); --bg-card-hover: rgba(20, 28, 52, 0.90); /* Typographie */ --text-primary: #eef6ff; --text-heading: #ffffff; --text-muted: #8fa3bc; --text-dim: #5a7290; /* Formen & Übergänge */ --r-section: 22px; --r-card: 18px; --transition: all 0.22s cubic-bezier(0.4, 0, 0.2, 1); --blur-glass: blur(14px); --blur-subtle: blur(6px); } /* ───────────────────────────────────────────── 2. SCROLLBAR ───────────────────────────────────────────── */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: rgba(255,255,255,0.02); } ::-webkit-scrollbar-thumb { background: rgba(99,179,237,0.22); border-radius: 999px; } ::-webkit-scrollbar-thumb:hover { background: rgba(99,179,237,0.40); } /* ───────────────────────────────────────────── 3. BASE ───────────────────────────────────────────── */ html, body, #page_container { color: var(--text-primary) !important; background-size: cover !important; background-attachment: fixed !important; } /* ───────────────────────────────────────────── 4. TAB NAVIGATION ───────────────────────────────────────────── */ #tabs ul { width: fit-content !important; margin: 0 auto !important; display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; justify-content: center !important; gap: 4px !important; border-radius: 999px !important; padding: 5px !important; background: rgba(8, 12, 26, 0.72) !important; backdrop-filter: var(--blur-glass); -webkit-backdrop-filter: var(--blur-glass); border: 1px solid rgba(255,255,255,0.07) !important; box-shadow: 0 4px 24px rgba(0,0,0,0.45) !important; } #tabs ul li { width: auto !important; flex: 0 0 auto !important; list-style: none !important; } #tabs ul li button { border-radius: 999px !important; padding: 7px 22px !important; font-size: 0.82rem !important; font-weight: 600 !important; letter-spacing: 0.3px !important; color: rgba(255,255,255,0.38) !important; background: transparent !important; border: none !important; cursor: pointer !important; transition: var(--transition) !important; white-space: nowrap !important; } #tabs ul li button:hover { color: rgba(255,255,255,0.72) !important; background: rgba(255,255,255,0.06) !important; } #tabs ul li button[aria-selected="true"] { color: #fff !important; background: rgba(0, 200, 255, 0.15) !important; box-shadow: 0 0 0 1px rgba(0, 200, 255, 0.30), 0 0 16px rgba(0, 200, 255, 0.10) !important; font-weight: 700 !important; } @media (max-width: 768px) { #tabs ul li button { padding: 5px 13px !important; font-size: 0.76rem !important; } } /* ───────────────────────────────────────────── 5. SECTION PANELS Akzentfarbe via box-shadow (kein ::before — vermeidet Konflikte mit Homepage-Pseudo-Elementen) ───────────────────────────────────────────── */ div[data-name], section { margin-bottom: 20px !important; padding: 16px 16px 20px !important; border-radius: var(--r-section) !important; background: var(--bg-section) !important; border: 1px solid rgba(255,255,255,0.055) !important; backdrop-filter: var(--blur-glass); -webkit-backdrop-filter: var(--blur-glass); /* Akzent-Linie oben via inset box-shadow */ box-shadow: inset 0 2px 0 var(--section-line, rgba(99,179,237,0.45)), 0 8px 40px rgba(0,0,0,0.28) !important; } :is(div[data-name], section) h2, h2 { font-size: 0.72rem !important; font-weight: 800 !important; letter-spacing: 1.8px !important; text-transform: uppercase !important; color: var(--section-label, rgba(255,255,255,0.40)) !important; margin-bottom: 14px !important; } /* ───────────────────────────────────────────── 6. SEKTION-SIGNALFARBEN (ohne Emojis) ───────────────────────────────────────────── */ div[data-name="Control Center"] { --section-line: rgba(var(--sig-control), 0.55); --section-label: rgba(var(--sig-control), 0.65); background: rgba(0, 24, 42, 0.62) !important; border-color: rgba(var(--sig-control), 0.10) !important; } div[data-name="Infrastruktur"] { --section-line: rgba(var(--sig-infra), 0.50); --section-label: rgba(var(--sig-infra), 0.65); background: rgba(12, 18, 40, 0.62) !important; border-color: rgba(var(--sig-infra), 0.09) !important; } div[data-name="Monitoring"] { --section-line: rgba(var(--sig-monitor), 0.50); --section-label: rgba(var(--sig-monitor), 0.65); background: rgba(6, 24, 18, 0.62) !important; border-color: rgba(var(--sig-monitor), 0.09) !important; } div[data-name="Netzwerk und Sicherheit"] { --section-line: rgba(var(--sig-security), 0.50); --section-label: rgba(var(--sig-security), 0.65); background: rgba(28, 8, 12, 0.62) !important; border-color: rgba(var(--sig-security), 0.09) !important; } div[data-name="Cloud und Produktivitaet"] { --section-line: rgba(var(--sig-cloud), 0.50); --section-label: rgba(var(--sig-cloud), 0.65); background: rgba(20, 12, 38, 0.62) !important; border-color: rgba(var(--sig-cloud), 0.09) !important; } div[data-name="Medien"] { --section-line: rgba(var(--sig-media), 0.50); --section-label: rgba(var(--sig-media), 0.65); background: rgba(28, 18, 4, 0.62) !important; border-color: rgba(var(--sig-media), 0.09) !important; } div[data-name="Daten und Backends"] { --section-line: rgba(var(--sig-backends), 0.40); --section-label: rgba(var(--sig-backends), 0.55); background: rgba(10, 14, 22, 0.60) !important; border-color: rgba(var(--sig-backends), 0.07) !important; } /* Bookmarks erhalten neutrale Linie */ :is( div[data-name="Dokumentation"], div[data-name="KalliLab"], div[data-name="Admin & Remote"] ) { --section-line: rgba(255,255,255,0.10); background: rgba(10, 14, 24, 0.48) !important; } /* ───────────────────────────────────────────── 7. SERVICE CARDS — Basis ───────────────────────────────────────────── */ :is(.service-card, .widget-card, [class*="service_"]) { min-height: 88px !important; border-radius: var(--r-card) !important; background: var(--bg-card) !important; border: 1px solid rgba(255,255,255,0.055) !important; box-shadow: 0 4px 20px rgba(0,0,0,0.40), inset 0 1px 0 rgba(255,255,255,0.03) !important; will-change: transform; transition: var(--transition) !important; overflow: hidden !important; position: relative !important; isolation: isolate !important; } :is(.service-card, .widget-card, [class*="service_"]):hover { transform: translateY(-3px) !important; background: var(--bg-card-hover) !important; border-color: rgba(255,255,255,0.10) !important; box-shadow: 0 10px 32px rgba(0,0,0,0.55), inset 0 1px 0 rgba(255,255,255,0.04) !important; } /* ───────────────────────────────────────────── 8. CARD BRAND-TINTS opacity 14% — sichtbar aber subtil Sicherstellen dass Inhalt über dem Tint liegt ───────────────────────────────────────────── */ :is( #portainer-card, #immich-card, #paperless-ngx-card, #pi-hole-card, #code-server-card, #paperless-ai-card, #traefik-card, #gitea-card, #homepage-card, #tailscale-card, #dozzle-card, #theme-park-card, #uptime-kuma-card, #netdata-card, #glances-card, #scrutiny-card, #dashdot-card, #ntopng-card, #gotify-card, #netalertx-card, #unbound-card, #vaultwarden-card, #mail-archiver-card, #mealie-card, #scanopy-server-card, #luckybackup-card, #plex-card, #stash-card, #postgresql-17-card, #redis-card, #immich-machine-learning-card, #immich-postgres-card, #immich-redis-card, #mealie-postgres-card, #scanopy-postgres-card )::before { content: "" !important; position: absolute !important; inset: 0 !important; z-index: 0 !important; border-radius: inherit !important; opacity: 0.14 !important; pointer-events: none !important; transition: opacity 0.22s ease !important; } :is( #portainer-card, #immich-card, #paperless-ngx-card, #pi-hole-card, #code-server-card, #paperless-ai-card, #traefik-card, #gitea-card, #homepage-card, #tailscale-card, #dozzle-card, #theme-park-card, #uptime-kuma-card, #netdata-card, #glances-card, #scrutiny-card, #dashdot-card, #ntopng-card, #gotify-card, #netalertx-card, #unbound-card, #vaultwarden-card, #mail-archiver-card, #mealie-card, #scanopy-server-card, #luckybackup-card, #plex-card, #stash-card, #postgresql-17-card, #redis-card, #immich-machine-learning-card, #immich-postgres-card, #immich-redis-card, #mealie-postgres-card, #scanopy-postgres-card ):hover::before { opacity: 0.22 !important; } /* Brand Colors */ #portainer-card::before { background: #13bee7 !important; } #immich-card::before, #immich-machine-learning-card::before, #immich-postgres-card::before, #immich-redis-card::before { background: #4250af !important; } #paperless-ngx-card::before { background: #17a34a !important; } #paperless-ai-card::before { background: #10b981 !important; } #pi-hole-card::before { background: #f60d1a !important; } #code-server-card::before { background: #007acc !important; } #traefik-card::before { background: #24a1c8 !important; } #gitea-card::before { background: #609926 !important; } #homepage-card::before { background: #ff6b35 !important; } #tailscale-card::before { background: #3b82f6 !important; } #dozzle-card::before { background: #e36209 !important; } #theme-park-card::before { background: #e879a0 !important; } #uptime-kuma-card::before { background: #5cdd8b !important; } #netdata-card::before { background: #00ab44 !important; } #glances-card::before { background: #00a693 !important; } #scrutiny-card::before { background: #e11d48 !important; } #dashdot-card::before { background: #6c6cff !important; } #ntopng-card::before { background: #00aaff !important; } #gotify-card::before { background: #7b69ee !important; } #netalertx-card::before { background: #f59e0b !important; } #unbound-card::before { background: #3b82f6 !important; } #vaultwarden-card::before { background: #175ddc !important; } #mail-archiver-card::before { background: #6366f1 !important; } #mealie-card::before, #mealie-postgres-card::before { background: #e8a237 !important; } #scanopy-server-card::before, #scanopy-postgres-card::before { background: #64748b !important; } #luckybackup-card::before { background: #0891b2 !important; } #plex-card::before { background: #e5a00d !important; } #stash-card::before { background: #890fd1 !important; } #postgresql-17-card::before { background: #336791 !important; } #redis-card::before { background: #dc382d !important; } /* Alle Card-Kinder über dem Tint */ :is(.service-card, .widget-card, [class*="service_"]) > * { position: relative !important; z-index: 1 !important; } /* ───────────────────────────────────────────── 9. CARD INNER LAYOUT ───────────────────────────────────────────── */ :is(.service-card, .widget-card, [class*="service_"]) > a { display: flex !important; align-items: flex-start !important; gap: 14px !important; padding: 16px 18px !important; width: 100% !important; height: 100% !important; background: transparent !important; text-decoration: none !important; box-sizing: border-box !important; } :is(.service-card, .widget-card, [class*="service_"]) a > div { background: transparent !important; box-shadow: none !important; border: none !important; } /* ───────────────────────────────────────────── 10. CARD TYPOGRAPHY ───────────────────────────────────────────── */ :is(.service-card, .widget-card, [class*="service_"]) h3 { font-size: 0.94rem !important; font-weight: 700 !important; line-height: 1.2 !important; margin-bottom: 4px !important; color: var(--text-heading) !important; letter-spacing: 0.1px !important; } :is(.service-card, .widget-card, [class*="service_"]) p { font-size: 0.80rem !important; line-height: 1.3 !important; color: var(--text-muted) !important; margin: 0 !important; } /* ───────────────────────────────────────────── 11. ICONS ───────────────────────────────────────────── */ :is(.service-card, .widget-card, [class*="service_"]) :is(img, svg) { width: 28px !important; height: 28px !important; object-fit: contain !important; flex-shrink: 0 !important; border-radius: 8px !important; } /* ───────────────────────────────────────────── 12. WIDGET / METRICS ───────────────────────────────────────────── */ [class*="widget"] :is([class*="value"], [class*="metric"], .text-xs, .text-sm) { color: #edf8ff !important; } [class*="widget"] :is(.text-xs, .uppercase) { letter-spacing: 0.08em !important; opacity: 0.65 !important; font-size: 0.68rem !important; } [class*="widget"] :is(strong, b) { color: #fff !important; } :is(.service-card, .widget-card, [class*="service_"]) [class*="grid"] { gap: 6px !important; } :is(.service-card, .widget-card, [class*="service_"]) [class*="grid"] > div { background: rgba(255,255,255,0.04) !important; border-radius: 10px !important; padding: 6px 8px !important; } /* ───────────────────────────────────────────── 13. BACKENDS — kompakter ───────────────────────────────────────────── */ div[data-name="Daten und Backends"] :is(.service-card, [class*="service_"]) { min-height: 72px !important; border-color: rgba(255,255,255,0.04) !important; } div[data-name="Daten und Backends"] :is(.service-card, [class*="service_"]) h3 { font-size: 0.88rem !important; color: rgba(255,255,255,0.72) !important; } div[data-name="Daten und Backends"] :is(.service-card, [class*="service_"]) p { font-size: 0.76rem !important; color: var(--text-dim) !important; } div[data-name="Daten und Backends"] :is(.service-card, [class*="service_"]) :is(img, svg) { width: 22px !important; height: 22px !important; opacity: 0.78 !important; } /* ───────────────────────────────────────────── 14. BOOKMARKS — deutlich lesbarer ───────────────────────────────────────────── */ :is(.bookmark, li.bookmark, [class*="bookmark_"]) { min-height: 58px !important; border-radius: 14px !important; background: rgba(18, 24, 42, 0.72) !important; border: 1px solid rgba(255,255,255,0.08) !important; box-shadow: 0 3px 12px rgba(0,0,0,0.30) !important; will-change: transform; transition: var(--transition) !important; overflow: hidden !important; } /* Bookmark Link-Wrapper */ :is(.bookmark, li.bookmark, [class*="bookmark_"]) > a, li.bookmark a { display: flex !important; align-items: center !important; gap: 12px !important; padding: 12px 16px !important; background: transparent !important; text-decoration: none !important; width: 100% !important; height: 100% !important; box-sizing: border-box !important; border-radius: inherit !important; border: none !important; box-shadow: none !important; margin-bottom: 0 !important; } /* Icon-Bereich */ :is(.bookmark, li.bookmark) .bookmark-icon, li.bookmark .bookmark-icon { background: rgba(255,255,255,0.06) !important; border-right: 1px solid rgba(255,255,255,0.06) !important; border-radius: 0 !important; padding: 0 12px 0 0 !important; margin-right: 4px !important; } /* Bookmark-Name — jetzt hell und lesbar */ .bookmark-name, :is(.bookmark, li.bookmark) h3, [class*="bookmark_"] h3 { font-size: 0.90rem !important; font-weight: 600 !important; color: rgba(255,255,255,0.82) !important; margin-bottom: 2px !important; letter-spacing: 0.05px !important; } /* Beschreibung */ .bookmark-description, :is(.bookmark, li.bookmark) p, [class*="bookmark_"] p { font-size: 0.76rem !important; color: rgba(180,200,220,0.55) !important; margin: 0 !important; } /* Icons */ :is(.bookmark, li.bookmark, [class*="bookmark_"]) :is(img, svg) { width: 18px !important; height: 18px !important; flex-shrink: 0 !important; opacity: 0.88 !important; } :is(.bookmark, li.bookmark, [class*="bookmark_"]):hover, li.bookmark a:hover { transform: translateY(-2px) !important; background: rgba(24, 32, 56, 0.85) !important; border-color: rgba(255,255,255,0.12) !important; box-shadow: 0 6px 20px rgba(0,0,0,0.40) !important; } /* Beim Hover Name nicht verdunkeln (war ein Bug vorher) */ li.bookmark a:hover .bookmark-name { color: rgba(255,255,255,0.92) !important; } /* ───────────────────────────────────────────── 15. SEARCH BAR ───────────────────────────────────────────── */ :is(input, .search-input, input[type="text"]) { background: rgba(8, 12, 26, 0.82) !important; border: 1px solid rgba(255,255,255,0.07) !important; border-radius: 12px !important; color: var(--text-primary) !important; backdrop-filter: var(--blur-subtle); -webkit-backdrop-filter: var(--blur-subtle); transition: var(--transition) !important; } :is(input, .search-input)::placeholder { color: rgba(220,235,248,0.28) !important; } :is(input, .search-input, input[type="text"]):focus { outline: none !important; border-color: rgba(var(--sig-control), 0.32) !important; box-shadow: 0 0 0 3px rgba(var(--sig-control), 0.08) !important; } /* ───────────────────────────────────────────── 16. ERROR STATES ───────────────────────────────────────────── */ :is([class*="error"], [class*="Error"], .bg-red-500, .bg-rose-500, .bg-red-600, .bg-rose-600) { background: linear-gradient(160deg, rgba(140, 18, 52, 0.70), rgba(100, 10, 36, 0.74) ) !important; border: 1px solid rgba(252, 92, 101, 0.22) !important; border-left: 3px solid rgba(252, 92, 101, 0.52) !important; border-radius: 12px !important; color: #ffd6db !important; padding: 6px 10px !important; } :is([class*="error"], [class*="Error"]) * { color: #ffd6db !important; } /* ───────────────────────────────────────────── 17. EMPTY / NaN FALLBACK ───────────────────────────────────────────── */ [class*="value"]:empty::after, [class*="metric"]:empty::after { content: "—"; opacity: 0.32; } /* ───────────────────────────────────────────── 18. HEADER WIDGETS ───────────────────────────────────────────── */ @media (min-width: 768px) { :is(.widget-container, .information-widget-logo, [class*="information-widget-glances"]) { background: rgba(8, 12, 26, 0.68) !important; border-radius: 999px !important; border: 1px solid rgba(255,255,255,0.07) !important; height: 40px !important; display: flex !important; align-items: center !important; padding: 0 16px !important; backdrop-filter: var(--blur-subtle); -webkit-backdrop-filter: var(--blur-subtle); box-shadow: none !important; } } .information-widget-resource div[style*="width"] { background: linear-gradient(90deg, rgba(var(--sig-monitor), 1) 0%, rgba(var(--sig-control), 1) 55%, rgba(var(--sig-cloud), 1) 100% ) !important; opacity: 0.55 !important; border-radius: 10px !important; } .information-widget-resource:nth-of-type(1) svg { color: rgba(var(--sig-monitor), 1) !important; } .information-widget-resource:nth-of-type(2) svg { color: rgba(var(--sig-control), 1) !important; } .information-widget-resource:nth-of-type(3) svg { color: rgba(var(--sig-security), 1) !important; } .information-widget-resource:nth-of-type(4) svg { color: rgba(var(--sig-infra), 1) !important; } /* ───────────────────────────────────────────── 19. MISC ───────────────────────────────────────────── */ :is(div[class*="services"], div[class*="bookmarks"], div[class*="widgets"]) { gap: 12px !important; } :is([class*="status"], [class*="badge"]) { border-radius: 999px !important; } :is(details, summary) { color: rgba(255,255,255,0.80) !important; } summary { cursor: pointer !important; } :is(footer, small, .text-xs) { color: rgba(255,255,255,0.26) !important; font-size: 0.70rem !important; } /* ───────────────────────────────────────────── 20. RESPONSIVE ───────────────────────────────────────────── */ @media (max-width: 1200px) { :is(.bookmark, li.bookmark, [class*="bookmark_"]) { min-height: 54px !important; } div[data-name="Daten und Backends"] :is(.service-card, [class*="service_"]) { min-height: 66px !important; } } @media (max-width: 900px) { :is(div[data-name], section) { padding: 12px 12px 16px !important; margin-bottom: 14px !important; } :is(.service-card, .widget-card, [class*="service_"]) { min-height: 80px !important; } :is(.service-card, .widget-card, [class*="service_"]) > a { padding: 13px 14px !important; } } @media (max-width: 600px) { :is(div[data-name], section) { padding: 10px 10px 14px !important; margin-bottom: 12px !important; border-radius: 16px !important; } :is(.service-card, .widget-card, [class*="service_"]) { min-height: 70px !important; } :is(.service-card, .widget-card, [class*="service_"]) > a { padding: 10px 12px !important; gap: 10px !important; } :is(.service-card, .widget-card, [class*="service_"]) :is(img, svg) { width: 22px !important; height: 22px !important; } :is(.service-card, .widget-card, [class*="service_"]) h3 { font-size: 0.86rem !important; } :is(.service-card, .widget-card, [class*="service_"]) p { font-size: 0.74rem !important; } :is(.bookmark, li.bookmark, [class*="bookmark_"]) { min-height: 50px !important; } #tabs ul li button { padding: 5px 10px !important; font-size: 0.70rem !important; } }