/* CSS Variables */ :root { /* Custom Variables */ --bg-primary: #0f172a; --bg-secondary: #1e293b; --bg-tertiary: #334155; --bg-quaternary: #475569; --text-primary: #e2e8f0; --text-secondary: #94a3b8; --text-muted: #64748b; --border-color: #334155; --accent-blue: #60a5fa; --success-bg: #065f46; --success-text: #6ee7b7; --success-border: #10b981; --warning-bg: #78350f; --warning-text: #fcd34d; --warning-border: #f59e0b; --danger-bg: #7f1d1d; --danger-text: #fca5a5; --danger-border: #ef4444; --info-bg: #1e3a8a; --info-text: #93c5fd; --info-border: #3b82f6; /* Bootstrap 5 Variable Overrides for Dark Theme */ --bs-body-bg: #0f172a; --bs-body-color: #e2e8f0; --bs-border-color: #334155; --bs-border-color-translucent: rgba(51, 65, 85, 0.5); /* Table Variables */ --bs-table-bg: #1e293b; --bs-table-color: #e2e8f0; --bs-table-border-color: #334155; --bs-table-striped-bg: #1e293b; --bs-table-striped-color: #e2e8f0; --bs-table-active-bg: #334155; --bs-table-active-color: #e2e8f0; --bs-table-hover-bg: #334155; --bs-table-hover-color: #e2e8f0; } /* Global Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-primary); color: var(--text-primary); line-height: 1.6; } /* Navbar */ .navbar-custom { background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%); border-bottom: 1px solid var(--bg-quaternary); padding: 1rem 0; } .navbar-brand { font-size: 1.5rem; font-weight: 600; color: var(--accent-blue) !important; } .nav-link { color: var(--text-secondary) !important; transition: color 0.2s; } .nav-link:hover, .nav-link.active { color: var(--accent-blue) !important; } /* Container */ .container-fluid { max-width: 1400px; margin: 0 auto; padding: 20px; } /* Cards */ .card { background-color: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: 12px; margin-bottom: 25px; } .card-header { background-color: var(--bg-tertiary); border-bottom: 1px solid var(--bg-quaternary); padding: 15px 20px; border-radius: 12px 12px 0 0 !important; } .card-body { padding: 25px; } .card-title { color: var(--accent-blue); font-size: 1.5rem; margin-bottom: 15px; } /* Badges */ .badge { padding: 4px 12px; border-radius: 12px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .badge-expected, .badge-good, .badge-success { background-color: var(--success-bg); color: var(--success-text); } .badge-unexpected, .badge-critical, .badge-danger { background-color: var(--danger-bg); color: var(--danger-text); } .badge-missing, .badge-warning { background-color: var(--warning-bg); color: var(--warning-text); } .badge-info { background-color: var(--info-bg); color: var(--info-text); } /* Buttons */ .btn-primary { background-color: #3b82f6; border-color: #3b82f6; color: #ffffff; } .btn-primary:hover { background-color: #2563eb; border-color: #2563eb; } .btn-secondary { background-color: var(--bg-tertiary); border-color: var(--bg-tertiary); color: var(--text-primary); } .btn-secondary:hover { background-color: var(--bg-quaternary); border-color: var(--bg-quaternary); } .btn-danger { background-color: var(--danger-bg); border-color: var(--danger-bg); color: var(--danger-text); } .btn-danger:hover { background-color: #991b1b; border-color: #991b1b; } /* Tables - Fix for dynamically created table rows (white row bug) */ .table { color: var(--text-primary); border-color: var(--border-color); } .table thead { background-color: var(--bg-tertiary); color: var(--text-secondary); } .table tbody tr, .table tbody tr.scan-row { background-color: var(--bg-secondary) !important; border-color: var(--border-color) !important; } .table tbody tr:hover { background-color: var(--bg-tertiary) !important; cursor: pointer; } .table th, .table td { padding: 12px; border-color: var(--border-color); } /* Alerts */ .alert { border-radius: 8px; border: 1px solid; } .alert-success { background-color: var(--success-bg); border-color: var(--success-border); color: var(--success-text); } .alert-danger { background-color: var(--danger-bg); border-color: var(--danger-border); color: var(--danger-text); } .alert-warning { background-color: var(--warning-bg); border-color: var(--warning-border); color: var(--warning-text); } .alert-info { background-color: var(--info-bg); border-color: var(--info-border); color: var(--info-text); } /* Form Controls */ .form-control, .form-select { background-color: var(--bg-secondary); border-color: var(--border-color); color: var(--text-primary); } .form-control:focus, .form-select:focus { background-color: var(--bg-secondary); border-color: var(--accent-blue); color: var(--text-primary); box-shadow: 0 0 0 0.2rem rgba(96, 165, 250, 0.25); } .form-label { color: var(--text-secondary); font-weight: 500; } /* Stats Cards */ .stat-card { background-color: var(--bg-primary); padding: 20px; border-radius: 8px; border: 1px solid var(--border-color); text-align: center; } .stat-value { font-size: 2rem; font-weight: 600; color: var(--accent-blue); } .stat-label { color: var(--text-secondary); font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.5px; margin-top: 5px; } /* Footer */ .footer { margin-top: 40px; padding: 20px 0; border-top: 1px solid var(--border-color); text-align: center; color: var(--text-muted); font-size: 0.9rem; } /* Utilities */ .text-muted { color: var(--text-secondary) !important; } .text-success { color: var(--success-border) !important; } .text-warning { color: var(--warning-border) !important; } .text-danger { color: var(--danger-border) !important; } .text-info { color: var(--accent-blue) !important; } .mono { font-family: 'Courier New', monospace; } /* Spinner for loading states */ .spinner-border-sm { color: var(--accent-blue); } /* Chart.js Dark Theme Styles */ .chart-container { position: relative; height: 300px; margin: 20px 0; } canvas { max-width: 100%; height: auto; }