/* 登录页面样式 - 现代化亮色设计 */ * { box-sizing: border-box; } body { margin: 0; padding: 0; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f8fafc; overflow-x: hidden; } /* 动画背景 */ .animated-background { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 25%, #f8fafc 50%, #f1f5f9 75%, #e2e8f0 100%); } .gradient-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 20% 80%, rgba(59, 130, 246, 0.1) 0%, transparent 50%), radial-gradient(circle at 80% 20%, rgba(168, 85, 247, 0.1) 0%, transparent 50%), radial-gradient(circle at 40% 40%, rgba(14, 165, 233, 0.08) 0%, transparent 50%); } /* 浮动形状动画 */ .floating-shapes { position: absolute; width: 100%; height: 100%; overflow: hidden; } .shape { position: absolute; border-radius: 50%; background: linear-gradient(45deg, rgba(59, 130, 246, 0.1), rgba(168, 85, 247, 0.08)); animation: float 20s infinite linear; } .shape-1 { width: 80px; height: 80px; top: 10%; left: 10%; animation-delay: 0s; animation-duration: 25s; } .shape-2 { width: 120px; height: 120px; top: 60%; right: 10%; animation-delay: -5s; animation-duration: 30s; } .shape-3 { width: 60px; height: 60px; bottom: 20%; left: 20%; animation-delay: -10s; animation-duration: 20s; } .shape-4 { width: 100px; height: 100px; top: 30%; right: 30%; animation-delay: -15s; animation-duration: 35s; } .shape-5 { width: 40px; height: 40px; bottom: 60%; right: 60%; animation-delay: -20s; animation-duration: 15s; } @keyframes float { 0% { transform: translateY(0px) rotate(0deg); opacity: 0.7; } 50% { transform: translateY(-20px) rotate(180deg); opacity: 1; } 100% { transform: translateY(0px) rotate(360deg); opacity: 0.7; } } /* 主容器 */ .login-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; position: relative; } /* 登录卡片 */ .login-card { width: 100%; max-width: 595px; padding: 50px 40px; text-align: center; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(25px); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 24px; box-shadow: 0 25px 45px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(255, 255, 255, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.9); position: relative; overflow: hidden; animation: cardEntrance 0.8s ease-out; } .login-card::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.1), transparent); transition: left 0.6s ease; } .login-card:hover::before { left: 100%; } @keyframes cardEntrance { from { opacity: 0; transform: translateY(30px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } /* 装饰元素 */ .card-decoration { position: absolute; top: 20px; left: 50%; transform: translateX(-50%); display: flex; align-items: center; gap: 8px; } .decoration-line { width: 30px; height: 2px; background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.4), transparent); border-radius: 1px; } .decoration-dot { width: 6px; height: 6px; background: rgba(59, 130, 246, 0.6); border-radius: 50%; animation: pulse 2s infinite; } /* 登录头部 */ .login-header { margin-bottom: 50px; position: relative; } .logo-container { position: relative; display: inline-block; margin-bottom: 25px; } .logo-glow { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 120px; height: 120px; background: radial-gradient(circle, rgba(59, 130, 246, 0.2) 0%, transparent 70%); border-radius: 50%; animation: glow 3s ease-in-out infinite alternate; } @keyframes glow { from { opacity: 0.5; transform: translate(-50%, -50%) scale(1); } to { opacity: 0.8; transform: translate(-50%, -50%) scale(1.1); } } .login-logo { width: 90px; height: 90px; border-radius: 22px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(255, 255, 255, 0.8); position: relative; z-index: 1; transition: transform 0.3s ease; } .login-logo:hover { transform: scale(1.05); } .login-header h1 { font-size: 32px; font-weight: 700; color: #1e293b; margin-bottom: 12px; background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; letter-spacing: -0.5px; } .login-subtitle { font-size: 18px; color: #64748b; margin: 0 0 20px 0; font-weight: 400; } .header-underline { width: 60px; height: 3px; background: linear-gradient(90deg, #3b82f6, #8b5cf6); border-radius: 2px; margin: 0 auto; animation: underlineExpand 0.8s ease-out 0.5s both; } @keyframes underlineExpand { from { width: 0; opacity: 0; } to { width: 60px; opacity: 1; } } /* 登录方法 */ .login-methods { display: flex; flex-direction: column; gap: 24px; margin-bottom: 40px; } .login-method { display: flex; align-items: center; padding: 28px; background: rgba(255, 255, 255, 0.8); border-radius: 20px; border: 1px solid rgba(226, 232, 240, 0.8); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; backdrop-filter: blur(10px); gap: 24px; /* 增加元素之间的间距 */ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05); } .login-method::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(59, 130, 246, 0.08), transparent); transition: left 0.6s ease; } .login-method:hover::before { left: 100%; } .login-method:hover { transform: translateY(-4px); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(59, 130, 246, 0.2); border-color: rgba(59, 130, 246, 0.3); } .method-icon { width: 56px; height: 56px; border-radius: 16px; display: flex; align-items: center; justify-content: center; margin-right: 0; /* 移除右边距,使用gap控制间距 */ position: relative; overflow: hidden; flex-shrink: 0; /* 防止图标被压缩 */ } .icon-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, #00A6FB, #0582ca); /* 钉钉品牌色渐变 */ border-radius: 16px; transition: transform 0.3s ease; } .method-svg { width: 32px; height: 32px; position: relative; z-index: 1; transition: transform 0.3s ease; /* filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.3)); */ } /* 确保图标在亮色主题下清晰可见 */ .method-svg circle, .method-svg path { stroke-width: 2; } /* 钉钉图标特殊处理,确保在浅色背景下可见 */ .method-svg[alt="钉钉"] { filter: drop-shadow(0 2px 6px rgba(50, 150, 250, 0.4)); /* background: rgba(255, 255, 255, 0.95); */ border-radius: 10px; padding: 6px; width: 45px; height: 45px; transition: all 0.3s ease; /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); */ } .login-method:hover .icon-bg { transform: scale(1.1); } .login-method:hover .method-svg { transform: scale(1.1); } /* 钉钉图标悬停效果 */ .login-method:hover .method-svg[alt="钉钉"] { /* filter: drop-shadow(0 4px 12px rgba(50, 150, 250, 0.6)); */ transform: scale(1.1) rotate(3deg); /* background: rgba(255, 255, 255, 1); */ /* box-shadow: 0 4px 16px rgba(50, 150, 250, 0.3); */ } .method-info { flex: 1; text-align: left; position: relative; margin-right: 5px; /* 增加与按钮的间距 */ } .method-info h3 { font-size: 20px; font-weight: 600; color: #1e293b; margin: 0 0 6px 0; letter-spacing: -0.3px; } .method-info p { font-size: 15px; color: #64748b; margin: 0 0 8px 0; line-height: 1.4; } .method-badge { display: inline-block; background: linear-gradient(135deg, #10b981, #059669); color: white; font-size: 12px; font-weight: 600; padding: 4px 12px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3); } /* 登录按钮 */ .login-btn { width: 165px; padding: 12px 0; border: none; border-radius: 12px; font-size: 15px; font-weight: 600; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); text-transform: uppercase; letter-spacing: 0.5px; position: relative; overflow: hidden; display: flex; align-items: center; gap: 8px; flex-shrink: 0; /* 防止按钮被压缩 */ min-width: 120px; /* 设置最小宽度 */ justify-content: center; /* 按钮内容居中 */ } .dingtalk-btn { background: linear-gradient(135deg, #00a6fb, #0582ca); color: white; box-shadow: 0 8px 24px rgba(0, 166, 251, 0.3), 0 0 0 1px rgba(0, 166, 251, 0.1); } .dingtalk-btn:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(0, 166, 251, 0.4), 0 0 0 1px rgba(0, 166, 251, 0.2); } .dingtalk-btn:active { transform: translateY(0); } .btn-text { position: relative; z-index: 1; } .btn-icon { font-size: 18px; transition: transform 0.3s ease; } .dingtalk-btn:hover .btn-icon { transform: translateX(4px); } /* 登录页脚 */ .login-footer { margin-top: 40px; padding-top: 25px; border-top: 1px solid rgba(226, 232, 240, 0.8); } .login-footer p { font-size: 14px; color: #64748b; margin: 0; line-height: 1.5; } .terms-link, .privacy-link { color: #3b82f6; text-decoration: none; font-weight: 500; transition: all 0.3s ease; position: relative; } .terms-link::after, .privacy-link::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 1px; background: #3b82f6; transition: width 0.3s ease; } .terms-link:hover::after, .privacy-link:hover::after { width: 100%; } .terms-link:hover, .privacy-link:hover { color: #1d4ed8; } /* 登录状态提示样式 */ .login-status { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.3); backdrop-filter: blur(10px); display: flex; justify-content: center; align-items: center; z-index: 1000; animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .status-content { text-align: center; padding: 50px; background: rgba(255, 255, 255, 0.95); border-radius: 20px; backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.8); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); animation: slideUp 0.4s ease; } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .status-icon { font-size: 56px; margin-bottom: 24px; animation: pulse 2s infinite; } .status-text { font-size: 20px; color: #1e293b; font-weight: 500; } /* 响应式设计 */ @media (max-width: 768px) { .login-container { padding: 15px; } .login-card { padding: 40px 25px; border-radius: 20px; } .login-header h1 { font-size: 28px; } .login-subtitle { font-size: 16px; } .login-method { padding: 24px 20px; flex-direction: column; text-align: center; gap: 20px; /* 移动端增加垂直间距 */ } .method-icon { margin-right: 0; margin-bottom: 0; /* 移除底部边距,使用gap控制 */ } .method-info { text-align: center; margin-right: 0; /* 移动端移除右边距 */ } .method-badge { margin-top: 8px; } .login-btn { width: 100%; justify-content: center; min-width: auto; /* 移动端移除最小宽度限制 */ } .shape { display: none; } } @media (max-width: 480px) { .login-card { padding: 30px 20px; } .login-header h1 { font-size: 24px; } .login-logo { width: 70px; height: 70px; } .logo-glow { width: 100px; height: 100px; } } /* 加载动画 */ .loading-spinner { width: 24px; height: 24px; border: 3px solid rgba(226, 232, 240, 0.8); border-top: 3px solid #3b82f6; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* 错误提示样式 */ .error-message { background: rgba(239, 68, 68, 0.1); color: #dc2626; padding: 16px 20px; border-radius: 12px; margin: 20px 0; border-left: 4px solid #ef4444; font-size: 14px; backdrop-filter: blur(10px); } /* 成功提示样式 */ .success-message { background: rgba(34, 197, 94, 0.1); color: #16a34a; padding: 16px 20px; border-radius: 12px; margin: 20px 0; border-left: 4px solid #22c55e; font-size: 14px; backdrop-filter: blur(10px); } /* 滚动条样式 */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: rgba(226, 232, 240, 0.8); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: rgba(148, 163, 184, 0.6); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(148, 163, 184, 0.8); } /* 登录成功页面专用样式 */ .success-content { text-align: center; margin-top: 30px; } .success-icon { width: 80px; height: 80px; margin: 0 auto 30px; background: linear-gradient(135deg, #10b981, #059669); border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 32px rgba(16, 185, 129, 0.3), 0 0 0 1px rgba(16, 185, 129, 0.1); animation: successPulse 2s ease-in-out infinite; } .success-icon svg { width: 40px; height: 40px; color: white; stroke-width: 3; } @keyframes successPulse { 0%, 100% { transform: scale(1); box-shadow: 0 8px 32px rgba(16, 185, 129, 0.3), 0 0 0 1px rgba(16, 185, 129, 0.1); } 50% { transform: scale(1.05); box-shadow: 0 12px 40px rgba(16, 185, 129, 0.4), 0 0 0 1px rgba(16, 185, 129, 0.2); } } .user-info { background: rgba(255, 255, 255, 0.8); border-radius: 16px; padding: 24px; margin: 30px 0; border: 1px solid rgba(226, 232, 240, 0.8); backdrop-filter: blur(10px); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05); } .user-name { font-size: 24px; font-weight: 700; color: #1e293b; margin-bottom: 8px; background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .user-type { font-size: 16px; color: #64748b; font-weight: 500; text-transform: uppercase; letter-spacing: 1px; background: linear-gradient(135deg, #10b981, #059669); color: white; padding: 6px 16px; border-radius: 20px; display: inline-block; box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3); } .redirect-container { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 30px; padding: 20px; background: rgba(255, 255, 255, 0.6); border-radius: 12px; border: 1px solid rgba(226, 232, 240, 0.6); backdrop-filter: blur(10px); } .redirect-container span { font-size: 16px; color: #64748b; font-weight: 500; } /* 响应式设计 - 登录成功页面 */ @media (max-width: 768px) { .success-icon { width: 60px; height: 60px; margin-bottom: 20px; } .success-icon svg { width: 30px; height: 30px; } .user-info { padding: 20px; margin: 20px 0; } .user-name { font-size: 20px; } .user-type { font-size: 14px; padding: 4px 12px; } .redirect-container { padding: 16px; margin-top: 20px; } .redirect-container span { font-size: 14px; } } @media (max-width: 480px) { .success-icon { width: 50px; height: 50px; } .success-icon svg { width: 25px; height: 25px; } .user-info { padding: 16px; } .user-name { font-size: 18px; } }