Spaces:
Sleeping
Sleeping
| /* Admin Dashboard Styles with AdminLTE 4 Integration */ | |
| :root { | |
| --primary: #7c3aed; | |
| --primary-light: #a855f7; | |
| --primary-dark: #5b21b6; | |
| --background: #0f172a; | |
| --surface: #1e293b; | |
| --card: #334155; | |
| --text: #f8fafc; | |
| --text-secondary: #cbd5e1; | |
| --text-muted: #94a3b8; | |
| --border: #334155; | |
| --border-light: #475569; | |
| --success: #10b981; | |
| --warning: #f59e0b; | |
| --danger: #ef4444; | |
| --critical: #dc2626; | |
| --high: #ea580c; | |
| --medium: #d97706; | |
| --low: #059669; | |
| --shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2); | |
| --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2); | |
| } | |
| /* AdminLTE 4 Compatibility Overrides */ | |
| body { | |
| font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; | |
| } | |
| /* ======================================== | |
| EXPERTISE AREAS - ENHANCED DESIGN | |
| ======================================== */ | |
| .expertise-grid { | |
| background: linear-gradient(135deg, rgba(124, 58, 237, 0.05) 0%, rgba(168, 85, 247, 0.05) 100%); | |
| border: 1px solid var(--border-light); | |
| border-radius: 12px; | |
| padding: 1.5rem; | |
| margin-top: 0.5rem; | |
| } | |
| .expertise-category { | |
| margin-bottom: 1.5rem; | |
| } | |
| .expertise-category:last-child { | |
| margin-bottom: 0; | |
| } | |
| .category-title { | |
| color: var(--text); | |
| font-weight: 600; | |
| font-size: 0.95rem; | |
| margin-bottom: 1rem; | |
| padding-bottom: 0.5rem; | |
| border-bottom: 2px solid var(--border-light); | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| } | |
| .category-title i { | |
| font-size: 1.1rem; | |
| } | |
| .expertise-options { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.75rem; | |
| } | |
| .expertise-option { | |
| position: relative; | |
| } | |
| .expertise-checkbox { | |
| position: absolute; | |
| opacity: 0; | |
| cursor: pointer; | |
| height: 0; | |
| width: 0; | |
| } | |
| .expertise-label { | |
| display: flex; | |
| align-items: center; | |
| padding: 0.875rem 1rem; | |
| background: var(--surface); | |
| border: 2px solid var(--border); | |
| border-radius: 8px; | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| font-weight: 500; | |
| color: var(--text-secondary); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .expertise-label::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 4px; | |
| height: 100%; | |
| background: var(--primary); | |
| transform: scaleY(0); | |
| transition: transform 0.3s ease; | |
| } | |
| .expertise-label:hover { | |
| background: rgba(124, 58, 237, 0.1); | |
| border-color: var(--primary-light); | |
| color: var(--text); | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 12px rgba(124, 58, 237, 0.15); | |
| } | |
| .expertise-label i { | |
| margin-right: 0.75rem; | |
| font-size: 1.1rem; | |
| color: var(--primary-light); | |
| transition: color 0.3s ease; | |
| } | |
| .expertise-label span { | |
| flex: 1; | |
| font-size: 0.95rem; | |
| } | |
| /* Checked state */ | |
| .expertise-checkbox:checked + .expertise-label { | |
| background: linear-gradient(135deg, rgba(124, 58, 237, 0.15) 0%, rgba(168, 85, 247, 0.15) 100%); | |
| border-color: var(--primary); | |
| color: var(--text); | |
| box-shadow: 0 4px 12px rgba(124, 58, 237, 0.2); | |
| } | |
| .expertise-checkbox:checked + .expertise-label::before { | |
| transform: scaleY(1); | |
| } | |
| .expertise-checkbox:checked + .expertise-label i { | |
| color: var(--primary); | |
| } | |
| /* Focus state for accessibility */ | |
| .expertise-checkbox:focus + .expertise-label { | |
| outline: 2px solid var(--primary-light); | |
| outline-offset: 2px; | |
| } | |
| /* Select All Controls */ | |
| .expertise-controls { | |
| display: flex; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| gap: 0.5rem; | |
| } | |
| .expertise-controls .btn { | |
| border-radius: 6px; | |
| font-weight: 500; | |
| transition: all 0.3s ease; | |
| } | |
| .expertise-controls .btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| .expertise-count { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| } | |
| #selectedCount { | |
| color: var(--primary); | |
| font-weight: 600; | |
| } | |
| /* Form validation states */ | |
| .expertise-grid.is-invalid { | |
| border-color: var(--danger); | |
| background: rgba(239, 68, 68, 0.05); | |
| } | |
| .expertise-grid.is-valid { | |
| border-color: var(--success); | |
| background: rgba(16, 185, 129, 0.05); | |
| } | |
| /* Responsive design */ | |
| @media (max-width: 768px) { | |
| .expertise-grid { | |
| padding: 1rem; | |
| } | |
| .expertise-label { | |
| padding: 0.75rem 0.875rem; | |
| } | |
| .expertise-label i { | |
| margin-right: 0.5rem; | |
| font-size: 1rem; | |
| } | |
| .expertise-label span { | |
| font-size: 0.9rem; | |
| } | |
| .expertise-controls { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| } | |
| .expertise-controls .btn { | |
| width: 100%; | |
| margin-bottom: 0.5rem; | |
| } | |
| .expertise-count { | |
| margin-left: 0 ; | |
| margin-top: 0.5rem; | |
| } | |
| } | |
| /* Animation for smooth interactions */ | |
| @keyframes expertiseSelect { | |
| 0% { | |
| transform: scale(1); | |
| } | |
| 50% { | |
| transform: scale(1.02); | |
| } | |
| 100% { | |
| transform: scale(1); | |
| } | |
| } | |
| .expertise-checkbox:checked + .expertise-label { | |
| animation: expertiseSelect 0.3s ease; | |
| } | |
| /* Dark theme enhancements */ | |
| @media (prefers-color-scheme: dark) { | |
| .expertise-label { | |
| background: rgba(30, 41, 59, 0.8); | |
| border-color: rgba(71, 85, 105, 0.6); | |
| } | |
| .expertise-label:hover { | |
| background: rgba(124, 58, 237, 0.2); | |
| border-color: var(--primary-light); | |
| } | |
| .expertise-checkbox:checked + .expertise-label { | |
| background: linear-gradient(135deg, rgba(124, 58, 237, 0.25) 0%, rgba(168, 85, 247, 0.25) 100%); | |
| } | |
| } | |
| /* ======================================== | |
| BOOKINGS SECTION - ENHANCED DESIGN | |
| ======================================== */ | |
| .bookings-card { | |
| border: none; | |
| box-shadow: var(--shadow-lg); | |
| border-radius: 12px; | |
| overflow: hidden; | |
| } | |
| .bookings-card .card-header { | |
| background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%); | |
| border-bottom: none; | |
| padding: 1.5rem; | |
| } | |
| .bookings-card .card-title { | |
| color: white; | |
| font-weight: 600; | |
| font-size: 1.25rem; | |
| margin: 0; | |
| } | |
| .bookings-card .card-title i { | |
| margin-right: 0.5rem; | |
| } | |
| .bookings-filters { | |
| background: rgba(124, 58, 237, 0.05); | |
| border: 1px solid var(--border-light); | |
| border-radius: 8px; | |
| padding: 1.5rem; | |
| } | |
| .bookings-filters .form-label { | |
| font-weight: 600; | |
| color: var(--text); | |
| margin-bottom: 0.5rem; | |
| font-size: 0.9rem; | |
| } | |
| .bookings-filters .form-control { | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| background: var(--surface); | |
| color: var(--text); | |
| transition: all 0.3s ease; | |
| } | |
| .bookings-filters .form-control:focus { | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25); | |
| background: var(--surface); | |
| color: var(--text); | |
| } | |
| .bookings-filters .btn { | |
| border-radius: 6px; | |
| font-weight: 500; | |
| transition: all 0.3s ease; | |
| } | |
| .bookings-filters .btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| /* Info Boxes */ | |
| .info-box { | |
| border-radius: 8px; | |
| box-shadow: var(--shadow); | |
| transition: all 0.3s ease; | |
| border: none; | |
| overflow: hidden; | |
| } | |
| .info-box:hover { | |
| transform: translateY(-2px); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .info-box-icon { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 2rem; | |
| color: rgba(255, 255, 255, 0.8); | |
| } | |
| .info-box-content { | |
| padding: 1rem; | |
| } | |
| .info-box-text { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| color: rgba(255, 255, 255, 0.9); | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .info-box-number { | |
| font-size: 1.5rem; | |
| font-weight: 700; | |
| color: white; | |
| margin-top: 0.25rem; | |
| } | |
| /* Gradient Backgrounds */ | |
| .bg-gradient-primary { | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .bg-gradient-success { | |
| background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%); | |
| } | |
| .bg-gradient-warning { | |
| background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); | |
| } | |
| .bg-gradient-danger { | |
| background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); | |
| } | |
| /* Enhanced Table Styling */ | |
| #bookingsTable { | |
| border: none; | |
| border-radius: 8px; | |
| overflow: hidden; | |
| } | |
| #bookingsTable thead th { | |
| background: var(--surface); | |
| color: var(--text); | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| font-size: 0.85rem; | |
| letter-spacing: 0.5px; | |
| border: none; | |
| padding: 1rem 0.75rem; | |
| } | |
| #bookingsTable thead th i { | |
| margin-right: 0.5rem; | |
| color: var(--primary); | |
| } | |
| #bookingsTable tbody tr { | |
| transition: all 0.3s ease; | |
| border: none; | |
| } | |
| #bookingsTable tbody tr:hover { | |
| background: rgba(124, 58, 237, 0.1); | |
| transform: translateY(-1px); | |
| box-shadow: 0 2px 8px rgba(124, 58, 237, 0.15); | |
| } | |
| #bookingsTable tbody td { | |
| border: none; | |
| padding: 1rem 0.75rem; | |
| vertical-align: middle; | |
| border-bottom: 1px solid var(--border-light); | |
| } | |
| /* User Details Styling */ | |
| .user-details { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| } | |
| .user-avatar { | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: white; | |
| font-weight: 600; | |
| font-size: 0.9rem; | |
| flex-shrink: 0; | |
| } | |
| .user-info { | |
| flex: 1; | |
| min-width: 0; | |
| } | |
| .user-name { | |
| font-weight: 600; | |
| color: var(--text); | |
| margin: 0; | |
| font-size: 0.95rem; | |
| } | |
| .user-contact { | |
| font-size: 0.8rem; | |
| color: var(--text-secondary); | |
| margin: 0.25rem 0 0 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.25rem; | |
| } | |
| .user-contact a { | |
| color: var(--primary); | |
| text-decoration: none; | |
| transition: color 0.3s ease; | |
| } | |
| .user-contact a:hover { | |
| color: var(--primary-light); | |
| text-decoration: underline; | |
| } | |
| .user-location { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| margin: 0.25rem 0 0 0; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.25rem; | |
| } | |
| .user-location i { | |
| font-size: 0.7rem; | |
| } | |
| /* Professional Info Styling */ | |
| .professional-info { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| } | |
| .professional-avatar { | |
| width: 32px; | |
| height: 32px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, #10b981 0%, #34d399 100%); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: white; | |
| font-weight: 600; | |
| font-size: 0.8rem; | |
| flex-shrink: 0; | |
| } | |
| .professional-name { | |
| font-weight: 500; | |
| color: var(--text); | |
| margin: 0; | |
| font-size: 0.9rem; | |
| } | |
| .professional-specialization { | |
| font-size: 0.75rem; | |
| color: var(--text-secondary); | |
| margin: 0.25rem 0 0 0; | |
| } | |
| /* Risk Level Badges */ | |
| .risk-badge { | |
| padding: 0.375rem 0.75rem; | |
| border-radius: 20px; | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.25rem; | |
| } | |
| .risk-badge i { | |
| font-size: 0.7rem; | |
| } | |
| .risk-badge.critical { | |
| background: linear-gradient(135deg, #ef4444 0%, #f87171 100%); | |
| color: white; | |
| } | |
| .risk-badge.high { | |
| background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%); | |
| color: white; | |
| } | |
| .risk-badge.medium { | |
| background: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%); | |
| color: white; | |
| } | |
| .risk-badge.low { | |
| background: linear-gradient(135deg, #10b981 0%, #34d399 100%); | |
| color: white; | |
| } | |
| /* Status Badges */ | |
| .status-badge { | |
| padding: 0.375rem 0.75rem; | |
| border-radius: 20px; | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.25rem; | |
| } | |
| .status-badge i { | |
| font-size: 0.7rem; | |
| } | |
| .status-badge.pending { | |
| background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%); | |
| color: white; | |
| } | |
| .status-badge.confirmed { | |
| background: linear-gradient(135deg, #10b981 0%, #34d399 100%); | |
| color: white; | |
| } | |
| .status-badge.completed { | |
| background: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%); | |
| color: white; | |
| } | |
| .status-badge.declined { | |
| background: linear-gradient(135deg, #ef4444 0%, #f87171 100%); | |
| color: white; | |
| } | |
| .status-badge.cancelled { | |
| background: linear-gradient(135deg, #6b7280 0%, #9ca3af 100%); | |
| color: white; | |
| } | |
| /* Action Buttons */ | |
| .action-buttons { | |
| display: flex; | |
| gap: 0.5rem; | |
| align-items: center; | |
| } | |
| .action-btn { | |
| width: 32px; | |
| height: 32px; | |
| border-radius: 6px; | |
| border: none; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: all 0.3s ease; | |
| font-size: 0.8rem; | |
| } | |
| .action-btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| .action-btn.btn-info { | |
| background: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%); | |
| color: white; | |
| } | |
| .action-btn.btn-warning { | |
| background: linear-gradient(135deg, #f59e0b 0%, #fbbf24 100%); | |
| color: white; | |
| } | |
| .action-btn.btn-danger { | |
| background: linear-gradient(135deg, #ef4444 0%, #f87171 100%); | |
| color: white; | |
| } | |
| .action-btn.btn-success { | |
| background: linear-gradient(135deg, #10b981 0%, #34d399 100%); | |
| color: white; | |
| } | |
| /* Responsive Design */ | |
| @media (max-width: 768px) { | |
| .bookings-filters .row > div { | |
| margin-bottom: 1rem; | |
| } | |
| .user-details { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 0.5rem; | |
| } | |
| .user-avatar { | |
| width: 32px; | |
| height: 32px; | |
| font-size: 0.8rem; | |
| } | |
| .action-buttons { | |
| flex-direction: column; | |
| gap: 0.25rem; | |
| } | |
| .action-btn { | |
| width: 28px; | |
| height: 28px; | |
| font-size: 0.7rem; | |
| } | |
| .info-box-content { | |
| padding: 0.75rem; | |
| } | |
| .info-box-number { | |
| font-size: 1.25rem; | |
| } | |
| } | |
| /* Loading States */ | |
| .bookings-loading { | |
| text-align: center; | |
| padding: 2rem; | |
| color: var(--text-secondary); | |
| } | |
| .bookings-loading i { | |
| font-size: 2rem; | |
| margin-bottom: 1rem; | |
| color: var(--primary); | |
| } | |
| /* Empty State */ | |
| .bookings-empty { | |
| text-align: center; | |
| padding: 3rem 1rem; | |
| color: var(--text-secondary); | |
| } | |
| .bookings-empty i { | |
| font-size: 3rem; | |
| margin-bottom: 1rem; | |
| color: var(--text-muted); | |
| } | |
| .bookings-empty h4 { | |
| color: var(--text); | |
| margin-bottom: 0.5rem; | |
| } | |
| .bookings-empty p { | |
| color: var(--text-secondary); | |
| margin-bottom: 1.5rem; | |
| } | |
| /* Large Avatar Styling for Modal */ | |
| .user-avatar-large { | |
| width: 80px; | |
| height: 80px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: white; | |
| font-weight: 700; | |
| font-size: 1.5rem; | |
| flex-shrink: 0; | |
| box-shadow: var(--shadow); | |
| } | |
| .professional-avatar-large { | |
| width: 80px; | |
| height: 80px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, #10b981 0%, #34d399 100%); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: white; | |
| font-weight: 700; | |
| font-size: 1.5rem; | |
| flex-shrink: 0; | |
| box-shadow: var(--shadow); | |
| } | |
| /* Modal Enhancements */ | |
| .modal-xl { | |
| max-width: 1200px; | |
| } | |
| .modal-content { | |
| border: none; | |
| border-radius: 12px; | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .modal-header { | |
| border-bottom: 1px solid var(--border-light); | |
| border-radius: 12px 12px 0 0; | |
| } | |
| .modal-body { | |
| padding: 2rem; | |
| max-height: 70vh; | |
| overflow-y: auto; | |
| } | |
| .modal-footer { | |
| border-top: 1px solid var(--border-light); | |
| border-radius: 0 0 12px 12px; | |
| } | |
| /* Booking Details Modal Styling */ | |
| .booking-header { | |
| border-bottom: 2px solid var(--border-light); | |
| padding-bottom: 1rem; | |
| } | |
| .booking-header h4 { | |
| color: var(--text); | |
| font-weight: 600; | |
| } | |
| .booking-header code { | |
| background: var(--surface); | |
| color: var(--primary); | |
| padding: 0.25rem 0.5rem; | |
| border-radius: 4px; | |
| font-size: 0.9rem; | |
| } | |
| /* Card Styling in Modal */ | |
| .modal-body .card { | |
| border: 1px solid var(--border-light); | |
| border-radius: 8px; | |
| box-shadow: var(--shadow); | |
| } | |
| .modal-body .card-header { | |
| border-bottom: 1px solid var(--border-light); | |
| font-weight: 600; | |
| } | |
| .modal-body .card-body { | |
| background: var(--surface); | |
| } | |
| .modal-body .card-body p { | |
| margin-bottom: 0.75rem; | |
| color: var(--text); | |
| } | |
| .modal-body .card-body strong { | |
| color: var(--text); | |
| font-weight: 600; | |
| } | |
| .modal-body .card-body a { | |
| text-decoration: none; | |
| transition: color 0.3s ease; | |
| } | |
| .modal-body .card-body a:hover { | |
| text-decoration: underline; | |
| } | |
| /* Responsive Modal */ | |
| @media (max-width: 768px) { | |
| .modal-xl { | |
| max-width: 95%; | |
| } | |
| .modal-body { | |
| padding: 1rem; | |
| } | |
| .user-avatar-large, | |
| .professional-avatar-large { | |
| width: 60px; | |
| height: 60px; | |
| font-size: 1.2rem; | |
| } | |
| .booking-header .row { | |
| flex-direction: column; | |
| } | |
| .booking-header .col-md-4 { | |
| text-align: left ; | |
| margin-top: 1rem; | |
| } | |
| } | |
| /* Ensure AdminLTE components work with our dark theme */ | |
| .content-wrapper { | |
| background-color: var(--background) ; | |
| color: var(--text) ; | |
| } | |
| .main-header { | |
| background-color: var(--surface) ; | |
| border-bottom: 1px solid var(--border) ; | |
| } | |
| .navbar-nav .nav-link { | |
| color: var(--text) ; | |
| } | |
| .sidebar { | |
| background-color: var(--surface) ; | |
| } | |
| .sidebar .nav-link { | |
| color: var(--text-secondary) ; | |
| } | |
| .sidebar .nav-link:hover { | |
| background-color: var(--card) ; | |
| color: var(--text) ; | |
| } | |
| .card { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .card-header { | |
| background-color: var(--surface) ; | |
| border-bottom: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .btn-primary { | |
| background-color: var(--primary) ; | |
| border-color: var(--primary) ; | |
| } | |
| .btn-primary:hover { | |
| background-color: var(--primary-dark) ; | |
| border-color: var(--primary-dark) ; | |
| } | |
| .btn-secondary { | |
| background-color: var(--surface) ; | |
| border-color: var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .btn-secondary:hover { | |
| background-color: var(--card) ; | |
| border-color: var(--border-light) ; | |
| } | |
| .form-control { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .form-control:focus { | |
| background-color: var(--card) ; | |
| border-color: var(--primary) ; | |
| color: var(--text) ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| } | |
| .table { | |
| color: var(--text) ; | |
| } | |
| .table th { | |
| background-color: var(--surface) ; | |
| border-color: var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .table td { | |
| border-color: var(--border) ; | |
| } | |
| .modal-content { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .modal-header { | |
| border-bottom: 1px solid var(--border) ; | |
| } | |
| .modal-footer { | |
| border-top: 1px solid var(--border) ; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; | |
| background: var(--background); | |
| color: var(--text); | |
| height: 100vh; | |
| overflow: hidden; | |
| } | |
| .admin-container { | |
| display: flex; | |
| height: 100vh; | |
| background: var(--background); | |
| } | |
| /* Navigation */ | |
| .admin-nav { | |
| width: 280px; | |
| background: linear-gradient(180deg, #111827 0%, #0f172a 60%); | |
| border-right: 1px solid var(--border); | |
| display: flex; | |
| flex-direction: column; | |
| flex-shrink: 0; | |
| } | |
| .nav-header { | |
| padding: 24px 20px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .nav-header h1 { | |
| font-size: 24px; | |
| font-weight: 700; | |
| color: var(--primary-light); | |
| margin-bottom: 4px; | |
| } | |
| .nav-header p { | |
| font-size: 14px; | |
| color: var(--text-muted); | |
| } | |
| .nav-menu { | |
| flex: 1; | |
| list-style: none; | |
| padding: 20px 0; | |
| } | |
| .nav-link { | |
| display: block; | |
| padding: 12px 20px; | |
| color: var(--text-secondary); | |
| text-decoration: none; | |
| transition: all 0.2s ease; | |
| border-left: 3px solid transparent; | |
| } | |
| .nav-link:hover { | |
| background: rgba(124, 58, 237, 0.1); | |
| color: var(--primary-light); | |
| } | |
| .nav-link.active { | |
| background: rgba(124, 58, 237, 0.15); | |
| color: var(--primary-light); | |
| border-left-color: var(--primary); | |
| } | |
| .nav-footer { | |
| padding: 20px; | |
| border-top: 1px solid var(--border); | |
| } | |
| .logout-btn { | |
| width: 100%; | |
| padding: 10px; | |
| background: transparent; | |
| border: 1px solid var(--border); | |
| color: var(--text-secondary); | |
| border-radius: 8px; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .logout-btn:hover { | |
| background: var(--danger); | |
| border-color: var(--danger); | |
| color: white; | |
| } | |
| /* Main Content */ | |
| .admin-content { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 24px; | |
| } | |
| /* Toolbar */ | |
| .admin-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px; } | |
| .admin-toolbar input{ flex:1; padding:10px 12px; background: var(--surface); border:1px solid var(--border); border-radius:8px; color: var(--text); } | |
| .admin-toolbar select{ padding:10px 12px; background: var(--surface); border:1px solid var(--border); border-radius:8px; color: var(--text); } | |
| /* KPI cards */ | |
| .kpi-grid{ display:grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap:16px; margin-bottom:24px; } | |
| .kpi-card{ background: var(--surface); border:1px solid var(--border); border-radius:12px; padding:16px; box-shadow: var(--shadow); } | |
| .kpi-label{ color: var(--text-muted); font-size:12px; margin-bottom:8px; } | |
| .kpi-value{ font-size:28px; font-weight:700; color: var(--text); } | |
| .kpi-trend{ font-size:12px; color: var(--text-secondary); margin-top:6px; } | |
| /* Pager & FAB & Toast */ | |
| .pager { display:flex; align-items:center; justify-content:flex-end; gap:10px; padding:12px 0; color: var(--text-secondary); } | |
| .pager-btn { padding:6px 10px; background: var(--surface); color: var(--text); border:1px solid var(--border); border-radius:6px; cursor:pointer; } | |
| .pager-btn:disabled { opacity:.5; cursor:not-allowed; } | |
| .pager-info { font-size:12px; } | |
| .fab { position:fixed; right:20px; bottom:20px; background: var(--primary); color:#fff; border:none; border-radius:9999px; padding:12px 16px; box-shadow: var(--shadow-lg); cursor:pointer; font-weight:600; } | |
| .fab:hover { background: var(--primary-dark); } | |
| .toast { background: rgba(30,41,59,.95); color:#e5e7eb; padding:10px 14px; border:1px solid var(--border); border-radius:8px; box-shadow: var(--shadow); transform: translateY(0); transition: opacity .2s ease, transform .2s ease; } | |
| .toast-success { border-color: rgba(16,185,129,.4); color:#10b981; } | |
| .toast-error { border-color: rgba(239,68,68,.4); color:#ef4444; } | |
| .admin-section { | |
| display: none; | |
| } | |
| .admin-section.active { | |
| display: block; | |
| } | |
| .section-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 24px; | |
| padding-bottom: 16px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .section-header h2 { | |
| font-size: 28px; | |
| font-weight: 700; | |
| color: var(--text); | |
| } | |
| .section-controls { | |
| display: flex; | |
| gap: 12px; | |
| align-items: center; | |
| } | |
| .search-box input { | |
| padding: 8px 12px; | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| color: var(--text); | |
| width: 200px; | |
| } | |
| .search-box input::placeholder { | |
| color: var(--text-muted); | |
| } | |
| /* Buttons */ | |
| .btn-primary { | |
| background: var(--primary); | |
| color: white; | |
| border: none; | |
| padding: 10px 16px; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| font-weight: 500; | |
| transition: all 0.2s ease; | |
| } | |
| .btn-primary:hover { | |
| background: var(--primary-dark); | |
| } | |
| .btn-secondary { | |
| background: var(--surface); | |
| color: var(--text); | |
| border: 1px solid var(--border); | |
| padding: 10px 16px; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| font-weight: 500; | |
| transition: all 0.2s ease; | |
| } | |
| .btn-secondary:hover { | |
| background: var(--card); | |
| } | |
| /* Professional Grid */ | |
| .professionals-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); | |
| gap: 20px; | |
| } | |
| .professional-card { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 20px; | |
| transition: all 0.2s ease; | |
| } | |
| .professional-card:hover { | |
| border-color: var(--primary); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .professional-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| margin-bottom: 16px; | |
| } | |
| .professional-name { | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: var(--text); | |
| margin-bottom: 4px; | |
| } | |
| .professional-specialization { | |
| font-size: 14px; | |
| color: var(--primary-light); | |
| font-weight: 500; | |
| } | |
| .professional-status { | |
| padding: 4px 8px; | |
| border-radius: 4px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .status-active { | |
| background: rgba(16, 185, 129, 0.2); | |
| color: var(--success); | |
| } | |
| .status-inactive { | |
| background: rgba(239, 68, 68, 0.2); | |
| color: var(--danger); | |
| } | |
| .professional-details { | |
| margin-bottom: 16px; | |
| } | |
| .professional-detail { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-bottom: 8px; | |
| font-size: 14px; | |
| } | |
| .professional-detail span:first-child { | |
| color: var(--text-muted); | |
| } | |
| .professional-detail span:last-child { | |
| color: var(--text-secondary); | |
| } | |
| .professional-actions { | |
| display: flex; | |
| gap: 8px; | |
| } | |
| .btn-small { | |
| padding: 6px 12px; | |
| font-size: 12px; | |
| border-radius: 4px; | |
| } | |
| .btn-danger { | |
| background: var(--danger); | |
| color: white; | |
| border: 1px solid var(--danger); | |
| } | |
| .btn-danger:hover { | |
| background: #dc2626; | |
| border-color: #dc2626; | |
| } | |
| /* Bookings Table */ | |
| .bookings-table { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| overflow: hidden; | |
| } | |
| .bookings-table table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| } | |
| .bookings-table th { | |
| background: var(--card); | |
| padding: 16px; | |
| text-align: left; | |
| font-weight: 600; | |
| color: var(--text); | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .bookings-table td { | |
| padding: 16px; | |
| border-bottom: 1px solid var(--border); | |
| color: var(--text-secondary); | |
| } | |
| .bookings-table tr:hover { | |
| background: rgba(124, 58, 237, 0.05); | |
| } | |
| .risk-badge { | |
| padding: 4px 8px; | |
| border-radius: 4px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .risk-critical { | |
| background: rgba(220, 38, 38, 0.2); | |
| color: var(--critical); | |
| } | |
| .risk-high { | |
| background: rgba(234, 88, 12, 0.2); | |
| color: var(--high); | |
| } | |
| .risk-medium { | |
| background: rgba(217, 119, 6, 0.2); | |
| color: var(--medium); | |
| } | |
| .risk-low { | |
| background: rgba(5, 150, 105, 0.2); | |
| color: var(--low); | |
| } | |
| .status-badge { | |
| padding: 4px 8px; | |
| border-radius: 4px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .status-pending { | |
| background: rgba(245, 158, 11, 0.2); | |
| color: var(--warning); | |
| } | |
| .status-confirmed { | |
| background: rgba(16, 185, 129, 0.2); | |
| color: var(--success); | |
| } | |
| .status-completed { | |
| background: rgba(59, 130, 246, 0.2); | |
| color: #3b82f6; | |
| } | |
| .status-declined { | |
| background: rgba(239, 68, 68, 0.2); | |
| color: var(--danger); | |
| } | |
| /* Risk Dashboard */ | |
| .risk-dashboard { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 24px; | |
| } | |
| .risk-stats { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 16px; | |
| } | |
| .stat-card { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 24px; | |
| text-align: center; | |
| transition: all 0.2s ease; | |
| } | |
| .stat-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .stat-card h3 { | |
| font-size: 14px; | |
| color: var(--text-muted); | |
| margin-bottom: 8px; | |
| font-weight: 500; | |
| } | |
| .stat-number { | |
| font-size: 32px; | |
| font-weight: 700; | |
| color: var(--text); | |
| } | |
| .stat-card.critical { | |
| border-color: var(--critical); | |
| } | |
| .stat-card.critical .stat-number { | |
| color: var(--critical); | |
| } | |
| .stat-card.high { | |
| border-color: var(--high); | |
| } | |
| .stat-card.high .stat-number { | |
| color: var(--high); | |
| } | |
| .stat-card.medium { | |
| border-color: var(--medium); | |
| } | |
| .stat-card.medium .stat-number { | |
| color: var(--medium); | |
| } | |
| .stat-card.low { | |
| border-color: var(--low); | |
| } | |
| .stat-card.low .stat-number { | |
| color: var(--low); | |
| } | |
| .recent-assessments { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 20px; | |
| } | |
| .recent-assessments h3 { | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: var(--text); | |
| margin-bottom: 16px; | |
| } | |
| .assessment-item { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 12px 0; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .assessment-item:last-child { | |
| border-bottom: none; | |
| } | |
| .assessment-info { | |
| flex: 1; | |
| } | |
| .assessment-query { | |
| font-size: 14px; | |
| color: var(--text-secondary); | |
| margin-bottom: 4px; | |
| } | |
| .assessment-time { | |
| font-size: 12px; | |
| color: var(--text-muted); | |
| } | |
| /* Analytics */ | |
| .analytics-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| gap: 20px; | |
| } | |
| .analytics-card { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 24px; | |
| text-align: center; | |
| } | |
| .analytics-card h3 { | |
| font-size: 14px; | |
| color: var(--text-muted); | |
| margin-bottom: 12px; | |
| font-weight: 500; | |
| } | |
| .analytics-number { | |
| font-size: 28px; | |
| font-weight: 700; | |
| color: var(--primary-light); | |
| } | |
| /* Modal */ | |
| .modal { | |
| display: none; | |
| position: fixed; | |
| z-index: 1000; | |
| left: 0; | |
| top: 0; | |
| width: 100%; | |
| height: 100%; | |
| background-color: rgba(0, 0, 0, 0.5); | |
| backdrop-filter: blur(4px); | |
| } | |
| .modal-content { | |
| background: var(--surface); | |
| margin: 5% auto; | |
| padding: 24px; | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| width: 90%; | |
| max-width: 600px; | |
| max-height: 80vh; | |
| overflow-y: auto; | |
| } | |
| .modal-content.large { | |
| max-width: 800px; | |
| } | |
| .close { | |
| color: var(--text-muted); | |
| float: right; | |
| font-size: 28px; | |
| font-weight: bold; | |
| cursor: pointer; | |
| transition: color 0.2s ease; | |
| } | |
| .close:hover { | |
| color: var(--text); | |
| } | |
| /* Form Styles */ | |
| .form-row { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 16px; | |
| margin-bottom: 16px; | |
| } | |
| .form-group { | |
| margin-bottom: 16px; | |
| } | |
| .form-group label { | |
| display: block; | |
| margin-bottom: 6px; | |
| font-weight: 500; | |
| color: var(--text); | |
| } | |
| .form-group input, | |
| .form-group select, | |
| .form-group textarea { | |
| width: 100%; | |
| padding: 10px 12px; | |
| background: var(--background); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| color: var(--text); | |
| font-size: 14px; | |
| } | |
| .form-group input:focus, | |
| .form-group select:focus, | |
| .form-group textarea:focus { | |
| outline: none; | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1); | |
| } | |
| .checkbox-group { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); | |
| gap: 8px; | |
| } | |
| .checkbox-group label { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-weight: normal; | |
| margin-bottom: 0; | |
| } | |
| .checkbox-group input[type="checkbox"] { | |
| width: auto; | |
| margin: 0; | |
| } | |
| .form-actions { | |
| display: flex; | |
| gap: 12px; | |
| justify-content: flex-end; | |
| margin-top: 24px; | |
| padding-top: 20px; | |
| border-top: 1px solid var(--border); | |
| } | |
| /* Responsive */ | |
| @media (max-width: 768px) { | |
| .admin-nav { | |
| width: 240px; | |
| } | |
| .admin-content { | |
| padding: 16px; | |
| } | |
| .section-header { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 16px; | |
| } | |
| .section-controls { | |
| width: 100%; | |
| justify-content: space-between; | |
| } | |
| .form-row { | |
| grid-template-columns: 1fr; | |
| } | |
| .risk-dashboard { | |
| grid-template-columns: 1fr; | |
| } | |
| .risk-stats { | |
| grid-template-columns: 1fr; | |
| } | |
| .modal-content { | |
| margin: 10% auto; | |
| width: 95%; | |
| } | |
| } | |
| /* RAG Status Styles */ | |
| .rag-status-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); | |
| gap: 20px; | |
| margin-bottom: 30px; | |
| } | |
| .rag-card { | |
| background: var(--card); | |
| border-radius: 12px; | |
| padding: 20px; | |
| border: 1px solid var(--border); | |
| } | |
| .rag-card h3 { | |
| color: var(--text); | |
| font-size: 18px; | |
| font-weight: 600; | |
| margin-bottom: 16px; | |
| border-bottom: 1px solid var(--border); | |
| padding-bottom: 8px; | |
| } | |
| .rag-info { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 12px; | |
| } | |
| .rag-label { | |
| color: var(--text-secondary); | |
| font-size: 14px; | |
| } | |
| .rag-value { | |
| color: var(--text); | |
| font-weight: 500; | |
| font-size: 14px; | |
| } | |
| .rag-status-indicator { | |
| padding: 4px 8px; | |
| border-radius: 6px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .rag-status-indicator.active { | |
| background: var(--success); | |
| color: white; | |
| } | |
| .rag-status-indicator.inactive { | |
| background: var(--danger); | |
| color: white; | |
| } | |
| .rag-data-sources { | |
| background: var(--card); | |
| border-radius: 12px; | |
| padding: 20px; | |
| border: 1px solid var(--border); | |
| } | |
| .rag-data-sources h3 { | |
| color: var(--text); | |
| font-size: 18px; | |
| font-weight: 600; | |
| margin-bottom: 16px; | |
| } | |
| .data-sources-list { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
| gap: 12px; | |
| } | |
| .data-source-item { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 12px; | |
| background: var(--surface); | |
| border-radius: 8px; | |
| border: 1px solid var(--border-light); | |
| } | |
| .source-name { | |
| color: var(--text); | |
| font-size: 14px; | |
| font-weight: 500; | |
| } | |
| .source-status { | |
| padding: 4px 8px; | |
| border-radius: 6px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .source-status.active { | |
| background: var(--success); | |
| color: white; | |
| } | |
| .source-status.inactive { | |
| background: var(--danger); | |
| color: white; | |
| } | |
| /* AdminLTE 4 Additional Enhancements */ | |
| /* Toast Notifications */ | |
| .toast { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .toast-header { | |
| background-color: var(--surface) ; | |
| border-bottom: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| /* DataTables Integration */ | |
| .dataTables_wrapper { | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_length, | |
| .dataTables_wrapper .dataTables_filter, | |
| .dataTables_wrapper .dataTables_info, | |
| .dataTables_wrapper .dataTables_processing, | |
| .dataTables_wrapper .dataTables_paginate { | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_filter input { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_length select { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_paginate .paginate_button { | |
| background-color: var(--surface) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_paginate .paginate_button:hover { | |
| background-color: var(--card) ; | |
| color: var(--text) ; | |
| } | |
| .dataTables_wrapper .dataTables_paginate .paginate_button.current { | |
| background-color: var(--primary) ; | |
| color: white ; | |
| } | |
| /* Select2 Integration */ | |
| .select2-container--default .select2-selection--single { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| color: var(--text) ; | |
| } | |
| .select2-container--default .select2-selection--single .select2-selection__rendered { | |
| color: var(--text) ; | |
| } | |
| .select2-container--default .select2-dropdown { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| } | |
| .select2-container--default .select2-results__option { | |
| color: var(--text) ; | |
| } | |
| .select2-container--default .select2-results__option--highlighted[aria-selected] { | |
| background-color: var(--primary) ; | |
| color: white ; | |
| } | |
| /* Chart.js Integration */ | |
| .chart-container { | |
| background-color: var(--card) ; | |
| border: 1px solid var(--border) ; | |
| border-radius: 8px; | |
| padding: 20px; | |
| } | |
| /* SweetAlert2 Integration */ | |
| .swal2-popup { | |
| background-color: var(--card) ; | |
| color: var(--text) ; | |
| } | |
| .swal2-title { | |
| color: var(--text) ; | |
| } | |
| .swal2-content { | |
| color: var(--text-secondary) ; | |
| } | |
| .swal2-confirm { | |
| background-color: var(--primary) ; | |
| } | |
| .swal2-cancel { | |
| background-color: var(--surface) ; | |
| color: var(--text) ; | |
| } | |
| /* Loading States */ | |
| .loading { | |
| opacity: 0.6; | |
| pointer-events: none; | |
| } | |
| .spinner-border { | |
| color: var(--primary) ; | |
| } | |
| /* Enhanced Animations */ | |
| .fade-in { | |
| animation: fadeIn 0.3s ease-in; | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; transform: translateY(10px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .slide-in { | |
| animation: slideIn 0.3s ease-out; | |
| } | |
| @keyframes slideIn { | |
| from { transform: translateX(-100%); } | |
| to { transform: translateX(0); } | |
| } | |
| /* Responsive Enhancements */ | |
| @media (max-width: 768px) { | |
| .admin-nav { | |
| transform: translateX(-100%); | |
| transition: transform 0.3s ease; | |
| } | |
| .admin-nav.mobile-open { | |
| transform: translateX(0); | |
| } | |
| .admin-content { | |
| margin-left: 0; | |
| } | |
| .mobile-menu-toggle { | |
| display: block; | |
| } | |
| } | |
| .mobile-menu-toggle { | |
| display: none; | |
| position: fixed; | |
| top: 20px; | |
| left: 20px; | |
| z-index: 1000; | |
| background: var(--primary); | |
| color: white; | |
| border: none; | |
| padding: 10px; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| } | |
| /* Print Styles */ | |
| @media print { | |
| .admin-nav, | |
| .admin-toolbar, | |
| .btn, | |
| .modal { | |
| display: none ; | |
| } | |
| .admin-content { | |
| margin-left: 0 ; | |
| width: 100% ; | |
| } | |
| .card { | |
| border: 1px solid #000 ; | |
| box-shadow: none ; | |
| } | |
| } | |
| /* Form Validation Styles */ | |
| .form-control.is-invalid { | |
| border-color: #dc3545; | |
| box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); | |
| } | |
| .form-control.is-valid { | |
| border-color: #28a745; | |
| box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); | |
| } | |
| /* Modal Improvements */ | |
| .modal { | |
| z-index: 1050; | |
| } | |
| .modal-backdrop { | |
| z-index: 1040; | |
| } | |
| /* Professional Form Styles */ | |
| #professionalForm .form-group { | |
| margin-bottom: 1rem; | |
| } | |
| #professionalForm .form-check { | |
| margin-bottom: 0.5rem; | |
| } | |
| #professionalForm .form-check-input { | |
| margin-top: 0.25rem; | |
| } | |
| /* Button States */ | |
| .btn:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| /* Professional Card Improvements */ | |
| .professional-card { | |
| transition: transform 0.2s ease, box-shadow 0.2s ease; | |
| } | |
| .professional-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 8px rgba(0,0,0,0.15); | |
| } | |
| .professional-actions { | |
| display: flex; | |
| gap: 0.5rem; | |
| flex-wrap: wrap; | |
| } | |
| .btn-small { | |
| padding: 0.25rem 0.5rem; | |
| font-size: 0.875rem; | |
| border-radius: 0.25rem; | |
| } | |
| /* Form Input Focus States */ | |
| .form-control:focus { | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25); | |
| } | |
| /* Professional Form Specific Styles */ | |
| #professionalForm { | |
| max-height: 70vh; | |
| overflow-y: auto; | |
| } | |
| /* Force input functionality */ | |
| #professionalForm input, | |
| #professionalForm select, | |
| #professionalForm textarea { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| border: 1px solid #ced4da ; | |
| padding: 0.375rem 0.75rem ; | |
| font-size: 1rem ; | |
| line-height: 1.5 ; | |
| border-radius: 0.25rem ; | |
| width: 100% ; | |
| display: block ; | |
| pointer-events: auto ; | |
| user-select: text ; | |
| -webkit-user-select: text ; | |
| -moz-user-select: text ; | |
| -ms-user-select: text ; | |
| } | |
| #professionalForm input:focus, | |
| #professionalForm select:focus, | |
| #professionalForm textarea:focus { | |
| border-color: #7c3aed ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| outline: 0 ; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| #professionalForm input:not(:disabled):not([readonly]) { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| cursor: text ; | |
| } | |
| /* Ensure form controls work */ | |
| #professionalForm .form-control { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| border: 1px solid #ced4da ; | |
| padding: 0.375rem 0.75rem ; | |
| font-size: 1rem ; | |
| line-height: 1.5 ; | |
| border-radius: 0.25rem ; | |
| pointer-events: auto ; | |
| user-select: text ; | |
| } | |
| #professionalForm .form-control:focus { | |
| border-color: #7c3aed ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| outline: 0 ; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| /* Modal input fixes */ | |
| #professionalModal input, | |
| #professionalModal select, | |
| #professionalModal textarea { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| border: 1px solid #ced4da ; | |
| padding: 0.375rem 0.75rem ; | |
| font-size: 1rem ; | |
| line-height: 1.5 ; | |
| border-radius: 0.25rem ; | |
| width: 100% ; | |
| display: block ; | |
| pointer-events: auto ; | |
| user-select: text ; | |
| } | |
| #professionalModal input:focus, | |
| #professionalModal select:focus, | |
| #professionalModal textarea:focus { | |
| border-color: #7c3aed ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| outline: 0 ; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| #professionalForm .form-control { | |
| transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| border: 1px solid #ced4da ; | |
| padding: 0.375rem 0.75rem ; | |
| font-size: 1rem ; | |
| line-height: 1.5 ; | |
| border-radius: 0.25rem ; | |
| } | |
| #professionalForm .form-control:focus { | |
| border-color: var(--primary) ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| outline: 0 ; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| #professionalForm .form-control:not(:disabled):not([readonly]) { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| #professionalForm input[type="text"], | |
| #professionalForm input[type="email"], | |
| #professionalForm input[type="tel"], | |
| #professionalForm input[type="password"], | |
| #professionalForm input[type="number"], | |
| #professionalForm select, | |
| #professionalForm textarea { | |
| background-color: #fff ; | |
| color: #497060 ; | |
| border: 1px solid #ced4da ; | |
| padding: 0.375rem 0.75rem ; | |
| font-size: 1rem ; | |
| line-height: 1.5 ; | |
| border-radius: 0.25rem ; | |
| width: 100% ; | |
| display: block ; | |
| } | |
| #professionalForm input:focus, | |
| #professionalForm select:focus, | |
| #professionalForm textarea:focus { | |
| border-color: var(--primary) ; | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25) ; | |
| outline: 0 ; | |
| background-color: #fff ; | |
| color: #497060 ; | |
| } | |
| #professionalForm .form-control:focus { | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 0.2rem rgba(124, 58, 237, 0.25); | |
| } | |
| #professionalForm .form-control.is-valid { | |
| border-color: #28a745; | |
| background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='m2.3 6.73.94-.94 1.44 1.44 3.16-3.16.94.94-4.1 4.1z'/%3e%3c/svg%3e"); | |
| background-repeat: no-repeat; | |
| background-position: right calc(0.375em + 0.1875rem) center; | |
| background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); | |
| } | |
| #professionalForm .form-control.is-invalid { | |
| border-color: #dc3545; | |
| background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath d='m5.8 4.6 1.4 1.4 1.4-1.4'/%3e%3c/svg%3e"); | |
| background-repeat: no-repeat; | |
| background-position: right calc(0.375em + 0.1875rem) center; | |
| background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); | |
| } | |
| /* Expertise Areas Styling */ | |
| #professionalForm .form-check { | |
| margin-bottom: 0.5rem; | |
| padding-left: 1.5rem; | |
| } | |
| #professionalForm .form-check-input { | |
| margin-top: 0.25rem; | |
| margin-left: -1.5rem; | |
| } | |
| #professionalForm .form-check-label { | |
| cursor: pointer; | |
| user-select: none; | |
| } | |
| /* Modal Improvements */ | |
| .modal-dialog { | |
| margin: 1.75rem auto; | |
| } | |
| .modal-content { | |
| border: none; | |
| border-radius: 0.5rem; | |
| box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); | |
| } | |
| .modal-header { | |
| border-bottom: 1px solid #dee2e6; | |
| padding: 1rem 1.5rem; | |
| } | |
| .modal-body { | |
| padding: 1.5rem; | |
| } | |
| .modal-footer { | |
| border-top: 1px solid #dee2e6; | |
| padding: 1rem 1.5rem; | |
| } | |
| /* Button Improvements */ | |
| .btn:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| .btn-primary:disabled { | |
| background-color: #6c757d; | |
| border-color: #6c757d; | |
| } | |
| /* Loading State */ | |
| .btn.loading { | |
| position: relative; | |
| color: transparent; | |
| } | |
| .btn.loading::after { | |
| content: ""; | |
| position: absolute; | |
| width: 16px; | |
| height: 16px; | |
| top: 50%; | |
| left: 50%; | |
| margin-left: -8px; | |
| margin-top: -8px; | |
| border: 2px solid transparent; | |
| border-top-color: #ffffff; | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| /* Loading States */ | |
| .loading { | |
| opacity: 0.6; | |
| pointer-events: none; | |
| } | |
| /* Toast Notifications */ | |
| .toast-container { | |
| position: fixed; | |
| top: 20px; | |
| right: 20px; | |
| z-index: 1060; | |
| } | |
| .toast { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| color: var(--text); | |
| } | |
| .toast-success { | |
| border-left: 4px solid var(--success); | |
| } | |
| .toast-error { | |
| border-left: 4px solid var(--danger); | |
| } | |