const zhToggle = document.getElementById('zh-nav-toggle'); const zhOverlay = document.getElementById('zh-nav-overlay'); zhToggle.addEventListener('click', () => { zhToggle.classList.toggle('open'); zhOverlay.classList.toggle('open'); }); zhOverlay.querySelectorAll('a').forEach(link => { link.addEventListener('click', () => { zhToggle.classList.remove('open'); zhOverlay.classList.remove('open'); }); }); function updateBurgerVisibility() { if (window.scrollY > 10) { zhToggle.classList.add('scrolled'); } else { zhToggle.classList.remove('scrolled'); } } window.addEventListener('scroll', updateBurgerVisibility); updateBurgerVisibility(); const isTouchDevice = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0); if (!isTouchDevice) { const defaultImg = 'https://raw.githubusercontent.com/franciscomartinsamaral28-beep/Zeroh/main/click.png'; const frames = [ 'https://raw.githubusercontent.com/franciscomartinsamaral28-beep/Zeroh/main/click1.png', 'https://raw.githubusercontent.com/franciscomartinsamaral28-beep/Zeroh/main/click2.png', 'https://raw.githubusercontent.com/franciscomartinsamaral28-beep/Zeroh/main/click.png' ]; function makeCursorEl(id) { const el = document.createElement('img'); el.id = id; el.src = defaultImg; el.style.position = 'fixed'; el.style.width = '32px'; el.style.height = '32px'; el.style.pointerEvents = 'none'; el.style.zIndex = '999999'; el.style.top = '0px'; el.style.left = '0px'; el.style.transform = 'translate(-50%, -50%)'; document.body.appendChild(el); return el; } const cursor = makeCursorEl('custom-cursor'); cursor.style.transition = 'filter 0.15s ease, opacity 0.15s ease'; cursor.style.opacity = '0'; let mouseX = 0, mouseY = 0, lastX = 0, lastY = 0; let targetAngle = 0, targetStretch = 0, currentStretch = 0; document.addEventListener('mousemove', (e) => { mouseX = e.clientX; mouseY = e.clientY; cursor.style.left = mouseX + 'px'; cursor.style.top = mouseY + 'px'; cursor.style.opacity = '1'; const dx = mouseX - lastX; const dy = mouseY - lastY; lastX = mouseX; lastY = mouseY; const speed = Math.sqrt(dx * dx + dy * dy); targetAngle = Math.atan2(dy, dx) * 180 / Math.PI; targetStretch = Math.min(speed / 15, 0.5); }); document.addEventListener('mouseleave', () => { cursor.style.opacity = '0'; }); let i = 0; let animInterval = null; function startAnim() { if (animInterval) return; cursor.style.animation = 'pulseCursor 0.5s ease-in-out infinite'; i = 0; animInterval = setInterval(() => { i = (i + 1) % frames.length; cursor.src = frames[i]; }, 150); } function stopAnim() { clearInterval(animInterval); animInterval = null; cursor.style.animation = 'none'; cursor.style.filter = 'none'; cursor.src = defaultImg; } function elasticLoop() { currentStretch += (targetStretch - currentStretch) * 0.25; targetStretch *= 0.88; if (!animInterval) { cursor.style.transform = `translate(-50%, -50%) rotate(${targetAngle}deg) scale(${1 + currentStretch}, ${1 - currentStretch * 0.4})`; } requestAnimationFrame(elasticLoop); } elasticLoop(); const styleTag = document.createElement('style'); styleTag.textContent = `@keyframes pulseCursor {0%,100%{transform:translate(-50%,-50%) scale(1);filter:drop-shadow(0 0 4px rgba(0,0,0,0.35));}50%{transform:translate(-50%,-50%) scale(1.3);filter:drop-shadow(0 0 7px rgba(0,0,0,0.35));}}`; document.head.appendChild(styleTag); const clickableSelector = 'a, button, [role="button"], .slick-arrow, .slick-next, .slick-prev, [class*="arrow"], [class*="nav"], [class*="slide"]'; document.addEventListener('mouseover', (e) => { if (e.target.closest(clickableSelector)) startAnim(); }); document.addEventListener('mouseout', (e) => { if (e.target.closest(clickableSelector) && !e.relatedTarget?.closest(clickableSelector)) stopAnim(); }); function spawnParticles(x, y) { const count = 8; for (let p = 0; p < count; p++) { const dot = document.createElement('div'); dot.className = 'cursor-particle'; dot.style.left = x + 'px'; dot.style.top = y + 'px'; dot.style.opacity = '1'; const startRot = Math.random() * 360; dot.style.transform = `translate(0px, 0px) rotate(${startRot}deg)`; document.body.appendChild(dot); const angle = (Math.PI * 2 * p) / count + Math.random() * 0.5; const dist = 20 + Math.random() * 25; const endRot = startRot + 180 + Math.random() * 180; requestAnimationFrame(() => { dot.style.transform = `translate(${Math.cos(angle) * dist}px, ${Math.sin(angle) * dist}px) rotate(${endRot}deg)`; dot.style.opacity = '0'; }); setTimeout(() => dot.remove(), 520); } } function spawnGlitch(x, y, currentSrc) { const g = document.createElement('img'); g.src = currentSrc; g.className = 'cursor-glitch'; g.style.left = x + 'px'; g.style.top = y + 'px'; g.style.opacity = '0.7'; g.style.filter = 'brightness(1.5) sepia(1) saturate(6) hue-rotate(320deg)'; g.style.transform = 'translate(-50%, -50%)'; document.body.appendChild(g); requestAnimationFrame(() => { g.style.transform = 'translate(calc(-50% + -4px), -50%)'; g.style.opacity = '0'; }); setTimeout(() => g.remove(), 320); } document.addEventListener('click', (e) => { spawnParticles(e.clientX, e.clientY); spawnGlitch(e.clientX, e.clientY, cursor.src); }); }
Nu Metal / Paris Underground
heavy atmospheric weight with raw stage energy. loud sound for a caged world.
Welcome to the cube.
Socials Music Rock?
raw social critique, challenging conformity and expressing dystopian anxiety currently recording our other songs Instead of streaming you can buy our songs on Bandcamp get your copy supporting us more than streams Concerts previous posters
function updateHeaderBg() { var header = document.getElementById('container05'); if (!header) return; if (window.scrollY > 10) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } } window.addEventListener('scroll', updateHeaderBg); updateHeaderBg();
Merch get them at our show / go check leaf's work Pictures Contact More... ZEROH ARE: ELISE MONNET: BASS ADONIS KEBE: VOICE FRANCISCO MARTINS: GUITAR RAPHAEL ANNAERT: DRUMS
ALL SONGS WRITTEN AND PERFORMED BY ZEROH ALL LYRICS WRITTEN BY ADONIS KEBE ©2026 ZEROH
MERCH/GRAPHIC DESIGN: LEAF SOUND ENGINEER: CAMIL KANOUNI WEBSITE: FRANCISCO MARTINS
(function() { function forceVideoPlay() { document.querySelectorAll('video').forEach(function(video) { video.muted = true; var p = video.play(); if (p !== undefined) { p.catch(function() { // sera relancé au premier geste utilisateur ci-dessous }); } }); } // tentative immédiate window.addEventListener('load', forceVideoPlay); // relance au premier geste utilisateur si Safari a bloqué function resumeOnGesture() { forceVideoPlay(); window.removeEventListener('click', resumeOnGesture); window.removeEventListener('scroll', resumeOnGesture); window.removeEventListener('touchstart', resumeOnGesture); } window.addEventListener('click', resumeOnGesture, { once: true }); window.addEventListener('scroll', resumeOnGesture, { once: true }); window.addEventListener('touchstart', resumeOnGesture, { once: true }); })();