const CLIPS_JSON_URL = '/data/clips.json'; const clipPlaySVG = ''; function renderClipCard(clip, featured) { const card = document.createElement('div'); card.className = 'clip-card' + (featured ? ' clip-card-featured' : ''); if (clip.youtube_id) card.dataset.youtubeId = clip.youtube_id; const hasVideo = !!clip.youtube_id; const epLabel = clip.episode_number ? `Episode ${clip.episode_number}` : ''; const thumbStyle = clip.thumbnail ? `style="background-image: url('/${clip.thumbnail}'); background-size: cover; background-position: center;"` : ''; card.innerHTML = `
${epLabel}

${clip.title || ''}

${clip.description || ''}

${hasVideo ? `` : ''}
`; if (hasVideo) { card.querySelector('.clip-play-btn').addEventListener('click', (e) => { e.stopPropagation(); const inner = card.querySelector('.clip-card-inner'); inner.innerHTML = ``; }); } return card; } async function fetchClips() { try { const res = await fetch(CLIPS_JSON_URL); if (!res.ok) throw new Error('Failed to fetch clips'); return await res.json(); } catch (err) { console.error('Error loading clips:', err); return []; } } async function initClipsPage() { const clips = await fetchClips(); if (!clips.length) return; const featuredContainer = document.querySelector('.clips-featured'); const gridContainer = document.querySelector('.clips-grid'); if (featuredContainer) { clips.filter(c => c.featured).forEach(clip => { featuredContainer.appendChild(renderClipCard(clip, true)); }); } if (gridContainer) { clips.forEach(clip => { gridContainer.appendChild(renderClipCard(clip, false)); }); } } async function renderFeaturedClipsInline(containerId) { const container = document.getElementById(containerId); if (!container) return; const clips = await fetchClips(); const featured = clips.filter(c => c.featured); featured.forEach(clip => { container.appendChild(renderClipCard(clip, true)); }); } // Auto-init if clips page containers exist if (document.querySelector('.clips-featured') || document.querySelector('.clips-grid')) { initClipsPage(); }