/* 启动页面 - 现代化设计 + 系统适配 */ page { margin: 0; padding: 0; box-sizing: border-box; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } /* 主容器 */ .splash-container { display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; overflow: hidden; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } /* 背景装饰 */ .background-decorations { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; overflow: hidden; } .decoration { position: absolute; font-size: 40rpx; opacity: 0.1; animation: float-decoration 8s ease-in-out infinite; } .decoration-1 { top: 10%; left: 15%; animation-delay: 0s; } .decoration-2 { top: 20%; right: 20%; animation-delay: -1s; } .decoration-3 { top: 40%; left: 10%; animation-delay: -2s; } .decoration-4 { top: 60%; right: 15%; animation-delay: -3s; } .decoration-5 { top: 75%; left: 25%; animation-delay: -4s; } .decoration-6 { top: 30%; right: 10%; animation-delay: -5s; } .decoration-7 { top: 80%; right: 30%; animation-delay: -6s; } .decoration-8 { top: 50%; left: 5%; animation-delay: -7s; } @keyframes float-decoration { 0%, 100% { transform: translateY(0) rotate(0deg) scale(1); opacity: 0.1; } 25% { transform: translateY(-20rpx) rotate(90deg) scale(1.1); opacity: 0.2; } 50% { transform: translateY(-40rpx) rotate(180deg) scale(0.9); opacity: 0.3; } 75% { transform: translateY(-20rpx) rotate(270deg) scale(1.1); opacity: 0.2; } } /* Logo区域 */ .logo-container { display: flex; flex-direction: column; align-items: center; margin-bottom: 120rpx; z-index: 10; } .logo-animation { position: relative; width: 200rpx; height: 200rpx; margin-bottom: 60rpx; } .logo-main { position: relative; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; z-index: 3; } .logo-icon { font-size: 100rpx; text-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.3); animation: logo-pulse 2s ease-in-out infinite; } .logo-rings { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } .ring { position: absolute; border: 2rpx solid rgba(255, 255, 255, 0.3); border-radius: 50%; animation: ring-spin 6s linear infinite; } .ring-1 { width: 120rpx; height: 120rpx; top: 40rpx; left: 40rpx; animation-delay: 0s; } .ring-2 { width: 140rpx; height: 140rpx; top: 30rpx; left: 30rpx; animation-delay: -1s; animation-direction: reverse; } .ring-3 { width: 160rpx; height: 160rpx; top: 20rpx; left: 20rpx; animation-delay: -2s; } .ring-4 { width: 180rpx; height: 180rpx; top: 10rpx; left: 10rpx; animation-delay: -3s; animation-direction: reverse; } .logo-glow { position: absolute; top: -20rpx; left: -20rpx; right: -20rpx; bottom: -20rpx; background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, transparent 70%); border-radius: 50%; animation: glow-pulse 3s ease-in-out infinite; } @keyframes logo-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } @keyframes ring-spin { 0% { transform: rotate(0deg); opacity: 0.3; } 50% { opacity: 0.6; } 100% { transform: rotate(360deg); opacity: 0.3; } } @keyframes glow-pulse { 0%, 100% { opacity: 0.5; transform: scale(1); } 50% { opacity: 0.8; transform: scale(1.1); } } /* 应用信息 */ .app-info { display: flex; flex-direction: column; align-items: center; gap: 16rpx; } .app-name { font-size: 56rpx; font-weight: 700; color: white; text-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.3); letter-spacing: 3rpx; animation: fade-in-up 1s ease-out 0.5s both; } .app-slogan { font-size: 28rpx; color: rgba(255, 255, 255, 0.9); text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2); font-style: italic; animation: fade-in-up 1s ease-out 0.8s both; } @keyframes fade-in-up { from { opacity: 0; transform: translateY(30rpx); } to { opacity: 1; transform: translateY(0); } } /* 加载动画 */ .loading-container { display: flex; flex-direction: column; align-items: center; gap: 40rpx; margin-bottom: 80rpx; z-index: 10; } .loading-animation { position: relative; width: 120rpx; height: 120rpx; } .spinner-container { position: relative; width: 100%; height: 100%; } .spinner-dot { position: absolute; width: 16rpx; height: 16rpx; background: rgba(255, 255, 255, 0.8); border-radius: 50%; animation: spinner-rotate 2s linear infinite; } .dot-1 { top: 10rpx; left: 50%; transform: translateX(-50%); animation-delay: 0s; } .dot-2 { top: 30rpx; right: 20rpx; animation-delay: 0.2s; } .dot-3 { bottom: 20rpx; right: 30rpx; animation-delay: 0.4s; } .dot-4 { bottom: 10rpx; left: 30rpx; animation-delay: 0.6s; } .dot-5 { top: 30rpx; left: 20rpx; animation-delay: 0.8s; } .pulse-ring { position: absolute; top: 50%; left: 50%; width: 80rpx; height: 80rpx; border: 3rpx solid rgba(255, 255, 255, 0.3); border-radius: 50%; transform: translate(-50%, -50%); animation: pulse-ring 2s ease-in-out infinite; } @keyframes spinner-rotate { 0% { transform: rotate(0deg) translateX(40rpx) rotate(0deg); opacity: 1; } 50% { opacity: 0.3; } 100% { transform: rotate(360deg) translateX(40rpx) rotate(-360deg); opacity: 1; } } @keyframes pulse-ring { 0% { transform: translate(-50%, -50%) scale(0.8); opacity: 1; } 50% { transform: translate(-50%, -50%) scale(1.2); opacity: 0.3; } 100% { transform: translate(-50%, -50%) scale(0.8); opacity: 1; } } .loading-text { font-size: 28rpx; color: rgba(255, 255, 255, 0.9); text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2); animation: text-fade 2s ease-in-out infinite; } @keyframes text-fade { 0%, 100% { opacity: 0.7; } 50% { opacity: 1; } } /* 进度条 */ .progress-container { width: 500rpx; margin-bottom: 60rpx; z-index: 10; } .progress-track { position: relative; width: 100%; height: 8rpx; background: rgba(255, 255, 255, 0.2); border-radius: 4rpx; overflow: hidden; backdrop-filter: blur(10rpx); } .progress-fill { height: 100%; background: linear-gradient(90deg, rgba(255, 255, 255, 0.8) 0%, white 100%); border-radius: 4rpx; transition: width 0.3s ease; box-shadow: 0 0 10rpx rgba(255, 255, 255, 0.5); } .progress-glow { position: absolute; top: -4rpx; width: 20rpx; height: 16rpx; background: radial-gradient(circle, rgba(255, 255, 255, 0.8) 0%, transparent 70%); border-radius: 50%; transform: translateX(-50%); transition: left 0.3s ease; } .progress-info { display: flex; justify-content: space-between; align-items: center; margin-top: 16rpx; } .progress-percentage { font-size: 24rpx; font-weight: 600; color: white; text-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.2); } .progress-description { font-size: 22rpx; color: rgba(255, 255, 255, 0.8); text-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.2); } /* 版本信息 */ .version-info { position: absolute; left: 50%; transform: translateX(-50%); z-index: 10; } .version-badge { display: flex; align-items: center; gap: 12rpx; padding: 12rpx 24rpx; background: rgba(255, 255, 255, 0.1); border-radius: 32rpx; backdrop-filter: blur(20rpx); border: 1rpx solid rgba(255, 255, 255, 0.2); } .version-icon { font-size: 20rpx; } .version-text { font-size: 22rpx; color: rgba(255, 255, 255, 0.8); font-family: 'Monaco', 'Consolas', monospace; } /* 错误提示 */ .error-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; backdrop-filter: blur(8rpx); animation: fade-in 0.3s ease; } .error-content { background: rgba(255, 255, 255, 0.95); border-radius: 32rpx; padding: 60rpx 48rpx; margin: 60rpx; max-width: 500rpx; text-align: center; backdrop-filter: blur(20rpx); box-shadow: 0 16rpx 64rpx rgba(0, 0, 0, 0.2); animation: scale-in 0.3s ease; } .error-icon { font-size: 80rpx; margin-bottom: 32rpx; animation: shake 0.5s ease-in-out; } .error-title { font-size: 32rpx; font-weight: 700; color: #e74c3c; margin-bottom: 16rpx; display: block; } .error-message { font-size: 26rpx; color: #6c757d; line-height: 1.4; margin-bottom: 40rpx; display: block; } .error-actions { display: flex; justify-content: center; } .retry-button { display: flex; align-items: center; gap: 16rpx; padding: 20rpx 40rpx; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 24rpx; box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.3); transition: all 0.2s ease; } .retry-button:active { transform: scale(0.95); box-shadow: 0 4rpx 12rpx rgba(102, 126, 234, 0.3); } .button-icon { font-size: 24rpx; color: white; } .button-text { font-size: 28rpx; font-weight: 600; color: white; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes scale-in { from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); } } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-10rpx); } 75% { transform: translateX(10rpx); } } /* 启动完成动画 */ .success-animation { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; gap: 24rpx; z-index: 100; animation: success-appear 0.5s ease; } .success-icon { font-size: 100rpx; animation: success-bounce 0.6s ease; } .success-text { font-size: 32rpx; font-weight: 600; color: white; text-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.3); } @keyframes success-appear { from { opacity: 0; transform: translate(-50%, -50%) scale(0.5); } to { opacity: 1; transform: translate(-50%, -50%) scale(1); } } @keyframes success-bounce { 0% { transform: scale(0); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } /* 响应式设计 - 适配不同屏幕尺寸 */ @media screen and (max-width: 375px) { .logo-animation { width: 160rpx; height: 160rpx; margin-bottom: 40rpx; } .logo-icon { font-size: 80rpx; } .app-name { font-size: 48rpx; } .app-slogan { font-size: 24rpx; } .progress-container { width: 280rpx; } .error-content { padding: 48rpx 32rpx; margin: 40rpx; } } @media screen and (min-width: 414px) { .logo-animation { width: 240rpx; height: 240rpx; margin-bottom: 80rpx; } .logo-icon { font-size: 120rpx; } .app-name { font-size: 64rpx; } .app-slogan { font-size: 32rpx; } .progress-container { width: 400rpx; } } @media screen and (max-height: 667px) { .logo-container { margin-bottom: 80rpx; } .progress-container { margin-bottom: 60rpx; } } @media screen and (min-height: 812px) { .logo-container { margin-bottom: 160rpx; } .progress-container { margin-bottom: 120rpx; } }