/* Admin Dashboard Styles */ :root { --primary-color: #4a6cf7; --secondary-color: #0e2e50; --success-color: #28a745; --danger-color: #dc3545; --warning-color: #ffc107; --info-color: #17a2b8; --light-color: #f8f9fa; --dark-color: #343a40; --border-color: #e5e7eb; --background-color: #f9fafb; --header-height: 64px; --footer-height: 60px; --sidebar-width: 250px; } * { box-sizing: border-box; margin: 0; padding: 0; } body.admin-page { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; background-color: var(--background-color); color: var(--dark-color); line-height: 1.5; } .admin-header { background-color: var(--secondary-color); color: white; padding: 1rem 2rem; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } .admin-header h1 { font-size: 1.5rem; font-weight: 600; } .admin-nav { background-color: white; display: flex; padding: 0 1rem; border-bottom: 1px solid var(--border-color); overflow-x: auto; } .admin-nav a { padding: 1rem 1.25rem; color: var(--dark-color); text-decoration: none; border-bottom: 2px solid transparent; font-weight: 500; white-space: nowrap; } .admin-nav a:hover { color: var(--primary-color); border-bottom-color: var(--primary-color); } .admin-nav a.active { color: var(--primary-color); border-bottom-color: var(--primary-color); font-weight: 600; } .admin-content { padding: 2rem; max-width: 1600px; margin: 0 auto; min-height: calc(100vh - var(--header-height) - var(--footer-height) - 48px); } .admin-footer { background-color: white; text-align: center; padding: 1rem; border-top: 1px solid var(--border-color); color: #666; font-size: 0.875rem; } /* Dashboard Stats */ .dashboard-stats { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .stat-box { background-color: white; border-radius: 8px; padding: 1.5rem; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); border: 1px solid var(--border-color); } .stat-box h3 { font-size: 0.875rem; color: #6b7280; margin-bottom: 0.5rem; font-weight: 500; } .stat-value { font-size: 1.25rem; font-weight: 600; color: var(--dark-color); } .status-connected { color: var(--success-color); } /* Extensions List */ .admin-section { background-color: white; border-radius: 8px; padding: 1.5rem; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); margin-bottom: 2rem; border: 1px solid var(--border-color); } .admin-section h2 { font-size: 1.25rem; margin-bottom: 1rem; color: var(--secondary-color); font-weight: 600; } .extensions-list { display: flex; flex-wrap: wrap; gap: 0.5rem; } .extension-badge { background-color: #e9ecef; padding: 0.25rem 0.75rem; border-radius: 50px; font-size: 0.875rem; color: #495057; } /* Tables */ .admin-table { width: 100%; border-collapse: collapse; margin-bottom: 2rem; } .admin-table th, .admin-table td { padding: 0.75rem 1rem; text-align: left; border-bottom: 1px solid var(--border-color); } .admin-table th { background-color: #f8f9fa; font-weight: 600; color: #495057; } .admin-table tbody tr:hover { background-color: #f8f9fa; } /* Search and Filters */ .admin-tools { margin-bottom: 1.5rem; display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; } .search-input { padding: 0.5rem 1rem; border: 1px solid var(--border-color); border-radius: 4px; font-size: 0.875rem; width: 300px; max-width: 100%; } .services-count { font-size: 0.875rem; color: #6b7280; } /* Service List */ .service-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1rem; } .service-item { background-color: white; border-radius: 6px; padding: 1rem; border: 1px solid var(--border-color); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .service-name { font-weight: 500; margin-bottom: 0.5rem; word-break: break-word; } .service-category { display: flex; gap: 0.5rem; flex-wrap: wrap; } .category-badge { background-color: var(--primary-color); color: white; padding: 0.1rem 0.5rem; border-radius: 4px; font-size: 0.75rem; } .subcategory-badge { background-color: #e9ecef; color: #495057; padding: 0.1rem 0.5rem; border-radius: 4px; font-size: 0.75rem; } /* Filter Tags */ .filter-tags { display: flex; flex-wrap: wrap; gap: 0.5rem; } .filter-tag { background-color: #e9ecef; border: none; padding: 0.25rem 0.75rem; border-radius: 50px; font-size: 0.875rem; color: #495057; cursor: pointer; } .filter-tag:hover { background-color: #dee2e6; } .filter-tag.active { background-color: var(--primary-color); color: white; } /* Progress Bar */ .progress-bar { width: 100%; height: 8px; background-color: #e9ecef; border-radius: 4px; overflow: hidden; margin-bottom: 0.25rem; } .progress { height: 100%; background-color: var(--primary-color); border-radius: 4px; } .progress-value { font-size: 0.875rem; color: #6b7280; } /* File List */ .file-list { max-height: 400px; overflow-y: auto; border: 1px solid var(--border-color); border-radius: 4px; } .file-item { padding: 0.5rem 1rem; border-bottom: 1px solid var(--border-color); font-size: 0.875rem; font-family: monospace; } .file-item:last-child { border-bottom: none; } /* Key List */ .key-list { max-height: 400px; overflow-y: auto; border: 1px solid var(--border-color); border-radius: 4px; } .key-item { padding: 0.5rem 1rem; border-bottom: 1px solid var(--border-color); font-size: 0.875rem; font-family: monospace; } .key-item:last-child { border-bottom: none; } .empty-message { padding: 2rem; text-align: center; color: #6b7280; } /* Error Message */ .error-message { background-color: #fff5f5; border: 1px solid #fed7d7; padding: 2rem; text-align: center; border-radius: 8px; color: var(--danger-color); } .error-message h2 { margin-bottom: 1rem; color: var(--danger-color); } /* Buttons */ .btn { padding: 0.5rem 1rem; background-color: var(--primary-color); color: white; border-radius: 4px; text-decoration: none; font-weight: 500; font-size: 0.875rem; border: none; cursor: pointer; } .btn:hover { background-color: #3a5ce5; } /* Responsive */ @media (max-width: 768px) { .dashboard-stats { grid-template-columns: 1fr; } .admin-content { padding: 1rem; } .service-list { grid-template-columns: 1fr; } }