page { height: 100%; background: #f5f6f8; } .page-home { box-sizing: border-box; height: 100%; padding: 0 20rpx; padding-top: 24rpx; background: #f5f6f8; } /* 单页滚动容器:内部 sticky 吸顶(基础库 2.10.3+) */ .home-scroll { height: 100%; box-sizing: border-box; /* padding-bottom: calc( env(safe-area-inset-bottom)); */ } .banner { width: 100%; height: 300rpx; border-radius: 16rpx; overflow: hidden; background: #e8e8e8; } .banner-item { width: 100%; height: 300rpx; } .banner-image { width: 100%; height: 100%; } .sticky-header { position: sticky; top: 0; z-index: 100; margin-top: 20rpx; padding-bottom: 16rpx; background: #f5f6f8; /* box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.06); */ } .search-wrap { display: flex; align-items: center; gap: 16rpx; background-color: #fff; border-radius: 38rpx; border: 2rpx solid #e1e3e6; } .search-input { flex: 1; height: 70rpx; line-height: 76rpx; padding: 0 4rpx; background: #ffffff; border-radius: 38rpx; font-size: 24rpx; color: #323233; } .search-ph { color: #c8c9cc; } .search-img{ width: 80rpx; height: 36rpx; margin: 0 10rpx 0 38rpx; } .search-btn { flex-shrink: 0; min-width: 120rpx; height: 70rpx; line-height: 76rpx; padding: 0 28rpx; text-align: center; font-size: 28rpx; color: #ffffff; /* background: linear-gradient(135deg, #3d8dff 0%, #1677ff 100%); */ background-color: #1a57b2; border-radius: 38rpx; box-shadow: 0 6rpx 16rpx rgba(22, 119, 255, 0.35); display: flex; align-items: center; justify-content: center; } .search-btn-text { margin-left: 10rpx; } .section-tab-img { width: 80rpx; height: 20rpx; margin-top: 10rpx; position: absolute; left: 50%; transform: translateX(-50%); bottom: 6rpx; z-index: -1; } .section-tabs { margin-top: 28rpx; display: flex; justify-content: center; gap: 80rpx; } .section-tab { position: relative; padding-bottom: 12rpx; } .section-tab-text { font-size: 34rpx; color: #969799; font-weight: 500; } .section-tab.is-active .section-tab-text { color: #111; font-weight: 700; } .section-tab-line { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%); width: 88rpx; height: 10rpx; border-radius: 8rpx; background: linear-gradient( 90deg, rgba(61, 141, 255, 0.15) 0%, #1677ff 45%, #1677ff 55%, rgba(61, 141, 255, 0.15) 100% ); box-shadow: 0 2rpx 8rpx rgba(22, 119, 255, 0.35); } .status-filters { margin-top: 40rpx; display: flex; gap: 50rpx; padding: 0 60rpx; } .status-pill { flex: 1; text-align: center; padding: 6rpx 0; font-size: 26rpx; color: #646566; background: #ffffff; border: 2rpx solid #e1e3e6; border-radius: 8rpx; } .status-pill.is-on { color: #ffffff; font-weight: 600; background: rgba(0, 96, 216, 1); border-color: transparent; box-shadow: 0 4rpx 12rpx rgba(22, 119, 255, 0.28); } .status-pill.is-1 { color: #ffffff; font-weight: 600; background: rgba(0, 181, 109, 1); border-color: transparent; box-shadow: 0 4rpx 12rpx rgba(0, 181, 109, 0.28); } .status-pill.is-2 { color: #ffffff; font-weight: 600; background: rgba(230, 6, 11, 1); border-color: transparent; box-shadow: 0 4rpx 12rpx rgba(230, 6, 11, 0.28); } .list-section { margin-top: 20rpx; padding-bottom: 120rpx; } .login-hint { margin: 80rpx 8rpx; padding: 48rpx 32rpx; background: #ffffff; border-radius: 20rpx; text-align: center; box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.04); } .login-hint-text { display: block; color: #646566; font-size: 28rpx; margin-bottom: 28rpx; } .login-hint-btn { width: 280rpx !important; background: linear-gradient(135deg, #1a57b2 0%, #1a57b2 100%) !important; border: none !important; color: #fff !important; border-radius: 999rpx !important; height: 80rpx !important; font-size: 32rpx !important; } .empty { padding: 80rpx 0; text-align: center; color: #969799; font-size: 28rpx; } .event-card { margin-bottom: 24rpx; background: #ffffff; border-radius: 20rpx; overflow: hidden; box-shadow: 0 8rpx 28rpx rgba(0, 0, 0, 0.06); } .event-card-media { position: relative; width: 100%; height: 320rpx; background: #fff; padding: 12rpx; box-sizing: border-box; } .event-card-cover { width: 100%; height: 100%; display: block; border-radius: 16rpx; } .addr-pill { position: absolute; top: 30rpx; left: 22px; max-width: calc(100% - 160rpx); padding:4rpx 12rpx; font-size: 22rpx; color: #323233; background: rgba(255, 255, 255, 1); border-radius: 999rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06); */ } .status-pill-top { position: absolute; top: 30rpx; right: 12rpx; padding: 8rpx 10rpx; font-size: 22rpx; color: #fff; background: linear-gradient(135deg, rgba(0, 181, 109, 0) 30%, rgba(0, 181, 109, 1) 80% , rgba(0, 181, 109, 1) 100%) ; /* box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06); */ } .status-pill-top-1 { background: linear-gradient(135deg, rgba(0, 181, 109, 0) 20%, rgba(0, 96, 216, 1) 80% , rgba(0, 96, 216, 1) 100%) ; } .status-pill-top-3 { background: linear-gradient(135deg, rgba(0, 181, 109, 0) 20%, rgba(0, 181, 109, 1) 80% , rgba(0, 181, 109, 1) 100%) ; } .status-pill-top-4 { background: linear-gradient(135deg, rgba(0, 181, 109, 0) 20%, rgba(230, 6, 11, 1)80% , rgba(230, 6, 11, 1)100%) ; } .event-card-body { padding: 22rpx 20rpx 26rpx; } .card-actions { display: flex; gap: 16rpx; padding: 0 20rpx 22rpx; flex-wrap: nowrap; } .action-btn { flex: 1; height: 50rpx; line-height: 50rpx; text-align: center; font-size: 22rpx; border-radius: 10rpx; border: 2rpx solid #e1e3e6; background: #fff; color: #323233; box-sizing: border-box; } .action-btn--ghost { background: #fff; color: #323233; } .action-btn--danger { border-color: #e6060b; color: #e6060b; background: #fff; } .action-btn--disabled { border-color: #c8c9cc; color: #c8c9cc; background: #f7f8fa; } .action-btn--paid { border-color: #00b56d; background: rgba(0, 181, 109, 0.12); color: #00b56d; font-weight: 700; } .title-row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 12rpx; margin-bottom: 16rpx; } .event-title { flex: 1; min-width: 0; font-size: 28rpx; font-weight: 800; color: #111; line-height: 1.45; } .format-tag { flex-shrink: 0; padding: 4rpx 14rpx; font-size: 22rpx; font-weight: 600; color: #ffffff; background: linear-gradient(135deg, #3d8dff 0%, #1677ff 100%); border-radius: 8rpx; } .meta-line { font-size: 24rpx; color: #969799; line-height: 1.55; margin-top: 6rpx; } .loading { display: flex; justify-content: center; align-items: center; color: #969799; font-size: 26rpx; padding: 32rpx 0 48rpx; } /* ===== 三点加载动画 ===== */ .loading-dots { display: flex; align-items: center; gap: 12rpx; } .loading-dot { width: 14rpx; height: 14rpx; border-radius: 50%; background: #1a56db; animation: dot-bounce 2.8s infinite ease-in-out; } .loading-dot:nth-child(1) { animation-delay: 0s; } .loading-dot:nth-child(2) { animation-delay: 0.2s; } .loading-dot:nth-child(3) { animation-delay: 0.4s; } @keyframes dot-bounce { 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; } 40% { transform: scale(1); opacity: 1; } } /* ===== 首屏骨架屏 ===== */ .skeleton-card { background: #fff; border-radius: 20rpx; overflow: hidden; margin-bottom: 24rpx; } .skeleton-cover { width: 100%; height: 300rpx; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: skeleton-shimmer 1.4s infinite; } .skeleton-body { padding: 24rpx 28rpx 28rpx; display: flex; flex-direction: column; gap: 16rpx; } .skeleton-line { height: 24rpx; border-radius: 8rpx; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: skeleton-shimmer 1.4s infinite; } .skeleton-line--long { width: 80%; } .skeleton-line--mid { width: 60%; } .skeleton-line--short { width: 40%; } @keyframes skeleton-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }