/* =========================================== 管理页面 - 现代化布局设计 v2.0 增强视觉效果和交互体验 =========================================== */ /* 增强主题变量 */ :root { --admin-primary: #6366f1; --admin-primary-hover: #4f46e5; --admin-secondary: #8b5cf6; --admin-accent: #ec4899; --admin-success: #10b981; --admin-warning: #f59e0b; --admin-danger: #ef4444; --admin-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a855f7 100%); --admin-glass: rgba(255, 255, 255, 0.75); --admin-glass-hover: rgba(255, 255, 255, 0.9); --admin-shadow: 0 8px 32px rgba(99, 102, 241, 0.12); --admin-shadow-lg: 0 20px 40px rgba(99, 102, 241, 0.15); --admin-glow: 0 0 40px rgba(99, 102, 241, 0.15); --admin-transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); --admin-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); } /* 顶部导航栏按钮样式 */ .topbar .btn { display: flex; align-items: center; justify-content: center; gap: 6px; transition: var(--admin-transition); } .topbar .btn:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(99, 102, 241, 0.2); } /* 主容器 - 响应式网格布局 */ .admin-container { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; max-width: 1400px; margin: 0 auto; padding: 32px 24px; min-height: calc(100vh - 80px); } /* 全局主题设计 */ .admin-page { background: linear-gradient(135deg, #f0f4ff 0%, #e8f0fe 25%, #f8fafc 50%, #fff1f2 75%, #fef3e8 100%); background-attachment: fixed; position: relative; overflow-x: hidden; } /* 增强动态背景装饰 */ .admin-page::before { content: ''; position: fixed; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(ellipse at 20% 30%, rgba(99, 102, 241, 0.12) 0%, transparent 50%), radial-gradient(ellipse at 80% 20%, rgba(236, 72, 153, 0.08) 0%, transparent 50%), radial-gradient(ellipse at 60% 80%, rgba(16, 185, 129, 0.08) 0%, transparent 50%), radial-gradient(ellipse at 30% 70%, rgba(245, 158, 11, 0.06) 0%, transparent 50%); animation: backgroundFloat 30s ease-in-out infinite; z-index: -2; } .admin-page::after { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(ellipse 80% 50% at 50% -10%, rgba(99, 102, 241, 0.1), transparent), radial-gradient(ellipse 60% 40% at 100% 100%, rgba(236, 72, 153, 0.06), transparent); z-index: -1; pointer-events: none; } @keyframes backgroundFloat { 0%, 100% { transform: translateX(-30px) translateY(-20px) rotate(0deg) scale(1); } 25% { transform: translateX(25px) translateY(25px) rotate(0.5deg) scale(1.02); } 50% { transform: translateX(30px) translateY(-15px) rotate(-0.5deg) scale(1); } 75% { transform: translateX(-20px) translateY(30px) rotate(0.3deg) scale(1.01); } } /* 禁用文本选择 */ .admin-page * { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } /* 允许选择文本的重要元素 */ .admin-page input, .admin-page textarea, .admin-page select, .admin-page .table td, .admin-page .table th, .admin-page .user-chip, .admin-page .selectable { -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; } /* =========================================== 卡片设计 - 现代玻璃拟态效果 v2.0 =========================================== */ .admin-page .card { background: var(--admin-glass); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border-radius: 24px; box-shadow: var(--admin-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.7), inset 0 -1px 0 rgba(0, 0, 0, 0.02); border: 1px solid rgba(255, 255, 255, 0.4); padding: 28px; position: relative; overflow: hidden; transition: var(--admin-transition); } .admin-page .card:hover { transform: translateY(-4px); background: var(--admin-glass-hover); box-shadow: var(--admin-shadow-lg), var(--admin-glow), inset 0 1px 0 rgba(255, 255, 255, 0.8); border-color: rgba(99, 102, 241, 0.2); } /* 卡片顶部装饰线 - 增强渐变 */ .admin-page .card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: var(--admin-gradient); border-radius: 24px 24px 0 0; opacity: 0.9; transition: var(--admin-transition); } .admin-page .card:hover::before { height: 5px; opacity: 1; } /* 卡片内部光晕效果 */ .admin-page .card::after { content: ''; position: absolute; top: 4px; left: 0; right: 0; height: 80px; background: linear-gradient(180deg, rgba(99, 102, 241, 0.05) 0%, transparent 100%); pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } .admin-page .card:hover::after { opacity: 1; } /* =========================================== 左侧区域布局 =========================================== */ .admin-left { display: flex; flex-direction: column; gap: 24px; } /* 卡片标题设计 */ .admin-page .card h2 { display: flex; align-items: center; gap: 12px; margin: 0 0 24px 0; font-size: 20px; font-weight: 700; color: #1e293b; letter-spacing: -0.025em; } .admin-page .card h2 .card-icon { font-size: 24px; background: linear-gradient(135deg, #3b82f6, #8b5cf6); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* 操作按钮布局 */ .generate-action { margin-bottom: 16px; } .generate-action:last-child { margin-bottom: 0; } /* 水平按钮行布局 */ .generate-action-row { display: flex; gap: 12px; } .generate-action-row .btn { flex: 1; min-width: 0; } .generate-action .btn { width: 100%; height: 52px; font-size: 16px; font-weight: 600; border-radius: 14px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; gap: 8px; } .generate-action .btn::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); transition: left 0.5s; } .generate-action .btn:hover::before { left: 100%; } /* 主要按钮样式 */ .generate-action .btn-primary { background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); box-shadow: 0 4px 16px rgba(59, 130, 246, 0.3), 0 2px 8px rgba(59, 130, 246, 0.2); } .generate-action .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(59, 130, 246, 0.4), 0 4px 12px rgba(59, 130, 246, 0.3); } /* 次要按钮样式 */ .generate-action .btn-secondary { background: linear-gradient(135deg, #64748b 0%, #475569 100%); box-shadow: 0 4px 16px rgba(100, 116, 139, 0.2), 0 2px 8px rgba(100, 116, 139, 0.15); } .generate-action .btn-secondary:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(100, 116, 139, 0.3), 0 4px 12px rgba(100, 116, 139, 0.2); } /* =========================================== 用户邮箱列表区域 =========================================== */ .user-mailboxes { display: flex; flex-direction: column; gap: 12px; max-height: 400px; overflow-y: auto; overflow-x: hidden; padding-right: 8px; } .user-mailboxes::-webkit-scrollbar { width: 6px; } .user-mailboxes::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.05); border-radius: 3px; } .user-mailboxes::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.2); border-radius: 3px; } .user-mailboxes::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.3); } /* 邮箱列表项样式 */ .mailbox-list { display: flex; flex-direction: column; gap: 8px; } .mailbox-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: rgba(255, 255, 255, 0.6); border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 12px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); backdrop-filter: blur(8px); } .mailbox-item.clickable { cursor: pointer; } .mailbox-item:hover { background: rgba(255, 255, 255, 0.9); border-color: rgba(59, 130, 246, 0.3); box-shadow: 0 4px 12px rgba(59, 130, 246, 0.1); transform: translateY(-1px); } .mailbox-item .address { color: #1e293b; font-size: 14px; font-weight: 500; transition: color 0.2s ease; flex: 1; } .mailbox-item.clickable:hover .address { color: #3b82f6; } .mailbox-item .btn.danger { padding: 4px 12px; font-size: 12px; background: rgba(239, 68, 68, 0.1); color: #ef4444; border: 1px solid rgba(239, 68, 68, 0.2); border-radius: 6px; cursor: pointer; transition: all 0.2s ease; } .mailbox-item .btn.danger:hover { background: #ef4444; color: white; } .mailbox-list .empty { text-align: center; padding: 24px; color: #94a3b8; font-size: 14px; } .user-mailbox-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: rgba(255, 255, 255, 0.6); border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 12px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); backdrop-filter: blur(8px); position: relative; } .user-mailbox-item:hover { background: rgba(255, 255, 255, 0.9); border-color: rgba(59, 130, 246, 0.3); box-shadow: 0 6px 20px rgba(59, 130, 246, 0.15); transform: translateY(-2px); } .user-mailbox-item:active { transform: translateY(0); box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2); } /* 点击指示器 */ .user-mailbox-item::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), rgba(139, 92, 246, 0.05)); border-radius: 12px; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } .user-mailbox-item:hover::before { opacity: 1; } /* 邮箱内容区域 */ .mailbox-content { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 0; position: relative; z-index: 1; } .mailbox-content .addr { font-weight: 600; color: #1e293b; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 14px; } .mailbox-content .time { color: #64748b; font-size: 11px; font-weight: 500; } /* 邮箱操作按钮区域 */ .mailbox-actions { display: flex; gap: 6px; align-items: center; flex-shrink: 0; position: relative; z-index: 2; } /* 邮箱操作按钮样式 */ .mailbox-actions .btn { height: 32px; width: 32px; padding: 0; font-size: 14px; border-radius: 8px; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; } .mailbox-actions .btn-ghost { background: rgba(100, 116, 139, 0.1); border: 1px solid rgba(100, 116, 139, 0.2); color: #475569; } .mailbox-actions .btn-ghost:hover { background: rgba(100, 116, 139, 0.2); transform: scale(1.1); color: #334155; } .mailbox-actions .btn-danger { background: linear-gradient(135deg, #ef4444, #dc2626); border: none; color: white; } .mailbox-actions .btn-danger:hover { background: linear-gradient(135deg, #dc2626, #b91c1c); transform: scale(1.1); } /* =========================================== 右侧区域 - 用户列表 =========================================== */ .admin-right { display: flex; flex-direction: column; gap: 24px; min-width: 0; } /* 卡片头部布局 */ .card-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 0 0 28px 0; } .card-header h2 { margin: 0; display: flex; align-items: center; } /* 用户数量显示 */ .users-count { font-size: 14px; color: #64748b; font-weight: 500; background: rgba(100, 116, 139, 0.1); padding: 2px 8px; border-radius: 12px; margin-left: 8px; } /* 邮箱数量显示 */ .mailboxes-count { font-size: 14px; color: #64748b; font-weight: 500; background: rgba(100, 116, 139, 0.1); padding: 2px 8px; border-radius: 12px; margin-left: 8px; } .card-header .btn { height: 40px; padding: 0 16px; font-size: 14px; font-weight: 600; border-radius: 10px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; gap: 6px; } /* =========================================== 表格设计 - 现代化数据展示 =========================================== */ .table { width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; background: rgba(255, 255, 255, 0.6); backdrop-filter: blur(8px); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04); } .table thead th { background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(139, 92, 246, 0.08) 100%); color: #1e293b; font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; padding: 14px 8px; border-bottom: 2px solid rgba(59, 130, 246, 0.1); position: sticky; top: 0; z-index: 10; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 左侧用户列表表头优化 */ .admin-left .table thead th { font-size: 11px; padding: 10px 6px; background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(139, 92, 246, 0.12) 100%); border-bottom: 2px solid rgba(59, 130, 246, 0.2); } /* 发件列表头特殊样式 */ .admin-left .table thead th.col-can { font-size: 12px; font-weight: 800; letter-spacing: 0.1em; } /* 用户名列表头居中 */ .table thead th.col-username { text-align: center; } .admin-left .table thead th.col-username { text-align: center; } /* 角色列表头居中 - 参考发件列的居中方式 */ .table thead th.col-role { text-align: center; } .admin-left .table thead th.col-role { text-align: center; } .table tbody td { padding: 12px 8px; font-size: 13px; color: #334155; border-bottom: 1px solid rgba(0, 0, 0, 0.06); font-weight: 500; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 角色列需要特殊处理,覆盖通用样式 */ .table tbody td.col-role { overflow: visible; white-space: normal; text-align: center; /* 添加居中样式 */ } /* 确保表格行有统一的高度 */ .admin-left .table tbody tr { height: 40px; } /* 确保所有表格单元格有统一的高度 */ .admin-left .table tbody td { min-height: 40px; height: 40px; line-height: 1.2; vertical-align: middle; } .table tbody tr { transition: all 0.2s ease; } .table tbody tr:hover { background: rgba(59, 130, 246, 0.04); } .table tbody tr:last-child td { border-bottom: none; } /* 表格列宽优化 - 紧凑的左侧用户列表布局(隐藏ID列)*/ .col-id { width: 0; display: none; /* 隐藏ID列节约空间 */ } .col-username { width: 22%; font-weight: 600; color: #1e293b; cursor: help; /* 鼠标悬停时显示help图标,提示有完整信息 */ text-align: center; /* 添加居中样式,与其他列保持一致 */ } /* 角色列基础样式 - 参考发件列的居中方式 */ .col-role { width: 15%; font-size: 12px; text-align: center; font-weight: 600; } /* 强制角色列居中 - 使用简单的文本居中方式 */ .admin-page .admin-left .table tbody td.col-role { /* 覆盖所有通用表格样式 */ overflow: visible !important; white-space: normal !important; vertical-align: middle !important; /* 使用传统的文本居中方式 */ text-align: center !important; /* 设置尺寸 */ padding: 8px 4px !important; height: 40px !important; min-height: 40px !important; } .col-mailbox { width: 19%; font-size: 12px; text-align: center; } .col-can { width: 14%; text-align: center; font-size: 12px; font-weight: 600; } .col-created { width: 22%; font-size: 12px; white-space: nowrap; } .col-actions { width: 15%; } /* 用户操作按钮组 - 优化布局 */ .user-actions { display: flex; gap: 5px; justify-content: center; flex-wrap: nowrap; } .user-actions .btn { height: 28px; padding: 0 8px; font-size: 11px; font-weight: 600; border-radius: 5px; transition: all 0.2s ease; min-width: 42px; flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .user-actions .btn-ghost { background: rgba(100, 116, 139, 0.1); border: 1px solid rgba(100, 116, 139, 0.2); color: #475569; } .user-actions .btn-ghost:hover { background: rgba(100, 116, 139, 0.15); transform: translateY(-1px); } .user-actions .btn-secondary { background: linear-gradient(135deg, #64748b, #475569); color: white; border: none; } .user-actions .btn-secondary:hover { background: linear-gradient(135deg, #475569, #334155); transform: translateY(-1px); } /* 状态徽章 */ .badge { display: inline-flex; align-items: center; padding: 2px 6px; border-radius: 6px; font-size: 10px; font-weight: 600; background: linear-gradient(135deg, #f1f5f9, #e2e8f0); color: #475569; border: 1px solid rgba(100, 116, 139, 0.15); } /* 用户列表专用样式 */ .admin-left .table tbody td { font-size: 12px; } .admin-left .table tbody tr.clickable { cursor: pointer; transition: all 0.2s ease; } .admin-left .table tbody tr.clickable:hover { background: rgba(59, 130, 246, 0.06); transform: translateX(2px); box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1); } /* 当前选中的用户行高亮 */ .admin-left .table tbody tr.active { background: rgba(59, 130, 246, 0.12) !important; border-left: 3px solid #3b82f6; } .admin-left .table tbody tr.active .col-username { color: #3b82f6; } /* 紧凑表格滚动区域 */ .admin-left .table-container { max-height: 380px; overflow-y: auto; border-radius: 12px; border: 1px solid rgba(0, 0, 0, 0.06); } /* 确保表头始终可见 */ .admin-left .table { position: relative; } .admin-left .table thead { position: sticky; top: 0; z-index: 10; } /* 分页控件样式 */ .pagination-container { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-top: 1px solid rgba(0, 0, 0, 0.06); background: rgba(255, 255, 255, 0.4); border-radius: 0 0 12px 12px; } .pagination-info { font-size: 12px; color: #64748b; font-weight: 500; } .pagination-controls { display: flex; align-items: center; gap: 12px; } .pagination-controls .btn { height: 28px; padding: 0 12px; font-size: 11px; border-radius: 6px; } .pagination-controls .btn:disabled { opacity: 0.5; cursor: not-allowed; background: rgba(100, 116, 139, 0.05); color: #94a3b8; } .pagination-controls #page-info { font-size: 12px; font-weight: 600; color: #475569; min-width: 40px; text-align: center; } .admin-left .table-container::-webkit-scrollbar { width: 6px; } .admin-left .table-container::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.05); border-radius: 3px; } .admin-left .table-container::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.2); border-radius: 3px; } .admin-left .table-container::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.3); } /* 邮箱数量样式优化 */ .admin-left .col-mailbox { font-weight: 600; color: #3b82f6; } /* 能否发件状态样式 */ .admin-left .col-can { font-weight: 600; } .admin-left .can-send-yes { color: #10b981; font-weight: 700; background: rgba(16, 185, 129, 0.1); border-radius: 4px; padding: 2px 4px; } .admin-left .can-send-no { color: #ef4444; font-weight: 700; background: rgba(239, 68, 68, 0.1); border-radius: 4px; padding: 2px 4px; } /* 角色样式 - 使用颜色区分角色类型,保持居中对齐 */ .admin-page .admin-left .table tbody td.col-role .role-admin, .admin-page .admin-left .table tbody td.col-role .role-user { font-weight: 600 !important; border-radius: 8px !important; padding: 4px 8px !important; font-size: 11px !important; display: block !important; text-align: center !important; white-space: nowrap !important; min-width: auto !important; height: auto !important; line-height: 1.2 !important; margin: 0 auto !important; width: fit-content !important; max-width: 100% !important; } /* 高级角色 - 蓝紫色主题 */ .admin-page .admin-left .table tbody td.col-role .role-admin { color: #3b82f6 !important; background: rgba(59, 130, 246, 0.1) !important; border: 1px solid rgba(59, 130, 246, 0.2) !important; transition: all 0.2s ease !important; } .admin-page .admin-left .table tbody td.col-role .role-admin:hover { background: rgba(59, 130, 246, 0.15) !important; border-color: rgba(59, 130, 246, 0.3) !important; transform: translateY(-1px) !important; } /* 普通角色 - 灰色主题 */ .admin-page .admin-left .table tbody td.col-role .role-user { color: #64748b !important; background: rgba(100, 116, 139, 0.1) !important; border: 1px solid rgba(100, 116, 139, 0.2) !important; transition: all 0.2s ease !important; } .admin-page .admin-left .table tbody td.col-role .role-user:hover { background: rgba(100, 116, 139, 0.15) !important; border-color: rgba(100, 116, 139, 0.3) !important; transform: translateY(-1px) !important; } /* =========================================== 表单控件样式 =========================================== */ .admin-page .input, .admin-page .select, .admin-page textarea { width: 100%; background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(8px); border: 1.5px solid rgba(0, 0, 0, 0.08); border-radius: 12px; padding: 14px 16px; font-size: 14px; color: #1e293b; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.6); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); resize: vertical; font-weight: 500; } .admin-page .input::placeholder, .admin-page textarea::placeholder { color: #94a3b8; font-weight: 400; } .admin-page .input:focus, .admin-page .select:focus, .admin-page textarea:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1), 0 4px 16px rgba(59, 130, 246, 0.15); transform: translateY(-1px); background: rgba(255, 255, 255, 0.95); } /* 帮助文本 */ .help-text { font-size: 12px; color: #64748b; margin-top: 6px; line-height: 1.5; font-weight: 500; } /* =========================================== 模态框设计 =========================================== */ .admin-page .modal-card { background: rgba(255, 255, 255, 0.95); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 20px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.8); position: relative; display: flex; flex-direction: column; backdrop-filter: blur(20px); overflow: hidden; } .admin-page .modal-header { background: linear-gradient(135deg, rgba(59, 130, 246, 0.08) 0%, rgba(139, 92, 246, 0.06) 100%); border-bottom: 1px solid rgba(0, 0, 0, 0.08); padding: 24px 28px; border-radius: 20px 20px 0 0; } .admin-page .modal-header > div { display: flex; align-items: center; gap: 12px; } .admin-page .modal-header .modal-icon { font-size: 24px; } .admin-page .modal-header span:not(.modal-icon) { font-size: 18px; font-weight: 700; color: #1e293b; } .admin-page .modal-body { flex: 1 1 auto; overflow-y: auto; padding: 28px; } .admin-page .modal-footer { border-top: 1px solid rgba(0, 0, 0, 0.08); padding: 20px 28px; background: rgba(248, 250, 252, 0.8); border-radius: 0 0 20px 20px; display: flex; gap: 12px; justify-content: flex-end; } /* 表单布局 */ .config-form { display: flex; flex-direction: column; gap: 20px; } .config-item { display: flex; flex-direction: column; gap: 8px; } .config-label { font-size: 14px; font-weight: 600; color: #374151; margin-bottom: 4px; } /* 表单网格 */ .form-grid { display: grid; grid-template-columns: 1fr; gap: 20px; } @media (min-width: 900px) { .form-grid { grid-template-columns: 1fr 1fr; } } .col-span-2 { grid-column: 1 / -1; } /* 切换开关行 */ .checks-row { display: flex; gap: 20px; flex-wrap: wrap; margin-top: 20px; } .toggle { display: inline-flex; align-items: center; gap: 10px; background: rgba(255, 255, 255, 0.8); border: 1px solid rgba(0, 0, 0, 0.08); padding: 12px 16px; border-radius: 12px; cursor: pointer; user-select: none; transition: all 0.3s ease; backdrop-filter: blur(8px); } .toggle:hover { background: rgba(255, 255, 255, 0.9); border-color: rgba(59, 130, 246, 0.2); transform: translateY(-1px); } .toggle input { appearance: none; width: 20px; height: 20px; border: 2px solid #d1d5db; border-radius: 6px; background: #fff; position: relative; transition: all 0.2s ease; } .toggle input:checked { background: linear-gradient(135deg, #3b82f6, #1d4ed8); border-color: #3b82f6; } .toggle input:checked::after { content: '✓'; position: absolute; top: -1px; left: 4px; font-size: 14px; color: #fff; font-weight: bold; } .toggle span { font-weight: 600; color: #374151; font-size: 14px; } /* 用户标签 */ .user-chip { margin-left: 12px; padding: 6px 14px; border-radius: 20px; background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(139, 92, 246, 0.08)); color: #3b82f6; font-weight: 700; font-size: 13px; border: 1px solid rgba(59, 130, 246, 0.2); } /* =========================================== 加载指示器 =========================================== */ .loading-indicator { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 20px; color: #64748b; font-weight: 500; } .loading-indicator .spinner { width: 20px; height: 20px; border: 2px solid rgba(59, 130, 246, 0.2); border-top: 2px solid #3b82f6; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* =========================================== 响应式设计 =========================================== */ @media (max-width: 1200px) { .admin-container { max-width: 1000px; padding: 28px 20px; } } @media (max-width: 1024px) { .admin-container { grid-template-columns: 1fr 1fr; gap: 20px; padding: 24px 20px; max-width: 960px; } } @media (max-width: 900px) { .admin-container { grid-template-columns: 1fr; gap: 20px; padding: 20px 16px; max-width: none; } .admin-page .card { padding: 20px; border-radius: 16px; } .user-actions { flex-direction: row; gap: 4px; } .user-actions .btn { flex: 1; font-size: 11px; padding: 0 8px; height: 30px; } .form-grid { grid-template-columns: 1fr; } .checks-row { flex-direction: column; gap: 12px; } .table { font-size: 12px; } .table thead th, .table tbody td { padding: 10px 6px; } /* 移动端表头优化 */ .admin-left .table thead th { font-size: 10px; padding: 8px 4px; } /* 移动端显示创建时间列 */ .col-created { width: 0; display: none; /* 移动端仍然隐藏创建时间列以节省空间 */ } /* 移动端调整列宽(隐藏ID列)*/ .col-id { width: 0; display: none; } .col-username { width: 20%; font-size: 11px; text-align: center; } .col-role { width: 14%; font-size: 10px; text-align: center; } .col-mailbox { width: 18%; font-size: 10px; text-align: center; } .col-can { width: 12%; font-size: 10px; font-weight: 600; text-align: center; } .col-actions { width: 36%; } /* 移动端表格容器 */ .admin-left .table-container { max-height: 300px; } /* 移动端按钮优化 */ .admin-left .user-actions { gap: 5px; } .admin-left .user-actions .btn { height: 26px; font-size: 10px; padding: 0 6px; min-width: 38px; border-radius: 4px; } /* 移动端按钮行样式 */ .generate-action-row { gap: 8px; } .generate-action-row .btn { font-size: 14px; height: 46px; } /* 移动端邮箱列表优化 */ .user-mailbox-item { padding: 10px 12px; } .mailbox-content .addr { font-size: 13px; } .mailbox-content .time { font-size: 10px; } .mailbox-actions { gap: 4px; } .mailbox-actions .btn { height: 28px; width: 28px; font-size: 12px; } /* 移动端分页优化 */ .pagination-container { padding: 8px 12px; flex-direction: column; gap: 8px; } .pagination-info { font-size: 11px; text-align: center; } .pagination-controls .btn { height: 26px; padding: 0 8px; font-size: 10px; } .pagination-controls #page-info { font-size: 11px; } /* 移动端角色样式 - 使用颜色区分角色类型,保持居中对齐 */ .admin-page .admin-left .table tbody td.col-role .role-admin, .admin-page .admin-left .table tbody td.col-role .role-user { font-weight: 600 !important; border-radius: 6px !important; padding: 3px 6px !important; font-size: 10px !important; display: block !important; text-align: center !important; white-space: nowrap !important; min-width: auto !important; height: auto !important; line-height: 1.2 !important; margin: 0 auto !important; width: fit-content !important; max-width: 100% !important; } /* 移动端高级角色 - 蓝紫色主题 */ .admin-page .admin-left .table tbody td.col-role .role-admin { color: #3b82f6 !important; background: rgba(59, 130, 246, 0.1) !important; border: 1px solid rgba(59, 130, 246, 0.2) !important; transition: all 0.2s ease !important; } .admin-page .admin-left .table tbody td.col-role .role-admin:hover { background: rgba(59, 130, 246, 0.15) !important; border-color: rgba(59, 130, 246, 0.3) !important; } /* 移动端普通角色 - 灰色主题 */ .admin-page .admin-left .table tbody td.col-role .role-user { color: #64748b !important; background: rgba(100, 116, 139, 0.1) !important; border: 1px solid rgba(100, 116, 139, 0.2) !important; transition: all 0.2s ease !important; } .admin-page .admin-left .table tbody td.col-role .role-user:hover { background: rgba(100, 116, 139, 0.15) !important; border-color: rgba(100, 116, 139, 0.3) !important; } /* 移动端角色列居中 - 使用简单的文本居中方式 */ .admin-page .admin-left .table tbody td.col-role { /* 覆盖通用表格样式 */ overflow: visible !important; white-space: normal !important; vertical-align: middle !important; /* 使用传统的文本居中方式 */ text-align: center !important; /* 移动端尺寸 */ padding: 6px 2px !important; height: 36px !important; min-height: 36px !important; } /* 移动端表格行高度 */ .admin-left .table tbody tr { height: 36px; } /* 移动端所有单元格高度 */ .admin-left .table tbody td { height: 36px; min-height: 36px; } /* 移动端用户数量显示 */ .users-count { font-size: 12px; padding: 1px 6px; margin-left: 4px; } /* 移动端邮箱数量显示 */ .mailboxes-count { font-size: 12px; padding: 1px 6px; margin-left: 4px; } /* 移动端卡片标题换行处理 */ .card-header h2 { flex-wrap: wrap; gap: 4px; } } /* =========================================== 动画和过渡效果 =========================================== */ * { scroll-behavior: smooth; } .admin-page .card, .admin-page .btn, .admin-page .input, .admin-page .select, .admin-page textarea, .user-mailbox-item, .table tbody tr { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* 页面进入动画 */ .admin-container { animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1); } @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } /* 卡片交错动画 */ .admin-left .card:nth-child(1) { animation-delay: 0.1s; } .admin-left .card:nth-child(2) { animation-delay: 0.2s; } .admin-right .card { animation-delay: 0.3s; }