Tiempo total 00:00
Tiempo del bloque 04:00
Bloque 1 · EMOM · minuto 1 de 4
Iniciar entrenamiento
✓ Repeticiones completadas Después: AMRAP de 10 minutos
↶ Deshacer ↻ Reiniciar todo
Continuar con el siguiente bloque
¡Laberinto 03 completado! Registra tu tiempo.
#vg-lab03-clock{width:100%;max-width:425px;margin:20px auto;padding:20px;background:#fff;border-radius:16px;color:#102549;font-family:Inter,Arial,sans-serif;box-sizing:border-box}#vg-lab03-clock .vg2-clockrow{display:grid;grid-template-columns:1fr 1fr;gap:12px}#vg-lab03-clock strong.vg2-time,#vg-lab03-clock strong.vg2-stage-time{display:block;font-size:28px;color:#0d4189;font-variant-numeric:tabular-nums}#vg-lab03-clock .vg2-clocklabel{font-size:12px}#vg-lab03-clock button{border:0;border-radius:9px;min-height:44px;padding:10px 14px;font:inherit;cursor:pointer}#vg-lab03-clock .vg2-timer-btn,#vg-lab03-clock .vg2-stage-next{background:#edf3fc;color:#174c91;width:100%}#vg-lab03-clock .vg2-complete{width:100%;background:#0a3476;color:#fff}#vg-lab03-clock .vg2-actions{display:flex;gap:12px;justify-content:space-between}#vg-lab03-clock .vg2-undo,#vg-lab03-clock .vg2-reset{background:transparent;color:#345781;font-size:12px}#vg-lab03-clock button:disabled{opacity:.5;cursor:default}#vg-lab03-clock [hidden]{display:none!important}#vg-lab03-clock p{margin:0 0 14px}#vg-lab03-clock .vg2-clockrow{margin-bottom:18px}#vg-lab03-clock .vg2-actions{flex-wrap:wrap;margin:12px 0}#vg-lab03-clock button{max-width:100%;white-space:normal;overflow-wrap:anywhere}#vg-lab03-clock .vg2-next{margin:10px 0;font-size:13px;line-height:1.5}@media(max-width:767px){#vg-lab03-clock{padding:16px;margin:16px auto}#vg-lab03-clock .vg2-active{font-size:15px;line-height:1.5}#vg-lab03-clock button{font-size:13px;padding:10px 12px}}(()=>{const r=document.getElementById('vg-lab03-clock');if(!r||r.dataset.ready)return;r.dataset.ready='1';const q=s=>r.querySelector(s),dur=[240,600,240,0],titles=['Bloque 1 · EMOM','Bloque 1 · AMRAP','Bloque 2 · EMOM','Bloque 3 · 4 vueltas'];let stage=0,elapsed=0,total=0,start=0,running=false,rounds=0,marks=new Set(),history=[],boundary=0,audio;const now=()=>running?(Date.now()-start)/1000:0,sec=()=>elapsed+now(),fmt=s=>{s=Math.floor(Math.max(0,s));return String(Math.floor(s/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0')};function beep(){try{audio=audio||new(window.AudioContext||window.webkitAudioContext)();audio.resume();const o=audio.createOscillator(),g=audio.createGain(),t=audio.currentTime;o.frequency.value=1000;g.gain.setValueAtTime(.2,t);g.gain.exponentialRampToValueAtTime(.001,t+.18);o.connect(g);g.connect(audio.destination);o.start(t);o.stop(t+.2)}catch(e){}}function pause(){if(running){elapsed=sec();total+=now();running=false}}function render(){let s=sec(),timed=dur[stage]>0,finish=timed?s>=dur[stage]:rounds>=4,m=Math.floor(s/60);if(running&&timed&&m>boundary){boundary=m;beep()}if(finish&&running){pause();s=elapsed}q('.vg2-time').textContent=fmt(total+now());q('.vg2-stage-time').textContent=timed?fmt(dur[stage]-s):fmt(s);q('.vg2-active').textContent=titles[stage]+(stage===0||stage===2?' · minuto '+Math.min(m+1,4)+' de 4':stage===1?' · '+rounds+' vueltas':' · vuelta '+Math.min(rounds+1,4)+' de 4');q('.vg2-timer-btn').textContent=finish?'Bloque completado':running?'Pausar':elapsed?'Continuar':'Iniciar entrenamiento';q('.vg2-timer-btn').disabled=finish;q('.vg2-complete').textContent=stage===0||stage===2?'✓ Repeticiones completadas':'✓ Vuelta completada';q('.vg2-complete').disabled=!running||finish||((stage===0||stage===2)&&marks.has(m));q('.vg2-undo').disabled=!history.length;q('.vg2-stage-next').disabled=!finish||stage===3;q('.vg2-stage-next').hidden=stage===3;q('.vg2-finish').hidden=!(stage===3&&finish);const bi=stage{el.classList.toggle('done',i<bi||(stage===3&&finish));el.classList.toggle('current',i===bi&&!(stage===3&&finish));el.textContent=i{const b=e.target.closest('button');if(!b)return;if(b.matches('.vg2-timer-btn')){if(running)pause();else{start=Date.now();running=true;boundary=Math.floor(elapsed/60);beep()}}else if(b.matches('.vg2-complete')&&!b.disabled){history.push({rounds,marks:[...marks]});if(stage===0||stage===2)marks.add(Math.floor(sec()/60));else rounds++}else if(b.matches('.vg2-undo')){const h=history.pop();if(h){rounds=h.rounds;marks=new Set(h.marks)}}else if(b.matches('.vg2-stage-next')&&!b.disabled){stage++;elapsed=0;rounds=0;marks.clear();history=[];boundary=0;beep()}else if(b.matches('.vg2-reset')){stage=0;elapsed=0;total=0;start=0;running=false;rounds=0;marks.clear();history=[];boundary=0}render()});setInterval(render,200);render()})();