/* =================================== CSS Variables =================================== */ :root { /* Colors */ --primary-color: #0066cc; --primary-hover: #0052a3; --secondary-color: #6c757d; --success-color: #28a745; --danger-color: #dc3545; --warning-color: #ffc107; --info-color: #17a2b8; --light-color: #f8f9fa; --dark-color: #212529; /* Gray Scale */ --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; /* Spacing */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; --spacing-2xl: 48px; /* Font Sizes */ --font-size-xs: 12px; --font-size-sm: 14px; --font-size-base: 16px; --font-size-lg: 18px; --font-size-xl: 20px; --font-size-2xl: 24px; --font-size-3xl: 30px; /* Border Radius */ --border-radius-sm: 4px; --border-radius-md: 8px; --border-radius-lg: 12px; --border-radius-xl: 16px; --border-radius-full: 9999px; /* Shadows */ --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); /* Transitions */ --transition-fast: 150ms ease-in-out; --transition-base: 250ms ease-in-out; --transition-slow: 350ms ease-in-out; } /* =================================== Reset & Base Styles =================================== */ * { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: var(--font-size-base); line-height: 1.5; color: var(--dark-color); background: var(--gray-50); min-height: 100vh; } /* =================================== Header & Navigation =================================== */ .main-header { background: white; border-bottom: 1px solid var(--gray-200); position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-sm); } .navbar { padding: 0; } .nav-container { max-width: 1400px; margin: 0 auto; padding: 0 var(--spacing-lg); display: flex; align-items: center; justify-content: space-between; min-height: 64px; } .nav-brand { display: flex; align-items: center; gap: var(--spacing-md); font-weight: 700; font-size: var(--font-size-lg); color: var(--dark-color); } .logo { width: 40px; height: 40px; background: linear-gradient(135deg, var(--primary-color), #004080); color: white; border-radius: var(--border-radius-lg); display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 18px; } .nav-menu { display: flex; align-items: center; gap: var(--spacing-sm); flex: 1; justify-content: flex-end; } .nav-link { display: flex; align-items: center; gap: var(--spacing-sm); padding: var(--spacing-sm) var(--spacing-md); color: var(--gray-700); text-decoration: none; border-radius: var(--border-radius-md); transition: all var(--transition-fast); font-size: var(--font-size-sm); font-weight: 500; white-space: nowrap; } .nav-link:hover { background: var(--gray-100); color: var(--primary-color); } .nav-link.active { background: var(--primary-color); color: white; } .nav-icon { font-size: 18px; } .mobile-toggle { display: none; flex-direction: column; gap: 4px; background: none; border: none; padding: var(--spacing-sm); cursor: pointer; } .mobile-toggle span { width: 24px; height: 2px; background: var(--dark-color); transition: var(--transition-fast); } /* =================================== Page Container & Layout =================================== */ .page-container { max-width: 1400px; margin: 0 auto; padding: var(--spacing-2xl) var(--spacing-lg); } .page-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: var(--spacing-2xl); gap: var(--spacing-lg); } .page-header h1 { font-size: var(--font-size-3xl); font-weight: 700; color: var(--dark-color); margin-bottom: var(--spacing-xs); } .page-subtitle { font-size: var(--font-size-base); color: var(--gray-600); margin: 0; } .header-actions { display: flex; gap: var(--spacing-md); } /* =================================== Buttons =================================== */ .btn { display: inline-flex; align-items: center; gap: var(--spacing-sm); padding: 10px 20px; border: none; border-radius: var(--border-radius-md); font-size: var(--font-size-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); text-decoration: none; white-space: nowrap; } .btn-primary { background: var(--primary-color); color: white; } .btn-primary:hover { background: var(--primary-hover); transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-secondary { background: var(--gray-200); color: var(--gray-700); } .btn-secondary:hover { background: var(--gray-300); } /* =================================== Statistics Cards =================================== */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); margin-bottom: var(--spacing-2xl); } .stat-card { background: white; padding: var(--spacing-xl); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); display: flex; align-items: center; gap: var(--spacing-lg); transition: var(--transition-base); } .stat-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } .stat-icon { font-size: 48px; opacity: 0.9; } .stat-content h3 { font-size: var(--font-size-3xl); font-weight: 700; color: var(--dark-color); margin-bottom: var(--spacing-xs); } .stat-content p { font-size: var(--font-size-sm); color: var(--gray-600); margin: 0 0 var(--spacing-xs) 0; } .stat-change { font-size: var(--font-size-xs); font-weight: 600; padding: 2px 8px; border-radius: var(--border-radius-sm); } .stat-change.positive { background: #d4edda; color: #155724; } .stat-change.negative { background: #f8d7da; color: #721c24; } .stat-change.neutral { background: var(--gray-100); color: var(--gray-600); } /* =================================== User Stats (Alternative Layout) =================================== */ .user-stats { background: white; padding: var(--spacing-xl); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); margin-bottom: var(--spacing-2xl); } .stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--spacing-xl); } .stat-item { text-align: center; } .stat-number { font-size: var(--font-size-3xl); font-weight: 700; color: var(--primary-color); margin-bottom: var(--spacing-xs); } .stat-label { font-size: var(--font-size-sm); color: var(--gray-600); } /* =================================== Table Controls (Search & Filters) =================================== */ .table-controls { display: flex; gap: var(--spacing-md); margin-bottom: var(--spacing-lg); flex-wrap: wrap; } .search-container { flex: 1; min-width: 250px; } .search-input { width: 100%; padding: 10px 16px; border: 1px solid var(--gray-300); border-radius: var(--border-radius-md); font-size: var(--font-size-sm); transition: var(--transition-fast); } .search-input:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1); } .filter-container { display: flex; gap: var(--spacing-md); flex-wrap: wrap; } .filter-select { padding: 10px 16px; border: 1px solid var(--gray-300); border-radius: var(--border-radius-md); font-size: var(--font-size-sm); background: white; cursor: pointer; transition: var(--transition-fast); } .filter-select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1); } /* =================================== Tables - FIXED LAYOUT =================================== */ .table-container { background: white; border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); overflow-x: auto; overflow-y: visible; } .data-table { width: 100%; border-collapse: collapse; font-size: var(--font-size-sm); table-layout: fixed; min-width: 100%; } .data-table thead { background: var(--gray-50); border-bottom: 2px solid var(--gray-200); } .data-table th { padding: 16px 12px; text-align: left; font-weight: 600; color: var(--gray-700); text-transform: uppercase; font-size: var(--font-size-xs); letter-spacing: 0.5px; white-space: nowrap; position: sticky; top: 0; background: var(--gray-50); z-index: 10; } .data-table td { padding: 16px 12px; border-bottom: 1px solid var(--gray-100); vertical-align: middle; overflow: hidden; text-overflow: ellipsis; } .data-table tbody tr { transition: var(--transition-fast); } .data-table tbody tr:hover { background: var(--gray-50); } .data-table tbody tr:last-child td { border-bottom: none; } /* =================================== Badges =================================== */ .role-badge, .status-badge { display: inline-block; padding: 4px 12px; border-radius: var(--border-radius-full); font-size: var(--font-size-xs); font-weight: 600; text-transform: uppercase; white-space: nowrap; } /* Role Badges */ .role-badge.role-admin { background: #e3f2fd; color: #1976d2; } .role-badge.role-manager { background: #f3e5f5; color: #7b1fa2; } /* Status Badges */ .status-badge.status-active { background: #d4edda; color: #155724; } .status-badge.status-inactive { background: #f8d7da; color: #721c24; } .status-badge.status-suspended { background: #fff3cd; color: #856404; } .status-badge.status-open { background: #d1ecf1; color: #0c5460; } .status-badge.status-pending { background: #fff3cd; color: #856404; } .status-badge.status-resolved, .status-badge.status-completed { background: #d4edda; color: #155724; } .status-badge.status-closed { background: var(--gray-200); color: var(--gray-700); } /* =================================== Messages =================================== */ .success-message, .error-message { padding: 16px 20px; border-radius: var(--border-radius-md); margin-bottom: var(--spacing-lg); display: flex; align-items: center; gap: var(--spacing-md); font-size: var(--font-size-sm); } .success-message { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; } .error-message { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; } .message-icon { font-size: 20px; } /* =================================== Forms =================================== */ .form-group { margin-bottom: var(--spacing-lg); } .form-group label { display: block; margin-bottom: var(--spacing-sm); color: var(--gray-700); font-weight: 600; font-size: var(--font-size-sm); } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 10px 16px; border: 1px solid var(--gray-300); border-radius: var(--border-radius-md); font-size: var(--font-size-sm); transition: var(--transition-fast); font-family: inherit; } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1); } .form-group input:disabled, .form-group select:disabled { background: var(--gray-100); cursor: not-allowed; } .form-help { display: block; margin-top: var(--spacing-xs); font-size: var(--font-size-xs); color: var(--gray-600); } .form-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--spacing-lg); } .form-actions { display: flex; gap: var(--spacing-md); margin-top: var(--spacing-xl); justify-content: flex-end; } /* =================================== Modal =================================== */ .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000; align-items: center; justify-content: center; padding: var(--spacing-lg); } .modal-content { background: white; border-radius: var(--border-radius-xl); padding: var(--spacing-2xl); max-width: 500px; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: var(--shadow-xl); } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--spacing-xl); } .modal-header h2 { font-size: var(--font-size-2xl); color: var(--dark-color); margin: 0; } .modal-close { background: none; border: none; font-size: 28px; color: var(--gray-500); cursor: pointer; padding: 0; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: var(--border-radius-md); transition: var(--transition-fast); } .modal-close:hover { background: var(--gray-100); color: var(--gray-700); } /* =================================== Dashboard Specific =================================== */ .dashboard-container { /* Dashboard specific styles */ } .quick-actions-section h2 { font-size: var(--font-size-2xl); font-weight: 700; color: var(--dark-color); margin-bottom: var(--spacing-lg); } .quick-actions-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-lg); } .quick-action-card { background: white; padding: var(--spacing-xl); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); transition: var(--transition-base); text-align: center; } .quick-action-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-4px); } .action-icon { font-size: 48px; margin-bottom: var(--spacing-md); } .quick-action-card h3 { font-size: var(--font-size-lg); color: var(--dark-color); margin-bottom: var(--spacing-sm); } .quick-action-card p { font-size: var(--font-size-sm); color: var(--gray-600); margin: 0; } /* =================================== Settings & Tabs =================================== */ .settings-container { display: grid; grid-template-columns: 250px 1fr; gap: var(--spacing-2xl); } .settings-nav { background: white; padding: var(--spacing-lg); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); height: fit-content; position: sticky; top: 80px; } .settings-tabs { list-style: none; } .settings-tabs li { margin-bottom: var(--spacing-xs); } .tab-link { display: block; padding: var(--spacing-md); color: var(--gray-700); text-decoration: none; border-radius: var(--border-radius-md); transition: var(--transition-fast); font-size: var(--font-size-sm); font-weight: 500; } .tab-link:hover { background: var(--gray-100); color: var(--primary-color); } .tab-link.active { background: var(--primary-color); color: white; } .settings-content { background: white; padding: var(--spacing-2xl); border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); } .settings-section { margin-bottom: var(--spacing-2xl); } .settings-section:last-child { margin-bottom: 0; } .settings-section h2 { font-size: var(--font-size-2xl); color: var(--dark-color); margin-bottom: var(--spacing-lg); padding-bottom: var(--spacing-md); border-bottom: 2px solid var(--gray-200); } .tab-content { display: none; } .tab-content.active { display: block; } /* =================================== Responsive Design =================================== */ @media (max-width: 1024px) { .settings-container { grid-template-columns: 1fr; } .settings-nav { position: static; } } @media (max-width: 768px) { .page-container { padding: var(--spacing-lg); } .page-header { flex-direction: column; } .header-actions { width: 100%; } .stats-grid, .quick-actions-grid { grid-template-columns: 1fr; } .stats-row { grid-template-columns: repeat(2, 1fr); } .mobile-toggle { display: flex; } .nav-menu { display: none; position: absolute; top: 64px; left: 0; right: 0; background: white; flex-direction: column; padding: var(--spacing-lg); border-top: 1px solid var(--gray-200); box-shadow: var(--shadow-lg); } .nav-menu.active { display: flex; } .nav-link { width: 100%; justify-content: flex-start; } .table-container { overflow-x: scroll; } .form-row { grid-template-columns: 1fr; } } @media (max-width: 480px) { .stats-row { grid-template-columns: 1fr; } .table-controls { flex-direction: column; } .search-container, .filter-container { width: 100%; } .filter-container { flex-direction: column; } .filter-select { width: 100%; } } /* =================================== Utility Classes =================================== */ .text-center { text-align: center; } .text-right { text-align: right; } .mt-0 { margin-top: 0; } .mt-1 { margin-top: var(--spacing-xs); } .mt-2 { margin-top: var(--spacing-sm); } .mt-3 { margin-top: var(--spacing-md); } .mt-4 { margin-top: var(--spacing-lg); } .mt-5 { margin-top: var(--spacing-xl); } .mb-0 { margin-bottom: 0; } .mb-1 { margin-bottom: var(--spacing-xs); } .mb-2 { margin-bottom: var(--spacing-sm); } .mb-3 { margin-bottom: var(--spacing-md); } .mb-4 { margin-bottom: var(--spacing-lg); } .mb-5 { margin-bottom: var(--spacing-xl); } .skip-link { position: absolute; top: -40px; left: 0; background: var(--primary-color); color: white; padding: 8px; text-decoration: none; z-index: 100; } .skip-link:focus { top: 0; }