Club Fitness ART España | Cyberpunk Training & Store
/* === ESTILOS GENERALES Y CYBERPUNK === */
:root {
–primary: #ffcc00;
–cyan-neon: #00f3ff;
–bg-dark: #0a0a0c;
–bg-card: #141417;
–text-light: #e0e6ed;
–work-color: #00f3ff;
–rest-color: #ff003c;
–youtube-color: #ff0000;
}
* { margin: 0; padding: 0; box-sizing: border-box; font-family: ‘Rajdhani’, sans-serif; scroll-behavior: smooth; }
body {
background-color: var(–bg-dark); color: var(–text-light); line-height: 1.6;
background-image: linear-gradient(rgba(0, 243, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 243, 255, 0.03) 1px, transparent 1px);
background-size: 30px 30px;
}
/* === CABECERA / NAVEGACIÓN === */
header {
background-color: rgba(10, 10, 12, 0.95); padding: 1rem 5%; display: flex; justify-content: space-between; align-items: center; position: sticky; top: 0; z-index: 100;
border-bottom: 2px solid var(–cyan-neon); box-shadow: 0 0 15px rgba(0, 243, 255, 0.2);
}
.logo { font-size: 1.8rem; font-weight: 700; color: white; text-decoration: none; letter-spacing: 1px; }
.logo span, .marca-art { color: var(–primary); text-shadow: 0 0 8px rgba(255, 204, 0, 0.6); }
nav ul { list-style: none; display: flex; gap: 1.5rem; align-items: center; }
nav a { color: white; text-decoration: none; font-weight: 600; transition: all 0.3s; font-size: 1.1rem; text-transform: uppercase; letter-spacing: 1px; }
nav a:hover { color: var(–cyan-neon); text-shadow: 0 0 8px rgba(0, 243, 255, 0.8); }
.btn-yt-nav { background-color: transparent; border: 1px solid var(–youtube-color); color: var(–youtube-color); padding: 5px 12px; transition: all 0.3s; clip-path: polygon(10% 0, 100% 0, 90% 100%, 0% 100%); }
.btn-yt-nav:hover { background-color: var(–youtube-color); color: white !important; box-shadow: 0 0 15px rgba(255, 0, 0, 0.5); transform: scale(1.05); }
.container { max-width: 1200px; margin: 0 auto; padding: 4rem 20px; }
h1, h2 { text-align: center; color: var(–primary); margin-bottom: 2rem; text-transform: uppercase; letter-spacing: 2px; text-shadow: 0 0 10px rgba(255, 204, 0, 0.3); font-size: 2.5rem; }
.section-desc { text-align: center; color: #b0b8c1; margin-bottom: 3rem; max-width: 800px; margin-left: auto; margin-right: auto; font-size: 1.1rem; }
/* === TIENDA (Corregida con imágenes 100% funcionales) === */
.grid-tienda { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 2rem; }
.card-producto { background: var(–bg-card); border: 1px solid #333; position: relative; transition: all 0.3s; display: flex; flex-direction: column; justify-content: space-between; }
.card-producto:hover { transform: translateY(-5px); box-shadow: 0 0 20px rgba(255, 204, 0, 0.2); border-color: var(–primary); }
.producto-img-container {
width: 100%; height: 220px; overflow: hidden; position: relative;
border-bottom: 2px solid var(–cyan-neon);
background: #ffffff; /* Fondo blanco para estética e-commerce */
display: flex; justify-content: center; align-items: center;
}
.badge-top { position: absolute; top: 10px; right: -25px; background: var(–rest-color); color: white; padding: 5px 30px; font-weight: bold; font-size: 0.8rem; transform: rotate(45deg); box-shadow: 0 0 10px rgba(255, 0, 60, 0.5); z-index: 2; }
.producto-img-container img {
width: 100%; height: 100%;
object-fit: cover;
transition: transform 0.3s;
}
.card-producto:hover .producto-img-container img { transform: scale(1.08); }
.producto-info { padding: 1.5rem; display: flex; flex-direction: column; flex-grow: 1; }
.producto-titulo { font-size: 1.4rem; color: white; margin-bottom: 10px; line-height: 1.2; text-transform: uppercase;}
.producto-desc { font-size: 1rem; color: #b0b8c1; margin-bottom: 20px; flex-grow: 1; }
.btn-comprar { display: block; text-align: center; background: transparent; border: 1px solid var(–primary); color: var(–primary); text-decoration: none; padding: 10px; font-weight: 700; font-size: 1.1rem; transition: all 0.3s; text-transform: uppercase; letter-spacing: 1px; clip-path: polygon(10px 0, 100% 0, 100% calc(100% – 10px), calc(100% – 10px) 100%, 0 100%, 0 10px); }
.btn-comprar:hover { background: var(–primary); color: #000; box-shadow: 0 0 15px rgba(255, 204, 0, 0.5); }
/* === SECCIÓN DE EJERCICIOS === */
.grid-ejercicios { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 1.5rem; }
.card-musculo { background: var(–bg-card); padding: 1.5rem; border: 1px solid #222; border-top: 3px solid var(–cyan-neon); border-bottom: 3px solid var(–primary); transition: transform 0.3s, box-shadow 0.3s; }
.card-musculo:hover { transform: translateY(-5px); box-shadow: 0 5px 20px rgba(0, 243, 255, 0.15); }
.card-musculo h3 { font-size: 1.6rem; margin-bottom: 1rem; color: white; border-bottom: 1px dashed #333; padding-bottom: 0.5rem; }
.lista-items { margin-bottom: 1rem; color: #b0b8c1; font-size: 1.1rem; }
.lista-items ul { list-style-type: square; margin-left: 20px; margin-bottom: 10px; color: var(–cyan-neon);}
.lista-items ul li span { color: #b0b8c1; }
.subcategoria { color: var(–cyan-neon); font-weight: 700; margin-top: 10px; display: block; text-transform: uppercase; font-size: 0.95rem; }
.fundamentales { background: rgba(255, 204, 0, 0.05); padding: 12px; border-left: 4px solid var(–primary); font-size: 1.05rem; margin-top: 15px; color: #fff; }
.fundamentales strong { color: var(–primary); }
/* === SOFTWARE GENERADOR DE RUTINAS === */
.rutina-container { background: var(–bg-card); padding: 2.5rem; max-width: 800px; margin: 0 auto; border: 1px solid #333; border-top: 4px solid var(–cyan-neon); box-shadow: 0 0 30px rgba(0, 243, 255, 0.1); }
.form-rutina { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
.form-rutina .full-width { grid-column: 1 / -1; }
.form-rutina label { color: var(–cyan-neon); font-weight: 700; display: block; margin-bottom: 5px; text-transform: uppercase; font-size: 0.9rem; }
.form-rutina select, .form-rutina input { width: 100%; padding: 12px; border: 1px solid #444; background: #0a0a0c; color: white; font-size: 16px; font-weight: 600; }
.form-rutina select:focus, .form-rutina input:focus { outline: none; border-color: var(–cyan-neon); box-shadow: 0 0 10px rgba(0, 243, 255, 0.2);}
.btn-generar { background: var(–cyan-neon); color: #000; padding: 15px; border: none; font-size: 1.2rem; font-weight: 700; cursor: pointer; margin-top: 15px; transition: all 0.3s; text-transform: uppercase; letter-spacing: 1px; width: 100%; grid-column: 1 / -1;}
.btn-generar:hover { box-shadow: 0 0 20px rgba(0, 243, 255, 0.6); background: white;}
.resultado-rutina { margin-top: 2rem; padding: 2rem; background: #0a0a0c; display: none; border: 1px solid var(–cyan-neon); animation: fadeIn 0.5s ease-in-out; }
.resultado-rutina h3 { color: var(–cyan-neon); font-size: 2rem; margin-bottom: 15px; border-bottom: 1px dashed #333; padding-bottom: 10px;}
.dia-rutina { background: #111; padding: 15px; margin-bottom: 15px; border-left: 4px solid var(–primary); }
.dia-rutina h4 { color: var(–primary); font-size: 1.3rem; margin-bottom: 10px; text-transform: uppercase; }
.dia-rutina ul { list-style: none; color: #e0e6ed; }
.dia-rutina ul li { margin-bottom: 8px; font-size: 1.1rem; display: flex; align-items: center; }
.dia-rutina ul li::before { content: ‘▸’; color: var(–cyan-neon); margin-right: 10px; font-size: 1.2rem; }
.recomendaciones { margin-top: 20px; padding: 15px; background: rgba(255, 0, 60, 0.1); border-left: 4px solid var(–rest-color); color: #fff; margin-bottom: 25px; }
/* === TEMPORIZADOR Y CALCULADORA === */
.hiit-container, .calculadora-container { background: var(–bg-card); padding: 2.5rem; text-align: center; max-width: 650px; margin: 0 auto; border: 1px solid #333; border-top: 4px solid var(–primary); box-shadow: 0 0 30px rgba(0, 0, 0, 0.8); }
.inputs-hiit { display: flex; justify-content: center; gap: 1.5rem; margin-bottom: 1.5rem; flex-wrap: wrap;}
.input-group { display: flex; flex-direction: column; text-align: left; }
.input-group label { font-size: 1rem; color: var(–cyan-neon); margin-bottom: 5px; font-weight: 600; text-transform: uppercase;}
.input-group input { padding: 10px; border: 1px solid #444; background: #0a0a0c; color: var(–primary); width: 100px; text-align: center; font-size: 16px; font-weight: 700; }
.display-timer { font-size: 7rem; font-weight: 700; margin: 1rem 0; font-variant-numeric: tabular-nums; transition: color 0.3s; line-height: 1; text-shadow: 0 0 20px currentColor; }
.ronda-display { font-size: 1.5rem; color: #fff; margin-bottom: 1rem; font-weight: 600; letter-spacing: 2px;}
.fase-display { font-size: 2rem; font-weight: 700; text-transform: uppercase; margin-bottom: 0.5rem; letter-spacing: 4px; text-shadow: 0 0 10px currentColor;}
.progress-bar-bg { width: 100%; height: 6px; background: #222; margin-bottom: 20px; overflow: hidden; }
.progress-bar-fill { height: 100%; width: 100%; background: var(–text-light); transition: width 1s linear, background-color 0.3s; }
.botones button { padding: 12px 30px; font-size: 1.2rem; font-weight: 700; border: none; cursor: pointer; margin: 5px; transition: all 0.3s; text-transform: uppercase; letter-spacing: 1px; clip-path: polygon(10px 0, 100% 0, 100% calc(100% – 10px), calc(100% – 10px) 100%, 0 100%, 0 10px); }
.btn-iniciar { background: var(–primary); color: #000; }
.btn-pausar { background: transparent; border: 1px solid var(–cyan-neon); color: var(–cyan-neon); padding: 11px 29px; }
.form-calc { display: grid; gap: 1.2rem; }
.form-calc select, .form-calc input { width: 100%; padding: 12px; border: 1px solid #444; background: #0a0a0c; color: white; font-size: 16px; font-weight: 600; }
.btn-calc { background: var(–cyan-neon); color: #000; padding: 15px; border: none; font-size: 1.2rem; font-weight: 700; cursor: pointer; margin-top: 10px; transition: all 0.3s; text-transform: uppercase; letter-spacing: 1px; }
.resultado-calc { margin-top: 1.5rem; padding: 1.5rem; background: #0a0a0c; display: none; text-align: center; border: 1px solid var(–primary); animation: fadeIn 0.5s ease-in-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
/* === FOOTER === */
footer { background-color: #050506; padding: 4rem 20px; text-align: center; border-top: 2px solid var(–cyan-neon); margin-top: 4rem; }
.footer-logo { font-size: 2rem; font-weight: 700; color: white; margin-bottom: 1rem; letter-spacing: 2px;}
.footer-yt-btn { display: inline-block; background-color: transparent; border: 2px solid var(–youtube-color); color: var(–youtube-color); text-decoration: none; padding: 12px 30px; font-size: 1.2rem; font-weight: 700; margin-top: 1rem; transition: all 0.3s; text-transform: uppercase; }
.footer-yt-btn:hover { background-color: var(–youtube-color); color: white; box-shadow: 0 0 20px rgba(255, 0, 0, 0.6); }
.copyright { margin-top: 3rem; color: #555; font-size: 1rem; }
@media (max-width: 768px) {
header { flex-direction: column; gap: 1.5rem; }
nav ul { flex-wrap: wrap; justify-content: center; gap: 1rem; }
.form-rutina { grid-template-columns: 1fr; }
}
[ GEAR ] Arsenal de Entrenamiento
Equípate con los 8 productos fitness más vendidos y mejor valorados. Hardware esencial para maximizar tu rendimiento físico.
Nº 1
Pulsera Smartwatch
Controla tus pulsaciones, calorías y sueño. El gadget número 1 para medir tu progreso en rutinas HIIT.
Ver en Amazon
Creatina Monohidrato
El suplemento rey. Aumenta tu fuerza, acelera tu recuperación y potencia el crecimiento muscular con base científica.
Ver en Amazon
Proteína Whey (Suero)
Proteína de rápida absorción. Indispensable para reparar fibras musculares tras tu sesión de levantamiento de pesas.
Ver en Amazon
Cinta de Correr Plegable
Mantén tu NEAT alto sin salir de casa. Diseño compacto ideal para caminar o correr sin ocupar espacio.
Ver en Amazon
Bicicleta de Spinning
Volante de inercia profesional. Quema calorías al máximo nivel con sesiones intensas sin impacto en articulaciones.
Ver en Amazon
Juego de Mancuernas
El equipo básico offline. Pesos fijos o ajustables para aislar bíceps, tríceps y hombros de forma cómoda y segura.
Ver en Amazon
Bandas de Resistencia
Diferentes niveles de tensión. Perfectas para entrenar en casa, hipertrofia o calentar articulaciones.
Ver en Amazon
Esterilla Antideslizante
Superficie gruesa para aislarte del suelo. Ideal para planchas, yoga, ab wheel o estiramientos post-entreno.
Ver en Amazon
Ejercicios Básicos y Fundamentales
Revisa el catálogo superior. El algoritmo utilizará esta base de datos para crear tu rutina.
1. Espalda
- Dominadas (Gym/Casa)
- Jalón al pecho (Gym)
- Remo con barra (Gym/Casa)
- Remo con mancuerna (Gym/Casa)
- Remo en máquina (Gym)
- Remo invertido (Gym/Casa)
- Peso muerto (Gym/Casa)
- Pullover (Gym/Casa)
[CORE] Dominadas, jalón, remo y peso muerto.
2. Pecho
- Press banca plano (Gym/Casa)
- Press inclinado (Gym/Casa)
- Press con mancuernas (Gym/Casa)
- Fondos en paralelas (Gym/Casa)
- Flexiones (Gym/Casa)
- Aperturas con mancuernas (Gym/Casa)
- Cruce de poleas (Gym)
[CORE] Press banca, inclinado y flexiones.
3. Piernas
Cuádriceps: Sentadilla, prensa, zancadas, búlgara, extensión.Isquiotibiales: Peso muerto rumano, curl femoral, nordic curl.Glúteos: Hip thrust, puente, zancadas.Gemelos: Elevaciones de talones.
[CORE] Sentadilla, PM rumano, búlgara, hip thrust.
4. Hombros
Deltoides anterior: Press militar, press con mancuernas.Deltoides lateral: Elevaciones laterales.Deltoides posterior: Pájaros, face pulls, reverse fly.
[CORE] Press militar, elevaciones laterales y pájaros.
5. Bíceps
- Curl con barra
- Curl con mancuernas
- Curl alterno
- Curl martillo
- Curl inclinado
- Curl predicador
[CORE] Curl con barra, mancuernas y martillo.
6. Tríceps
- Fondos
- Press cerrado
- Extensión de tríceps polea
- Extensión sobre cabeza
- Press francés
- Flexiones cerradas
[CORE] Fondos, press cerrado y extensiones.
7. Antebrazos
- Curl de muñeca
- Curl inverso
- Curl martillo
- Farmer’s walk (Paseo del granjero)
- Dead hang (Colgarse)
[CORE] Farmer’s walk, dead hang y curl martillo.
8. Abdomen y Core
Abdomen: Crunch, elevaciones de piernas y rodillas.Core: Plancha, plancha lateral, ab wheel.
[CORE] Plancha, elevaciones de piernas y ab wheel.
[ IA ] Programación de Rutinas
Introduce tu biometría. Nuestro algoritmo cruzará tus datos con nuestra base de datos para generar un protocolo exacto.
Módulo HIIT Avanzado
SISTEMA LISTO
00:00
RONDA: 0 / 8
Calculadora TDEE
HombreMujer
SedentarioLigeroModeradoActivoMuy Activo
Gasto Energético de Mantenimiento:
0 kcal
Corte (Perder Grasa)
0 kcal
Volumen (Ganar Masa)
0 kcal
/* === SISTEMA DE AUDIO Y HIIT === */
let audioCtx;
function initAudio() { if (!audioCtx) { audioCtx = new (window.AudioContext || window.webkitAudioContext)(); } if (audioCtx.state === ‘suspended’) audioCtx.resume(); }
function playBeep(freq, duration) { initAudio(); const oscillator = audioCtx.createOscillator(); const gainNode = audioCtx.createGain(); oscillator.connect(gainNode); gainNode.connect(audioCtx.destination); oscillator.type = ‘square’; oscillator.frequency.value = freq; gainNode.gain.setValueAtTime(0.05, audioCtx.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + duration); oscillator.start(audioCtx.currentTime); oscillator.stop(audioCtx.currentTime + duration); }
function soundStart() { playBeep(880, 0.4); } function soundPause() { playBeep(300, 0.3); } function soundReset() { playBeep(200, 0.5); } function soundRest() { playBeep(440, 0.4); }
function soundFinish() { initAudio(); playBeep(880, 0.3); setTimeout(() => playBeep(880, 0.3), 400); setTimeout(() => playBeep(1200, 0.8), 800); }
function announceRound(roundNumber) { if (‘speechSynthesis’ in window) { window.speechSynthesis.cancel(); const utterance = new SpeechSynthesisUtterance(`Ronda ${roundNumber}`); utterance.lang = ‘es-ES’; utterance.pitch = 1.3; utterance.rate = 1.0; const voices = window.speechSynthesis.getVoices(); const femaleVoice = voices.find(v => v.lang.startsWith(‘es’) && (v.name.toLowerCase().includes(‘female’) || v.name.toLowerCase().includes(‘mujer’) || v.name.toLowerCase().includes(‘monica’) || v.name.toLowerCase().includes(‘lucia’))); if (femaleVoice) utterance.voice = femaleVoice; window.speechSynthesis.speak(utterance); } }
let timerInterval, isRunning = false, isWorkPhase = true, currentRound = 1, timeLeft = 0, totalRounds = 0, currentPhaseTotalTime = 0;
const display = document.getElementById(‘timerDisplay’), faseDisplay = document.getElementById(‘faseDisplay’), rondaDisplay = document.getElementById(‘rondaDisplay’), progressBar = document.getElementById(‘progressBar’);
function formatTime(seconds) { const m = Math.floor(seconds / 60).toString().padStart(2, ‘0’); const s = (seconds % 60).toString().padStart(2, ‘0’); return `${m}:${s}`; }
function updateTimerUI() { display.textContent = formatTime(timeLeft); if(currentPhaseTotalTime > 0) { const percentage = (timeLeft / currentPhaseTotalTime) * 100; progressBar.style.width = `${percentage}%`; } if(isWorkPhase) { display.style.color = ‘var(–work-color)’; faseDisplay.textContent = ‘EJECUTANDO [TRABAJO]’; faseDisplay.style.color = ‘var(–work-color)’; progressBar.style.backgroundColor = ‘var(–work-color)’; display.style.textShadow = ‘0 0 20px rgba(0, 243, 255, 0.6)’; } else { display.style.color = ‘var(–rest-color)’; faseDisplay.textContent = ‘SISTEMA [DESCANSO]’; faseDisplay.style.color = ‘var(–rest-color)’; progressBar.style.backgroundColor = ‘var(–rest-color)’; display.style.textShadow = ‘0 0 20px rgba(255, 0, 60, 0.6)’; } rondaDisplay.textContent = `RONDA: ${currentRound} / ${totalRounds}`; }
function startTimer() { if (isRunning) return; initAudio(); const workTime = parseInt(document.getElementById(‘workTime’).value); const restTime = parseInt(document.getElementById(‘restTime’).value); totalRounds = parseInt(document.getElementById(‘rounds’).value); if(timeLeft === 0 && currentRound === 1) { timeLeft = workTime; currentPhaseTotalTime = workTime; isWorkPhase = true; soundStart(); setTimeout(() => announceRound(1), 400); } else { soundStart(); } isRunning = true; document.getElementById(‘btnStart’).textContent = «EN CURSO…»; updateTimerUI(); timerInterval = setInterval(() => { timeLeft–; if (timeLeft totalRounds) { clearInterval(timerInterval); isRunning = false; soundFinish(); display.textContent = «00:00»; faseDisplay.textContent = «SECUENCIA COMPLETADA»; faseDisplay.style.color = «var(–primary)»; display.style.color = «var(–primary)»; display.style.textShadow = «0 0 20px rgba(255, 204, 0, 0.6)»; progressBar.style.width = «100%»; progressBar.style.backgroundColor = «var(–primary)»; document.getElementById(‘btnStart’).textContent = «INICIAR SECUENCIA»; currentRound = 1; return; } isWorkPhase = true; timeLeft = workTime; currentPhaseTotalTime = workTime; soundStart(); setTimeout(() => announceRound(currentRound), 400); } } updateTimerUI(); }, 1000); }
function pauseTimer() { if (!isRunning) return; clearInterval(timerInterval); isRunning = false; document.getElementById(‘btnStart’).textContent = «REANUDAR»; soundPause(); if (‘speechSynthesis’ in window) window.speechSynthesis.cancel(); }
function resetTimer() { clearInterval(timerInterval); isRunning = false; currentRound = 1; timeLeft = 0; currentPhaseTotalTime = 0; display.textContent = «00:00»; display.style.color = «var(–text-light)»; display.style.textShadow = «none»; faseDisplay.textContent = «SISTEMA LISTO»; faseDisplay.style.color = «#777»; progressBar.style.width = «100%»; progressBar.style.backgroundColor = «var(–text-light)»; document.getElementById(‘btnStart’).textContent = «INICIAR SECUENCIA»; rondaDisplay.textContent = `RONDA: 0 / ${document.getElementById(‘rounds’).value}`; soundReset(); if (‘speechSynthesis’ in window) window.speechSynthesis.cancel(); }
/* === LÓGICA DE LA CALCULADORA === */
function calcularCalorias() { const genero = document.getElementById(‘genero’).value; const edad = parseFloat(document.getElementById(‘edad’).value); const peso = parseFloat(document.getElementById(‘peso’).value); const altura = parseFloat(document.getElementById(‘altura’).value); const actividad = parseFloat(document.getElementById(‘actividad’).value); if (!edad || !peso || !altura || edad < 0 || peso < 0 || altura < 0) { alert("ERROR: Por favor ingresa parámetros válidos."); return; } let tmb = (10 * peso) + (6.25 * altura) – (5 * edad); if (genero === 'hombre') tmb += 5; else tmb -= 161; const mantenimiento = Math.round(tmb * actividad); const deficit = mantenimiento – 500; const superavit = mantenimiento + 300; const calsMantEl = document.getElementById('calsMantenimiento'); const resultBox = document.getElementById('resultadoCalc'); resultBox.style.display = 'block'; calsMantEl.textContent = mantenimiento.toLocaleString('es-ES') + " kcal"; document.getElementById('calsDeficit').textContent = deficit.toLocaleString('es-ES') + " kcal"; document.getElementById('calsSuperavit').textContent = superavit.toLocaleString('es-ES') + " kcal"; }
/* === LÓGICA DEL GENERADOR DE RUTINAS IA === */
const dbEjercicios = {
gym: {
pecho: ['Press banca plano', 'Press inclinado', 'Press con mancuernas', 'Cruce de poleas', 'Fondos en paralelas'],
espalda: ['Dominadas', 'Jalón al pecho', 'Remo con barra', 'Remo en máquina', 'Peso muerto'],
pierna: ['Sentadilla con barra', 'Prensa', 'Peso muerto rumano', 'Sentadilla búlgara', 'Elevaciones de gemelos'],
hombro: ['Press militar', 'Elevaciones laterales en polea', 'Face pulls'],
biceps: ['Curl con barra', 'Curl alterno', 'Curl predicador'],
triceps: ['Press francés', 'Extensión de tríceps en polea', 'Fondos'],
core: ['Crunch en polea', 'Elevaciones de piernas colgado', 'Plancha con peso']
},
casa: {
pecho: ['Flexiones tradicionales', 'Flexiones declinadas', 'Fondos en silla', 'Aperturas con mancuernas'],
espalda: ['Dominadas (si hay barra)', 'Remo invertido bajo mesa', 'Remo con mancuernas', 'Pullover con mancuerna'],
pierna: ['Sentadilla al aire', 'Zancadas caminando', 'Sentadilla búlgara con mancuernas', 'Hip thrust en suelo', 'Elevación gemelos a un pie'],
hombro: ['Press con mancuernas', 'Elevaciones laterales con mancuernas', 'Pájaros con mancuernas'],
biceps: ['Curl con mancuernas', 'Curl martillo', 'Curl concentrado'],
triceps: ['Flexiones diamante', 'Fondos en borde de cama', 'Extensión sobre cabeza con mancuerna'],
core: ['Plancha isométrica', 'Elevaciones de piernas en suelo', 'Ab wheel (si se dispone) o Crunch']
}
};
function getEjercicios(entorno, musculo, cantidad) {
let lista = […dbEjercicios[entorno][musculo]];
let seleccionados = [];
for(let i=0; i 25) {
perfilBiotipo = «Prioridad: Recomposición corporal y quema calórica.»;
repeticiones = «3 series x 12-15 repeticiones (Descansos 60s).»;
} else if (imc 45 || actividad === ‘sedentario’) {
perfilBiotipo += » (Enfoque en técnica y prevención articular debido al perfil).»;
repeticiones = «3 series x 12 repeticiones (Movimientos controlados, sin llegar al fallo).»;
}
let html = `
Protocolo Generado para: ${genero.toUpperCase()} | Edad: ${edad}
`;
html += `
Análisis Biométrico (IMC: ${imc.toFixed(1)}): ${perfilBiotipo}
Prescripción Base de Volumen: ${repeticiones}
`;
if (duracion === ‘dia’) {
html += `
Rutina Full Body (Cuerpo Completo). Ideal para impactar todo el sistema nervioso en un solo día.
`;
html += `
Sesión Única (Full Body)
- Pierna: ${getEjercicios(entorno, ‘pierna’, 1)}
- Pecho: ${getEjercicios(entorno, ‘pecho’, 1)}
- Espalda: ${getEjercicios(entorno, ‘espalda’, 1)}
- Hombro: ${getEjercicios(entorno, ‘hombro’, 1)}
- Brazo: ${getEjercicios(entorno, ‘biceps’, 1)} superserie con ${getEjercicios(entorno, ‘triceps’, 1)}
- Core: ${getEjercicios(entorno, ‘core’, 1)}
`;
if(imc > 25) html += `
+ Requisito: Añadir 15 min en el Cronómetro HIIT al finalizar.
`;
}
else if (duracion === ‘semana’) {
if (actividad === ‘sedentario’ || actividad === ‘ligero’) {
html += `
Esquema de 3 días (Lunes, Miércoles, Viernes) para asegurar recuperación en perfiles iniciales.
`;
for(let dia=1; dia<=3; dia++) {
html += `
Día ${dia} – Full Body Adaptación
- Pierna: ${getEjercicios(entorno, ‘pierna’, 2).join(‘ / ‘)}
- Empuje (Pecho/Hombro): ${getEjercicios(entorno, ‘pecho’, 1)} / ${getEjercicios(entorno, ‘hombro’, 1)}
- Tirón (Espalda): ${getEjercicios(entorno, ‘espalda’, 2).join(‘ / ‘)}
- Core: ${getEjercicios(entorno, ‘core’, 1)}
`;
}
} else {
html += `
Esquema Push / Pull / Legs (Empuje, Tirón, Pierna) para perfiles activos.
`;
html += `
Día 1 – Empuje (Pecho, Hombro, Tríceps)
- ${getEjercicios(entorno, ‘pecho’, 3).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘hombro’, 2).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘triceps’, 2).join(‘
- ‘)}
Día 2 – Tirón (Espalda, Bíceps)
- ${getEjercicios(entorno, ‘espalda’, 3).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘biceps’, 2).join(‘
- ‘)}
Día 3 – Pierna y Core
- ${getEjercicios(entorno, ‘pierna’, 4).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘core’, 2).join(‘
- ‘)}
`;
}
}
else if (duracion === ‘mes’) {
html += `
ESTRUCTURA DEL MESOCICLO (4 SEMANAS)
`;
html += `
Semana 1: Adaptación Estructural
Aplica la rutina base con un peso que controles. Deja 3 repeticiones en recámara (RIR 3).
Semana 2: Aumento de Volumen
Mantén el peso, pero añade 1 serie extra a todos los ejercicios principales.
Semana 3: Sobrecarga (Overreach)
Sube el peso en los ejercicios grandes (Sentadilla, Banca, Remos). Máximo esfuerzo (RIR 1).
Semana 4: Descarga Activa
Baja los pesos un 20% y haz la mitad de series. Permite a tu cuerpo reparar el tejido muscular.
`;
html += `
▶ TU RUTINA BASE (Aplica la progresión superior a estos ejercicios)
`;
if (actividad === ‘sedentario’ || actividad === ‘ligero’) {
for(let dia=1; dia<=3; dia++) {
html += `
Día ${dia} – Full Body
- Pierna: ${getEjercicios(entorno, ‘pierna’, 2).join(‘ / ‘)}
- Empuje: ${getEjercicios(entorno, ‘pecho’, 1)} / ${getEjercicios(entorno, ‘hombro’, 1)}
- Tirón: ${getEjercicios(entorno, ‘espalda’, 2).join(‘ / ‘)}
- Core: ${getEjercicios(entorno, ‘core’, 1)}
`;
}
} else {
html += `
Día 1 – Empuje (Pecho, Hombro, Tríceps)
- ${getEjercicios(entorno, ‘pecho’, 3).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘hombro’, 2).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘triceps’, 2).join(‘
- ‘)}
Día 2 – Tirón (Espalda, Bíceps)
- ${getEjercicios(entorno, ‘espalda’, 3).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘biceps’, 2).join(‘
- ‘)}
Día 3 – Pierna y Core
- ${getEjercicios(entorno, ‘pierna’, 4).join(‘
- ‘)}
- ${getEjercicios(entorno, ‘core’, 2).join(‘
- ‘)}
`;
}
}
const contenedor = document.getElementById(‘resultadoRutina’);
contenedor.innerHTML = html;
contenedor.style.display = ‘block’;
contenedor.scrollIntoView({ behavior: ‘smooth’, block: ‘start’ });
}