@keyframes gvaLoadingSpin { to { transform: rotate(360deg); } } @keyframes gvaLoadingOrbit { to { transform: rotate(360deg); } } @keyframes gvaLoadingPulse { 0%, 100% { opacity: 0.72; } 50% { opacity: 1; } } @keyframes gvaLoadingFadeIn { from { opacity: 0; } to { opacity: 1; } } .gva-loading-box, .el-loading-mask.gva-tech-loading { background: radial-gradient(circle at 50% 40%, rgba(0, 212, 255, 0.1), transparent 38%), radial-gradient(circle at 12% 10%, rgba(0, 212, 255, 0.12), transparent 28%), linear-gradient(135deg, #020617 0%, #07111f 52%, #0f172a 100%) !important; } .gva-loading-box { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100vw; height: 100vh; overflow: hidden; } .gva-loading-panel, .el-loading-mask.gva-tech-loading .el-loading-spinner { position: relative; display: flex; flex-direction: column; align-items: center; gap: 14px; min-width: 148px; padding: 24px 28px 20px; margin-top: 0; border: 1px solid rgba(0, 212, 255, 0.22); border-radius: 18px; background: linear-gradient(145deg, rgba(10, 28, 54, 0.96), rgba(4, 14, 30, 0.92)); box-shadow: 0 22px 48px rgba(0, 0, 0, 0.34), 0 0 28px rgba(0, 212, 255, 0.1), inset 0 0 28px rgba(0, 212, 255, 0.05); } .gva-loading-ring { position: relative; flex-shrink: 0; width: 44px; height: 44px; } .gva-loading-ring::before { content: ''; position: absolute; inset: 0; border: 2px solid rgba(0, 212, 255, 0.12); border-top-color: #00d4ff; border-right-color: rgba(103, 232, 249, 0.55); border-radius: 50%; animation: gvaLoadingSpin 0.85s linear infinite; box-shadow: 0 0 18px rgba(0, 212, 255, 0.22); } .gva-loading-ring::after { content: ''; position: absolute; inset: -6px; border: 1px dashed rgba(0, 212, 255, 0.16); border-radius: 50%; animation: gvaLoadingOrbit 2.4s linear infinite; } .gva-loading-text, .el-loading-mask.gva-tech-loading .el-loading-text { margin: 0 !important; padding-top: 0; font-size: 13px; font-weight: 600; line-height: 1.4; color: #dceeff !important; letter-spacing: 0.1em; text-shadow: none; animation: gvaLoadingPulse 1.6s ease-in-out infinite; } .el-loading-mask.gva-tech-loading .el-loading-spinner .circular { display: none !important; } @media (prefers-reduced-motion: reduce) { .gva-loading-ring::before, .gva-loading-ring::after, .gva-loading-text, .el-loading-mask.gva-tech-loading .el-loading-text { animation: none !important; } }