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.

Zeroh | Live
Zeroh | Live

Welcome to the cube.

Socials

Music

Rock?

raw social critique,
challenging conformity and expressing dystopian anxiety

Rock?

studio record

Rock? (Live Version)

live version

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

write us from here too

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

const zh2Toggle = document.getElementById('zh2-nav-toggle'); const zh2Overlay = document.getElementById('zh2-nav-overlay'); zh2Toggle.addEventListener('click', () => { zh2Toggle.classList.toggle('open'); zh2Overlay.classList.toggle('open'); }); zh2Overlay.querySelectorAll('a').forEach(link => { link.addEventListener('click', () => { zh2Toggle.classList.remove('open'); zh2Overlay.classList.remove('open'); }); });

Booking/Epk

Nu Metal — Paris

Fondé fin 2024, Zeroh c'est le groove et le flow du hip hop plaqués sur un son metal lourd, tendu, immersif. Sélectionné par le dispositif Première Seine (Philharmonie de Paris) et accompagné par Fred Ceraudo (Pleymo), le groupe sort son premier single Rock? en avril 2026 et enchaîne les scènes parisiennes et régionales. Identité visuelle @leafatrium.

Photos

Presse

Live report Rock Metal Mag, Lodex Party 2K25 · L'Empreinte
"Un vent de fraîcheur [...] une belle proximité entre musiciens et fans."
rockmetalmag.fr, sept. 2025

Inspirations

Deftones · Rage Against The Machine · System of a Down
Pleymo · Enhancer · Radiohead · Korn

Premier single

Rock?

Rock?

Rock? (Live Version)

version live
(enregistrée au chaudron en mars 2025)

Premier single

Rec Batterie au Chaudron (Mée-Sur-Seine)

Mix Master signé Camil Kanouni

Accompagnement début du projet Fred Ceraudo (Pleymo)

Projets

  • Le groupe se dirige vers deux EP et un Single contenant le reste de la discographie (10 autres musiques).

  • Des organisations d'événements avec d'autres groupes/projets musicaux sont à venir.

  • Des clips sont aussi à prévoir pour nos titres phares.

Live/Concert

Zeroh | Live
Zeroh | Live

Merch

Infos (Contact + FT)

(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 }); })();