// Shared helpers + small components. function ytId(url){ if(!url) return null; const m = String(url).match(/(?:youtu\.be\/|v=|embed\/|shorts\/)([A-Za-z0-9_-]{11})/); return m ? m[1] : null; } // Inline SVG icons function Icon({ name, size=18, stroke=2 }){ const p = { width:size, height:size, viewBox:'0 0 24 24', fill:'none', stroke:'currentColor', strokeWidth:stroke, strokeLinecap:'round', strokeLinejoin:'round' }; const paths = { user: , dots: , gear: , book: , play: , pause: , prev: , next: , first: , last: , arrowL: , arrowR: , plus: , expand: , logo: }; return {paths[name]}; } window.ytId = ytId; window.Icon = Icon;