.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; }