/* Light Mode (Default) - CSS Variables */ :root { --text-primary: #333333; --text-secondary: #666666; --text-muted: #999999; --bg-primary: #ffffff; --bg-secondary: #f7f9fc; --bg-tertiary: #f8f9fa; --border-color: #dee2e6; --card-shadow: rgba(0, 0, 0, 0.08); --card-shadow-hover: rgba(0, 0, 0, 0.12); --navbar-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%); --welcome-card-color: #ffffff; --table-hover-bg: #f9f9f9; --input-bg: #ffffff; --input-border: #e0e0e0; --input-focus-border: #667eea; --input-focus-shadow: rgba(102, 126, 234, 0.1); } /* Dark Mode - Override CSS Variables */ [data-theme="dark"] { --text-primary: #e8e8e8; --text-secondary: #b8b8b8; --text-muted: #888888; --bg-primary: #1e1e1e; --bg-secondary: #2d2d2d; --bg-tertiary: #3a3a3a; --border-color: #444444; --card-shadow: rgba(0, 0, 0, 0.3); --card-shadow-hover: rgba(0, 0, 0, 0.5); --navbar-bg: linear-gradient(135deg, #4a5f8f 0%, #5a3f7a 100%); --welcome-card-color: #e8e8e8; --table-hover-bg: #2d2d2d; --input-bg: #2d2d2d; --input-border: #444444; --input-focus-border: #7b8fd9; --input-focus-shadow: rgba(123, 143, 217, 0.2); } /* Apply Theme Variables to Elements */ body { background-color: var(--bg-secondary); color: var(--text-primary); transition: background-color 0.3s ease, color 0.3s ease; } .footer { background-color: var(--bg-tertiary); border-top-color: var(--border-color); transition: background-color 0.3s ease, border-color 0.3s ease; } .navbar-dark { background: var(--navbar-bg) !important; transition: background 0.3s ease; } .welcome-card { color: var(--welcome-card-color); transition: color 0.3s ease; } .welcome-card h1 { color: #1a1a2e; transition: color 0.3s ease; font-weight: 700; } .welcome-card p { color: rgba(255, 255, 255, 0.95); } [data-theme="dark"] .welcome-card h1 { color: #ffffff; } .stat-card { background: var(--bg-primary); color: var(--text-primary); box-shadow: 0 2px 8px var(--card-shadow); transition: background 0.3s ease, color 0.3s ease, box-shadow 0.3s ease; } .stat-card:hover { box-shadow: 0 8px 20px var(--card-shadow-hover); } .stat-content h3 { color: var(--text-primary); transition: color 0.3s ease; } .stat-content p { color: var(--text-secondary); transition: color 0.3s ease; } .card { background-color: var(--bg-primary); color: var(--text-primary); border-color: var(--border-color); box-shadow: 0 2px 8px var(--card-shadow); transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease; } .card:hover { box-shadow: 0 8px 24px var(--card-shadow-hover); } .card-header { background-color: var(--bg-tertiary); border-bottom-color: var(--border-color); color: var(--text-primary); transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; } .card-header.bg-light { background-color: var(--bg-tertiary) !important; color: var(--text-primary) !important; } .card-header h1, .card-header h2, .card-header h3, .card-header h4, .card-header h5, .card-header h6 { color: var(--text-primary); transition: color 0.3s ease; margin-bottom: 0; } .card-body { background-color: var(--bg-primary); color: var(--text-primary); transition: background-color 0.3s ease, color 0.3s ease; } .card-footer { background-color: var(--bg-tertiary); border-top-color: var(--border-color); color: var(--text-primary); transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; } /* Ensure good contrast in dark mode for card content */ [data-theme="dark"] .card { border-color: #444444; } [data-theme="dark"] .card-header { background-color: #3a3a3a; color: #e8e8e8; } [data-theme="dark"] .card-header h1, [data-theme="dark"] .card-header h2, [data-theme="dark"] .card-header h3, [data-theme="dark"] .card-header h4, [data-theme="dark"] .card-header h5, [data-theme="dark"] .card-header h6 { color: #e8e8e8; } [data-theme="dark"] .card-body { background-color: #1e1e1e; } .module-card { background-color: var(--bg-primary); color: var(--text-primary); transition: background-color 0.3s ease, color 0.3s ease; } .module-card .card-title { color: var(--text-primary); transition: color 0.3s ease; } .module-card .card-text { color: var(--text-secondary); transition: color 0.3s ease; } .table { color: var(--text-primary); background-color: var(--bg-secondary); transition: color 0.3s ease, background-color 0.3s ease; } .table thead th { background-color: var(--bg-tertiary); color: var(--text-primary); border-color: var(--border-color); border-bottom: 2px solid var(--border-color) !important; transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; font-weight: 600; } .table tbody { background-color: var(--bg-secondary); transition: background-color 0.3s ease; } .table tbody td { background-color: var(--bg-secondary); border-bottom-color: var(--border-color); color: var(--text-primary); transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; } .table tbody tr { background-color: var(--bg-secondary); transition: background-color 0.3s ease; } .table tbody tr:hover { background-color: var(--table-hover-bg) !important; transition: background-color 0.3s ease; } /* Empty table state */ .table tbody td.text-center { color: var(--text-secondary); } .table tbody tr td .text-muted { color: var(--text-secondary) !important; } /* Badge styling for tables */ .table .badge { transition: all 0.3s ease; } .form-control, .form-select { background-color: var(--input-bg); color: var(--text-primary); border-color: var(--input-border); transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; } .form-control::placeholder { color: var(--text-muted); transition: color 0.3s ease; } .form-control:disabled, .form-select:disabled { background-color: var(--bg-tertiary); color: var(--text-secondary); border-color: var(--input-border); } .form-control:focus, .form-select:focus { background-color: var(--input-bg); color: var(--text-primary); border-color: var(--input-focus-border); box-shadow: 0 0 0 3px var(--input-focus-shadow); } .form-label { color: var(--text-primary); transition: color 0.3s ease; font-weight: 600; } .form-text { color: var(--text-secondary); transition: color 0.3s ease; } .list-group-item { background-color: var(--bg-primary); color: var(--text-primary); border-color: var(--border-color); transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; } .list-group-item:hover { background-color: var(--bg-tertiary); color: var(--text-primary); } .list-group-item.active { background-color: #667eea; border-color: #667eea; color: white; } [data-theme="dark"] .list-group-item.active { background-color: #7b8fd9; border-color: #7b8fd9; } /* Alert Styling */ .alert-success { background-color: rgba(34, 197, 94, 0.15); color: #22c55e; border-left-color: #22c55e; } [data-theme="dark"] .alert-success { background-color: rgba(34, 197, 94, 0.2); color: #86efac; border-left-color: #86efac; } .alert-danger { background-color: rgba(239, 68, 68, 0.15); color: #ef4444; border-left-color: #ef4444; } [data-theme="dark"] .alert-danger { background-color: rgba(239, 68, 68, 0.2); color: #fca5a5; border-left-color: #fca5a5; } .alert-warning { background-color: rgba(245, 158, 11, 0.15); color: #f59e0b; border-left-color: #f59e0b; } [data-theme="dark"] .alert-warning { background-color: rgba(245, 158, 11, 0.2); color: #fcd34d; border-left-color: #fcd34d; } .alert-info { background-color: rgba(59, 130, 246, 0.15); color: #3b82f6; border-left-color: #3b82f6; } [data-theme="dark"] .alert-info { background-color: rgba(59, 130, 246, 0.2); color: #93c5fd; border-left-color: #93c5fd; } /* Theme Toggle Button */ .theme-toggle { background: none; border: none; color: white; font-size: 18px; cursor: pointer; padding: 5px 10px; transition: all 0.3s ease; } .theme-toggle:hover { transform: rotate(20deg); } .theme-toggle:focus { outline: none; } /* Dropdown Styling for Dark Mode */ [data-theme="dark"] .dropdown-menu { background-color: var(--bg-secondary); color: var(--text-primary); } [data-theme="dark"] .dropdown-item { color: var(--text-primary); } [data-theme="dark"] .dropdown-item:hover, [data-theme="dark"] .dropdown-item:focus { background-color: var(--bg-tertiary); color: var(--text-primary); } [data-theme="dark"] .dropdown-divider { border-color: var(--border-color); } /* Close Button for Dark Mode */ [data-theme="dark"] .btn-close { filter: invert(1); } /* Empty State Message */ .empty-state-message { color: var(--text-secondary); transition: color 0.3s ease; font-size: 16px; } .empty-state-message i { opacity: 0.6; transition: opacity 0.3s ease; } /* Text Utilities */ .text-muted { color: var(--text-muted) !important; transition: color 0.3s ease; } .text-secondary { color: var(--text-secondary) !important; transition: color 0.3s ease; } .text-primary { color: var(--text-primary) !important; transition: color 0.3s ease; } /* Code blocks and inline code */ code, pre { background-color: var(--input-bg); color: var(--text-primary); border: 1px solid var(--border-color); border-radius: 4px; padding: 2px 6px; transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease; } pre { padding: 10px; overflow-x: auto; } pre code { padding: 0; border: none; background-color: transparent; } /* Headings */ h1, h2, h3, h4, h5, h6 { color: var(--text-primary); transition: color 0.3s ease; } /* Bootstrap Utility Classes - Dark Mode Overrides */ .bg-light { background-color: var(--bg-secondary) !important; transition: background-color 0.3s ease; } [data-theme="dark"] .bg-light { background-color: var(--bg-tertiary) !important; color: var(--text-primary) !important; } /* Ensure form elements in bg-light sections have proper contrast */ .bg-light .form-control, .bg-light .form-select { background-color: var(--input-bg); color: var(--text-primary); border-color: var(--input-border); } [data-theme="dark"] .bg-light .form-control, [data-theme="dark"] .bg-light .form-select { background-color: var(--input-bg); color: var(--text-primary); border-color: var(--input-border); } .bg-light .form-label { color: var(--text-primary); } [data-theme="dark"] .bg-light .form-label { color: var(--text-primary); }