/* 现代科技感UI样式 */ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap'); :root { /* 更亮的色彩方案 */ --primary-color: #6366f1; /* 更明亮的主色调 */ --primary-light: #a5b4fc; --primary-dark: #4f46e5; --accent-color: #06b6d4; /* 更明亮的强调色 */ --accent-light: #22d3ee; --danger-color: #f87171; /* 更亮的危险色 */ --warning-color: #fbbf24; /* 更亮的警告色 */ --info-color: #38bdf8; /* 更亮的信息色 */ --dark-bg: #334155; /* 更亮的深色背景 */ --darker-bg: #1e293b; /* 更亮的深色背景 */ --light-bg: #f8fafc; /* 浅色背景 */ --border-color: #94a3b8; /* 更亮的边框色 */ --text-light: #f9fafb; /* 浅色文本 */ --text-dark: #1e293b; /* 深色文本 */ --text-muted: #cbd5e1; /* 次要文本 - 更亮 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.1); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1), 0 4px 6px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04); --glow: 0 0 15px rgba(165, 180, 252, 0.6); --transition-fast: 0.2s ease; --transition-normal: 0.3s ease; --transition-slow: 0.5s ease; --border-radius-sm: 6px; --border-radius-md: 10px; --border-radius-lg: 16px; --border-radius-xl: 24px; --border-radius-full: 9999px; } /* 全局样式增强 */ body { background: linear-gradient(135deg, var(--dark-bg), var(--darker-bg)); color: var(--text-light); font-family: 'Poppins', 'Noto Sans SC', sans-serif; margin: 0; padding: 0; } .container { display: flex; height: 100vh; overflow: hidden; } .sidebar { width: 250px; background: rgba(51, 65, 85, 0.85); border-right: 1px solid rgba(255, 255, 255, 0.15); backdrop-filter: blur(10px); box-shadow: 5px 0 15px rgba(0, 0, 0, 0.2); display: flex; flex-direction: column; transition: all var(--transition-normal); } .main-content { flex: 1; overflow: hidden; background: rgba(51, 65, 85, 0.75); backdrop-filter: blur(5px); transition: all var(--transition-normal); } .content-section { padding: 25px; height: 100%; overflow-y: auto; display: none; } .content-section.active { display: flex; flex-direction: column; } .container.full-width .sidebar { width: 80px; } .container.full-width .logo span, .container.full-width .nav-item span, .container.full-width .session-info { display: none; } .main-content.full-width { flex: 1; } /* 标志样式 */ .logo { padding: 20px; display: flex; align-items: center; gap: 12px; font-size: 20px; font-weight: 600; color: var(--primary-light); border-bottom: 1px solid rgba(255, 255, 255, 0.15); } .logo i { font-size: 24px; } /* 改进的导航菜单 */ .nav-menu { margin: 20px 0; padding: 0 15px; } .nav-item { display: flex; align-items: center; padding: 12px 15px; color: var(--text-muted); text-decoration: none; border-radius: var(--border-radius-md); margin-bottom: 8px; transition: all var(--transition-normal); position: relative; overflow: hidden; } .nav-item:hover { background: rgba(99, 102, 241, 0.2); color: var(--primary-light); } .nav-item.active { background: linear-gradient(90deg, rgba(99, 102, 241, 0.25), transparent); color: var(--primary-light); font-weight: 500; box-shadow: inset 3px 0 0 var(--primary-color); } .nav-item i { margin-right: 12px; font-size: 18px; color: currentColor; } /* 会话信息样式 */ .session-info { margin-top: auto; padding: 15px; background: rgba(30, 41, 59, 0.5); border-top: 1px solid rgba(255, 255, 255, 0.15); } .session-info h4 { margin-top: 0; margin-bottom: 10px; color: var(--primary-light); font-size: 16px; } .session-info p { margin: 5px 0; font-size: 14px; color: var(--text-muted); } .session-info span { color: var(--text-light); font-weight: 500; } /* 聊天输入区域 */ .chat-input-area { display: flex; gap: 15px; padding-top: 20px; border-top: 1px solid rgba(255, 255, 255, 0.15); position: relative; z-index: 1; } #user-input { flex-grow: 1; padding: 16px 20px; background: rgba(51, 65, 85, 0.7); border: 1px solid rgba(255, 255, 255, 0.25); border-radius: var(--border-radius-md); font-size: 16px; resize: vertical; min-height: 60px; max-height: 150px; color: var(--text-light); font-family: 'Poppins', 'Noto Sans SC', sans-serif; transition: all var(--transition-normal); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1); backdrop-filter: blur(4px); } #user-input:focus { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3), inset 0 2px 4px rgba(0, 0, 0, 0.1); outline: none; } #user-input::placeholder { color: var(--text-muted); } #send-btn { padding: 15px 30px; font-size: 18px; background: linear-gradient(145deg, var(--primary-color), var(--primary-dark)); color: white; border: none; border-radius: var(--border-radius-md); cursor: pointer; transition: all var(--transition-normal); box-shadow: 0 4px 10px rgba(99, 102, 241, 0.3); display: flex; align-items: center; justify-content: center; gap: 8px; position: relative; overflow: hidden; } #send-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(99, 102, 241, 0.4), 0 0 0 2px rgba(99, 102, 241, 0.3); } #send-btn:active { transform: translateY(0); box-shadow: 0 2px 5px rgba(99, 102, 241, 0.4); } #send-btn::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 0%, transparent 70%); opacity: 0; transition: opacity 0.5s ease; } #send-btn:hover::before { opacity: 1; } #send-btn i { font-size: 18px; } /* 按钮样式 */ .action-button { padding: 12px 25px; border: none; border-radius: var(--border-radius-md); cursor: pointer; font-size: 16px; font-weight: 500; transition: all var(--transition-normal); display: inline-flex; align-items: center; gap: 8px; position: relative; overflow: hidden; } .action-button i { font-size: 18px; } .action-button.primary { background: linear-gradient(145deg, var(--primary-color), var(--primary-dark)); color: white; box-shadow: 0 4px 10px rgba(99, 102, 241, 0.3); } .action-button.primary:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(99, 102, 241, 0.4), 0 0 0 2px rgba(99, 102, 241, 0.3); } .action-button.secondary { background: linear-gradient(145deg, #64748b, #475569); color: white; box-shadow: 0 4px 10px rgba(71, 85, 105, 0.3); } .action-button.secondary:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(71, 85, 105, 0.4), 0 0 0 2px rgba(100, 116, 139, 0.3); } .action-button:active { transform: translateY(0); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); } .action-button::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0%, transparent 70%); opacity: 0; transition: opacity 0.5s ease; } .action-button:hover::before { opacity: 1; } /* 模态框样式 */ .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(5px); display: flex; justify-content: center; align-items: center; z-index: 1000; opacity: 0; visibility: hidden; transition: all var(--transition-normal); } .modal-overlay.active { opacity: 1; visibility: visible; } .modal-content { background: linear-gradient(145deg, rgba(51, 65, 85, 0.9), rgba(71, 85, 105, 0.9)); padding: 30px; border-radius: var(--border-radius-lg); box-shadow: var(--shadow-xl); text-align: center; max-width: 450px; width: 90%; transform: translateY(-50px); transition: transform var(--transition-normal); border: 1px solid rgba(255, 255, 255, 0.15); color: var(--text-light); } .modal-overlay.active .modal-content { transform: translateY(0); } .modal-content h3 { margin-top: 0; color: var(--text-light); font-size: 24px; margin-bottom: 15px; font-weight: 600; } .modal-content p { color: var(--text-muted); font-size: 17px; line-height: 1.6; margin-bottom: 30px; } .modal-buttons { display: flex; justify-content: center; gap: 15px; } .modal-buttons .action-button { min-width: 120px; } /* 记忆更新状态样式 */ #memory-update-status { display: none; align-items: center; margin-top: 10px; padding: 8px 12px; background: rgba(51, 65, 85, 0.7); border-radius: var(--border-radius-md); font-size: 14px; color: var(--text-light); border: 1px solid rgba(255, 255, 255, 0.15); } #memory-update-status .status-dot { width: 8px; height: 8px; border-radius: 50%; margin-right: 10px; } #memory-update-status .status-dot.updating { background-color: var(--warning-color); box-shadow: 0 0 10px var(--warning-color); animation: pulse 1.5s infinite; } #memory-update-status .status-dot.success { background-color: var(--accent-color); box-shadow: 0 0 10px var(--accent-color); } #memory-update-status .status-dot.error { background-color: var(--danger-color); box-shadow: 0 0 10px var(--danger-color); } #memory-update-status .status-text { color: var(--text-muted); } /* Toast 消息样式 */ #toast-container { position: fixed; top: 20px; right: 20px; z-index: 1000; display: flex; flex-direction: column; gap: 10px; } .toast { background: rgba(51, 65, 85, 0.9); color: var(--text-light); padding: 15px 20px; border-radius: var(--border-radius-md); box-shadow: var(--shadow-lg); opacity: 0; transform: translateY(-20px); animation: fadeInOut 3s forwards; min-width: 300px; font-size: 15px; display: flex; align-items: center; gap: 12px; border-left: 4px solid var(--primary-color); backdrop-filter: blur(8px); } .toast i { font-size: 20px; } .toast.success { border-left-color: var(--accent-color); } .toast.success i { color: var(--accent-color); } .toast.error { border-left-color: var(--danger-color); } .toast.error i { color: var(--danger-color); } .toast.info { border-left-color: var(--info-color); } .toast.info i { color: var(--info-color); } .toast.warning { border-left-color: var(--warning-color); } .toast.warning i { color: var(--warning-color); } @keyframes fadeInOut { 0% { opacity: 0; transform: translateY(-20px); } 10% { opacity: 1; transform: translateY(0); } 90% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; transform: translateY(-20px); } } @keyframes pulse { 0% { opacity: 0.5; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.2); } 100% { opacity: 0.5; transform: scale(0.8); } } /* 自适应布局优化 */ .section-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px; margin-bottom: 25px; background: rgba(51, 65, 85, 0.5); padding: 20px; border-radius: var(--border-radius-lg); border: 1px solid rgba(255, 255, 255, 0.15); box-shadow: var(--shadow-md); } .section-header h2 { margin: 0; font-size: 24px; display: flex; align-items: center; gap: 12px; color: var(--text-light); } .section-header .header-actions { display: flex; gap: 10px; flex-wrap: wrap; } /* 配置表单优化 - 修复布局问题 */ .config-form { background: rgba(51, 65, 85, 0.5); padding: 30px; border-radius: var(--border-radius-lg); border: 1px solid rgba(255, 255, 255, 0.15); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); } .config-form h3 { color: var(--primary-light); font-size: 22px; margin-top: 15px; margin-bottom: 20px; padding-bottom: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.15); } /* 改用Flexbox布局代替Grid布局 */ .config-form .form-group { display: flex; flex-wrap: wrap; margin-bottom: 15px; } .config-form .form-group .form-field { flex: 1 0 45%; margin: 0 10px 20px 0; } .config-form .form-group label { display: block; color: var(--text-light); font-weight: 500; margin-bottom: 8px; } .config-form .form-group input, .config-form .form-group select { width: 100%; padding: 12px 15px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: var(--border-radius-md); background: rgba(51, 65, 85, 0.7); color: var(--text-light); font-size: 15px; transition: all var(--transition-normal); } .config-form .form-group input:focus, .config-form .form-group select:focus { border-color: var(--primary-light); box-shadow: 0 0 0 3px rgba(165, 180, 252, 0.3); outline: none; } .config-form .password-toggle { margin-top: 8px; display: flex; align-items: center; } .config-form .password-toggle input { width: auto !important; margin-right: 8px; } @media (max-width: 768px) { .config-form .form-group { flex-direction: column; } .config-form .form-group .form-field { flex: 1 0 100%; margin-right: 0; } .section-header { flex-direction: column; align-items: flex-start; } .section-header .header-actions { width: 100%; justify-content: space-between; margin-top: 15px; } } /* 特征和记忆管理优化 */ .role-management, .memory-management { background: rgba(51, 65, 85, 0.5); padding: 25px; border-radius: var(--border-radius-lg); border: 1px solid rgba(255, 255, 255, 0.15); margin-bottom: 25px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); } .role-management h3, .memory-management h3 { color: var(--primary-light); font-size: 20px; margin-top: 0; margin-bottom: 20px; padding-bottom: 8px; border-bottom: 1px solid rgba(255, 255, 255, 0.15); } .role-list, .memory-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 15px; margin-bottom: 25px; } .role-item, .memory-item { background: rgba(51, 65, 85, 0.7); padding: 15px; border-radius: var(--border-radius-md); display: flex; justify-content: space-between; align-items: center; cursor: pointer; transition: all var(--transition-normal); border: 1px solid rgba(255, 255, 255, 0.15); } .role-item:hover, .memory-item:hover { background: rgba(99, 102, 241, 0.2); transform: translateY(-2px); box-shadow: var(--shadow-md); } .role-item.active-item, .memory-item.active-item { background: linear-gradient(135deg, rgba(99, 102, 241, 0.25), rgba(6, 182, 212, 0.15)); border: 1px solid rgba(99, 102, 241, 0.4); box-shadow: 0 0 15px rgba(99, 102, 241, 0.2); } .role-item span, .memory-item span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text-light); font-weight: 500; } .delete-btn { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 16px; transition: all var(--transition-normal); opacity: 0.6; padding: 4px 8px; border-radius: 50%; } .delete-btn:hover { color: var(--danger-color); opacity: 1; background: rgba(248, 113, 113, 0.2); } .new-role-form, .new-memory-form { display: grid; grid-template-columns: 1fr 1fr auto; gap: 15px; align-items: center; background: rgba(51, 65, 85, 0.3); padding: 20px; border-radius: var(--border-radius-md); border: 1px solid rgba(255, 255, 255, 0.1); } .new-role-form input, .new-memory-form input { padding: 12px 15px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: var(--border-radius-md); background: rgba(51, 65, 85, 0.7); color: var(--text-light); font-size: 15px; } .new-role-form input:focus, .new-memory-form input:focus { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.25); outline: none; } @media (max-width: 768px) { .new-role-form, .new-memory-form { grid-template-columns: 1fr; gap: 10px; } } .code-editor { width: 100%; height: 500px; padding: 20px; border-radius: var(--border-radius-md); border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(51, 65, 85, 0.5); color: var(--text-light); font-family: 'Consolas', 'Monaco', 'Courier New', monospace; font-size: 14px; line-height: 1.6; resize: vertical; margin-top: 10px; } .code-editor:focus { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.25); outline: none; } /* 日志查看器优化 */ .log-viewer { width: 100%; height: 600px; padding: 20px; border-radius: var(--border-radius-md); border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(51, 65, 85, 0.5); color: var(--text-light); font-family: 'Consolas', 'Monaco', 'Courier New', monospace; font-size: 14px; line-height: 1.6; overflow: auto; white-space: pre-wrap; word-break: break-all; margin-top: 20px; } /* 聊天窗口增强 */ .chat-window { flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 20px; border-radius: var(--border-radius-lg); background: rgba(51, 65, 85, 0.5); border: 1px solid rgba(255, 255, 255, 0.15); box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1); margin-bottom: 20px; } .chat-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 1px solid rgba(255, 255, 255, 0.15); } .chat-header h2 { margin: 0; font-size: 24px; display: flex; align-items: center; gap: 12px; } .chat-header .header-actions { display: flex; gap: 10px; } /* 消息气泡增强 */ .chat-message { display: flex; margin-bottom: 20px; align-items: flex-start; position: relative; opacity: 1; transition: opacity 0.3s ease; } .chat-message.user { justify-content: flex-end; } .chat-message.bot { justify-content: flex-start; } .message-avatar { width: 42px; height: 42px; border-radius: var(--border-radius-full); display: flex; align-items: center; justify-content: center; font-size: 16px; color: var(--text-light); background: rgba(51, 65, 85, 0.5); border: 1px solid rgba(255, 255, 255, 0.15); box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1); margin-right: 10px; }