/* ============================================ 首页样式 — 订阅频道 + 免费频道 ============================================ */ /* 强制隐藏本页所有滚动条 */ ::-webkit-scrollbar { display: none !important; width: 0 !important; height: 0 !important; } /* 整体容器:flex 纵向,meta-bar 固定 + scroll 填充 */ .index-page { display: flex; flex-direction: column; height: 100vh; background: var(--color-bg-page); overflow: hidden; } /* ========== 自定义导航栏 ========== */ .custom-nav { display: flex; align-items: center; justify-content: center; height: 80rpx; background: #FFFAF5; flex-shrink: 0; position: relative; } .nav-brand-name { font-size: 34rpx; font-weight: 600; font-family: 'PingFang SC', 'Helvetica Neue', sans-serif; color: #2C1A08; letter-spacing: 4rpx; } /* ========== 顶部问候栏(吸顶) ========== */ .meta-bar { flex-shrink: 0; background: linear-gradient(180deg, #FFFAF5 0%, #FFFFFF 100%); padding: 28rpx 36rpx 22rpx; border-bottom: 1rpx solid #F0ECE8; z-index: 10; } /* 问候语行:emoji + 文字 */ .greeting-row { display: flex; align-items: center; gap: 16rpx; margin-bottom: 16rpx; } .greeting-emoji { font-size: 52rpx; line-height: 1; } .greeting-text-wrap { display: flex; flex-direction: column; } .greeting { font-size: 48rpx; font-weight: 800; color: #2A2A2A; letter-spacing: 2rpx; line-height: 1.15; font-family: 'PingFang SC', -apple-system, BlinkMacSystemFont, sans-serif; } .greeting-sub { display: block; font-size: 30rpx; font-weight: 600; color: #5C3D1E; letter-spacing: 1rpx; margin-bottom: 12rpx; font-family: 'PingFang SC', -apple-system, sans-serif; } /* 信息行:位置 · 日期 · 天气 */ .info-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8rpx; } .info-item { display: flex; align-items: center; gap: 6rpx; background: rgba(255, 157, 66, 0.08); padding: 6rpx 16rpx; border-radius: 999rpx; } .loc-name-text { font-weight: 600; color: #8B6914; } .info-text { font-size: 22rpx; color: #999; font-weight: 500; } .info-dot { font-size: 22rpx; color: #D5D0CA; margin: 0 2rpx; } .weather-icon-sm { font-size: 22rpx; } /* ========== 可滚动内容区 ========== */ .main-scroll { flex: 1; overflow: hidden; } /* ========== 主内容区 ========== */ .content-area { padding: 24rpx 32rpx 0; } /* ========== Section Header ========== */ .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20rpx; } .section-header-free { margin-top: 40rpx; } .section-title-wrap { display: flex; align-items: center; gap: 12rpx; } .section-dot { width: 8rpx; height: 28rpx; border-radius: 999rpx; background: var(--color-primary); display: block; flex-shrink: 0; } .dot-free { background: #00C853; } .section-title { font-size: 32rpx; font-weight: 800; color: #1A1A1A; letter-spacing: 1rpx; } .section-subtitle { font-size: 22rpx; color: #AAAAAA; font-weight: 400; } .section-action { display: flex; align-items: center; gap: 4rpx; } .section-action-text { font-size: 24rpx; color: #999; font-weight: 500; } .section-action-arrow { font-size: 32rpx; color: #CCC; line-height: 1; } /* ========== 骨架屏动画 ========== */ @keyframes skele-shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .skele-bg { background: linear-gradient(90deg, #F0F0F0 25%, #E8E8E8 37%, #F0F0F0 63%); background-size: 400% 100%; animation: skele-shimmer 1.4s ease infinite; } /* 订阅卡片骨架 */ .skeleton-sub-card { margin-bottom: 20rpx; padding: 28rpx; border: none; box-shadow: none; } .skele-header { display: flex; align-items: center; margin-bottom: 24rpx; } .skele-avatar { width: 76rpx; height: 76rpx; border-radius: 22rpx; margin-right: 18rpx; } .skele-text-group { flex: 1; } .skele-title { width: 40%; height: 32rpx; border-radius: 6rpx; margin-bottom: 12rpx; } .skele-subtitle { width: 25%; height: 24rpx; border-radius: 6rpx; } .skele-play-row { width: 100%; height: 100rpx; border-radius: 20rpx; } /* ========== 订阅空状态(横向卡片样式) ========== */ .sub-empty-card { display: flex; align-items: center; gap: 20rpx; background: #FFFFFF; border-radius: 28rpx; padding: 32rpx 28rpx; margin-bottom: 20rpx; border: 2rpx dashed #EDE8E2; box-shadow: none; } .sub-empty-card:active { opacity: 0.75; } .sub-empty-icon { width: 80rpx; height: 80rpx; border-radius: 24rpx; background: linear-gradient(135deg, rgba(255, 157, 66, 0.12), rgba(255, 120, 50, 0.2)); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .sub-empty-emoji { font-size: 38rpx; } .sub-empty-body { flex: 1; min-width: 0; } .sub-empty-title { display: block; font-size: 28rpx; font-weight: 700; color: #333; margin-bottom: 8rpx; } .sub-empty-desc { display: block; font-size: 22rpx; color: #AAA; line-height: 1.5; } .sub-empty-arrow { flex-shrink: 0; } /* ========== 订阅频道卡片 ========== */ .channel-card { margin-bottom: 20rpx; padding: 28rpx 28rpx 24rpx; position: relative; overflow: hidden; } .card-accent { position: absolute; left: 0; top: 0; bottom: 0; width: 8rpx; border-radius: 0 6rpx 6rpx 0; } /* 卡片头部 */ .card-header { display: flex; align-items: center; padding-left: 12rpx; margin-bottom: 16rpx; } .channel-icon { width: 76rpx; height: 76rpx; border-radius: 22rpx; display: flex; align-items: center; justify-content: center; margin-right: 18rpx; flex-shrink: 0; overflow: hidden; } .icon-emoji { font-size: 36rpx; } .channel-info { flex: 1; min-width: 0; } .channel-name { display: block; font-size: 30rpx; font-weight: 700; color: #222; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .channel-meta { display: flex; align-items: center; gap: 8rpx; margin-top: 8rpx; } /* t-tag 和 t-icon 已替代旧 .tag / .card-arrow */ /* 播放行 */ .play-row { display: flex; align-items: center; padding: 20rpx 18rpx 20rpx 16rpx; border-radius: 24rpx; background: #F7F7F7; transition: all 0.3s ease; gap: 16rpx; } .play-row:active { background: #EEEEEE; } .play-row.playing { background: linear-gradient(135deg, rgba(255, 157, 66, 0.08) 0%, rgba(255, 120, 50, 0.15) 100%); border: 1rpx solid rgba(255, 157, 66, 0.15); } /* 左侧:音波 or 图标 */ .play-left { width: 48rpx; height: 48rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } /* 音波动画 */ .sound-wave { display: flex; align-items: flex-end; gap: 5rpx; height: 36rpx; } .wave-bar { width: 6rpx; border-radius: 6rpx; background: var(--color-primary); animation: wave-bounce 0.8s ease-in-out infinite; } .wave-1 { height: 14rpx; animation-delay: 0s; } .wave-2 { height: 26rpx; animation-delay: 0.15s; } .wave-3 { height: 20rpx; animation-delay: 0.3s; } .wave-4 { height: 30rpx; animation-delay: 0.45s; } @keyframes wave-bounce { 0%, 100% { transform: scaleY(0.4); opacity: 0.6; } 50% { transform: scaleY(1); opacity: 1; } } /* 中间信息 */ .play-info { flex: 1; padding-right: 12rpx; overflow: hidden; } .play-title { display: block; font-size: 27rpx; font-weight: 700; color: #333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .play-title.text-primary { color: var(--color-primary); } .play-duration { display: block; font-size: 21rpx; color: #AAA; margin-top: 6rpx; } /* 右侧:播放按钮 + 光环 */ .play-btn-wrap { position: relative; width: 80rpx; height: 80rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } /* 外圈光环 */ .play-btn-ring { position: absolute; inset: 0; border-radius: 50%; border: 3rpx solid transparent; transition: all 0.3s; } .play-btn-ring.active { border-color: rgba(255, 157, 66, 0.25); animation: ring-pulse 2s ease-in-out infinite; } @keyframes ring-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.15); opacity: 0.4; } } /* 按钮主体 */ .play-btn { width: 68rpx; height: 68rpx; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: #ECECEC; flex-shrink: 0; transition: all 0.25s ease; box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.06); } .play-btn:active { transform: scale(0.88); } .play-btn.active { background: linear-gradient(135deg, #FF9D42 0%, #FF7832 100%); box-shadow: 0 8rpx 24rpx rgba(255, 120, 50, 0.4); } /* t-icon 已替代旧 .play-icon / .pause-bars */ /* 暂无节目 */ .no-content { padding: 16rpx 12rpx; } .no-content-text { font-size: 23rpx; color: #CCCCCC; } /* ========== 免费频道横向区 ========== */ .skeleton-free-card { display: inline-flex; flex-direction: column; align-items: center; width: 160rpx; vertical-align: top; margin-right: 20rpx; } .skele-free-avatar { width: 120rpx; height: 120rpx; border-radius: 36rpx; margin-bottom: 12rpx; } .skele-free-text { width: 100rpx; height: 26rpx; border-radius: 6rpx; } .free-scroll { width: 100%; overflow: hidden; } .free-list { padding: 4rpx 4rpx 16rpx; white-space: nowrap; } .free-card { display: inline-flex; flex-direction: column; align-items: center; width: 160rpx; vertical-align: top; margin-right: 20rpx; } .free-icon { width: 120rpx; height: 120rpx; border-radius: 32rpx; display: flex; align-items: center; justify-content: center; margin-bottom: 12rpx; overflow: hidden; box-shadow: 0 6rpx 16rpx rgba(0, 0, 0, 0.08); } .free-cover { width: 100%; height: 100%; } .free-emoji { font-size: 48rpx; } .free-name { font-size: 22rpx; font-weight: 700; color: #333; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 150rpx; margin-bottom: 8rpx; line-height: 1.3; } /* t-tag 已替代 .free-badge,t-empty 已替代 .free-empty */ .free-empty { padding: 40rpx 0 20rpx; }