/* pages/login/login.wxss */ .login-container { height: 100vh; width: 100%; position: relative; overflow: hidden; background: linear-gradient(180deg, #f0f9ff 0%, #e6f3fe 100%); } /* 波浪背景 */ .wave-background { position: absolute; top: 0; left: 0; width: 100%; height: 450rpx; overflow: hidden; } .wave { position: absolute; bottom: 0; width: 200%; height: 100%; background: linear-gradient(135deg, #4A90E2 0%, #67B26F 100%); border-radius: 0 0 50% 50%; animation: waveMove 15s ease-in-out infinite; } .wave-1 { opacity: 0.8; animation-delay: 0s; } .wave-2 { opacity: 0.5; animation-delay: 5s; background: linear-gradient(135deg, #5A9FE2 0%, #77C27F 100%); } .wave-3 { opacity: 0.3; animation-delay: 10s; background: linear-gradient(135deg, #6AAFE2 0%, #87D28F 100%); } @keyframes waveMove { 0% { transform: translateX(0) rotate(0deg); } 25% { transform: translateX(-15%) rotate(1deg); } 50% { transform: translateX(-25%) rotate(0deg); } 75% { transform: translateX(-15%) rotate(-1deg); } 100% { transform: translateX(0) rotate(0deg); } } /* 装饰元素 */ .decorations { position: absolute; width: 100%; height: 100%; pointer-events: none; } .cloud { position: absolute; background: rgba(255, 255, 255, 0.9); border-radius: 100rpx; filter: blur(2rpx); } .cloud-1 { width: 140rpx; height: 45rpx; top: 120rpx; left: 8%; box-shadow: 25rpx 0 0 0 rgba(255, 255, 255, 0.9), 50rpx 0 0 0 rgba(255, 255, 255, 0.9); animation: floatCloud 20s infinite; } .cloud-2 { width: 100rpx; height: 35rpx; top: 80rpx; right: 12%; box-shadow: 18rpx 0 0 0 rgba(255, 255, 255, 0.9), 36rpx 0 0 0 rgba(255, 255, 255, 0.9); animation: floatCloud 25s infinite reverse; } .cloud-3 { width: 80rpx; height: 28rpx; top: 180rpx; left: 65%; box-shadow: 14rpx 0 0 0 rgba(255, 255, 255, 0.9), 28rpx 0 0 0 rgba(255, 255, 255, 0.9); animation: floatCloud 18s infinite; } @keyframes floatCloud { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(30rpx); } } .medical-icon { position: absolute; font-size: 60rpx; opacity: 0.2; animation: floatIcon 6s ease-in-out infinite; } .icon-1 { top: 200rpx; left: 15%; animation-delay: 0s; } .icon-2 { bottom: 200rpx; right: 15%; animation-delay: 1s; } .icon-3 { bottom: 300rpx; left: 20%; animation-delay: 2s; } @keyframes floatIcon { 0%, 100% { transform: translateY(0) rotate(0deg); } 50% { transform: translateY(-20rpx) rotate(5deg); } } /* 主要内容区域 */ .main-content { position: relative; z-index: 10; height: 100%; display: flex; flex-direction: column; padding: 0 60rpx; padding-top: 100rpx; box-sizing: border-box; } /* Logo区域 */ .logo-section { display: flex; flex-direction: column; align-items: center; margin-bottom: 60rpx; animation: logoAppear 1s ease-out; } @keyframes logoAppear { 0% { opacity: 0; transform: scale(0.8); } 100% { opacity: 1; transform: scale(1); } } .logo-circle { width: 160rpx; height: 160rpx; border-radius: 50%; background: linear-gradient(135deg, #4A90E2, #67B26F); display: flex; align-items: center; justify-content: center; box-shadow: 0 20rpx 40rpx rgba(74, 144, 226, 0.3), inset 0 -4rpx 8rpx rgba(0, 0, 0, 0.1), inset 0 4rpx 8rpx rgba(255, 255, 255, 0.8); position: relative; } .logo-circle:before { content: ''; position: absolute; width: 140rpx; height: 140rpx; border-radius: 50%; border: 2rpx solid rgba(255, 255, 255, 0.5); } .logo-inner { width: 120rpx; height: 120rpx; border-radius: 50%; background: white; display: flex; align-items: center; justify-content: center; box-shadow: inset 0 2rpx 10rpx rgba(0, 0, 0, 0.1); } .logo-text { font-size: 70rpx; font-weight: bold; line-height: 1; } .app-title { font-size: 48rpx; font-weight: 700; color: #2c3e50; margin-bottom: 8rpx; letter-spacing: 2rpx; text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1); } .app-subtitle { font-size: 24rpx; color: #7f8c8d; letter-spacing: 4rpx; text-transform: uppercase; } /* 登录区域 */ .login-section { display: flex; flex-direction: column; align-items: center; flex: 1; } .welcome-text { text-align: center; margin-bottom: 60rpx; animation: slideUp 0.8s ease-out; } @keyframes slideUp { 0% { opacity: 0; transform: translateY(30rpx); } 100% { opacity: 1; transform: translateY(0); } } .welcome-main { display: block; font-size: 40rpx; font-weight: 600; color: #2c3e50; margin-bottom: 12rpx; } .welcome-desc { display: block; font-size: 26rpx; color: #95a5a6; } /* 输入框组 */ .input-group { width: 100%; margin-bottom: 40rpx; animation: slideUp 0.8s ease-out 0.1s both; } .input-wrapper { display: flex; align-items: center; background: white; border-radius: 60rpx; padding: 0 30rpx; margin-bottom: 30rpx; transition: all 0.3s ease; } .input-wrapper.input-focused { border-color: #4A90E2; box-shadow: 0 8rpx 20rpx rgba(74, 144, 226, 0.15); transform: translateY(-2rpx); } .input-icon { margin-right: 20rpx; opacity: 0.7; width: 40rpx; height: 40rpx; } .input-wrapper input { flex: 1; height: 90rpx; font-size: 28rpx; color: #2c3e50; } .input-placeholder { color: #bdc3c7; font-size: 28rpx; } .password-toggle { padding: 20rpx; font-size: 36rpx; opacity: 0.6; transition: opacity 0.3s ease; /* 提高点击区域 */ min-width: 80rpx; display: flex; align-items: center; justify-content: center; /* 防止事件冒泡 */ z-index: 10; } .password-toggle:active { opacity: 1; transform: scale(1.1); } /* 登录按钮 */ .login-btn { width: 100%; height: 100rpx; border-radius: 50rpx; background: linear-gradient(135deg, #4A90E2, #67B26F); box-shadow: 0 12rpx 30rpx rgba(74, 144, 226, 0.3); margin-bottom: 40rpx; transition: all 0.3s ease; animation: slideUp 0.8s ease-out 0.2s both; border: none; padding: 0; line-height: 100rpx; } .login-btn::after{ border: none; } .login-btn.btn-disabled { opacity: 0.5; background: #bdc3c7; box-shadow: none; pointer-events: none; } .btn-hover { transform: translateY(-4rpx) scale(1.02); box-shadow: 0 16rpx 40rpx rgba(74, 144, 226, 0.4); } .btn-inner { display: flex; align-items: center; justify-content: center; height: 100%; width: 100%; } .btn-text { color: white; font-size: 34rpx; font-weight: 600; letter-spacing: 4rpx; } /* 其他选项 */ .options-section { width: 100%; display: flex; justify-content: center; margin-bottom: 30rpx; animation: slideUp 0.8s ease-out 0.3s both; } .option-item { padding: 0 25rpx; position: relative; } .option-item:not(:last-child):after { content: '|'; position: absolute; right: 0; top: 50%; transform: translateY(-50%); color: #e0e0e0; } .option-text { font-size: 26rpx; color: #7f8c8d; transition: color 0.3s ease; } .option-item:active .option-text { color: #4A90E2; } /* 协议确认 */ .agreement-section { display: flex; align-items: center; justify-content: center; animation: slideUp 0.8s ease-out 0.4s both; } .agreement-checkbox { width: 32rpx; height: 32rpx; border: 2rpx solid #bdc3c7; border-radius: 8rpx; margin-right: 16rpx; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; } .agreement-checkbox.checked { background: linear-gradient(135deg, #4A90E2, #67B26F); border-color: transparent; } .checkmark { color: white; font-size: 24rpx; font-weight: bold; } .agreement-text { font-size: 24rpx; color: #7f8c8d; } .link { color: #4A90E2; display: inline; padding: 0 4rpx; } .link:active { opacity: 0.7; } /* 底部装饰 */ .bottom-decor { position: absolute; bottom: 0; left: 0; width: 100%; height: 60rpx; overflow: hidden; } .bottom-wave { position: absolute; top: 0; left: 0; width: 200%; height: 200%; background: linear-gradient(90deg, #4A90E2, #67B26F); border-radius: 50% 50% 0 0; animation: bottomWave 20s linear infinite; opacity: 0.2; } @keyframes bottomWave { 0% { transform: translateX(0) rotate(0deg); } 50% { transform: translateX(-25%) rotate(0.5deg); } 100% { transform: translateX(-50%) rotate(0deg); } } /* 协议弹窗 */ .agreement-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 1000; display: flex; align-items: center; justify-content: center; } .modal-mask { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); } .modal-content { position: relative; width: 85%; max-height: 80%; background-color: white; border-radius: 24rpx; overflow: hidden; box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15); } .modal-header { padding: 40rpx; border-bottom: 1rpx solid #f0f0f0; display: flex; align-items: center; justify-content: space-between; } .modal-title { font-size: 36rpx; font-weight: 600; color: #333; } .modal-close { font-size: 48rpx; color: #999; line-height: 1; padding: 0 20rpx; } .modal-close:active { color: #666; } .modal-body { max-height: 600rpx; padding: 20rpx; box-sizing: border-box; } .modal-text { font-size: 28rpx; color: #666; line-height: 1.8; padding: 20rpx 0; white-space: pre-line; } /* 忘记密码弹窗内容 */ .forgot-tip { font-size: 32rpx; color: #333; font-weight: 500; margin-bottom: 40rpx; text-align: center; } .contact-info { background: #f8f9fa; border-radius: 16rpx; padding: 30rpx; margin-bottom: 40rpx; } .contact-item { display: flex; justify-content: center; margin-bottom: 20rpx; font-size: 28rpx; } .contact-item:last-child { margin-bottom: 0; } .contact-label { color: #999; margin-right: 20rpx; } .contact-value { color: #333; font-weight: 500; } .contact-btn { width: 80%; height: 80rpx; border-radius: 40rpx; background: linear-gradient(135deg, #4A90E2, #67B26F); color: white; font-size: 32rpx; font-weight: 500; margin: 0 auto; display: flex; align-items: center; justify-content: center; border: none; } .contact-btn:active { opacity: 0.8; } /* 加载提示 */ .loading-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 1001; display: flex; align-items: center; justify-content: center; } .loading-content { display: flex; flex-direction: column; align-items: center; } .loading-spinner { width: 80rpx; height: 80rpx; border: 6rpx solid rgba(74, 144, 226, 0.2); border-top-color: #4A90E2; border-radius: 50%; animation: loadingSpin 1s linear infinite; margin-bottom: 30rpx; } @keyframes loadingSpin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .loading-text { font-size: 28rpx; color: #fff; }