/* 管理系统布局 - 钉钉科技蓝配色 + 插画风格 */ :root { --primary-color: #0052D9; /* 钉钉科技蓝 */ --primary-hover: #0041B8; --primary-light: #E7F3FF; --primary-gradient: linear-gradient(135deg, #0052D9 0%, #0084FF 100%); --success-color: #00A870; --warning-color: #ED7B2F; --error-color: #E34D59; --text-primary: #000000; --text-secondary: #666666; --text-placeholder: #BBBBBB; --bg-color: #F5F7FA; --sidebar-bg: #FFFFFF; --sidebar-width: 240px; --border-color: #E5E6EB; --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); --hover-shadow: 0 4px 20px rgba(0, 82, 217, 0.15); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'PingFang SC', 'Microsoft YaHei', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg-color); min-height: 100vh; color: var(--text-primary); line-height: 1.5; } /* 主布局容器 */ .app-container { display: flex; min-height: 100vh; } /* 左侧菜单栏 */ .sidebar { width: var(--sidebar-width); background: var(--sidebar-bg); box-shadow: 2px 0 8px rgba(0, 0, 0, 0.05); display: flex; flex-direction: column; position: fixed; left: 0; top: 0; bottom: 0; z-index: 1000; } /* Logo区域 */ .sidebar-logo { padding: 24px 20px; border-bottom: 1px solid var(--border-color); display: flex; align-items: center; gap: 12px; } .sidebar-logo-icon { width: 40px; height: 40px; background: var(--primary-gradient); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; } .sidebar-logo-text { display: flex; flex-direction: column; } .sidebar-logo-title { font-size: 16px; font-weight: 600; color: var(--text-primary); } .sidebar-logo-subtitle { font-size: 12px; color: var(--text-secondary); } /* 菜单导航 */ .sidebar-nav { flex: 1; padding: 20px 12px; overflow-y: auto; } .nav-menu { list-style: none; } .nav-item { margin-bottom: 4px; } .nav-link { display: flex; align-items: center; gap: 12px; padding: 12px 16px; color: var(--text-secondary); text-decoration: none; border-radius: 8px; transition: all 0.3s ease; cursor: pointer; font-size: 14px; } .nav-link:hover { background: var(--primary-light); color: var(--primary-color); } .nav-link.active { background: var(--primary-gradient); color: white; font-weight: 500; } .nav-link i { font-size: 18px; } .nav-badge { margin-left: auto; background: var(--error-color); color: white; font-size: 12px; padding: 2px 8px; border-radius: 10px; min-width: 20px; text-align: center; } /* 用户信息区域 */ .sidebar-user { padding: 16px; border-top: 1px solid var(--border-color); } .user-info-card { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-color); border-radius: 8px; } .user-avatar { width: 40px; height: 40px; background: var(--primary-gradient); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 20px; } .user-details { flex: 1; } .user-name { font-size: 14px; font-weight: 500; color: var(--text-primary); } .user-role { font-size: 12px; color: var(--text-secondary); } .logout-btn { background: none; border: none; color: var(--text-secondary); cursor: pointer; font-size: 18px; padding: 4px; transition: all 0.3s ease; } .logout-btn:hover { color: var(--error-color); } /* 主内容区域 */ .main-content { flex: 1; margin-left: var(--sidebar-width); display: flex; flex-direction: column; } /* 顶部导航栏 */ .top-navbar { background: white; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); padding: 16px 32px; display: flex; align-items: center; justify-content: space-between; } .navbar-title { font-size: 20px; font-weight: 600; color: var(--text-primary); } .navbar-actions { display: flex; gap: 12px; } /* 内容区域 */ .content-area { flex: 1; padding: 32px; overflow-y: auto; } /* 页面头部 */ .page-header { margin-bottom: 32px; } .page-title { font-size: 24px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; display: flex; align-items: center; gap: 12px; } .page-title i { color: var(--primary-color); } .page-description { font-size: 14px; color: var(--text-secondary); } /* 插画背景 */ .illustration-bg { position: relative; background: linear-gradient(135deg, #E7F3FF 0%, #F5F7FA 100%); border-radius: 16px; padding: 40px; margin-bottom: 24px; overflow: hidden; } .illustration-bg::before { content: ''; position: absolute; top: -50%; right: -20%; width: 400px; height: 400px; background: radial-gradient(circle, rgba(0, 82, 217, 0.1) 0%, transparent 70%); border-radius: 50%; } .illustration-bg::after { content: ''; position: absolute; bottom: -30%; left: -10%; width: 300px; height: 300px; background: radial-gradient(circle, rgba(0, 132, 255, 0.08) 0%, transparent 70%); border-radius: 50%; } /* 卡片样式 */ .card { background: white; border-radius: 12px; box-shadow: var(--card-shadow); margin-bottom: 24px; transition: all 0.3s ease; position: relative; z-index: 1; } .card:hover { box-shadow: var(--hover-shadow); transform: translateY(-2px); } .card-header { padding: 20px 24px; border-bottom: 1px solid var(--border-color); font-size: 16px; font-weight: 600; color: var(--text-primary); display: flex; align-items: center; gap: 8px; } .card-header i { color: var(--primary-color); font-size: 20px; } .card-body { padding: 24px; } /* 表单样式 */ .form-group { margin-bottom: 24px; } .form-group:last-child { margin-bottom: 0; } .form-label { display: flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 500; color: var(--text-primary); margin-bottom: 8px; } .label-icon { color: var(--primary-color); font-size: 16px; } .form-input, .form-select, .form-textarea { width: 100%; padding: 12px 16px; font-size: 14px; border: 1px solid var(--border-color); border-radius: 6px; transition: all 0.3s ease; background: white; color: var(--text-primary); } .form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0, 82, 217, 0.1); } .form-input::placeholder, .form-textarea::placeholder { color: var(--text-placeholder); } .form-textarea { resize: vertical; font-family: 'Consolas', 'Monaco', monospace; font-size: 12px; } .form-select { cursor: pointer; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 9L1 4h10z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; padding-right: 36px; appearance: none; } .input-hint { display: flex; align-items: flex-start; gap: 6px; margin-top: 8px; font-size: 12px; color: var(--text-secondary); line-height: 1.6; } .input-hint i { flex-shrink: 0; margin-top: 2px; color: var(--primary-color); opacity: 0.6; } /* 复选框组 */ .checkbox-group { display: flex; flex-direction: column; gap: 12px; } .checkbox-label { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 12px; background: #F5F7FA; border-radius: 8px; transition: all 0.3s ease; user-select: none; } .checkbox-label:hover { background: var(--primary-light); } .checkbox-label input[type="checkbox"] { width: 20px; height: 20px; cursor: pointer; accent-color: var(--primary-color); } .checkbox-text { font-size: 14px; color: var(--text-primary); font-weight: 500; } /* 信息卡片 */ .info-card { background: linear-gradient(135deg, #E7F3FF 0%, #F0F8FF 100%); border: 1px solid rgba(0, 82, 217, 0.2); } .info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; } .info-item { display: flex; align-items: center; gap: 12px; } .info-icon { font-size: 24px; color: var(--primary-color); flex-shrink: 0; } .info-content { flex: 1; } .info-label { font-size: 12px; color: var(--text-secondary); margin-bottom: 4px; } .info-value { font-size: 14px; font-weight: 500; color: var(--text-primary); } /* 按钮样式 */ .btn { padding: 12px 24px; font-size: 14px; font-weight: 500; border: none; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; display: inline-flex; align-items: center; justify-content: center; gap: 8px; } .btn i { font-size: 16px; } .btn-primary { background: var(--primary-gradient); color: white; } .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 82, 217, 0.3); } .btn-primary:disabled { opacity: 0.6; cursor: not-allowed; } .btn-secondary { background: white; color: var(--primary-color); border: 2px solid var(--primary-color); } .btn-secondary:hover { background: var(--primary-light); transform: translateY(-2px); } .btn-success { background: linear-gradient(135deg, #00A870 0%, #00D68F 100%); color: white; } .btn-success:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0, 168, 112, 0.3); } /* 使用说明步骤 */ .info-steps { display: flex; flex-direction: column; gap: 20px; } .info-step { display: flex; gap: 16px; align-items: flex-start; } .step-number { width: 40px; height: 40px; background: var(--primary-gradient); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 600; flex-shrink: 0; } .step-content { flex: 1; } .step-content h4 { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 6px; } .step-content p { font-size: 14px; color: var(--text-secondary); line-height: 1.6; } /* 加载状态 */ .loading-box { text-align: center; padding: 40px 20px; background: white; border-radius: 12px; box-shadow: var(--card-shadow); margin-bottom: 24px; } .loading-spinner { width: 48px; height: 48px; border: 4px solid var(--primary-light); border-top-color: var(--primary-color); border-radius: 50%; margin: 0 auto 16px; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .loading-text { font-size: 14px; color: var(--text-secondary); margin-bottom: 20px; } /* 进度详情 */ .progress-details { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(--border-color); } .progress-bar-container { width: 100%; height: 8px; background: var(--primary-light); border-radius: 4px; overflow: hidden; margin-bottom: 12px; } .progress-bar { height: 100%; background: linear-gradient(90deg, var(--primary-color), #0078FF); width: 0%; transition: width 0.3s ease; border-radius: 4px; box-shadow: 0 0 10px rgba(0, 82, 217, 0.5); } .progress-info { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .progress-message { font-size: 14px; color: var(--text-primary); font-weight: 500; } .progress-percent { font-size: 14px; color: var(--primary-color); font-weight: 600; } /* 步骤指示器 */ .progress-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: 12px; margin-top: 20px; } .step-item { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 8px; background: var(--bg-color); border-radius: 8px; transition: all 0.3s ease; } .step-item.active { background: var(--primary-light); border: 2px solid var(--primary-color); transform: scale(1.05); } .step-item.completed { background: #E8F8F2; border: 2px solid var(--success-color); } .step-item i { font-size: 24px; color: var(--text-placeholder); transition: color 0.3s ease; } .step-item.active i { color: var(--primary-color); animation: pulse 1.5s ease-in-out infinite; } .step-item.completed i { color: var(--success-color); } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .step-item span { font-size: 12px; color: var(--text-secondary); text-align: center; } .step-item.active span { color: var(--primary-color); font-weight: 600; } .step-item.completed span { color: var(--success-color); font-weight: 500; } /* 结果显示 */ .result-box { background: white; border-radius: 12px; box-shadow: var(--card-shadow); padding: 24px; margin-bottom: 24px; } .result-message { padding: 16px 20px; border-radius: 8px; margin-bottom: 16px; font-size: 14px; display: flex; align-items: center; gap: 8px; } .result-message.success { background: #E8F8F2; color: var(--success-color); border: 1px solid rgba(0, 168, 112, 0.2); } .result-message.success::before { content: '\f26a'; font-family: 'bootstrap-icons'; font-size: 18px; } .result-message.error { background: #FFECE8; color: var(--error-color); border: 1px solid rgba(227, 77, 89, 0.2); } .result-message.error::before { content: '\f339'; font-family: 'bootstrap-icons'; font-size: 18px; } /* 文章预览列表 */ .article-preview { max-height: 600px; margin-bottom: 24px; } .article-preview .card-header { display: flex; align-items: center; justify-content: space-between; } .article-count { background: var(--primary-color); color: white; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 600; } .article-list { max-height: 480px; overflow-y: auto; } .article-list::-webkit-scrollbar { width: 6px; } .article-list::-webkit-scrollbar-track { background: var(--bg-color); border-radius: 3px; } .article-list::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 3px; } .article-list::-webkit-scrollbar-thumb:hover { background: var(--text-placeholder); } .article-item { padding: 16px; border-bottom: 1px solid var(--border-color); transition: all 0.3s ease; animation: slideIn 0.3s ease-out; } .article-item:last-child { border-bottom: none; } .article-item:hover { background: var(--bg-color); transform: translateX(4px); } @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } .article-item-header { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 8px; } .article-number { flex-shrink: 0; width: 28px; height: 28px; background: var(--primary-light); color: var(--primary-color); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; } .article-title { flex: 1; font-size: 14px; font-weight: 500; color: var(--text-primary); line-height: 1.6; word-break: break-word; } .article-meta { display: flex; align-items: center; gap: 16px; margin-left: 40px; font-size: 12px; color: var(--text-secondary); } .article-time { display: flex; align-items: center; gap: 4px; } .article-time i { color: var(--primary-color); opacity: 0.6; } .article-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; background: #E8F8F2; color: var(--success-color); border-radius: 4px; font-size: 11px; } .article-badge i { font-size: 10px; } /* 空状态 */ .article-empty { text-align: center; padding: 40px 20px; color: var(--text-secondary); } .article-empty i { font-size: 48px; color: var(--text-placeholder); margin-bottom: 12px; } .article-empty p { font-size: 14px; margin: 0; } /* 使用说明 */ .instructions-card { background: white; } .instructions-list { margin: 0; padding-left: 24px; color: var(--text-primary); } .instructions-list li { margin-bottom: 12px; line-height: 1.8; } .instructions-list li:last-child { margin-bottom: 0; } .tips-box { margin-top: 20px; padding: 16px; background: #FFF9E6; border-left: 4px solid var(--warning-color); border-radius: 6px; } .tips-header { font-weight: 600; color: var(--warning-color); margin-bottom: 12px; display: flex; align-items: center; gap: 6px; } .tips-list { margin: 0; padding-left: 20px; color: var(--text-secondary); } .tips-list li { margin-bottom: 8px; line-height: 1.6; } .tips-list li:last-child { margin-bottom: 0; } /* 插画装饰 */ .illustration { position: fixed; bottom: 20px; right: 20px; width: 300px; height: 225px; opacity: 0.3; pointer-events: none; z-index: 0; } .illustration svg { width: 100%; height: 100%; } /* 页脚 */ .footer { text-align: center; margin-top: 40px; padding-top: 20px; border-top: 1px solid var(--border-color); color: var(--text-secondary); font-size: 12px; } /* 响应式设计 */ @media (max-width: 768px) { .container { padding: 20px 16px; } .header h1 { font-size: 24px; } .header-icon { font-size: 48px; } .card-body { padding: 16px; } .info-grid { grid-template-columns: 1fr; } .illustration { display: none; } } /* 动画效果 */ .card { animation: fadeInUp 0.5s ease-out; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }