Files
Blizzard 42aea10101
ci-cd / verify (push) Successful in 5s
ci-cd / deploy (push) Skipped
Add immediate startup login and loading states for mini program home
2026-10-05 11:03:33 +08:00

129 lines
2.2 KiB
Plaintext

.startup {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 80;
background: linear-gradient(160deg, #fff9f3, #fff0e2 65%, #f7edf7);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60rpx;
box-sizing: border-box;
overflow: hidden;
color: #694c3f;
}
.glow {
position: absolute;
width: 520rpx;
height: 520rpx;
border-radius: 50%;
background: radial-gradient(circle, #ffe1c2, transparent 70%);
top: 18%;
pointer-events: none;
}
.brand-wrap {
position: relative;
animation: breathe 2.4s ease-in-out infinite;
}
.brand {
width: 172rpx;
height: 172rpx;
border-radius: 55rpx;
box-shadow: 0 20rpx 60rpx #bd84551c;
}
.brand-name {
font-size: 45rpx;
font-weight: 600;
letter-spacing: 5rpx;
margin-top: 34rpx;
}
.brand-tagline {
font-size: 23rpx;
color: #9d7965;
margin-top: 14rpx;
letter-spacing: 2rpx;
}
.preparing,
.connection-error {
min-height: 170rpx;
margin-top: 64rpx;
text-align: center;
position: relative;
}
.message {
font-size: 25rpx;
color: #886c5f;
}
.dots {
display: flex;
justify-content: center;
gap: 12rpx;
margin-bottom: 25rpx;
}
.dots view {
width: 10rpx;
height: 10rpx;
border-radius: 50%;
background: #d99a75;
animation: pulse 1.2s ease-in-out infinite;
}
.dots view:nth-child(2) {
animation-delay: 0.15s;
}
.dots view:nth-child(3) {
animation-delay: 0.3s;
}
.error-copy {
font-size: 23rpx;
line-height: 1.8;
color: #9d7965;
margin-top: 15rpx;
max-width: 570rpx;
overflow-wrap: break-word;
}
.retry {
font-size: 25rpx;
background: #b95738;
color: white;
border-radius: 24rpx;
padding: 0 44rpx;
margin-top: 26rpx;
line-height: 82rpx;
}
.retry::after {
border: 0;
}
.failed .brand-wrap {
animation: none;
}
.footer {
position: absolute;
bottom: calc(65rpx + env(safe-area-inset-bottom));
font-size: 20rpx;
color: #a88c78;
letter-spacing: 1rpx;
}
@keyframes breathe {
0%,
100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-10rpx) scale(1.025);
}
}
@keyframes pulse {
0%,
100% {
opacity: 0.35;
transform: scale(0.85);
}
50% {
opacity: 1;
transform: scale(1.1);
}
}