|
|
.training-container { min-height: 100vh; background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%); padding: 20rpx 30rpx 100rpx; position: relative; overflow-x: hidden;}
/* 头部样式优化 */.header { text-align: center; margin-bottom: 50rpx; padding-top: 60rpx; position: relative; z-index: 1;}
.title { font-size: 56rpx; font-weight: 800; color: transparent; background: linear-gradient(45deg, #3498db, #2ecc71, #3498db); background-size: 200% auto; -webkit-background-clip: text; background-clip: text; margin-bottom: 20rpx; letter-spacing: 1rpx; position: relative; display: inline-block; animation: gradientText 3s ease infinite;}
@keyframes gradientText { 0%, 100% { background-position: 0% center; } 50% { background-position: 100% center; }}
.title::after { content: ''; position: absolute; bottom: -8rpx; left: 50%; transform: translateX(-50%); width: 80rpx; height: 4rpx; background: linear-gradient(45deg, #3498db, #2ecc71); border-radius: 2rpx;}
.subtitle { font-size: 28rpx; color: #64748b; letter-spacing: 2rpx; font-weight: 400; opacity: 0.9; position: relative; padding-top: 10rpx;}
.header-decoration { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: -1;}
.decoration-circle { position: absolute; border-radius: 50%; background: linear-gradient(45deg, rgba(52, 152, 219, 0.1), rgba(46, 204, 113, 0.1)); animation: float 6s ease-in-out infinite;}
.circle-1 { width: 120rpx; height: 120rpx; top: 20rpx; left: 10%; animation-delay: 0s;}
.circle-2 { width: 80rpx; height: 80rpx; top: 60rpx; right: 15%; animation-delay: 2s;}
.circle-3 { width: 60rpx; height: 60rpx; top: 100rpx; left: 20%; animation-delay: 4s;}
@keyframes float { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-20rpx) scale(1.05); }}
/* 主选项卡样式优化 */.tabs { display: flex; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10rpx); border-radius: 18rpx; margin-bottom: 30rpx; box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.08), inset 0 1rpx 0 rgba(255, 255, 255, 0.9); border: 1rpx solid rgba(226, 232, 240, 0.8); position: relative; overflow: hidden; z-index: 1; padding: 6rpx; height: 88rpx;}
.tab-item { flex: 1; text-align: center; font-size: 32rpx; color: #64748b; position: relative; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); font-weight: 500; display: flex; align-items: center; justify-content: center; height: 100%; border-radius: 12rpx; z-index: 2; letter-spacing: 1rpx;}
.tab-item.active { color: #ffffff; font-weight: 600; text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);}
.tab-slider { position: absolute; top: 6rpx; width: calc(50% - 6rpx); height: calc(100% - 12rpx); background: linear-gradient(135deg, #3498db, #2ecc71); border-radius: 12rpx; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 4rpx 20rpx rgba(52, 152, 219, 0.25), 0 2rpx 8rpx rgba(52, 152, 219, 0.15); z-index: 1;}
.tab-slider.left { left: 6rpx; transform: translateX(0);}
.tab-slider.right { left: 6rpx; transform: translateX(100%);}
.tab-highlight { position: absolute; bottom: -6rpx; left: 50%; transform: translateX(-50%); width: 24rpx; height: 4rpx; background: linear-gradient(135deg, #3498db, #2ecc71); border-radius: 2rpx; opacity: 0; transition: all 0.3s ease; box-shadow: 0 2rpx 6rpx rgba(52, 152, 219, 0.3);}
.tab-item.active .tab-highlight { opacity: 1; animation: highlightPulse 2s ease infinite;}
@keyframes highlightPulse { 0%, 100% { box-shadow: 0 2rpx 6rpx rgba(52, 152, 219, 0.3); transform: translateX(-50%) scale(1); } 50% { box-shadow: 0 2rpx 12rpx rgba(52, 152, 219, 0.5); transform: translateX(-50%) scale(1.1); }}
/* 内容区域 */.content-section { animation: slideUp 0.6s cubic-bezier(0.4, 0, 0.2, 1);}
@keyframes slideUp { from { opacity: 0; transform: translateY(40rpx); } to { opacity: 1; transform: translateY(0); }}
/* 搜索框样式优化 */.search-box { position: relative; margin-bottom: 30rpx; animation: slideIn 0.8s ease;}
@keyframes slideIn { from { opacity: 0; transform: translateX(-30rpx); } to { opacity: 1; transform: translateX(0); }}
.search-input { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10rpx); border-radius: 25rpx; padding: 20rpx 40rpx 20rpx 100rpx; font-size: 28rpx; box-shadow: 0 8rpx 30rpx rgba(0, 0, 0, 0.08), inset 0 1rpx 0 rgba(255, 255, 255, 0.8); border: 1rpx solid rgba(255, 255, 255, 0.5); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; z-index: 2;}
.search-input:focus { border-color: rgba(52, 152, 219, 0.3); box-shadow: 0 12rpx 40rpx rgba(52, 152, 219, 0.15), inset 0 1rpx 0 rgba(255, 255, 255, 0.8); transform: translateY(-2rpx);}
.search-icon { position: absolute; left: 40rpx; top: 50%; transform: translateY(-50%); width: 36rpx; height: 36rpx; z-index: 3; transition: all 0.3s ease;}
.search-decoration { position: absolute; top: 0; left: 0; right: 0; bottom: 0; border-radius: 25rpx; overflow: hidden; z-index: 1;}
.search-wave { position: absolute; top: 0; left: -100%; width: 200%; height: 100%; background: linear-gradient(90deg, transparent, rgba(52, 152, 219, 0.1), transparent); animation: waveFlow 3s ease-in-out infinite;}
@keyframes waveFlow { 0% { transform: translateX(0); } 100% { transform: translateX(50%); }}
.placeholder-style { color: #94a3b8; font-size: 28rpx;}
/* 分类筛选样式优化 */.category-scroll { white-space: nowrap; margin-bottom: 30rpx; padding: 0 10rpx;}
.category-list { display: inline-flex; gap: 20rpx;}
.category-item { display: inline-flex; align-items: center; justify-content: center; padding: 20rpx 36rpx; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10rpx); border-radius: 25rpx; font-size: 28rpx; color: #64748b; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; white-space: nowrap; font-weight: 500; min-width: 120rpx;}
.category-item:active { transform: scale(0.96);}
.category-item.active { background: linear-gradient(135deg, #3498db, #2ecc71); color: white; border-color: transparent; font-weight: 600;}
.category-indicator { position: absolute; bottom: 8rpx; left: 50%; transform: translateX(-50%); width: 6rpx; height: 6rpx; background: white; border-radius: 50%; opacity: 0; transition: all 0.3s ease;}
.category-item.active .category-indicator { opacity: 1; animation: indicatorBounce 1s ease infinite;}
@keyframes indicatorBounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-4rpx); }}
/* 文章列表样式优化 */.articles-list { margin-top: 10rpx;}
.article-card { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10rpx); border-radius: 25rpx; margin-bottom: 35rpx; overflow: hidden; box-shadow: 0 10rpx 35rpx rgba(0, 0, 0, 0.08), inset 0 1rpx 0 rgba(255, 255, 255, 0.8); border: 1rpx solid rgba(255, 255, 255, 0.5); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; opacity: 0; transform: translateY(30rpx); animation: cardAppear 0.6s ease forwards;}
@keyframes cardAppear { to { opacity: 1; transform: translateY(0); }}
.article-card:nth-child(1) { animation-delay: 0.1s;}
.article-card:nth-child(2) { animation-delay: 0.2s;}
.article-card:nth-child(3) { animation-delay: 0.3s;}
.article-card:nth-child(4) { animation-delay: 0.4s;}
.article-card:nth-child(5) { animation-delay: 0.5s;}
.article-card:active { transform: translateY(-8rpx); box-shadow: 0 20rpx 50rpx rgba(0, 0, 0, 0.15), inset 0 1rpx 0 rgba(255, 255, 255, 0.8);}
.article-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4rpx; background: linear-gradient(45deg, #3498db, #2ecc71); opacity: 0; transition: opacity 0.4s ease; z-index: 2;}
.article-card:active::before { opacity: 1;}
.article-cover-container { position: relative; height: 320rpx; overflow: hidden; border-radius: 25rpx 25rpx 0 0;}
.article-cover { width: 100%; height: 100%; transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);}
.article-card:active .article-cover { transform: scale(1.08);}
.cover-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(to bottom, transparent 50%, rgba(0, 0, 0, 0.3));}
.category-tag { position: absolute; top: 25rpx; right: 25rpx; background: rgba(52, 152, 219, 0.95); backdrop-filter: blur(10rpx); color: white; padding: 10rpx 25rpx; border-radius: 20rpx; font-size: 22rpx; font-weight: 600; box-shadow: 0 4rpx 15rpx rgba(0, 0, 0, 0.2); z-index: 2;}
.article-hover-effect { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(45deg, transparent, rgba(52, 152, 219, 0.1), transparent); opacity: 0; transition: opacity 0.4s ease;}
.article-card:active .article-hover-effect { opacity: 1;}
.article-info { padding: 35rpx;}
.article-title { font-size: 34rpx; font-weight: 700; color: #1e293b; margin-bottom: 20rpx; line-height: 1.4; letter-spacing: 0.5rpx; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; transition: color 0.3s ease;}
.article-card:active .article-title { color: #3498db;}
.article-desc { font-size: 26rpx; color: #64748b; line-height: 1.6; margin-bottom: 25rpx; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;}
.article-meta { display: flex; justify-content: space-between; margin-bottom: 25rpx; padding-bottom: 25rpx; border-bottom: 1rpx solid rgba(226, 232, 240, 0.8);}
.meta-item { display: flex; align-items: center; gap: 10rpx;}
.meta-icon { width: 30rpx; height: 30rpx; transition: all 0.3s ease; border-radius: 50%;}
.meta-item:active .meta-icon { opacity: 1; transform: scale(1.1);}
.meta-text { font-size: 24rpx; color: #94a3b8; font-weight: 400;}
.article-stats { display: flex; justify-content: flex-end; align-items: center;}
.stat-item { display: flex; align-items: center; gap: 10rpx; font-size: 24rpx; color: #64748b; font-weight: 500;}
.stat-icon { width: 28rpx; height: 28rpx; opacity: 0.7; transition: all 0.3s ease;}
.stat-item:active .stat-icon { opacity: 1; transform: scale(1.1);}
/* 视频列表样式*/.videos-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20rpx; margin-top: 20rpx;}
.video-card { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10rpx); border-radius: 25rpx; overflow: hidden; box-shadow: 0 10rpx 35rpx rgba(0, 0, 0, 0.08), inset 0 1rpx 0 rgba(255, 255, 255, 0.8); border: 1rpx solid rgba(255, 255, 255, 0.5); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); position: relative; opacity: 0; transform: scale(0.9); animation: videoCardAppear 0.6s ease forwards;}
@keyframes videoCardAppear { to { opacity: 1; transform: scale(1); }}
.video-card:nth-child(1) { animation-delay: 0.1s;}
.video-card:nth-child(2) { animation-delay: 0.2s;}
.video-card:nth-child(3) { animation-delay: 0.3s;}
.video-card:nth-child(4) { animation-delay: 0.4s;}
.video-card:nth-child(5) { animation-delay: 0.5s;}
.video-card:nth-child(6) { animation-delay: 0.6s;}
.video-card:active { transform: scale(0.95); box-shadow: 0 20rpx 50rpx rgba(0, 0, 0, 0.15), inset 0 1rpx 0 rgba(255, 255, 255, 0.8);}
.video-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4rpx; background: linear-gradient(45deg, #3498db, #2ecc71); opacity: 0; transition: opacity 0.4s ease; z-index: 2;}
.video-card:active::before { opacity: 1;}
.video-cover-container { position: relative; height: 280rpx; overflow: hidden; border-radius: 25rpx 25rpx 0 0;}
.video-cover { width: 100%; height: 100%; transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);}
.video-card:active .video-cover { transform: scale(1.08);}
.video-duration { position: absolute; bottom: 15rpx; right: 15rpx; background: rgba(0, 0, 0, 0.9); backdrop-filter: blur(10rpx); color: white; padding: 8rpx 18rpx; border-radius: 15rpx; font-size: 22rpx; font-weight: 600; z-index: 2;}
.play-button { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80rpx; height: 80rpx; background: rgba(255, 255, 255, 0.3); backdrop-filter: blur(10rpx); border-radius: 50%; display: flex; align-items: center; justify-content: center; z-index: 2; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);}
.video-card:active .play-button { transform: translate(-50%, -50%) scale(1.1); box-shadow: 0 15rpx 40rpx rgba(0, 0, 0, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.8);}
.play-icon { width: 30rpx; height: 30rpx; margin-left: 4rpx; transition: transform 0.3s ease;}
.video-card:active .play-icon { transform: scale(1.1);}
.play-ripple { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transition: all 0.6s ease;}
.video-card:active .play-ripple { width: 120rpx; height: 120rpx; animation: playRipple 0.8s ease-out;}
@keyframes playRipple { from { opacity: 1; transform: translate(-50%, -50%) scale(0); } to { opacity: 0; transform: translate(-50%, -50%) scale(1); }}
.video-hover-effect { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(45deg, transparent, rgba(52, 152, 219, 0.1), transparent); opacity: 0; transition: opacity 0.4s ease;}
.video-card:active .video-hover-effect { opacity: 1;}
.video-info { padding: 25rpx;}
.video-title { font-size: 28rpx; font-weight: 700; color: #1e293b; margin-bottom: 20rpx; line-height: 1.4; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; letter-spacing: 0.5rpx;}
.video-instructor { display: flex; align-items: center; margin-bottom: 20rpx; gap: 12rpx;}
.instructor-avatar { width: 40rpx; height: 40rpx; border-radius: 50%; border: 2rpx solid rgba(52, 152, 219, 0.3); box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1); transition: all 0.3s ease;}
.video-card:active .instructor-avatar { border-color: #3498db; transform: scale(1.05);}
.instructor-name { font-size: 24rpx; color: #64748b; font-weight: 500;}
.video-meta { display: flex; justify-content: space-between; align-items: center;}
.video-meta-item { display: flex; align-items: center; gap: 8rpx; font-size: 22rpx; color: #94a3b8;}
.video-meta-item image { width: 22rpx; height: 22rpx; opacity: 0.6; transition: all 0.3s ease;}
.video-meta-item:active image { opacity: 1; transform: scale(1.1);}
/* 空状态样式优化 */.empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 150rpx 0; text-align: center; position: relative;}
.empty-animation { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300rpx; height: 300rpx;}
.empty-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100rpx; height: 100rpx; border: 8rpx solid rgba(52, 152, 219, 0.1); border-radius: 50%; animation: emptyFloat 4s ease-in-out infinite;}
.empty-circle.circle-2 { width: 150rpx; height: 150rpx; border-width: 6rpx; animation-delay: 1s;}
.empty-circle.circle-3 { width: 200rpx; height: 200rpx; border-width: 4rpx; animation-delay: 2s;}
@keyframes emptyFloat { 0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.3; } 50% { transform: translate(-50%, -50%) scale(1.1); opacity: 0.1; }}
.empty-text { font-size: 32rpx; color: #64748b; font-weight: 600; margin-bottom: 15rpx; letter-spacing: 1rpx; position: relative; z-index: 1;}
.empty-hint { font-size: 26rpx; color: #94a3b8; position: relative; z-index: 1;}
/* 加载更多样式 */.load-more,.loading-more,.no-more { text-align: center; padding: 40rpx 0; font-size: 26rpx; color: #94a3b8; position: relative;}
.loading-more { display: flex; align-items: center; justify-content: center; gap: 15rpx;}
.loading-dot { width: 16rpx; height: 16rpx; background: #3498db; border-radius: 50%; animation: loadingDot 1.4s infinite ease-in-out both;}
.loading-dot:nth-child(1) { animation-delay: -0.32s;}
.loading-dot:nth-child(2) { animation-delay: -0.16s;}
@keyframes loadingDot { 0%, 80%, 100% { transform: scale(0); opacity: 0.3; } 40% { transform: scale(1); opacity: 1; }}
.no-more { color: #64748b; position: relative;}
.no-more::before,.no-more::after { content: ''; position: absolute; top: 50%; width: 100rpx; height: 1rpx; background: rgba(100, 116, 139, 0.2);}
.no-more::before { left: 20%;}
.no-more::after { right: 20%;}
/* 响应式调整 */@media screen and (max-width: 750rpx) { .videos-grid { grid-template-columns: 1fr; }
.articles-list { padding: 0 10rpx; }
.category-item { font-size: 26rpx; padding: 18rpx 28rpx; min-width: 110rpx; }
.header { padding-top: 40rpx; }
.title { font-size: 48rpx; }
.tabs { height: 80rpx; }
.tab-item { font-size: 30rpx; } .no-more::before, .no-more::after { width: 80rpx; } .no-more::before { left: 15%; } .no-more::after { right: 15%; }}
/* 滚动条样式 */::-webkit-scrollbar { width: 0; height: 0; color: transparent;}
|