/* ==================== 管理后台样式 ==================== */ :root { --admin-primary: #3498db; --admin-primary-hover: #2980b9; --admin-secondary: #6c757d; --admin-success: #28a745; --admin-warning: #ffc107; --admin-danger: #dc3545; --admin-text: #333; --admin-text-light: #666; --admin-border: #e0e0e0; --admin-bg: #f5f5f5; --admin-card-bg: #fff; --admin-sidebar: #2c3e50; --admin-sidebar-hover: #34495e; --admin-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: var(--admin-text); background-color: var(--admin-bg); } /* ==================== 布局 ==================== */ .admin-wrapper { display: flex; min-height: 100vh; } /* ==================== 侧边栏 ==================== */ .sidebar { width: 250px; background: var(--admin-sidebar); color: #fff; display: flex; flex-direction: column; position: fixed; height: 100vh; overflow-y: auto; } .sidebar-header { padding: 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .sidebar-header h2 { font-size: 1.2rem; } .sidebar-nav { flex: 1; padding: 20px 0; } .nav-item { display: block; padding: 12px 20px; color: rgba(255, 255, 255, 0.8); transition: all 0.3s; } .nav-item:hover { background: var(--admin-sidebar-hover); color: #fff; text-decoration: none; } .nav-item.active { background: var(--admin-primary); color: #fff; } .sidebar-footer { padding: 20px; border-top: 1px solid rgba(255, 255, 255, 0.1); } .sidebar-footer a { display: block; padding: 10px 0; color: rgba(255, 255, 255, 0.7); transition: color 0.3s; } .sidebar-footer a:hover { color: #fff; } /* ==================== 主内容区 ==================== */ .main-content { flex: 1; margin-left: 250px; background: var(--admin-bg); } .content-header { background: var(--admin-card-bg); padding: 20px 30px; display: flex; justify-content: space-between; align-items: center; box-shadow: var(--admin-shadow); } .content-header h1 { font-size: 1.5rem; } .user-info { color: var(--admin-text-light); } .content-body { padding: 30px; } /* ==================== 统计卡片 ==================== */ .stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 30px; } .stat-card { background: var(--admin-card-bg); border-radius: 8px; padding: 25px; display: flex; align-items: center; gap: 20px; box-shadow: var(--admin-shadow); } .stat-icon { font-size: 2.5rem; } .stat-value { font-size: 2rem; font-weight: bold; } .stat-label { color: var(--admin-text-light); } /* ==================== 工具栏 ==================== */ .toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 25px; } .filter-group { display: flex; gap: 10px; } /* ==================== 表格 ==================== */ .data-table { width: 100%; background: var(--admin-card-bg); border-radius: 8px; overflow: hidden; box-shadow: var(--admin-shadow); border-collapse: collapse; } .data-table th, .data-table td { padding: 15px; text-align: left; border-bottom: 1px solid var(--admin-border); } .data-table th { background: #f8f9fa; font-weight: 600; } .data-table tr:hover { background: #f8f9fa; } .data-table a { color: var(--admin-primary); } .data-table a:hover { text-decoration: underline; } /* ==================== 表单 ==================== */ .form-card { background: var(--admin-card-bg); border-radius: 8px; padding: 30px; box-shadow: var(--admin-shadow); max-width: 800px; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 8px; font-weight: 500; } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 10px 15px; border: 1px solid var(--admin-border); border-radius: 4px; font-size: 1rem; } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--admin-primary); box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1); } .form-row { display: flex; gap: 20px; } .form-row .form-group { flex: 1; } .flex-grow { flex: 1; } .checkbox-group { display: flex; flex-wrap: wrap; gap: 15px; } .checkbox-label { display: flex; align-items: center; gap: 8px; cursor: pointer; } .checkbox-label input[type="checkbox"] { width: auto; } .form-actions { display: flex; gap: 15px; margin-top: 30px; } /* ==================== 文章表单 ==================== */ .article-form { background: var(--admin-card-bg); border-radius: 8px; padding: 30px; box-shadow: var(--admin-shadow); } .article-form textarea[name="content"] { font-family: 'Consolas', 'Monaco', monospace; font-size: 0.95rem; line-height: 1.5; } .color-input-wrapper { display: flex; align-items: center; gap: 10px; } .color-input-wrapper input[type="text"] { width: 120px; } /* ==================== 按钮 ==================== */ .btn { display: inline-block; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem; transition: all 0.3s; text-decoration: none; } .btn-primary { background: var(--admin-primary); color: #fff; } .btn-primary:hover { background: var(--admin-primary-hover); color: #fff; } .btn-secondary { background: var(--admin-secondary); color: #fff; } .btn-secondary:hover { opacity: 0.9; color: #fff; } .btn-danger { background: var(--admin-danger); color: #fff; } .btn-danger:hover { opacity: 0.9; color: #fff; } .btn-sm { padding: 5px 12px; font-size: 0.85rem; } .btn-block { display: block; width: 100%; } /* ==================== 徽章 ==================== */ .badge { display: inline-block; padding: 4px 10px; border-radius: 12px; font-size: 0.85rem; } .badge-success { background: var(--admin-success); color: #fff; } .badge-warning { background: var(--admin-warning); color: #333; } /* ==================== 操作按钮 ==================== */ .action-buttons { display: flex; gap: 5px; } /* ==================== 提示框 ==================== */ .alert { padding: 15px 20px; border-radius: 5px; margin-bottom: 20px; } .alert-success { background: #d4edda; color: #155724; } .alert-danger { background: #f8d7da; color: #721c24; } .alert-warning { background: #fff3cd; color: #856404; } .alert-info { background: #d1ecf1; color: #0c5460; } /* ==================== 空状态 ==================== */ .empty-state { text-align: center; padding: 60px 20px; background: var(--admin-card-bg); border-radius: 8px; box-shadow: var(--admin-shadow); } .empty-state p { color: var(--admin-text-light); margin-bottom: 20px; } /* ==================== 分页 ==================== */ .pagination { display: flex; justify-content: center; gap: 5px; margin-top: 25px; } .page-link { display: inline-block; padding: 8px 15px; background: var(--admin-card-bg); border: 1px solid var(--admin-border); border-radius: 4px; color: var(--admin-text); } .page-link:hover { background: var(--admin-primary); color: #fff; border-color: var(--admin-primary); text-decoration: none; } .page-link.active { background: var(--admin-primary); color: #fff; border-color: var(--admin-primary); } /* ==================== 最近文章区 ==================== */ .recent-section { background: var(--admin-card-bg); border-radius: 8px; padding: 25px; box-shadow: var(--admin-shadow); } .section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .section-header h2 { font-size: 1.2rem; } /* ==================== 登录页面 ==================== */ .login-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .login-card { background: #fff; border-radius: 10px; padding: 40px; width: 400px; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2); } .login-card h1 { text-align: center; margin-bottom: 30px; color: var(--admin-text); } .login-form .form-group { margin-bottom: 20px; } .login-form input { width: 100%; padding: 12px 15px; border: 1px solid var(--admin-border); border-radius: 4px; font-size: 1rem; } .login-footer { text-align: center; margin-top: 20px; } /* ==================== 响应式 ==================== */ @media (max-width: 1200px) { .stats-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .sidebar { width: 200px; } .main-content { margin-left: 200px; } .stats-grid { grid-template-columns: 1fr; } .toolbar { flex-direction: column; gap: 15px; } .form-row { flex-direction: column; } }