.channel-overlay { position: absolute; bottom: 35px; width: 100%; min-height: 130px; max-height: 200px; margin-left: auto; margin-right: auto; left: 0; right: 0; box-sizing: border-box; display: flex; isolation: isolate; padding: 0 40px; // Gradient blur effect using pseudo-element &::before { content: ''; position: absolute; inset: 0; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.3) 20%, rgba(0, 0, 0, 0.8) 60%, black 100% ); -webkit-mask-image: linear-gradient( to bottom, transparent 0%, rgba(0, 0, 0, 0.3) 20%, rgba(0, 0, 0, 0.8) 60%, black 100% ); z-index: -1; } } // EPG Layout with data .epg-layout { display: flex; gap: 28px; width: 100%; align-items: flex-start; padding: 24px 0; animation: fadeInUp 0.5s ease-out; } .channel-logo { flex-shrink: 0; display: flex; align-items: center; justify-content: center; width: 90px; height: 90px; img { max-width: 100%; max-height: 100%; object-fit: contain; filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.4)); } } .content { flex: 1; display: flex; flex-direction: column; gap: 12px; min-width: 0; // Allow text truncation } .content-header { display: flex; flex-direction: column; gap: 6px; animation: fadeIn 0.6s ease-out 0.1s backwards; } .program-title { font-family: 'Crimson Pro', serif; font-size: 2.25rem; font-weight: 700; line-height: 1.2; color: #ffffff; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.6); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; letter-spacing: -0.02em; } .channel-name { font-family: 'DM Sans', sans-serif; font-size: 0.95rem; font-weight: 500; color: rgba(255, 255, 255, 0.75); text-transform: uppercase; letter-spacing: 0.08em; text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); } .program-description { font-family: 'DM Sans', sans-serif; font-size: 1.05rem; line-height: 1.5; color: rgba(255, 255, 255, 0.88); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; text-overflow: ellipsis; text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); animation: fadeIn 0.6s ease-out 0.2s backwards; } .program-timeline { display: flex; flex-direction: column; gap: 10px; margin-top: 4px; animation: fadeIn 0.6s ease-out 0.3s backwards; } .timeline-info { display: flex; align-items: center; gap: 8px; font-family: 'DM Sans', sans-serif; font-size: 0.875rem; font-weight: 500; color: rgba(255, 255, 255, 0.9); letter-spacing: 0.02em; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); } .time-separator { opacity: 0.5; margin: 0 2px; } .progress-track { position: relative; width: 100%; height: 4px; background: rgba(255, 255, 255, 0.15); border-radius: 2px; overflow: hidden; backdrop-filter: blur(4px); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3); } .progress-fill { position: absolute; left: 0; top: 0; height: 100%; background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 50%, #ec4899 100%); border-radius: 2px; transition: width 0.3s ease-out; box-shadow: 0 0 12px rgba(124, 58, 237, 0.6); &::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient( 90deg, transparent 0%, rgba(255, 255, 255, 0.3) 50%, transparent 100% ); animation: shimmer 2s ease-in-out infinite; } } // Animations @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } .visible { visibility: visible; opacity: 1; } .hidden { visibility: hidden; opacity: 0; transition: visibility 0s 2s, opacity 2s linear; } // No EPG state variations .no-epg-title { // When there's no EPG, the channel name becomes the main title font-size: 2.5rem; // Slightly larger since it's the only content } .no-epg-subtitle { // Subtle message indicating no EPG data font-style: italic; opacity: 0.6; }