/* Admin Dashboard Custom Styles */ :root { --primary-color: #1e40af; --secondary-color: #3b82f6; --success-color: #10b981; --warning-color: #f59e0b; --danger-color: #ef4444; --info-color: #06b6d4; --dark-color: #374151; --light-color: #f9fafb; } /* Chart containers to prevent infinite resize loops */ .chart-container { position: relative; width: 100%; max-width: 100%; overflow: hidden; } .chart-container canvas { display: block; width: 100% !important; height: auto !important; max-width: 100%; } /* Custom scrollbar */ .scrollbar { scrollbar-width: thin; scrollbar-color: #d1d5db #e5e7eb; } .scrollbar::-webkit-scrollbar { width: 8px; } .scrollbar::-webkit-scrollbar-track { background: #e5e7eb; } .scrollbar::-webkit-scrollbar-thumb { background-color: #d1d5db; border-radius: 9999px; } /* Tab styles */ .tab-btn { border-bottom-color: transparent; color: #6b7280; transition: all 0.2s ease; } .tab-btn.active { border-bottom-color: var(--primary-color); color: var(--primary-color); } .tab-btn:hover:not(.active) { color: #374151; } .tab-content { display: none; animation: fadeIn 0.3s ease-in; } .tab-content.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Status indicators */ .status-indicator { display: inline-flex; align-items: center; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; font-weight: 500; } .status-running { background-color: #d1fae5; color: #065f46; } .status-paused { background-color: #fef3c7; color: #92400e; } .status-stopped { background-color: #fee2e2; color: #991b1b; } .status-healthy { background-color: #d1fae5; color: #065f46; } .status-warning { background-color: #fef3c7; color: #92400e; } .status-error { background-color: #fee2e2; color: #991b1b; } /* Connection status */ .connection-status .connected { background-color: var(--success-color); } .connection-status .disconnected { background-color: var(--danger-color); } /* Card hover effects */ .card { transition: transform 0.2s ease, box-shadow 0.2s ease; } .card:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); } /* Button styles */ .btn-primary { background-color: var(--primary-color); color: white; padding: 0.5rem 1rem; border-radius: 0.375rem; font-weight: 500; transition: background-color 0.2s ease; } .btn-primary:hover { background-color: #1d4ed8; } .btn-secondary { background-color: #6b7280; color: white; padding: 0.5rem 1rem; border-radius: 0.375rem; font-weight: 500; transition: background-color 0.2s ease; } .btn-secondary:hover { background-color: #4b5563; } .btn-success { background-color: var(--success-color); color: white; padding: 0.5rem 1rem; border-radius: 0.375rem; font-weight: 500; transition: background-color 0.2s ease; } .btn-success:hover { background-color: #059669; } .btn-warning { background-color: var(--warning-color); color: white; padding: 0.5rem 1rem; border-radius: 0.375rem; font-weight: 500; transition: background-color 0.2s ease; } .btn-warning:hover { background-color: #d97706; } .btn-danger { background-color: var(--danger-color); color: white; padding: 0.5rem 1rem; border-radius: 0.375rem; font-weight: 500; transition: background-color 0.2s ease; } .btn-danger:hover { background-color: #dc2626; } /* Table styles */ .table-container { max-height: 500px; overflow-y: auto; } .table-row:hover { background-color: #f9fafb; } /* Modal styles */ .modal { z-index: 1000; } .modal-backdrop { background-color: rgba(0, 0, 0, 0.5); } .modal-content { animation: modalSlideIn 0.3s ease; } @keyframes modalSlideIn { from { opacity: 0; transform: scale(0.9) translateY(-50px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* Chart containers */ .chart-container { position: relative; height: 300px; } /* Activity feed */ .activity-item { display: flex; align-items: center; padding: 1rem 0; border-bottom: 1px solid #e5e7eb; } .activity-item:last-child { border-bottom: none; } .activity-icon { width: 2rem; height: 2rem; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 1rem; } .activity-icon.success { background-color: var(--success-color); color: white; } .activity-icon.warning { background-color: var(--warning-color); color: white; } .activity-icon.error { background-color: var(--danger-color); color: white; } .activity-icon.info { background-color: var(--info-color); color: white; } /* Metrics cards */ .metric-card { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border-radius: 0.5rem; padding: 1.5rem; text-align: center; } .metric-value { font-size: 2rem; font-weight: bold; margin-bottom: 0.5rem; } .metric-label { font-size: 0.875rem; opacity: 0.8; } /* Health check styles */ .health-check { display: flex; align-items: center; justify-content: between; padding: 1rem; border-radius: 0.375rem; margin-bottom: 0.5rem; } .health-check.healthy { background-color: #d1fae5; border: 1px solid #10b981; } .health-check.warning { background-color: #fef3c7; border: 1px solid #f59e0b; } .health-check.error { background-color: #fee2e2; border: 1px solid #ef4444; } .health-check-icon { width: 1.5rem; height: 1.5rem; margin-right: 0.75rem; } /* Loading spinner */ .spinner { border: 2px solid #f3f3f3; border-top: 2px solid var(--primary-color); border-radius: 50%; width: 1rem; height: 1rem; animation: spin 1s linear infinite; display: inline-block; margin-left: 0.5rem; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive adjustments */ @media (max-width: 768px) { .grid-cols-4 { grid-template-columns: repeat(2, 1fr); } .grid-cols-2 { grid-template-columns: 1fr; } .tab-btn { padding: 0.5rem 0.25rem; font-size: 0.875rem; } .modal-content { margin: 1rem; max-width: calc(100% - 2rem); } } /* Toast notifications */ .toast { position: fixed; top: 1rem; right: 1rem; background-color: white; border-radius: 0.5rem; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); padding: 1rem; z-index: 2000; max-width: 300px; transform: translateX(400px); transition: transform 0.3s ease; } .toast.show { transform: translateX(0); } .toast.success { border-left: 4px solid var(--success-color); } .toast.warning { border-left: 4px solid var(--warning-color); } .toast.error { border-left: 4px solid var(--danger-color); } .toast.info { border-left: 4px solid var(--info-color); } /* Progress bars */ .progress-bar { width: 100%; height: 0.5rem; background-color: #e5e7eb; border-radius: 9999px; overflow: hidden; } .progress-fill { height: 100%; background-color: var(--primary-color); transition: width 0.3s ease; } .progress-fill.success { background-color: var(--success-color); } .progress-fill.warning { background-color: var(--warning-color); } .progress-fill.danger { background-color: var(--danger-color); } /* Form styles */ .form-group { margin-bottom: 1rem; } .form-label { display: block; margin-bottom: 0.25rem; font-weight: 500; color: #374151; } .form-input { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 0.375rem; font-size: 0.875rem; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .form-input:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .form-input:invalid { border-color: var(--danger-color); } /* Custom toggle switch */ .toggle { position: relative; display: inline-block; width: 3rem; height: 1.5rem; } .toggle input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; transition: 0.4s; border-radius: 1.5rem; } .toggle-slider:before { position: absolute; content: ""; height: 1.25rem; width: 1.25rem; left: 0.125rem; bottom: 0.125rem; background-color: white; transition: 0.4s; border-radius: 50%; } .toggle input:checked + .toggle-slider { background-color: var(--primary-color); } .toggle input:checked + .toggle-slider:before { transform: translateX(1.5rem); } /* Tooltips */ .tooltip { position: relative; display: inline-block; } .tooltip .tooltip-text { visibility: hidden; width: 120px; background-color: #374151; color: white; text-align: center; border-radius: 0.375rem; padding: 0.5rem; font-size: 0.75rem; position: absolute; z-index: 1; bottom: 125%; left: 50%; margin-left: -60px; opacity: 0; transition: opacity 0.3s; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } /* Dark mode support */ @media (prefers-color-scheme: dark) { :root { --background-color: #1f2937; --surface-color: #374151; --text-primary: #f9fafb; --text-secondary: #d1d5db; } }