/**index.wxss**/ page { background-color: #f0f5fa; min-height: 100vh; } .page { padding: 40rpx 32rpx; } .header { display: flex; flex-direction: column; align-items: center; padding: 60rpx 0 40rpx; } .header-icon { font-size: 100rpx; margin-bottom: 24rpx; line-height: 1; } /* loading 遮罩 */ .loading-mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: #f0f5fa; display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 999; } .loading-spinner { width: 64rpx; height: 64rpx; border: 6rpx solid #dbeafe; border-top: 6rpx solid #5b9bd5; border-radius: 50%; animation: spin 0.8s linear infinite; margin-bottom: 24rpx; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .loading-text { font-size: 28rpx; color: #7f8fa6; letter-spacing: 2rpx; } /* 登录失败 */ .fail-icon { font-size: 80rpx; margin-bottom: 20rpx; } .fail-text { font-size: 28rpx; color: #7f8fa6; margin-bottom: 32rpx; } .retry-btn { font-size: 28rpx; color: #fff; background: linear-gradient(135deg, #5b9bd5, #4a8bc2); padding: 16rpx 56rpx; border-radius: 40rpx; font-weight: 600; letter-spacing: 2rpx; box-shadow: 0 4rpx 16rpx rgba(91, 155, 213, 0.3); } .retry-btn:active { opacity: 0.85; } .header-title { font-size: 44rpx; font-weight: 700; color: #2c3e50; margin-bottom: 12rpx; letter-spacing: 4rpx; } .header-subtitle { font-size: 26rpx; color: #7f8fa6; letter-spacing: 2rpx; } /* 功能卡片 */ .action-list { margin-top: 24rpx; } .action-card { display: flex; align-items: center; background: #ffffff; border-radius: 24rpx; padding: 36rpx 32rpx; margin-bottom: 20rpx; box-shadow: 0 4rpx 20rpx rgba(91, 155, 213, 0.08); } .action-card:active { background: #f7fafd; } .action-icon-wrap { width: 88rpx; height: 88rpx; border-radius: 20rpx; display: flex; align-items: center; justify-content: center; margin-right: 28rpx; flex-shrink: 0; } .action-icon-blue { background: rgba(91, 155, 213, 0.12); } .action-icon-green { background: rgba(110, 198, 160, 0.12); } .action-icon-text { font-size: 44rpx; } .action-info { flex: 1; display: flex; flex-direction: column; } .action-title { font-size: 32rpx; font-weight: 600; color: #2c3e50; margin-bottom: 8rpx; } .action-desc { font-size: 24rpx; color: #7f8fa6; } .action-arrow { font-size: 40rpx; color: #b8c9db; margin-left: 16rpx; } /* 最新预约卡片 */ .latest-card { background: #ffffff; border-radius: 24rpx; padding: 28rpx 32rpx; margin-top: 8rpx; box-shadow: 0 4rpx 20rpx rgba(91, 155, 213, 0.08); } .latest-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20rpx; padding-bottom: 16rpx; border-bottom: 1rpx solid #e8eef5; } .latest-header-right { display: flex; align-items: center; gap: 12rpx; } .latest-header-left { display: flex; align-items: center; gap: 16rpx; } .qrcode-btn { font-size: 22rpx; color: #fff; background: linear-gradient(135deg, #5b9bd5, #4a8bc2); padding: 8rpx 24rpx; border-radius: 30rpx; letter-spacing: 1rpx; box-shadow: 0 4rpx 12rpx rgba(91, 155, 213, 0.25); } .qrcode-btn:active { opacity: 0.85; } .latest-title { font-size: 28rpx; font-weight: 600; color: #2c3e50; } .status-tag { font-size: 22rpx; padding: 4rpx 16rpx; border-radius: 20rpx; font-weight: 500; margin-left: auto; } .status-pending { background: rgba(240, 164, 93, 0.12); color: #e6a23c; } .status-approved { background: rgba(110, 198, 160, 0.12); color: #52c41a; } .status-rejected { background: rgba(239, 83, 80, 0.1); color: #ef5350; } .status-cancelled { background: rgba(127, 143, 166, 0.1); color: #7f8fa6; } .latest-body { margin-bottom: 8rpx; } .latest-row { display: flex; justify-content: space-between; align-items: center; padding: 8rpx 0; } .latest-label { font-size: 24rpx; color: #7f8fa6; } .latest-value { font-size: 24rpx; color: #2c3e50; } .latest-footer { padding-top: 16rpx; border-top: 1rpx solid #e8eef5; text-align: center; } .latest-link { font-size: 24rpx; color: #5b9bd5; letter-spacing: 1rpx; } .footer { margin-top: 120rpx; text-align: center; } .footer-text { font-size: 22rpx; color: #b8c9db; letter-spacing: 4rpx; } /* 骨架屏 */ .skeleton-row { display: flex; justify-content: flex-start; align-items: center; padding: 8rpx 0; } .skeleton-bar { height: 24rpx; border-radius: 8rpx; background: linear-gradient(90deg, #e8eef5 25%, #dbeafe 50%, #e8eef5 75%); background-size: 200% 100%; animation: skeleton-pulse 1.5s ease-in-out infinite; } @keyframes skeleton-pulse { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }