setShowControls(true)} onMouseLeave={() => { setShowControls(false); setShowQualityMenu(false); }}>
{/* Show skeleton only during initial load, buffering overlay during playback */}
{isLoading &&
}
{/* Show buffering overlay only when not in initial load state */}
{isBuffering && !isLoading && (
{
const video = e.target as HTMLVideoElement;
if (video.poster !== 'https://i.ytimg.com/vi/default/hqdefault.jpg') {
video.poster = 'https://i.ytimg.com/vi/default/hqdefault.jpg';
}
}}
/>
{error && (
{error}
{ setError(null); setUseFallback(false); window.location.reload(); }} style={retryBtnStyle}>
Retry
setUseFallback(true)} style={{ ...retryBtnStyle, background: '#333' }}>
Use YouTube Player
)}
{showControls && !error && !isLoading && (
<>
Open on YouTube ↗
{/* Picture-in-Picture Button */}
{document.pictureInPictureEnabled && (
{isPiPActive ? '⏹' : '📺'}
)}
{/* Auto PiP Toggle */}
setAutoPiPEnabled(!autoPiPEnabled)}
style={{ ...pipBtnStyle, background: autoPiPEnabled ? 'rgba(255,0,0,0.8)' : 'rgba(0,0,0,0.8)' }}
title={autoPiPEnabled ? "Auto PiP: ON (click to disable)" : "Auto PiP: OFF (click to enable)"}
>
{autoPiPEnabled ? '🔄' : '⏸'}
{qualities.length > 0 && (
setShowQualityMenu(!showQualityMenu)} style={qualityBtnStyle}>
{qualities.find(q => q.height === currentQuality)?.label || 'Auto'}
{showQualityMenu && (
{qualities.map((q) => (
changeQuality(q)}
style={{
...qualityItemStyle,
background: q.height === currentQuality ? 'rgba(255,0,0,0.3)' : 'transparent',
}}
>
{q.label}
{q.height === currentQuality && ' ✓'}
))}
)}
)}
>
)}
{showBackgroundHint && (
{hasSeparateAudio ? (
🎵 Audio playing in background
) : (
⚠️ Background playback may pause on some browsers
)}
setUseFallback(true)}
style={backgroundHintBtnStyle}
>
Use YouTube Player for better background playback
)}
{showPiPNotification && (
📺 Picture-in-Picture activated
setAutoPiPEnabled(!autoPiPEnabled)}
style={pipToggleBtnStyle}
>
{autoPiPEnabled ? 'Disable Auto PiP' : 'Enable Auto PiP'}
)}