/** * Unified Dark/Light Mode System für MYP Platform * =============================================== * * Konsolidiert alle Theme-Inkonsistenzen in einer einheitlichen Implementierung * Ersetzt: input.css, components.css, professional-theme.css Dark Mode-Teile * * Author: Till Tomczak - MYP Team * Zweck: Behebung aller UI Dark/Light Mode Inkonsistenzen * Version: 2.0 - Enhanced for Perfect Light/Dark Balance */ /* ===== UNIFIED CSS VARIABLES SYSTEM ===== */ :root { /* === MERCEDES-BENZ BRAND COLORS === */ --mb-primary: #0073ce; --mb-primary-dark: #005a9f; --mb-primary-light: #1e88e5; --mb-secondary: #00adef; --mb-black: #000000; --mb-white: #ffffff; --mb-silver: #c4c4c4; --mb-gray: #666666; /* === LIGHT MODE FOUNDATION (Optimiert für maximale Klarheit) === */ --bg-primary: #ffffff; --bg-secondary: #f8fafc; --bg-tertiary: #f1f5f9; --bg-card: #ffffff; --bg-surface: #fefefe; --bg-overlay: rgba(255, 255, 255, 0.95); --bg-modal: rgba(255, 255, 255, 0.98); --bg-input: #ffffff; --bg-input-focus: #ffffff; --bg-sidebar: #f9fafb; --bg-navbar: rgba(255, 255, 255, 0.95); --bg-dropdown: #ffffff; /* === TEXT COLORS LIGHT (Optimiert für perfekte Lesbarkeit) === */ --text-primary: #111827; --text-secondary: #374151; --text-tertiary: #6b7280; --text-muted: #9ca3af; --text-accent: var(--mb-primary); --text-on-primary: var(--mb-white); --text-success: #059669; --text-warning: #d97706; --text-error: #dc2626; --text-link: var(--mb-primary); --text-link-hover: var(--mb-primary-dark); /* === BORDER COLORS LIGHT (Subtile aber sichtbare Grenzen) === */ --border-primary: #e5e7eb; --border-secondary: #d1d5db; --border-focus: var(--mb-primary); --border-error: #f87171; --border-success: #34d399; --border-warning: #fbbf24; --border-hover: #c2c7d0; /* === SHADOWS LIGHT (Sanfte, professionelle Schatten) === */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); --shadow-modal: 0 25px 50px -12px rgba(0, 0, 0, 0.25); --shadow-card: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow-card-hover: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* === GLASSMORPHISM LIGHT (Subtil und elegant) === */ --glass-bg: rgba(255, 255, 255, 0.8); --glass-border: rgba(255, 255, 255, 0.2); --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.08); --glass-blur: blur(16px); /* === INTERACTIVE STATES LIGHT (Klare Rückmeldung) === */ --hover-bg: rgba(0, 115, 206, 0.04); --active-bg: rgba(0, 115, 206, 0.08); --focus-ring: 0 0 0 3px rgba(0, 115, 206, 0.1); --hover-card: rgba(0, 0, 0, 0.02); --active-card: rgba(0, 0, 0, 0.04); /* === GRADIENTS LIGHT (Dezente Verläufe) === */ --gradient-primary: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%); --gradient-card: linear-gradient(135deg, #ffffff 0%, #fcfcfd 100%); --gradient-modal: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); --gradient-button: linear-gradient(135deg, var(--mb-primary) 0%, var(--mb-primary-dark) 100%); --gradient-navbar: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.95) 100%); } /* ===== DARK MODE OVERRIDES (Optimiert für Augenkomfort und Kontrast) ===== */ .dark { /* === DARK MODE FOUNDATION (Mercedes-Schwarz mit warmen Akzenten) === */ --bg-primary: #000000; --bg-secondary: #0a0a0a; --bg-tertiary: #121212; --bg-card: #0f0f0f; --bg-surface: #080808; --bg-overlay: rgba(0, 0, 0, 0.95); --bg-modal: rgba(15, 15, 15, 0.98); --bg-input: #121212; --bg-input-focus: #1a1a1a; --bg-sidebar: #050505; --bg-navbar: rgba(0, 0, 0, 0.95); --bg-dropdown: #0f0f0f; /* === TEXT COLORS DARK (Hoher Kontrast für Lesbarkeit) === */ --text-primary: #ffffff; --text-secondary: #f8fafc; --text-tertiary: #e2e8f0; --text-muted: #94a3b8; --text-accent: #ffffff; --text-on-primary: #000000; --text-success: #10b981; --text-warning: #f59e0b; --text-error: #ef4444; --text-link: #ffffff; --text-link-hover: #f3f4f6; /* === BORDER COLORS DARK (Subtile aber sichtbare Abgrenzungen) === */ --border-primary: #1f1f1f; --border-secondary: #2a2a2a; --border-focus: #ffffff; --border-error: #ef4444; --border-success: #10b981; --border-warning: #f59e0b; --border-hover: #333333; /* === SHADOWS DARK (Tiefere Schatten für Depth) === */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.4); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.5); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.6); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.7); --shadow-modal: 0 25px 50px -12px rgba(0, 0, 0, 0.8); --shadow-card: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.1); --shadow-card-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2); /* === GLASSMORPHISM DARK (Elegante Transparenz) === */ --glass-bg: rgba(15, 15, 15, 0.9); --glass-border: rgba(255, 255, 255, 0.1); --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); --glass-blur: blur(16px); /* === INTERACTIVE STATES DARK (Klare visuelle Rückmeldung) === */ --hover-bg: rgba(255, 255, 255, 0.05); --active-bg: rgba(255, 255, 255, 0.1); --focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.2); --hover-card: rgba(255, 255, 255, 0.03); --active-card: rgba(255, 255, 255, 0.06); /* === GRADIENTS DARK (Subtile Verläufe in Schwarz) === */ --gradient-primary: linear-gradient(135deg, #000000 0%, #0a0a0a 100%); --gradient-card: linear-gradient(135deg, #0f0f0f 0%, #0a0a0a 100%); --gradient-modal: linear-gradient(135deg, #121212 0%, #0f0f0f 100%); --gradient-button: linear-gradient(135deg, #ffffff 0%, #f5f5f5 100%); --gradient-navbar: linear-gradient(135deg, rgba(0, 0, 0, 0.95) 0%, rgba(10, 10, 10, 0.95) 100%); } /* ===== UNIFIED COMPONENT STYLES ===== */ /* === OPTIMIZED ROUNDED BORDERS (Performance-optimiert) === */ .btn, .form-input, input, textarea, select, button { border-radius: 12px; } .card, .modal, .glass-card, .mercedes-modal { border-radius: 20px; } .badge, .btn-sm { border-radius: 16px; } .avatar, .profile-image { border-radius: 50%; } /* === OPTIMIZED SPACING (Nur bei Bedarf verwenden) === */ .spacing-xs { margin: 0.25rem; padding: 0.25rem; } .spacing-sm { margin: 0.5rem; padding: 0.5rem; } .spacing-md { margin: 1rem; padding: 1rem; } /* === BUTTONS (Optimiert für beide Modi) === */ .btn, button { display: inline-flex; align-items: center; justify-content: center; font-size: 0.875rem; font-weight: 500; background: var(--bg-card); color: var(--text-primary); border: 1px solid var(--border-primary); box-shadow: var(--shadow-card); transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); padding: 0.75rem 1.5rem; border-radius: 12px; margin: 0.25rem; cursor: pointer; font-weight: 500; position: relative; overflow: hidden; } .btn:hover, button:hover { background: var(--hover-card); box-shadow: var(--shadow-card-hover); transform: translateY(-1px); border-color: var(--border-hover); } .btn:focus { outline: none; box-shadow: var(--focus-ring); } .btn:active { transform: translateY(0); background: var(--active-card); } /* Primary Button - Mercedes Brand */ .btn-primary { background: var(--gradient-button); color: var(--text-on-primary); border: 1px solid transparent; box-shadow: 0 4px 12px rgba(0, 115, 206, 0.25); font-weight: 600; } .btn-primary:hover { background: var(--mb-primary-dark); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 115, 206, 0.35); } .btn-primary:focus { box-shadow: var(--focus-ring), 0 4px 12px rgba(0, 115, 206, 0.25); } /* Dark Mode Button Adaptations */ .dark .btn { border-color: var(--border-primary); box-shadow: var(--shadow-card); } .dark .btn:hover { box-shadow: var(--shadow-card-hover); border-color: var(--border-hover); } .dark .btn-primary { background: var(--gradient-button); color: var(--text-on-primary); box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1); } .dark .btn-primary:hover { background: #f3f4f6; box-shadow: 0 6px 20px rgba(255, 255, 255, 0.15); } /* Secondary Button */ .btn-secondary { background: transparent; color: var(--text-secondary); border: 1px solid var(--border-secondary); } .btn-secondary:hover { background: var(--hover-bg); color: var(--text-primary); border-color: var(--border-primary); } /* Danger Button */ .btn-danger { background: var(--text-error); color: white; border: 1px solid var(--border-error); } .btn-danger:hover { background: #dc2626; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3); } /* Success Button */ .btn-success { background: var(--text-success); color: white; border: 1px solid var(--border-success); } .btn-success:hover { background: #047857; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(5, 150, 105, 0.3); } /* === CARDS (Perfekte Darstellung in beiden Modi) === */ .card, .dashboard-card { background: var(--gradient-card); border: 1px solid var(--border-primary); box-shadow: var(--shadow-card); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); padding: 1.5rem; margin: 0.75rem; border-radius: 16px; position: relative; overflow: hidden; } .card:hover, .dashboard-card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); border-color: var(--border-hover); } .card:focus-within { border-color: var(--border-focus); box-shadow: var(--focus-ring); } /* Glass Cards für spezielle Anwendungen */ .glass-card { background: var(--glass-bg); border: 1px solid var(--glass-border); box-shadow: var(--glass-shadow); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur); padding: 1.5rem; margin: 0.75rem; border-radius: 20px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-xl); border-color: var(--glass-border); } /* Dark Mode Spezifische Card-Styles */ .dark .card, .dark .dashboard-card { background: var(--gradient-card); border-color: var(--border-primary); box-shadow: var(--shadow-card); } .dark .card:hover, .dark .dashboard-card:hover { box-shadow: var(--shadow-card-hover); border-color: var(--border-hover); } .dark .glass-card { background: var(--glass-bg); border-color: var(--glass-border); box-shadow: var(--glass-shadow); } /* Spezielle Card-Varianten */ .card-compact { padding: 1rem; border-radius: 12px; } .card-large { padding: 2.5rem; border-radius: 20px; } .card-bordered { border-width: 2px; } .card-elevated { box-shadow: var(--shadow-xl); } .card-flat { box-shadow: none; border: 1px solid var(--border-secondary); } /* Card Headers und Content */ .card-header { border-bottom: 1px solid var(--border-primary); padding-bottom: 1rem; margin-bottom: 1rem; } .card-title { color: var(--text-primary); font-size: 1.25rem; font-weight: 600; margin: 0; } .card-subtitle { color: var(--text-secondary); font-size: 0.875rem; margin: 0.25rem 0 0 0; } .card-content { color: var(--text-secondary); line-height: 1.6; } .card-footer { border-top: 1px solid var(--border-primary); padding-top: 1rem; margin-top: 1rem; display: flex; justify-content: flex-end; gap: 0.5rem; } /* === MODALS === */ .modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(8px); z-index: 50; display: flex; align-items: center; justify-content: center; padding: 1rem; cursor: pointer; } .modal-overlay.hidden { display: none !important; } .dark .modal-overlay { background: rgba(0, 0, 0, 0.7); } .modal { background: var(--gradient-modal); border: 1px solid var(--border-primary); border-radius: 20px; box-shadow: var(--shadow-modal); backdrop-filter: var(--glass-blur); max-width: 90vw; max-height: 90vh; overflow-y: auto; transform: scale(0.95); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); cursor: default; } .modal.show { transform: scale(1); opacity: 1; } .modal-header { border-bottom: 1px solid var(--border-primary); color: var(--text-primary); } .modal-body { color: var(--text-secondary); } /* Mercedes Modal Specific Styling */ .mercedes-modal { background: var(--gradient-modal); border: 1px solid var(--border-primary); border-radius: 20px; box-shadow: var(--shadow-modal); backdrop-filter: var(--glass-blur); max-width: 90vw; max-height: 90vh; overflow-y: auto; transform: scale(0.95); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); scrollbar-width: thin; scrollbar-color: rgba(0, 115, 206, 0.2) transparent; cursor: default; } .mercedes-modal.show { transform: scale(1); opacity: 1; } .mercedes-modal::-webkit-scrollbar { width: 8px; } .mercedes-modal::-webkit-scrollbar-track { background: transparent; border-radius: 4px; } .mercedes-modal::-webkit-scrollbar-thumb { background: rgba(0, 115, 206, 0.2); border-radius: 4px; transition: all 0.3s ease; } .mercedes-modal::-webkit-scrollbar-thumb:hover { background: rgba(0, 115, 206, 0.4); } .dark .mercedes-modal::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); } .dark .mercedes-modal::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); } /* Modal Animation Classes */ .modal-enter { opacity: 0; transform: scale(0.9) translateY(-20px); } .modal-enter-active { opacity: 1; transform: scale(1) translateY(0); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .modal-exit { opacity: 1; transform: scale(1) translateY(0); } .modal-exit-active { opacity: 0; transform: scale(0.9) translateY(-20px); transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); } /* Modal Overlay Click-to-Close Functionality */ .modal-overlay[data-closable="true"] { cursor: pointer; } .modal-overlay[data-closable="true"] .mercedes-modal { cursor: default; } /* === FORM ELEMENTS (Optimiert für beide Modi) === */ .form-input, input:not([type="checkbox"]):not([type="radio"]), textarea, select { width: 100%; background: var(--bg-input); border: 1px solid var(--border-primary); color: var(--text-primary); padding: 0.875rem 1rem; border-radius: 12px; margin: 0.375rem 0; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); font-size: 0.9rem; box-shadow: var(--shadow-sm); font-family: inherit; } .form-input:hover, input:not([type="checkbox"]):not([type="radio"]):hover, textarea:hover, select:hover { border-color: var(--border-hover); box-shadow: var(--shadow-md); } .form-input:focus, input:not([type="checkbox"]):not([type="radio"]):focus, textarea:focus, select:focus { outline: none; border-color: var(--border-focus); background: var(--bg-input-focus); box-shadow: var(--focus-ring); transform: translateY(-1px); } .form-input::placeholder, input::placeholder, textarea::placeholder { color: var(--text-muted); opacity: 0.7; } /* Dark Mode Input Optimierungen */ .dark .form-input, .dark input:not([type="checkbox"]):not([type="radio"]), .dark textarea, .dark select { background: var(--bg-input); border-color: var(--border-primary); color: var(--text-primary); box-shadow: var(--shadow-sm); } .dark .form-input:hover, .dark input:not([type="checkbox"]):not([type="radio"]):hover, .dark textarea:hover, .dark select:hover { border-color: var(--border-hover); box-shadow: var(--shadow-md); } .dark .form-input:focus, .dark input:not([type="checkbox"]):not([type="radio"]):focus, .dark textarea:focus, .dark select:focus { border-color: var(--border-focus); background: var(--bg-input-focus); box-shadow: var(--focus-ring); } .dark .form-input::placeholder, .dark input::placeholder, .dark textarea::placeholder { color: var(--text-muted); opacity: 0.8; } /* Form Labels */ .form-label, label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--text-secondary); margin-bottom: 0.5rem; margin-top: 1rem; line-height: 1.4; } .form-label.required::after, label.required::after { content: "*"; color: var(--text-error); margin-left: 0.25rem; } /* Form Groups */ .form-group { margin-bottom: 1.5rem; } .form-group:last-child { margin-bottom: 0; } /* Form Errors */ .form-error { color: var(--text-error); font-size: 0.875rem; margin-top: 0.25rem; display: block; } .form-input.error, input.error, textarea.error, select.error { border-color: var(--border-error); background: rgba(239, 68, 68, 0.05); } .dark .form-input.error, .dark input.error, .dark textarea.error, .dark select.error { border-color: var(--border-error); background: rgba(239, 68, 68, 0.1); } /* Form Success */ .form-input.success, input.success, textarea.success, select.success { border-color: var(--border-success); background: rgba(16, 185, 129, 0.05); } .dark .form-input.success, .dark input.success, .dark textarea.success, .dark select.success { border-color: var(--border-success); background: rgba(16, 185, 129, 0.1); } /* Checkbox und Radio Buttons */ input[type="checkbox"], input[type="radio"] { width: 1.125rem; height: 1.125rem; margin: 0 0.5rem 0 0; accent-color: var(--mb-primary); cursor: pointer; } .dark input[type="checkbox"], .dark input[type="radio"] { accent-color: var(--text-accent); } /* File Inputs */ input[type="file"] { padding: 0.5rem; border: 2px dashed var(--border-secondary); background: var(--bg-tertiary); cursor: pointer; } input[type="file"]:hover { border-color: var(--border-primary); background: var(--bg-secondary); } .dark input[type="file"] { background: var(--bg-tertiary); border-color: var(--border-secondary); } .dark input[type="file"]:hover { border-color: var(--border-primary); background: var(--bg-secondary); } /* Textareas */ textarea { min-height: 120px; resize: vertical; line-height: 1.5; } /* Select Dropdowns */ select { cursor: pointer; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e"); background-position: right 0.5rem center; background-repeat: no-repeat; background-size: 1.5em 1.5em; padding-right: 2.5rem; } .dark select { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%94a3b8' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e"); } /* === NAVIGATION (Optimiert für beide Modi) === */ .navbar-sticky { background: var(--gradient-navbar); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--border-primary); box-shadow: var(--shadow-sm); } .dark .navbar-sticky { background: var(--gradient-navbar); border-bottom: 1px solid var(--border-primary); box-shadow: var(--shadow-md); } .nav-item { padding: 0.5rem 0.75rem; color: var(--text-secondary); transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); border-radius: 8px; font-weight: 500; text-decoration: none; display: flex; align-items: center; gap: 0.5rem; } .nav-item:hover { background: var(--hover-bg); color: var(--text-primary); transform: translateY(-1px); } .nav-item.active, .nav-active { background: var(--active-bg); color: var(--text-accent); font-weight: 600; box-shadow: var(--shadow-sm); } .dark .nav-item { color: var(--text-secondary); } .dark .nav-item:hover { background: var(--hover-bg); color: var(--text-primary); } .dark .nav-item.active, .dark .nav-active { background: var(--active-bg); color: var(--text-accent); } /* Mobile Navigation */ .mobile-menu { background: var(--bg-modal); border-right: 1px solid var(--border-primary); box-shadow: var(--shadow-xl); } .dark .mobile-menu { background: var(--bg-modal); border-right: 1px solid var(--border-primary); } /* User Dropdown */ #user-dropdown, #notificationDropdown { background: var(--bg-dropdown); border: 1px solid var(--border-primary); box-shadow: var(--shadow-xl); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .dark #user-dropdown, .dark #notificationDropdown { background: var(--bg-dropdown); border: 1px solid var(--border-primary); box-shadow: var(--shadow-xl); } /* Breadcrumbs */ .breadcrumb { display: flex; align-items: center; gap: 0.5rem; color: var(--text-tertiary); font-size: 0.875rem; } .breadcrumb-item { color: var(--text-tertiary); text-decoration: none; } .breadcrumb-item:hover { color: var(--text-secondary); } .breadcrumb-item.active { color: var(--text-primary); font-weight: 500; } .breadcrumb-separator { color: var(--text-muted); } /* === ALERTS === */ .alert { border: 1px solid var(--border-primary); background: var(--bg-card); border-color: var(--border-primary); border-radius: 16px !important; padding: 1.25rem; margin: 1rem 0; } .alert-info { background: rgba(0, 115, 206, 0.1); border-color: var(--mb-primary); color: var(--mb-primary); } .dark .alert-info { background: rgba(0, 115, 206, 0.2); color: var(--mb-white); } .alert-success { background: rgba(5, 150, 105, 0.1); border-color: var(--text-success); color: var(--text-success); } .alert-warning { background: rgba(217, 119, 6, 0.1); border-color: var(--text-warning); color: var(--text-warning); } .alert-error { background: rgba(220, 38, 38, 0.1); border-color: var(--text-error); color: var(--text-error); } /* === TABLES === */ .table { width: 100%; border-collapse: collapse; border-radius: 16px !important; overflow: hidden; margin: 1rem 0; } .table th { text-align: left; font-size: 0.875rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; background: var(--bg-tertiary); color: var(--text-tertiary); border-bottom: 1px solid var(--border-primary); padding: 1rem 1.5rem; } .table td { font-size: 0.875rem; color: var(--text-secondary); border-bottom: 1px solid var(--border-primary); padding: 1rem 1.5rem; } .table tbody tr:hover { background: var(--hover-bg); } /* === TOOLTIPS === */ .tooltip { position: absolute; z-index: 50; font-size: 0.875rem; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); background: var(--bg-modal); color: var(--text-primary); border: 1px solid var(--border-primary); backdrop-filter: var(--glass-blur); border-radius: 12px !important; padding: 0.75rem 1rem; margin: 0.25rem; } /* === BADGES & STATUS === */ .badge { display: inline-flex; align-items: center; font-size: 0.75rem; font-weight: 500; background: var(--bg-tertiary); color: var(--text-secondary); border-radius: 16px !important; padding: 0.5rem 0.75rem; margin: 0.25rem; } .badge-primary { background: var(--mb-primary); color: var(--mb-white); } .badge-success { background: var(--text-success); color: var(--mb-white); } .badge-warning { background: var(--text-warning); color: var(--mb-white); } .badge-error { background: var(--text-error); color: var(--mb-white); } /* === LOADING STATES === */ .loading { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; background: var(--bg-tertiary); } .spinner { animation: spin 1s linear infinite; border-radius: 9999px; border: 2px solid var(--border-primary); border-top-color: var(--text-accent); } /* === RESPONSIVE UTILITIES === */ @media (max-width: 768px) { .modal { margin: 1rem; max-width: calc(100% - 2rem); border-radius: 16px !important; } .card { border-radius: 16px !important; margin: 0.5rem; padding: 1rem; } .btn { font-size: 0.75rem; padding: 0.5rem 1rem; margin: 0.125rem; } .form-input { padding: 0.75rem 1rem; margin: 0.25rem 0; } .nav-item { padding: 0.5rem 0.75rem; margin: 0.125rem; } } /* === ACCESSIBILITY IMPROVEMENTS === */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* === HIGH CONTRAST MODE === */ @media (prefers-contrast: high) { :root { --border-primary: #000000; --text-primary: #000000; } .dark { --border-primary: #ffffff; --text-primary: #ffffff; } } /* === PRINT STYLES === */ @media print { .modal-overlay, .tooltip, .btn { display: none !important; } .card { box-shadow: none; border: 1px solid #000000; } } /* === LEGACY COMPATIBILITY === */ .glass-modal { position: fixed; inset: 0; z-index: 50; display: flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(4px); background: var(--bg-modal); border: 1px solid var(--border-primary); border-radius: 1rem; box-shadow: var(--shadow-card); } .mb-dashboard-card { background: var(--bg-card); border: 1px solid var(--border-primary); border-radius: 1rem; padding: 1.5rem; box-shadow: var(--shadow-card); transition: all 0.3s ease; } .btn-professional { background: linear-gradient(135deg, var(--mb-primary), var(--mb-primary-dark)); color: var(--text-on-primary); border: 1px solid var(--mb-primary); padding: 0.75rem 1.5rem; border-radius: 0.75rem; font-weight: 600; transition: all 0.3s ease; cursor: pointer; } .input-professional { background: var(--bg-input); border: 1px solid var(--border-primary); border-radius: 0.75rem; padding: 0.75rem 1rem; color: var(--text-primary); transition: all 0.3s ease; } /* === CSS CUSTOM PROPERTIES FALLBACKS === */ .no-css-vars .btn-primary { background: #0073ce; color: #ffffff; } .no-css-vars .dark .btn-primary { background: #ffffff; color: #000000; } /* === OPTIMIZED THEME TRANSITION === */ html { transition: background-color 0.3s ease; } body { transition: color 0.3s ease, background-color 0.3s ease; } /* === ENHANCED DARK MODE CONTRAST === */ .dark .btn-primary { background: var(--gradient-button); color: var(--text-on-primary); box-shadow: 0 4px 14px 0 rgba(255, 255, 255, 0.1); } .dark .btn-primary:hover { background: #f5f5f5; box-shadow: 0 6px 20px 0 rgba(255, 255, 255, 0.15); transform: translateY(-2px); } /* === TABLE OPTIMIERUNGEN === */ .table { width: 100%; border-collapse: collapse; border-radius: 12px !important; overflow: hidden; margin: 1rem 0; background: var(--bg-card); box-shadow: var(--shadow-card); } .table th { text-align: left; font-size: 0.875rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; background: var(--bg-tertiary); color: var(--text-tertiary); border-bottom: 1px solid var(--border-primary); padding: 1rem 1.5rem; } .table td { font-size: 0.875rem; color: var(--text-secondary); border-bottom: 1px solid var(--border-primary); padding: 1rem 1.5rem; } .table tbody tr:hover { background: var(--hover-card); } .dark .table { background: var(--bg-card); } .dark .table th { background: var(--bg-tertiary); color: var(--text-tertiary); } .dark .table td { color: var(--text-secondary); } /* === TOOLTIPS === */ .tooltip { position: absolute; z-index: 50; font-size: 0.875rem; background: var(--bg-modal); color: var(--text-primary); border: 1px solid var(--border-primary); backdrop-filter: blur(12px); border-radius: 8px !important; padding: 0.5rem 0.75rem; margin: 0.25rem; box-shadow: var(--shadow-lg); } /* === BADGES & STATUS === */ .badge { display: inline-flex; align-items: center; font-size: 0.75rem; font-weight: 500; background: var(--bg-tertiary); color: var(--text-secondary); border-radius: 12px !important; padding: 0.375rem 0.75rem; margin: 0.125rem; border: 1px solid var(--border-primary); } .badge-primary { background: var(--mb-primary); color: var(--mb-white); border-color: transparent; } .badge-success { background: var(--text-success); color: var(--mb-white); border-color: transparent; } .badge-warning { background: var(--text-warning); color: var(--mb-white); border-color: transparent; } .badge-error { background: var(--text-error); color: var(--mb-white); border-color: transparent; } /* === RESPONSIVE OPTIMIERUNGEN === */ @media (max-width: 768px) { .modal, .mercedes-modal { margin: 0.5rem; max-width: calc(100% - 1rem); border-radius: 12px !important; } .card, .dashboard-card { border-radius: 12px !important; margin: 0.5rem; padding: 1rem; } .btn { font-size: 0.875rem; padding: 0.625rem 1rem; margin: 0.125rem; border-radius: 8px; } .form-input, input, textarea, select { padding: 0.75rem; margin: 0.25rem 0; border-radius: 8px; font-size: 16px; /* Verhindert Zoom auf iOS */ } .nav-item { padding: 0.75rem; margin: 0.125rem; border-radius: 8px; } .navbar-sticky { backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } } /* === PERFORMANCE OPTIMIERUNGEN === */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } .glass, .glass-card { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; } } /* === HIGH CONTRAST MODE === */ @media (prefers-contrast: high) { :root { --border-primary: #000000; --text-primary: #000000; --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.3); } .dark { --border-primary: #ffffff; --text-primary: #ffffff; --shadow-sm: 0 1px 3px rgba(255, 255, 255, 0.3); --shadow-md: 0 4px 6px rgba(255, 255, 255, 0.3); } } /* === PRINT STYLES === */ @media print { .modal-overlay, .tooltip, .btn, .navbar-sticky, .mobile-menu { display: none !important; } .card, .dashboard-card { box-shadow: none; border: 1px solid #000000; break-inside: avoid; } body { background: white !important; color: black !important; } } /* === ENHANCED UTILITY CLASSES === */ .theme-transition { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .focus-visible:focus { outline: 2px solid var(--border-focus); outline-offset: 2px; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .text-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .transition-fast { transition: all 0.15s ease; } .transition-normal { transition: all 0.2s ease; } .transition-slow { transition: all 0.3s ease; } /* === SCROLLBAR STYLING === */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg-tertiary); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: var(--border-secondary); border-radius: 4px; transition: background 0.2s ease; } ::-webkit-scrollbar-thumb:hover { background: var(--border-primary); } .dark ::-webkit-scrollbar-track { background: var(--bg-tertiary); } .dark ::-webkit-scrollbar-thumb { background: var(--border-secondary); } .dark ::-webkit-scrollbar-thumb:hover { background: var(--border-primary); } /* === LOADING STATES === */ .loading { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; background: var(--bg-tertiary); border-radius: 8px; } .spinner { animation: spin 1s linear infinite; border-radius: 9999px; border: 2px solid var(--border-primary); border-top-color: var(--text-accent); width: 1.5rem; height: 1.5rem; } .skeleton { background: linear-gradient(90deg, var(--bg-tertiary) 25%, var(--bg-secondary) 50%, var(--bg-tertiary) 75%); background-size: 200% 100%; animation: loading 1.5s infinite; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } /* === STATUS INDICATORS === */ .status-online { color: var(--text-success); } .status-offline { color: var(--text-error); } .status-warning { color: var(--text-warning); } .status-info { color: var(--text-accent); } .status-dot { width: 0.5rem; height: 0.5rem; border-radius: 50%; display: inline-block; margin-right: 0.5rem; } .status-dot.online { background: var(--text-success); } .status-dot.offline { background: var(--text-error); } .status-dot.warning { background: var(--text-warning); } .status-dot.info { background: var(--text-accent); } /* === HOVER EFFECTS === */ .hover-lift { transition: transform 0.2s ease, box-shadow 0.2s ease; } .hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-card-hover); } .hover-scale { transition: transform 0.2s ease; } .hover-scale:hover { transform: scale(1.02); }