/* 认证表单专用样式 */ .auth-container { animation: slideInUp 0.6s ease-out; } .auth-form-wrapper { background: rgba(255, 255, 255, 0.85); backdrop-filter: blur(20px); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.6); } .form-group { position: relative; } .form-group input { transition: all 0.3s ease; } .form-group input:focus { transform: translateY(-2px); box-shadow: 0 10px 20px rgba(37, 99, 235, 0.15); } .form-group input:valid { border-color: #10b981; } .form-group input.error { border-color: #ef4444; background-color: rgba(239, 68, 68, 0.05); } .error-message { animation: slideDown 0.3s ease-out; font-size: 0.875rem; } .error-message.show { display: block !important; } /* 发送验证码按钮状态 */ #sendCodeBtn:disabled { background-color: #9ca3af; cursor: not-allowed; } #sendCodeBtn.countdown { background-color: #6b7280; } /* 登录/注册按钮动画 */ #loginBtn, #registerBtn { position: relative; overflow: hidden; transform: translateZ(0); } #loginBtn:hover, #registerBtn:hover { transform: translateY(-1px); box-shadow: 0 10px 20px rgba(37, 99, 235, 0.3); } #loginBtn:active, #registerBtn:active { transform: translateY(0); } /* 状态消息样式 */ #statusMessage { border-left: 4px solid currentColor; animation: slideInLeft 0.4s ease-out; } #statusMessage.success { background-color: rgba(16, 185, 129, 0.1); color: #059669; border-color: #10b981; } #statusMessage.error { background-color: rgba(239, 68, 68, 0.1); color: #dc2626; border-color: #ef4444; } #statusMessage.info { background-color: rgba(59, 130, 246, 0.1); color: #2563eb; border-color: #3b82f6; } #statusMessage.warning { background-color: rgba(245, 158, 11, 0.1); color: #d97706; border-color: #f59e0b; } /* 动画定义 */ @keyframes slideInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); max-height: 0; } to { opacity: 1; transform: translateY(0); max-height: 50px; } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } /* 输入框聚焦效果 */ .form-group label { transition: all 0.3s ease; } .form-group input:focus + .absolute i { color: #2563eb; transform: scale(1.1); } /* 响应式设计 */ @media (max-width: 640px) { .auth-form-wrapper { margin: 1rem; padding: 1.5rem; } .form-group { margin-bottom: 1rem; } #sendCodeBtn { padding: 0.75rem 1rem; font-size: 0.875rem; } } /* 加载状态 */ .loading { position: relative; pointer-events: none; } .loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid #ffffff; border-top: 2px solid transparent; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* 表单验证提示 */ .form-group .valid-feedback { color: #10b981; font-size: 0.875rem; margin-top: 0.25rem; } .form-group .valid-feedback::before { content: '✓ '; font-weight: bold; } /* 密码强度指示器(预留) */ .password-strength { height: 4px; background-color: #e5e7eb; border-radius: 2px; margin-top: 0.5rem; overflow: hidden; } .password-strength-bar { height: 100%; transition: all 0.3s ease; border-radius: 2px; } .password-strength.weak .password-strength-bar { width: 33%; background-color: #ef4444; } .password-strength.medium .password-strength-bar { width: 66%; background-color: #f59e0b; } .password-strength.strong .password-strength-bar { width: 100%; background-color: #10b981; }