export function md5(input) { function safeAdd(x,y){var l=(x&0xffff)+(y&0xffff);return((x>>16)+(y>>16)+(l>>16)<<16)|(l&0xffff)} function rol(n,c){return(n<>>32-c)} function cmn(q,a,b,x,s,t){return safeAdd(rol(safeAdd(safeAdd(a,q),safeAdd(x,t)),s),b)} function ff(a,b,c,d,x,s,t){return cmn((b&c)|(~b&d),a,b,x,s,t)} function gg(a,b,c,d,x,s,t){return cmn((b&d)|(c&~d),a,b,x,s,t)} function hh(a,b,c,d,x,s,t){return cmn(b^c^d,a,b,x,s,t)} function ii(a,b,c,d,x,s,t){return cmn(c^(b|~d),a,b,x,s,t)} var l=input.length,m=[]; for(var i=0;i>2]|=(input.charCodeAt(i)&0xff)<<((i%4)*8); m[l>>2]|=0x80<<((l%4)*8); m[((l+8>>6)+1)*16-2]=l*8; var a=1732584193,b=-271733879,c=-1732584194,d=271733878; for(var i=0;i>>(j*8))&0xff).toString(16)).slice(-2);return s} return hex(a)+hex(b)+hex(c)+hex(d); } export function esc(s) { return (s||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); } export function formatDur(s) { if(!s) return '0:00'; const m = Math.floor(s/60), sec = Math.floor(s%60); return `${m}:${sec.toString().padStart(2,'0')}`; } // Compact count for fan numbers etc.: 559534 → "559,5 Tsd.", 1200000 → "1,2 Mio." export function fmtCount(n) { if (n == null || isNaN(n)) return ''; const de = x => x.toFixed(1).replace(/\.0$/, '').replace('.', ','); if (n >= 1e6) return de(n / 1e6) + ' Mio.'; if (n >= 1e3) return de(n / 1e3) + ' Tsd.'; return String(n); } export function toast(msg) { const t = document.createElement('div'); t.className = 'toast'; t.textContent = msg; document.getElementById('toast-container').appendChild(t); setTimeout(() => t.remove(), 3000); }