🎓 Primer commit: estructura del proyecto y material de estudio del Curso de Vóley

This commit is contained in:
Ricardo Monla
2026-05-02 19:08:29 -03:00
commit 9a3adc811e
103 changed files with 27967 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
# Dependencias
node_modules/
descargar-curso/node_modules/
# Archivos de sesión
descargar-curso/session.json
descargar-curso/.cookies_*.txt
descargar-curso/.mapa_videos.json
descargar-curso/.videos_descargados.txt
descargar-curso/.lista_videos.txt
# Videos descargados (son grandes, mejor no subirlos)
descargar-curso/descargas/videos_offline/
# Temporales
/tmp/
*.tmp
*.part
*.ytdl
# Logs
descargar-curso/descarga_videos.log
# OS
.DS_Store
Thumbs.db
+836
View File
@@ -0,0 +1,836 @@
#!/usr/bin/env node
/**
* COMPLETAR OFFLINE — Versión definitiva
* =======================================
*
* 1. Descarga los 42 videos de Vimeo usando las cookies de sesión
* 2. Los convierte a formato compatible con navegador (MP4)
* 3. Regenera LIBRO_DE_ESTUDIO.html y LIBRO_DE_ESTUDIO.md
* con los videos incrustados como <video> local o referencias
*
* Modo de uso:
* node completar_offline.mjs
*
* Requisitos:
* - yt-dlp instalado (pip install yt-dlp)
* - session.json de Playwright en la carpeta raíz
* - Los HTML descargados (de download_course.mjs)
*
* Archivos de salida:
* descargas/videos_offline/ → videos descargados (.mp4)
* descargas/LIBRO_DE_ESTUDIO.html → libro con videos locales
* descargas/LIBRO_DE_ESTUDIO.md → libro con referencias
*/
import fs from "fs";
import path from "path";
import { execSync, spawn } from "child_process";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const DOWNLOADS_DIR = path.join(__dirname, "descargas");
const SECCIONES_DIR = path.join(DOWNLOADS_DIR, "secciones");
const VIDEOS_DIR = path.join(DOWNLOADS_DIR, "videos_offline");
const SESSION_JSON = path.join(__dirname, "session.json");
const COOKIES_TXT = "/tmp/cookies_netscape_voley.txt";
// ── Estructura del curso ──
const MODULOS = [
{
titulo: "Módulo 1 — Planificación",
carpeta: "Modulo_1_Planificacion",
secciones: [
{ carpeta: "Planificacion", titulo: "Planificación" },
{ carpeta: "Preparacion_Atletica", titulo: "Preparación Atlética" },
{ carpeta: "Explicacion_TP", titulo: "Explicación del Trabajo Práctico" },
{ carpeta: "Seguimientos_Equipos", titulo: "Seguimientos de Equipos" },
{ carpeta: "Analisis_Equipos_1", titulo: "Análisis de Equipos 1" },
{ carpeta: "Analisis_Equipos_2", titulo: "Análisis de Equipos 2" },
{ carpeta: "TP_Final_Unidad", titulo: "TP Final de la Unidad" },
],
},
{
titulo: "Módulo 2 — Entrenamiento",
carpeta: "Modulo_2_Entrenamiento",
secciones: [
{ carpeta: "Centrales_y_Oponentes", titulo: "Centrales y Opuestos/as" },
{ carpeta: "Puntas_y_Liberos", titulo: "Puntas y Liberos/as" },
{
carpeta: "Entrenamiento_Armadoras",
titulo: "Entrenamiento de Armadoras",
},
{ carpeta: "Explicacion_TP", titulo: "Explicación del TP" },
],
},
];
// ══════════════════════════════════════════════════════════════
// FUNCIONES AUXILIARES
// ══════════════════════════════════════════════════════════════
function log(msg) {
const ts = new Date().toISOString().replace("T", " ").substring(0, 19);
console.log(`[${ts}] ${msg}`);
}
function ensureDir(dir) {
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
}
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
/**
* Convierte el session.json de Playwright a cookies en formato Netscape
* que yt-dlp pueda usar.
*/
function convertirCookies() {
if (!fs.existsSync(SESSION_JSON)) {
log("⚠ No se encontró session.json. Ejecutá primero download_course.mjs");
return false;
}
const data = JSON.parse(fs.readFileSync(SESSION_JSON, "utf-8"));
const cookies = data.cookies || [];
const lines = ["# Netscape HTTP Cookie File"];
for (const c of cookies) {
const domain = c.domain;
const flag = domain.startsWith(".") ? "TRUE" : "FALSE";
const path = c.path || "/";
const secure = c.secure ? "TRUE" : "FALSE";
const exp = c.expires > 0 ? String(Math.floor(c.expires)) : "1778594896";
const name = c.name;
const value = c.value;
lines.push(
`${domain}\t${flag}\t${path}\t${secure}\t${exp}\t${name}\t${value}`,
);
}
fs.writeFileSync(COOKIES_TXT, lines.join("\n") + "\n");
log(`✓ Cookies convertidas (${cookies.length} cookies)`);
return true;
}
// ══════════════════════════════════════════════════════════════
// PASO 1: EXTRAER TODOS LOS VIDEOS DEL HTML DESCARGADO
// ══════════════════════════════════════════════════════════════
function extraerTodosLosVideos() {
const videos = [];
const vistos = new Set();
for (const modulo of MODULOS) {
for (const seccion of modulo.secciones) {
const htmlPath = path.join(
SECCIONES_DIR,
modulo.carpeta,
seccion.carpeta,
"pagina.html",
);
if (!fs.existsSync(htmlPath)) continue;
const html = fs.readFileSync(htmlPath, "utf-8");
if (html.includes("500 Internal Server Error")) continue;
// Buscar todos los IDs de Vimeo en esta página
const regex = /player\.vimeo\.com\/video\/(\d+)/g;
let match;
while ((match = regex.exec(html)) !== null) {
const id = match[1];
if (vistos.has(id)) continue;
vistos.add(id);
// Extraer el título del tema asociado (buscar hacia atrás)
const before = html.substring(
Math.max(0, match.index - 400),
match.index,
);
const tituloMatch = before.match(/<em>([^<]+)<\/em>/);
const titulo = tituloMatch
? tituloMatch[1]
.trim()
.replace(/[<>:"/\\|?*]+/g, "_")
.substring(0, 80)
: `video_${id}`;
// Extraer la página que embebe el video (para pasarla a yt-dlp)
const paginaURL = `https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/${modulo.carpeta.includes("1") ? "19096" : "19097"}/s/${seccion.carpeta === "Planificacion" ? "34868" : seccion.carpeta === "Preparacion_Atletica" ? "34869" : seccion.carpeta === "Explicacion_TP" && modulo.carpeta.includes("1") ? "34870" : seccion.carpeta === "Seguimientos_Equipos" ? "35523" : seccion.carpeta === "Analisis_Equipos_1" ? "35524" : seccion.carpeta === "Analisis_Equipos_2" ? "35525" : seccion.carpeta === "TP_Final_Unidad" ? "35526" : seccion.carpeta === "Centrales_y_Oponentes" ? "35519" : seccion.carpeta === "Puntas_y_Liberos" ? "35520" : seccion.carpeta === "Entrenamiento_Armadoras" ? "35521" : seccion.carpeta === "Explicacion_TP" && modulo.carpeta.includes("2") ? "35522" : "35519"}/study-resources/list`;
videos.push({
id,
titulo,
pagina: seccion.carpeta,
modulo: modulo.carpeta,
nombreModulo: modulo.titulo,
nombreSeccion: seccion.titulo,
paginaURL,
urlVimeo: `https://player.vimeo.com/video/${id}`,
});
}
}
}
return videos;
}
// ══════════════════════════════════════════════════════════════
// PASO 2: DESCARGA DE VIDEOS
// ══════════════════════════════════════════════════════════════
async function descargarVideos(videos) {
ensureDir(VIDEOS_DIR);
// Verificar yt-dlp
try {
execSync("yt-dlp --version", { stdio: "ignore" });
} catch {
log("✗ yt-dlp no está instalado. Ejecutá: pip install yt-dlp");
return [];
}
if (!fs.existsSync(COOKIES_TXT)) {
if (!convertirCookies()) return [];
}
const descargados = [];
for (let i = 0; i < videos.length; i++) {
const v = videos[i];
const nombreSeguro =
`${v.nombreModulo.replace(/[^a-zA-Z0-9_]/g, "_")}_${v.nombreSeccion.replace(/[^a-zA-Z0-9_]/g, "_")}_${v.titulo.replace(/[^a-zA-Z0-9_]/g, "_")}.mp4`.substring(
0,
120,
);
const rutaSalida = path.join(VIDEOS_DIR, nombreSeguro);
if (fs.existsSync(rutaSalida)) {
log(
` [${i + 1}/${videos.length}] ↺ Ya existe: ${v.titulo.substring(0, 40)}`,
);
descargados.push({ ...v, archivo: nombreSeguro });
continue;
}
log(
` [${i + 1}/${videos.length}] ▶ Descargando: ${v.titulo.substring(0, 50)}...`,
);
try {
// yt-dlp con la página embebedora como URL y cookies
const cmd = [
"yt-dlp",
"--cookies",
COOKIES_TXT,
"-o",
rutaSalida,
"--merge-output-format",
"mp4",
"--no-playlist",
"--progress",
"--print",
"after_move:OK",
v.paginaURL,
].join(" ");
const output = execSync(cmd, {
timeout: 300000, // 5 min por video
stdio: ["ignore", "pipe", "pipe"],
});
// Verificar que se haya descargado
if (fs.existsSync(rutaSalida)) {
const sizeMB = (fs.statSync(rutaSalida).size / 1024 / 1024).toFixed(1);
log(`${sizeMB} MB — ${v.titulo.substring(0, 40)}`);
descargados.push({ ...v, archivo: nombreSeguro });
} else {
log(` ⚠ Archivo no encontrado después de descarga`);
}
} catch (err) {
log(` ✗ Error: ${err.message.substring(0, 100)}`);
}
// Pequeña pausa entre descargas
await sleep(1000);
}
return descargados;
}
// ══════════════════════════════════════════════════════════════
// PASO 3: GENERAR LIBRO DE ESTUDIO CON VIDEOS
// ══════════════════════════════════════════════════════════════
function extraerTemas(filePath) {
const temas = [];
try {
if (!fs.existsSync(filePath)) return temas;
const html = fs.readFileSync(filePath, "utf-8");
if (html.includes("500 Internal Server Error")) return temas;
// Extraer tablas de estudio
const tablas = extraerTablas(html);
for (const tabla of tablas) {
const filas = extraerFilas(tabla);
for (const fila of filas) {
if (!fila.includes("<td")) continue;
const tema = procesarFila(fila);
if (tema) temas.push(tema);
}
}
} catch {}
return temas;
}
function extraerTablas(html) {
const tablas = [];
let pos = 0;
while (true) {
const start = html.indexOf(
'<table class="table table-bordered study-resources"',
pos,
);
if (start === -1) break;
const openEnd = html.indexOf(">", start);
if (openEnd === -1) break;
let depth = 1;
let searchPos = openEnd + 1;
while (depth > 0 && searchPos < html.length) {
const nextOpen = html.indexOf("<table", searchPos);
const nextClose = html.indexOf("</table>", searchPos);
if (nextClose === -1) break;
if (nextOpen !== -1 && nextOpen < nextClose) {
depth++;
searchPos = nextOpen + 6;
} else {
depth--;
searchPos = nextClose + 8;
}
}
tablas.push(html.substring(start, searchPos));
pos = searchPos;
}
return tablas;
}
function extraerFilas(tablaHTML) {
const filas = [];
const tbodyStart = tablaHTML.indexOf("<tbody>");
if (tbodyStart === -1) return filas;
const tbody = tablaHTML.substring(tbodyStart);
let pos = 0;
while (true) {
const trStart = tbody.indexOf("<tr", pos);
if (trStart === -1) break;
let depth = 1;
let tableDepth = 0;
let searchPos = trStart + 3;
while (depth > 0 && searchPos < tbody.length) {
const ops = [
{ type: "trO", pos: tbody.indexOf("<tr", searchPos) },
{ type: "trC", pos: tbody.indexOf("</tr>", searchPos) },
{ type: "tableO", pos: tbody.indexOf("<table", searchPos) },
{ type: "tableC", pos: tbody.indexOf("</table>", searchPos) },
].filter((o) => o.pos !== -1);
if (ops.length === 0) break;
const earliest = ops.sort((a, b) => a.pos - b.pos)[0];
switch (earliest.type) {
case "tableO":
tableDepth++;
searchPos = earliest.pos + 6;
break;
case "tableC":
tableDepth = Math.max(0, tableDepth - 1);
searchPos = earliest.pos + 7;
break;
case "trO":
if (tableDepth === 0) depth++;
searchPos = earliest.pos + 3;
break;
case "trC":
if (tableDepth === 0) depth--;
searchPos = earliest.pos + 5;
break;
}
}
filas.push(tbody.substring(trStart, searchPos));
pos = searchPos;
}
return filas;
}
function procesarFila(filaHTML) {
const tituloMatch = filaHTML.match(/<em>([\s\S]*?)<\/em>/i);
const titulo = tituloMatch
? limpiarHTML(tituloMatch[1]).trim()
: "Sin título";
const vimeoMatch = filaHTML.match(/player\.vimeo\.com\/video\/(\d+)/i);
const vimeoID = vimeoMatch ? vimeoMatch[1] : null;
const recursoMatch = filaHTML.match(
/<a[^>]*href="([^"]*)"[^>]*class="btn[^"]*"[^>]*>(Abrir (?:Archivo|Enlace))<\/a>/i,
);
const recursoURL = recursoMatch ? recursoMatch[1] : null;
const recursoTexto = recursoMatch ? recursoMatch[2] : null;
const contenidoMatch = filaHTML.match(
/<div class="redactor-usr-input">([\s\S]*?)<\/div>/i,
);
let contenidoHTML = contenidoMatch ? contenidoMatch[1].trim() : "";
if (!contenidoHTML && !vimeoID && !recursoURL) return null;
const id = titulo
.toLowerCase()
.replace(/[^a-z0-9áéíóúüñ]+/gi, "-")
.replace(/-+/g, "-")
.replace(/^-|-$/g, "");
return { id, titulo, contenidoHTML, vimeoID, recursoURL, recursoTexto };
}
function limpiarHTML(html) {
return html
.replace(/<[^>]*>/g, "")
.replace(/&nbsp;/g, " ")
.replace(/&amp;/g, "&")
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&quot;/g, '"')
.replace(/&#39;/g, "'")
.replace(/\s+/g, " ")
.trim();
}
function htmlAMarkdown(html) {
if (!html) return "";
let md = html;
md = md.replace(/<h1[^>]*>([\s\S]*?)<\/h1>/gi, "# $1\n\n");
md = md.replace(/<h2[^>]*>([\s\S]*?)<\/h2>/gi, "## $1\n\n");
md = md.replace(/<h3[^>]*>([\s\S]*?)<\/h3>/gi, "### $1\n\n");
md = md.replace(/<h4[^>]*>([\s\S]*?)<\/h4>/gi, "#### $1\n\n");
md = md.replace(/<strong>([\s\S]*?)<\/strong>/gi, "**$1**");
md = md.replace(/<b>([\s\S]*?)<\/b>/gi, "**$1**");
md = md.replace(/<em>([\s\S]*?)<\/em>/gi, "*$1*");
md = md.replace(/<i>([\s\S]*?)<\/i>/gi, "*$1*");
md = md.replace(/<p[^>]*>([\s\S]*?)<\/p>/gi, "$1\n\n");
md = md.replace(/<ul[^>]*>([\s\S]*?)<\/ul>/gi, "$1\n");
md = md.replace(/<ol[^>]*>([\s\S]*?)<\/ol>/gi, "$1\n");
md = md.replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, "- $1\n");
md = md.replace(/<blockquote[^>]*>([\s\S]*?)<\/blockquote>/gi, "> $1\n\n");
md = md.replace(/<table[^>]*>([\s\S]*?)<\/table>/gi, (_, t) =>
tablaAMarkdown(t),
);
md = md.replace(/<code[^>]*>([\s\S]*?)<\/code>/gi, "`$1`");
md = md.replace(/<hr[^>]*>/gi, "\n---\n");
// Entities
const ents = {
"&nbsp;": " ",
"&amp;": "&",
"&lt;": "<",
"&gt;": ">",
"&quot;": '"',
"&#39;": "'",
"&aacute;": "á",
"&eacute;": "é",
"&iacute;": "í",
"&oacute;": "ó",
"&uacute;": "ú",
"&ntilde;": "ñ",
"&Aacute;": "Á",
"&Eacute;": "É",
"&Iacute;": "Í",
"&Oacute;": "Ó",
"&Uacute;": "Ú",
"&Ntilde;": "Ñ",
"&uuml;": "ü",
"&Uuml;": "Ü",
};
for (const [k, v] of Object.entries(ents))
md = md.replace(new RegExp(k, "g"), v);
md = md.replace(/<[^>]*>/g, "");
md = md.replace(/\n{4,}/g, "\n\n\n");
md = md.replace(/[ \t]+\n/g, "\n");
md = md
.split("\n")
.map((l) => l.trim())
.join("\n");
return md.trim();
}
function tablaAMarkdown(tablaHTML) {
const filas = [];
const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
let match;
while ((match = rowRegex.exec(tablaHTML)) !== null) {
const celdas = [];
const cellRegex = /<t[dh][^>]*>([\s\S]*?)<\/t[dh]>/gi;
let cm;
while ((cm = cellRegex.exec(match[1])) !== null) {
const celda = cm[1]
.replace(/<br\s*\/?>/gi, " ")
.replace(/<[^>]+>/g, "")
.replace(/&nbsp;/g, " ")
.replace(/\s+/g, " ")
.trim();
celdas.push(celda);
}
if (celdas.length > 0) filas.push(celdas);
}
if (filas.length === 0) return "";
const numCols = Math.max(...filas.map((f) => f.length));
let md = "\n";
while (filas[0].length < numCols) filas[0].push("");
md += "| " + filas[0].join(" | ") + " |\n";
md += "| " + filas[0].map(() => "---").join(" | ") + " |\n";
for (let i = 1; i < filas.length; i++) {
while (filas[i].length < numCols) filas[i].push("");
md += "| " + filas[i].join(" | ") + " |\n";
}
md += "\n";
return md;
}
function generarContenido(videosDescargados) {
// Mapa de video ID → archivo local
const mapaVideos = {};
for (const v of videosDescargados) {
mapaVideos[v.id] = v.archivo;
}
const libros = [];
for (const modulo of MODULOS) {
const seccionesConContenido = [];
for (const seccion of modulo.secciones) {
const htmlPath = path.join(
SECCIONES_DIR,
modulo.carpeta,
seccion.carpeta,
"pagina.html",
);
const temas = extraerTemas(htmlPath);
if (temas.length > 0) {
// Asignar videos descargados a los temas
for (const tema of temas) {
if (tema.vimeoID && mapaVideos[tema.vimeoID]) {
tema.videoLocal = mapaVideos[tema.vimeoID];
}
}
seccionesConContenido.push({ titulo: seccion.titulo, temas });
}
}
if (seccionesConContenido.length > 0) {
libros.push({ titulo: modulo.titulo, secciones: seccionesConContenido });
}
}
return libros;
}
// ══════════════════════════════════════════════════════════════
// GENERAR MARKDOWN
// ══════════════════════════════════════════════════════════════
function generarMarkdown(libros) {
const fecha = new Date().toLocaleDateString("es-AR", {
year: "numeric",
month: "long",
day: "numeric",
});
let totalTemas = 0;
let md = `# Curso de Entrenador Nacional de Vóley
## Material de Estudio Completo
*Generado el ${fecha}*
*Incluye contenido de texto + videos descargados offline*
---
`;
for (const modulo of libros) {
md += `# ${modulo.titulo}\n\n`;
for (const seccion of modulo.secciones) {
md += `## ${seccion.titulo}\n\n`;
for (let t = 0; t < seccion.temas.length; t++) {
const tema = seccion.temas[t];
totalTemas++;
md += `### ${t + 1}. ${tema.titulo}\n\n`;
if (tema.videoLocal) {
md += `🎬 **Video:** \`${tema.videoLocal}\` *(archivo local)*\n\n`;
} else if (tema.vimeoID) {
md += `📹 *Video disponible — ID: ${tema.vimeoID}*\n\n`;
}
if (tema.contenidoHTML) {
md += htmlAMarkdown(tema.contenidoHTML);
md += "\n\n";
}
if (tema.recursoURL) {
const icono = tema.recursoTexto === "Abrir Archivo" ? "📄" : "🔗";
md += `${icono} **${tema.recursoTexto}:** ${tema.titulo}\`${tema.recursoURL}\`\n\n`;
}
if (t < seccion.temas.length - 1) md += "---\n\n";
}
}
}
md += `\n---\n*Fin del material. ${totalTemas} temas · ${Object.keys(mapaVideos).filter((k) => mapaVideos[k]).length} videos descargados.*\n`;
return md;
}
// ══════════════════════════════════════════════════════════════
// GENERAR HTML (con videos incrustados)
// ══════════════════════════════════════════════════════════════
let mapaVideos = {};
function generarHTML(libros) {
const fecha = new Date().toLocaleDateString("es-AR", {
year: "numeric",
month: "long",
day: "numeric",
});
let totalModulos = libros.length;
let totalSecciones = 0;
let totalTemas = 0;
for (const m of libros) {
totalSecciones += m.secciones.length;
for (const s of m.secciones) totalTemas += s.temas.length;
}
const totalVidsDesc = Object.values(mapaVideos).filter(Boolean).length;
const videoHTML = (tema) => {
if (tema.videoLocal) {
const rutaRelativa = `../videos_offline/${tema.videoLocal}`;
return `<div class="video-wrapper">
<video controls preload="metadata" width="100%">
<source src="${rutaRelativa}" type="video/mp4">
Tu navegador no soporta video HTML5.
</video>
<div class="video-label">🎬 ${tema.titulo}</div>
</div>`;
}
if (tema.vimeoID) {
return `<p class="video-ref">📹 <em>Video no descargado (ID: ${tema.vimeoID})</em></p>`;
}
return "";
};
const css = `
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: 'Segoe UI', Georgia, serif; background: #f5f3ef; color: #2c2c2c; line-height: 1.8; font-size: 17px; }
.portada { background: linear-gradient(135deg, #0d2b3e 0%, #1a5276 50%, #2980b9 100%); color: white; padding: 5rem 2rem; text-align: center; min-height: 70vh; display: flex; flex-direction: column; justify-content: center; align-items: center; }
.portada h1 { font-size: 2.8rem; margin-bottom: 0.5rem; font-weight: 700; }
.portada h2 { font-size: 1.4rem; font-weight: 300; opacity: 0.9; }
.portada .stats { margin-top: 2rem; display: flex; gap: 2rem; flex-wrap: wrap; justify-content: center; }
.portada .stat { background: rgba(255,255,255,0.12); padding: 0.6rem 1.2rem; border-radius: 8px; font-size: 0.9rem; }
.indice { background: white; padding: 2rem; max-width: 900px; margin: 0 auto; border-bottom: 1px solid #e0e0e0; }
.indice h2 { color: #0d2b3e; margin-bottom: 1rem; }
.indice ul { list-style: none; }
.indice li { padding: 0.3rem 0; }
.indice a { color: #1a5276; text-decoration: none; border-bottom: 1px solid #ddd; }
.indice a:hover { border-bottom-color: #1a5276; }
.indice .mod-tit { font-weight: 600; margin-top: 0.8rem; color: #0d2b3e; font-size: 1.05rem; }
.contenido { max-width: 900px; margin: 0 auto; padding: 2rem; background: white; }
.contenido h1 { color: #0d2b3e; font-size: 2rem; border-bottom: 3px solid #2980b9; padding-bottom: 0.5rem; margin: 3rem 0 1.5rem; }
.contenido h2 { color: #1a5276; font-size: 1.5rem; margin: 2rem 0 1rem; border-left: 4px solid #2980b9; padding-left: 0.8rem; }
.contenido h3 { color: #0d2b3e; font-size: 1.15rem; margin: 1.5rem 0 0.5rem; }
.contenido p { margin: 0.6rem 0; text-align: justify; }
.contenido ul, .contenido ol { margin: 0.6rem 0; padding-left: 1.5rem; }
.contenido li { margin: 0.3rem 0; }
.contenido strong { color: #0d2b3e; }
.contenido hr { border: none; border-top: 1px solid #e0e0e0; margin: 1.5rem 0; }
.contenido table { width: 100%; border-collapse: collapse; margin: 1rem 0; font-size: 0.9rem; }
.contenido th, .contenido td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }
.contenido th { background: #0d2b3e; color: white; }
.contenido tr:nth-child(even) { background: #f9f9f9; }
.contenido blockquote { border-left: 4px solid #2980b9; margin: 1rem 0; padding: 0.5rem 1rem; background: #f0f5fa; font-style: italic; color: #555; }
.contenido .tema-num { background: #2980b9; color: white; display: inline-block; padding: 0.1rem 0.5rem; border-radius: 4px; font-size: 0.8rem; margin-right: 0.5rem; }
.video-wrapper { margin: 1rem 0; background: #000; border-radius: 8px; overflow: hidden; }
.video-wrapper video { display: block; max-height: 500px; }
.video-label { background: #0d2b3e; color: white; padding: 0.4rem 0.8rem; font-size: 0.85rem; text-align: center; }
.video-ref { color: #888; font-style: italic; font-size: 0.9rem; margin: 0.5rem 0; padding: 0.3rem 0.6rem; border-left: 3px solid #ccc; background: #fafafa; }
.recurso-link { display: inline-block; background: #e8f4f8; border: 1px solid #b3d9e8; border-radius: 4px; padding: 0.2rem 0.6rem; font-size: 0.85rem; margin: 0.3rem 0; color: #1a5276; text-decoration: none; }
.recurso-link:hover { background: #d0ebf5; }
.footer { text-align: center; padding: 3rem 2rem; color: #999; font-size: 0.85rem; max-width: 900px; margin: 0 auto; }
@media (max-width: 600px) {
body { font-size: 15px; }
.portada { padding: 2rem 1rem; min-height: auto; }
.portada h1 { font-size: 1.8rem; }
.contenido { padding: 1rem; }
}
`;
// Índice
let idx = '<div class="indice"><h2>📑 Índice de contenidos</h2><ul>';
for (const modulo of libros) {
idx += `<li class="mod-tit">${modulo.titulo}</li><ul>`;
for (let j = 0; j < modulo.secciones.length; j++) {
const s = modulo.secciones[j];
const anchor = `sec-${modulo.titulo.replace(/[^a-zA-Z0-9]/g, "")}-${s.titulo.replace(/[^a-zA-Z0-9]/g, "")}`;
idx += `<li><a href="#${anchor}">${s.titulo} (${s.temas.length} temas)</a></li>`;
}
idx += "</ul>";
}
idx += "</ul></div>";
// Cuerpo
let body = "";
for (const modulo of libros) {
body += `<h1>${modulo.titulo}</h1>\n`;
for (const seccion of modulo.secciones) {
const anchor = `sec-${modulo.titulo.replace(/[^a-zA-Z0-9]/g, "")}-${seccion.titulo.replace(/[^a-zA-Z0-9]/g, "")}`;
body += `<h2 id="${anchor}">${seccion.titulo}</h2>\n`;
for (let t = 0; t < seccion.temas.length; t++) {
const tema = seccion.temas[t];
body += `<h3><span class="tema-num">${t + 1}</span> ${tema.titulo}</h3>\n`;
body += videoHTML(tema);
if (tema.contenidoHTML) {
body += `<div class="estudio-contenido">${tema.contenidoHTML}</div>\n`;
}
if (tema.recursoURL) {
const icono = tema.recursoTexto === "Abrir Archivo" ? "📄" : "🔗";
const urlCompleta = tema.recursoURL.startsWith("http")
? tema.recursoURL
: `https://voley.onlineeducation.center${tema.recursoURL}`;
body += `<p><a class="recurso-link" href="${urlCompleta}" target="_blank">${icono} ${tema.recursoTexto}: ${tema.titulo}</a></p>\n`;
}
if (t < seccion.temas.length - 1) body += "<hr>\n";
}
}
}
// Footer
body += `<p style="text-align:center;color:#999;margin-top:3rem;font-size:0.85rem;">— Fin del material de estudio —</p>`;
return `<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Curso de Vóley — Material de Estudio Completo</title>
<style>${css}</style>
</head>
<body>
<div class="portada">
<h1>🏐 Curso de Entrenador Nacional de Vóley</h1>
<h2>Material de Estudio Completo</h2>
<p>Contenido + videos descargados — 100% offline</p>
<div class="stats">
<div class="stat">📚 ${totalModulos} módulos</div>
<div class="stat">📖 ${totalSecciones} secciones</div>
<div class="stat">🎯 ${totalTemas} temas</div>
<div class="stat">🎬 ${totalVidsDesc} videos</div>
</div>
</div>
${idx}
<div class="contenido">
${body}
</div>
<div class="footer">
<p>Generado el ${fecha} — Online Education Center</p>
<p>Material de estudio 100% offline</p>
</div>
</body>
</html>`;
}
// ══════════════════════════════════════════════════════════════
// MAIN
// ══════════════════════════════════════════════════════════════
async function main() {
console.log("");
console.log("═══════════════════════════════════════════════════");
console.log(" COMPLETAR OFFLINE — Videos + Libro de Estudio");
console.log("═══════════════════════════════════════════════════");
console.log("");
// Paso 1: Extraer videos del HTML
log("Paso 1: Extrayendo videos del contenido descargado...");
const todosLosVideos = extraerTodosLosVideos();
log(`${todosLosVideos.length} videos únicos encontrados`);
log("");
// Paso 2: Descargar videos
log("Paso 2: Descargando videos de Vimeo...");
log(" (Puede tomar tiempo dependiendo de tu conexión)");
log("");
const videosDescargados = await descargarVideos(todosLosVideos);
log("");
log(
`${videosDescargados.length}/${todosLosVideos.length} videos descargados`,
);
// Construir mapa global
globalThis.mapaVideos = {};
for (const v of videosDescargados) {
globalThis.mapaVideos[v.id] = v.archivo;
}
// Paso 3: Generar libro de estudio
log("");
log("Paso 3: Generando libro de estudio con videos...");
const libros = generarContenido(videosDescargados);
// Markdown
const md = generarMarkdown(libros);
const mdPath = path.join(DOWNLOADS_DIR, "LIBRO_DE_ESTUDIO.md");
fs.writeFileSync(mdPath, md, "utf-8");
log(`${mdPath} (${(md.length / 1024).toFixed(0)} KB)`);
// HTML
const html = generarHTML(libros);
const htmlPath = path.join(DOWNLOADS_DIR, "LIBRO_DE_ESTUDIO.html");
fs.writeFileSync(htmlPath, html, "utf-8");
log(`${htmlPath} (${(html.length / 1024).toFixed(0)} KB)`);
// Estadísticas
let totalPalabras = 0;
let totalTemas = 0;
for (const m of libros) {
for (const s of m.secciones) {
for (const t of s.temas) {
totalTemas++;
if (t.contenidoHTML) {
totalPalabras += t.contenidoHTML
.replace(/<[^>]*>/g, "")
.split(/\s+/).length;
}
}
}
}
log("");
log("═══════════════════════════════════════════════════");
log(" COMPLETADO");
log("═══════════════════════════════════════════════════");
log("");
log(` 📚 ${libros.length} módulos · ${totalTemas} temas`);
log(` 📝 ~${(totalPalabras / 1000).toFixed(1)}k palabras de contenido`);
log(
` 🎬 ${videosDescargados.length} videos descargados (en videos_offline/)`,
);
log("");
log(" Para abrir el libro de estudio:");
log(` file://${htmlPath}`);
log("");
}
main().catch((err) => {
console.error("Error:", err.message);
process.exit(1);
});
+482
View File
@@ -0,0 +1,482 @@
#!/bin/bash
#
# DESCARGAR VIDEOS DEL CURSO DE VOLEY
# ====================================
# Descarga los 42 videos de Vimeo con reanudación automática.
# Puede detenerse y reanudarse cuando quieras.
#
# Modo de uso:
# bash descargar_videos.sh
#
# Opciones:
# bash descargar_videos.sh --resume # Reanuda descargas pendientes
# bash descargar_videos.sh --status # Ver estado de descargas
# bash descargar_videos.sh --clean # Borrar todo y empezar de nuevo
#
set -e
# ─── CONFIGURACIÓN ───────────────────────────────────────────
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SESSION_JSON="$SCRIPT_DIR/session.json"
COOKIES_FILE="$SCRIPT_DIR/.cookies_voley.txt"
VIDEOS_DIR="$SCRIPT_DIR/descargas/videos_offline"
REGISTRO="$SCRIPT_DIR/.videos_descargados.txt"
LISTA_VIDEOS="$SCRIPT_DIR/.lista_videos.txt"
DEST_DIR="$SCRIPT_DIR/descargas"
LIMIT_RATE="" # Ej: "5M" para limitar a 5 MB/s, vacío = sin límite
# ─── COLORES ─────────────────────────────────────────────────
VERDE='\033[0;32m'
AMARILLO='\033[1;33m'
ROJO='\033[0;31m'
AZUL='\033[0;34m'
RESET='\033[0m'
ok() { echo -e " ${VERDE}${RESET} $1"; }
warn() { echo -e " ${AMARILLO}${RESET} $1"; }
err() { echo -e " ${ROJO}${RESET} $1"; }
info() { echo -e " ${AZUL}${RESET} $1"; }
# ─── HELPERS ─────────────────────────────────────────────────
timestamp() {
date '+%Y-%m-%d %H:%M:%S'
}
log() {
echo "[$(timestamp)] $1"
}
check_dependencies() {
if ! command -v yt-dlp &>/dev/null; then
err "yt-dlp no está instalado."
echo " Instalálo con: pip install yt-dlp"
exit 1
fi
if ! command -v python3 &>/dev/null; then
err "python3 no está instalado."
exit 1
fi
}
# ─── CONVERTIR COOKIES ──────────────────────────────────────
convertir_cookies() {
if [ ! -f "$SESSION_JSON" ]; then
err "No se encontró $SESSION_JSON"
echo " Ejecutá primero: node download_course.mjs"
exit 1
fi
log "Convirtiendo cookies de Playwright a formato Netscape..."
python3 -c "
import json
with open('$SESSION_JSON') as f:
data = json.load(f)
cookies = data.get('cookies', [])
lines = ['# Netscape HTTP Cookie File']
for c in cookies:
domain = c.get('domain', '')
if not domain:
continue
flag = 'TRUE' if domain.startswith('.') else 'FALSE'
path = c.get('path', '/')
secure = 'TRUE' if c.get('secure', False) else 'FALSE'
exp = c.get('expires', 0)
if exp <= 0:
exp = 1778594896 # fecha lejana
name = c.get('name', '')
value = c.get('value', '')
lines.append(f'{domain}\t{flag}\t{path}\t{secure}\t{int(exp)}\t{name}\t{value}')
with open('$COOKIES_FILE', 'w') as f:
f.write('\n'.join(lines) + '\n')
print(f'{len(cookies)}')
" 2>/dev/null
if [ -f "$COOKIES_FILE" ]; then
local count=$(wc -l < "$COOKIES_FILE")
ok "Cookies convertidas ($((count - 1)))"
else
err "Error al convertir cookies"
exit 1
fi
}
# ─── EXTRAER LISTA DE VIDEOS ─────────────────────────────────
extraer_lista_videos() {
log "Extrayendo lista de videos del HTML descargado..."
python3 -c "
import os, re, json
base = '$DEST_DIR/secciones'
modulos = ['Modulo_1_Planificacion', 'Modulo_2_Entrenamiento']
# Mapeo de carpetas a IDs de sección
mapeo_secciones = {
'Planificacion': ('m/19096', 's/34868'),
'Preparacion_Atletica': ('m/19096', 's/34869'),
'Explicacion_TP': ('m/19096', 's/34870'),
'Seguimientos_Equipos': ('m/19096', 's/35523'),
'Analisis_Equipos_1': ('m/19096', 's/35524'),
'Analisis_Equipos_2': ('m/19096', 's/35525'),
'TP_Final_Unidad': ('m/19096', 's/35526'),
'Centrales_y_Oponentes': ('m/19097', 's/35519'),
'Puntas_y_Liberos': ('m/19097', 's/35520'),
'Entrenamiento_Armadoras': ('m/19097', 's/35521'),
'Explicacion_TP': ('m/19097', 's/35522'),
}
# Nombre humano de cada sección
nombres = {
'Planificacion': 'Planificacion',
'Preparacion_Atletica': 'Preparacion_Atletica',
'Explicacion_TP': 'Explicacion_TP',
'Seguimientos_Equipos': 'Seguimientos_Equipos',
'Analisis_Equipos_1': 'Analisis_Equipos_1',
'Analisis_Equipos_2': 'Analisis_Equipos_2',
'TP_Final_Unidad': 'TP_Final_Unidad',
'Centrales_y_Oponentes': 'Centrales_y_Oponentes',
'Puntas_y_Liberos': 'Puntas_y_Liberos',
'Entrenamiento_Armadoras': 'Entrenamiento_Armadoras',
}
videos = []
vistos = set()
for mod in modulos:
mod_path = os.path.join(base, mod)
if not os.path.isdir(mod_path):
continue
for sec in os.listdir(mod_path):
html_path = os.path.join(mod_path, sec, 'pagina.html')
if not os.path.isfile(html_path):
continue
html = open(html_path, 'r', errors='ignore').read()
if '500 Internal Server Error' in html:
continue
for m in re.finditer(r'player\.vimeo\.com/video/(\d+)', html):
vid = m.group(1)
if vid in vistos:
continue
vistos.add(vid)
# Buscar título del tema
idx = m.start()
before = html[max(0, idx - 400):idx]
tm = re.search(r'<em>([^<]+)</em>', before)
titulo = tm.group(1).strip() if tm else f'video_{vid}'
# Limpiar caracteres no válidos para文件名
titulo = re.sub(r'[<>:\"/\\\\|?*]+', '_', titulo)[:80]
# Construir URL de la página embebedora
mapa = mapeo_secciones.get(sec)
if mapa:
mod_id, sec_id = mapa
pagina_url = f'https://voley.onlineeducation.center/es/campus/student/training/e/14197/{mod_id}/{sec_id}/study-resources/list'
else:
pagina_url = ''
videos.append({
'id': vid,
'titulo': titulo,
'seccion': nombres.get(sec, sec),
'modulo': 'M1' if '1' in mod else 'M2',
'url': pagina_url,
})
with open('$LISTA_VIDEOS', 'w') as f:
json.dump(videos, f, ensure_ascii=False, indent=2)
print(len(videos))
" 2>/dev/null
local total=$(wc -l < "$LISTA_VIDEOS" 2>/dev/null || echo 0)
if [ "$total" -gt 0 ] 2>/dev/null; then
ok "Lista de videos generada"
python3 -c "import json; print(f' Total: {len(json.load(open(\"$LISTA_VIDEOS\")))} videos')" 2>/dev/null
else
err "No se encontraron videos en el HTML descargado"
exit 1
fi
}
# ─── DESCARGAR VIDEOS ───────────────────────────────────────
descargar_videos() {
mkdir -p "$VIDEOS_DIR"
touch "$REGISTRO"
# Leer videos ya descargados
local descargados=()
while IFS= read -r line; do
descargados+=("$line")
done < "$REGISTRO"
# Obtener lista completa
local total=$(python3 -c "import json; print(len(json.load(open('$LISTA_VIDEOS'))))" 2>/dev/null || echo 0)
if [ "$total" -eq 0 ]; then
err "Lista de videos vacía"
exit 1
fi
echo ""
echo " Total: $total videos"
echo " Ya descargados: ${#descargados[@]}"
echo " Pendientes: $((total - ${#descargados[@]}))"
echo ""
# Procesar cada video
for i in $(seq 0 $((total - 1))); do
local data=$(python3 -c "
import json
with open('$LISTA_VIDEOS') as f:
v = json.load(f)
v = v[$i]
print(f'{v[\"id\"]}|{v[\"titulo\"]}|{v[\"seccion\"]}|{v[\"modulo\"]}|{v[\"url\"]}')" 2>/dev/null)
local id=$(echo "$data" | cut -d'|' -f1)
local titulo=$(echo "$data" | cut -d'|' -f2)
local seccion=$(echo "$data" | cut -d'|' -f3)
local modulo=$(echo "$data" | cut -d'|' -f4)
local pagina_url=$(echo "$data" | cut -d'|' -f5-)
# Verificar si ya se descargó
if grep -q "^$id|" "$REGISTRO" 2>/dev/null; then
continue
fi
# Nombre del archivo de salida
local safe_name="${modulo}_${seccion}_${titulo}"
safe_name=$(echo "$safe_name" | sed 's/[^a-zA-Z0-9_]/_/g' | cut -c1-120)
local output_path="$VIDEOS_DIR/${safe_name}.mp4"
# Si el archivo ya existe en disco pero no en el registro, agregarlo
if [ -f "$output_path" ]; then
echo "${id}|${safe_name}.mp4" >> "$REGISTRO"
ok "[$((i+1))/$total] Ya existe: ${titulo:0:50}"
continue
fi
echo ""
echo " ─────────────────────────────────────────────"
printf " [%d/%d] 🎬 %s\n" $((i+1)) "$total" "${titulo:0:70}"
echo " ─────────────────────────────────────────────"
echo ""
if [ -z "$pagina_url" ]; then
warn "Sin URL de página embebedora, intentando con URL directa..."
pagina_url="https://player.vimeo.com/video/${id}"
fi
# Construir comando yt-dlp
local cmd="yt-dlp"
cmd+=" --cookies \"$COOKIES_FILE\""
cmd+=" -o \"$output_path\""
cmd+=" --merge-output-format mp4"
cmd+=" --no-playlist"
cmd+=" --no-progress"
cmd+=" --console-title"
cmd+=" --retries 3"
cmd+=" --continue"
if [ -n "$LIMIT_RATE" ]; then
cmd+=" --limit-rate $LIMIT_RATE"
fi
cmd+=" \"$pagina_url\""
# Ejecutar descarga
if eval "$cmd" 2>&1; then
if [ -f "$output_path" ]; then
local size=$(du -h "$output_path" | cut -f1)
echo "${id}|${safe_name}.mp4" >> "$REGISTRO"
ok "Descargado: ${titulo:0:40} ($size)"
else
# Buscar archivo con otro nombre
local found=$(find "$VIDEOS_DIR" -name "*${id}*" -o -name "*${titulo:0:20}*" 2>/dev/null | head -1)
if [ -n "$found" ]; then
local fname=$(basename "$found")
echo "${id}|${fname}" >> "$REGISTRO"
local size=$(du -h "$found" | cut -f1)
ok "Descargado (con otro nombre): ${titulo:0:40} ($size)"
else
warn "Puede que se haya descargado pero no se encontró el archivo esperado."
warn "Ruta buscada: $output_path"
fi
fi
else
err "Error descargando: ${titulo:0:50}"
fi
# Pequeña pausa entre descargas para no saturar
sleep 2
done
echo ""
local pendientes=$((total - $(wc -l < "$REGISTRO" 2>/dev/null || echo 0)))
if [ "$pendientes" -le 0 ]; then
echo " 🎉 ¡Todos los videos descargados!"
else
echo " Quedan $pendientes videos pendientes."
echo " Para reanudar: bash $0"
fi
}
# ─── GENERAR LIBRO CON VIDEOS ───────────────────────────────
generar_libro() {
log "Generando libro de estudio con videos locales..."
node -e "
const fs = require('fs');
const path = require('path');
// Leer registro de videos descargados
const registro = '$REGISTRO';
const videosMap = {};
if (fs.existsSync(registro)) {
const lines = fs.readFileSync(registro, 'utf-8').trim().split('\n');
for (const line of lines) {
const [id, archivo] = line.split('|');
if (id && archivo) videosMap[id] = archivo;
}
}
console.log(' Videos mapeados:', Object.keys(videosMap).length);
// Guardar mapa para que lo use el script principal
const mapaPath = '$SCRIPT_DIR/.mapa_videos.json';
fs.writeFileSync(mapaPath, JSON.stringify(videosMap, null, 2));
" 2>/dev/null
# Ahora regenerar el libro usando el script existente
if [ -f "$SCRIPT_DIR/generar_dashboard.mjs" ]; then
node "$SCRIPT_DIR/generar_dashboard.mjs" 2>&1
else
warn "No se encontró generar_dashboard.mjs"
warn "El libro se generará sin videos la próxima vez que ejecutes node generar_dashboard.mjs"
fi
}
# ─── ESTADO ──────────────────────────────────────────────────
mostrar_estado() {
echo ""
echo " ─── ESTADO DE DESCARGA ───"
echo ""
if [ ! -f "$LISTA_VIDEOS" ]; then
echo " Lista de videos no generada."
echo " Ejecutá primero: bash $0"
return
fi
local total=$(python3 -c "import json; print(len(json.load(open('$LISTA_VIDEOS'))))" 2>/dev/null || echo 0)
local descargados=$(wc -l < "$REGISTRO" 2>/dev/null || echo 0)
local pendientes=$((total - descargados))
echo " Total videos: $total"
echo " Descargados: $descargados"
echo " Pendientes: $pendientes"
echo ""
if [ "$descargados" -gt 0 ] && [ -d "$VIDEOS_DIR" ]; then
local total_size=$(du -sh "$VIDEOS_DIR" 2>/dev/null | cut -f1)
echo " Espacio usado: $total_size"
echo ""
echo " Últimos descargados:"
tail -5 "$REGISTRO" 2>/dev/null | while IFS='|' read -r id archivo; do
if [ -n "$archivo" ] && [ -f "$VIDEOS_DIR/$archivo" ]; then
local size=$(du -h "$VIDEOS_DIR/$archivo" 2>/dev/null | cut -f1)
echo "$archivo ($size)"
fi
done
fi
echo ""
}
# ─── LIMPIAR ─────────────────────────────────────────────────
limpiar() {
echo ""
warn "¿Borrar todos los videos descargados? (s/N): "
read -r respuesta
if [ "$respuesta" = "s" ] || [ "$respuesta" = "S" ]; then
rm -rf "$VIDEOS_DIR" "$REGISTRO" "$LISTA_VIDEOS" "$COOKIES_FILE"
ok "Eliminado. Listo para empezar de nuevo."
else
ok "Operación cancelada."
fi
}
# ─── MAIN ────────────────────────────────────────────────────
main() {
echo ""
echo "═══════════════════════════════════════════════════"
echo " 🏐 DESCARGAR VIDEOS — Curso de Vóley"
echo "═══════════════════════════════════════════════════"
echo ""
check_dependencies
# Procesar argumentos
case "${1:-}" in
--status|-s)
convertir_cookies
extraer_lista_videos
mostrar_estado
exit 0
;;
--clean|-c)
limpiar
exit 0
;;
--resume|-r)
true # simplemente continua
;;
*)
# Primer ejecución: setup completo
if [ ! -f "$COOKIES_FILE" ]; then
convertir_cookies
fi
if [ ! -f "$LISTA_VIDEOS" ]; then
extraer_lista_videos
fi
;;
esac
# Asegurar cookies
if [ ! -f "$COOKIES_FILE" ]; then
convertir_cookies
fi
if [ ! -f "$LISTA_VIDEOS" ]; then
extraer_lista_videos
fi
descargar_videos
echo ""
echo "═══════════════════════════════════════════════════"
echo " Listo."
echo "═══════════════════════════════════════════════════"
echo ""
echo " Videos en: $VIDEOS_DIR"
echo " Para retomar: bash $0 --resume"
echo " Para ver estado: bash $0 --status"
echo ""
}
main "$@"
@@ -0,0 +1,586 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Curso de Vóley — Material de Estudio</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', 'Georgia', 'Times New Roman', serif;
background: #f5f3ef;
color: #2c2c2c;
line-height: 1.8;
font-size: 17px;
}
/* ── PORTADA ── */
.portada {
background: linear-gradient(135deg, #0d2b3e 0%, #1a5276 50%, #2980b9 100%);
color: white;
padding: 5rem 2rem;
text-align: center;
min-height: 70vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
overflow: hidden;
}
.portada::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle at 30% 70%, rgba(255,255,255,0.05) 0%, transparent 50%);
pointer-events: none;
}
.portada h1 { font-size: 2.6rem; margin-bottom: 0.6rem; font-weight: 700; letter-spacing: -0.5px; }
.portada h2 { font-size: 1.3rem; font-weight: 300; opacity: 0.9; margin-bottom: 1.5rem; }
.portada p { opacity: 0.7; font-size: 0.95rem; }
.portada .stats {
margin-top: 2rem;
display: flex;
gap: 1.5rem;
flex-wrap: wrap;
justify-content: center;
}
.portada .stat {
background: rgba(255,255,255,0.12);
backdrop-filter: blur(4px);
padding: 0.6rem 1.4rem;
border-radius: 8px;
font-size: 0.9rem;
border: 1px solid rgba(255,255,255,0.08);
}
.portada .icono-grande {
font-size: 4rem;
margin-bottom: 1rem;
opacity: 0.3;
}
/* ── ÍNDICE ── */
.indice {
background: white;
padding: 2.5rem;
max-width: 820px;
margin: 0 auto;
border-bottom: 1px solid #e8e4df;
}
.indice h2 {
color: #0d2b3e;
margin-bottom: 1.5rem;
font-size: 1.3rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.indice ul { list-style: none; }
.indice li { padding: 0.35rem 0; }
.indice a {
color: #1a5276;
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.2s;
}
.indice a:hover { border-bottom-color: #2980b9; }
.indice .modulo-titulo {
font-weight: 600;
font-size: 1.05rem;
margin-top: 1rem;
padding-top: 0.8rem;
border-top: 1px solid #eee;
color: #0d2b3e;
}
.indice .modulo-titulo:first-child { border-top: none; margin-top: 0; padding-top: 0; }
.indice .seccion-link { padding-left: 1.2rem; font-size: 0.93rem; }
/* ── CONTENIDO ── */
.contenido {
max-width: 820px;
margin: 0 auto;
padding: 2.5rem;
background: white;
}
.contenido h1.modulo-titulo {
color: #0d2b3e;
font-size: 2rem;
border-bottom: 3px solid #2980b9;
padding-bottom: 0.5rem;
margin: 3rem 0 1.5rem;
}
.contenido h2.seccion-titulo {
color: #1a5276;
font-size: 1.5rem;
margin: 2.5rem 0 1rem;
border-left: 4px solid #2980b9;
padding-left: 0.8rem;
}
.contenido h3.tema-titulo {
color: #2c3e50;
font-size: 1.15rem;
margin: 1.8rem 0 0.8rem;
font-weight: 600;
}
.contenido h4 {
color: #34495e;
font-size: 1.05rem;
margin: 1.3rem 0 0.6rem;
font-weight: 600;
}
.contenido p { margin: 0.8rem 0; text-align: justify; }
.contenido ul, .contenido ol { margin: 0.8rem 0; padding-left: 1.8rem; }
.contenido li { margin: 0.4rem 0; }
.contenido strong { color: #1a3a4a; font-weight: 600; }
.contenido hr {
border: none;
border-top: 1px solid #e8e4df;
margin: 1.8rem 0;
}
.contenido table {
width: 100%;
border-collapse: collapse;
margin: 1.2rem 0;
font-size: 0.9rem;
overflow-x: auto;
display: block;
}
.contenido th, .contenido td {
border: 1px solid #ddd;
padding: 0.6rem 0.8rem;
text-align: left;
vertical-align: top;
}
.contenido th {
background: #0d2b3e;
color: white;
font-weight: 600;
}
.contenido tr:nth-child(even) { background: #f8f6f3; }
.contenido tr:hover { background: #efece7; }
.contenido blockquote {
border-left: 4px solid #2980b9;
margin: 1rem 0;
padding: 0.8rem 1.2rem;
background: #f0f5fa;
color: #2c3e50;
border-radius: 0 4px 4px 0;
}
/* ── NOTAS ESPECIALES ── */
.nota-video {
background: #fef9e7;
border: 1px solid #f9e79f;
border-left: 4px solid #f1c40f;
padding: 0.6rem 1rem;
margin: 0.8rem 0;
border-radius: 0 4px 4px 0;
font-size: 0.9rem;
color: #7d6608;
}
.nota-recurso {
background: #eaf2f8;
border: 1px solid #aed6f1;
border-left: 4px solid #2980b9;
padding: 0.6rem 1rem;
margin: 0.8rem 0;
border-radius: 0 4px 4px 0;
font-size: 0.9rem;
}
.nota-recurso a {
color: #1a5276;
font-weight: 600;
}
.nota-vacio {
color: #999;
font-style: italic;
font-size: 0.9rem;
margin: 0.5rem 0;
}
.contenido .tema-separador {
margin: 2rem 0;
border-top: 1px dashed #ddd;
}
/* ── PIE DE PÁGINA ── */
.footer {
text-align: center;
padding: 3rem 2rem;
color: #999;
font-size: 0.85rem;
max-width: 820px;
margin: 0 auto;
border-top: 1px solid #e8e4df;
background: white;
}
/* ── RESPONSIVE ── */
@media (max-width: 600px) {
body { font-size: 15px; }
.portada { padding: 2rem 1rem; min-height: 50vh; }
.portada h1 { font-size: 1.6rem; }
.portada h2 { font-size: 1rem; }
.contenido { padding: 1rem; }
.indice { padding: 1.5rem; }
}
</style>
</head>
<body>
<div class="portada">
<div class="icono-grande">🏐</div>
<h1>Curso de Entrenador Nacional de Vóley</h1>
<h2>Material de Estudio — Versión Offline</h2>
<p>Contenido extraído del campus virtual</p>
<div class="stats">
<div class="stat">📚 2 módulos</div>
<div class="stat">📂 7 secciones</div>
<div class="stat">📖 66 temas</div>
</div>
<p style="margin-top: 2rem; opacity: 0.5; font-size: 0.8rem;">Generado el 2 de mayo de 2026</p>
</div>
<div class="indice"><h2>📑 Índice de contenidos</h2><ul><li class="modulo-titulo">Módulo 1 — Planificación</li><li class="seccion-link"><a href="#sec-planificacion">Planificación</a> (9 temas)</li><li class="seccion-link"><a href="#sec-preparacion-atletica">Preparación Atlética</a> (15 temas)</li><li class="seccion-link"><a href="#sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</a> (2 temas)</li><li class="modulo-titulo">Módulo 2 — Entrenamiento</li><li class="seccion-link"><a href="#sec-entrenamiento-de-centrales-y-opuestos-as">Entrenamiento de Centrales y Opuestos/as</a> (25 temas)</li><li class="seccion-link"><a href="#sec-puntas-y-liberos-as">Puntas y Liberos/as</a> (13 temas)</li><li class="seccion-link"><a href="#sec-entrenamiento-de-armadoras">Entrenamiento de Armadoras</a> (1 temas)</li><li class="seccion-link"><a href="#sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</a> (1 temas)</li></ul></div>
<div class="contenido">
<h1 class="modulo-titulo">Módulo 1 — Planificación</h1>
<h2 class="seccion-titulo" id="sec-planificacion">Planificación</h2>
<h3 class="tema-titulo" id="tema-planificacion-0">1. PLANIFICACIÓN</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1170245111</div>
<h4>Resumen de la Clase: Planificación y Periodización Ágil (Voleibol)</h4><p>Esta clase correspondiente al <b>Curso de Entrenador Nacional II de Vóleibol (Edición 2026)</b> aborda la planificación de la preparación física bajo un enfoque moderno de <b>periodización ágil</b>. El objetivo central es que el deportista llegue en su mejor versión a la competencia, priorizando la salud y la individualidad sobre planes rígidos.</p><hr><h4>1. Concepto de Carga e Individualidad</h4><ul><br>
<li><b>Carga Integral:</b> No se limita solo al entrenamiento de cancha; incluye el estrés físico, psicológico y el impacto diario en cada jugador.</li><br>
<li><b>Principio de Individualidad:</b> Es el factor determinante. Un plan exitoso debe ser flexible y ajustarse según el feedback (carga interna) de cada deportista.</li><br>
<li><b>Monitoreo:</b> Se propone el uso de herramientas simples como formularios digitales para registrar la fatiga, el bienestar y la recuperación.</li><br>
</ul><hr><h4>2. Control de Variables y Prevención de Lesiones</h4><ul><br>
<li><b>El Salto como Indicador:</b> Es la variable más crítica en vóleibol. Controlar la cantidad y magnitud de saltos es vital para evitar tendinopatías y sobrecargas.</li><br>
<li><b>Adaptación Progresiva:</b> Se debe evitar el aumento abrupto de cargas tras periodos de descanso para proteger los tejidos.</li><br>
<li><b>Cuerpo Técnico Integrado:</b> La planificación debe coordinarse entre entrenadores, preparadores físicos y el departamento médico.</li><br>
</ul><hr><h4>3. Propuesta del Sistema de Colores (Periodización Ágil)</h4><p>Para facilitar la visualización del trabajo semanal y diario, se utiliza un código de colores que define la magnitud y el objetivo de la carga:</p><br><br><table cellspacing="0" border="1" cellpadding="10">
<thead>
<tr>
<th>Color</th>
<th>Tipo de Sesión</th>
<th>Objetivo Principal</th>
</tr>
</thead>
<tbody>
<tr>
<td>Verde</td>
<td><b>Preventiva / Adaptación</b></td>
<td>Recuperar, mejorar movilidad, estabilidad y técnica de base. Carga baja.</td>
</tr>
<tr>
<td>Amarillo</td>
<td><b>Activación / Puesta a Punto</b></td>
<td>Estimular el sistema nervioso antes de competir. Volumen bajo e intensidad alta (velocidad).</td>
</tr>
<tr>
<td>Naranja</td>
<td><b>Carga / Construcción</b></td>
<td>Sesiones de mejora física regular. Volumen e intensidad media-alta.</td>
</tr>
<tr>
<td>Rojo</td>
<td><b>Choque / Consolidación</b></td>
<td>Máximo nivel de carga. Se ubica lejos de la competencia para permitir la recuperación.</td>
</tr>
</tbody>
</table><hr><h4>4. Situaciones Especiales en la Planificación</h4><ul><br>
<li><b>Prioridad a la Competencia:</b> Se planifica "hacia atrás", desde el día del partido hacia el inicio de la semana.</li><br>
<li><b>Impacto de los Viajes:</b> Las horas y la comodidad del viaje son carga física. Es fundamental programar sesiones de estiramiento o descanso total según el caso.</li><br>
<li><b>Jugadores con Diferente Rodaje:</b> Dentro de un mismo equipo, el que no jugó el fin de semana puede realizar una sesión de "choque" (roja), mientras que el titular debe realizar una de "recuperación" o "carga regular".</li><br>
</ul><hr><p><b>Conclusión:</b> La periodización ágil no significa entrenar menos o sin rumbo, sino tener la capacidad resolutiva para adaptar el plan maestro a los vaivenes diarios del equipo y el contexto.</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-planificacion-del-voleibol-1">2. Planificación del Vóleibol</h3>
<p>Propuesta de planificación</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219" target="_blank">Planificación del Vóleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-planificacion-del-voleibol-2">3. Planificación del Vóleibol</h3>
<p>Presentación de la 1era asignatura del curso</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139" target="_blank">Planificación del Vóleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-impacto-de-partidos-consecutivos-en-la-carga-de-trabajo-el-estado-de-recuperacion-y-el-bienestar-de-los-jugadores-profesionales-de-voleibol-3">4. Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221" target="_blank">Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-balance-de-estres-recuperacion-en-jugadores-universitarios-de-voleibol-durante-una-temporada-4">5. Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222" target="_blank">Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-niveles-de-estres-recuperacion-en-deportistas-varones-de-la-provincia-de-leon-a-traves-del-cuestionario-restq-76-5">6. NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76</h3>
<p>Artículo de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223" target="_blank">NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-incidencia-de-lesiones-en-el-voleibol-pueden-ser-una-guia-para-la-prescripcion-de-la-preparacion-fisica-6">7. Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224" target="_blank">Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-cual-podria-ser-la-frecuencia-ideal-de-entrenamientos-semanales-de-las-categorias-de-base-en-el-voleibol-7">8. ¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225" target="_blank">¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-como-desarrollar-deportistas-robustos-y-solidos-para-los-requerimientos-del-voleibol-en-el-largo-plazo-8">9. ¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226" target="_blank">¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?</a></div>
<h2 class="seccion-titulo" id="sec-preparacion-atletica">Preparación Atlética</h2>
<h3 class="tema-titulo" id="tema-preparacion-atletica-0">1. PREPARACIÓN ATLÉTICA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1173231315</div>
<h4>Resumen de Clase: Preparación Atlética en el Voleibol</h4><p><strong>Profesor:</strong> Alejandro Bertorello</p><p>En este segundo encuentro del curso para Entrenadores Nacionales Nivel 2, se abordó la implementación práctica de la preparación física, enfocándose en la sesión de entrenamiento como la unidad estructural básica y el rol del entrenador/preparador en el campo.</p><hr><h4>1. Filosofía y Rol del Preparador Físico</h4><ul><br>
<li><strong>Observación Pedagógica:</strong> El preparador debe estar presente y activo, corrigiendo técnicas y dando feedback constante. No se puede dirigir una sesión de pesas de forma pasiva.</li><br>
<li><strong>Individualidad:</strong> Es fundamental diferenciar los planes según el tiempo de juego, historial de lesiones y fatiga acumulada del deportista.</li><br>
<li><strong>Seguridad y Hábitos:</strong> En etapas formativas, es clave enseñar la higiene del gimnasio (orden de materiales) y la seguridad entre compañeros (cuidar al que levanta peso).</li><br>
</ul><h4>2. Objetivos Principales</h4><ul><br>
<li><strong>Prevención de Lesiones:</strong> El foco está en proteger las zonas críticas del voleibolista: <strong>hombros, rodillas, región lumbar y tobillos</strong>.</li><br>
<li><strong>Entrenamiento de Fuerza:</strong> Se considera la capacidad física prioritaria. Un deportista robusto absorbe mejor las cargas de salto y competencia.</li><br>
<li><strong>Disponibilidad:</strong> El fin último es que el jugador esté disponible para entrenar y jugar la mayor cantidad de tiempo posible.</li><br>
</ul><h4>3. Estructura de la Sesión por Bloques</h4><p>Bertorello propone organizar la sesión en un "gradiente" para optimizar la energía y evitar la fatiga coordinativa:</p><br><br><table cellspacing="0">
<thead>
<tr>
<th>Bloque</th>
<th>Contenido</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Movilidad</strong></td>
<td>Preparación de columna, cadera, tobillo y zona dorsal.</td>
</tr>
<tr>
<td><strong>Prevención</strong></td>
<td>Ejercicios específicos de hombro (manguito rotador) y rodilla.</td>
</tr>
<tr>
<td><strong>Potencia / Dinámicos</strong></td>
<td>Cargadas, arranques o saltos (realizar con el sistema nervioso fresco).</td>
</tr>
<tr>
<td><strong>Fuerza Máxima</strong></td>
<td>Ejercicios básicos con cargas elevadas (Sentadillas, Pesos Muertos).</td>
</tr>
<tr>
<td><strong>Estructura</strong></td>
<td>Trabajo complementario de masa muscular y núcleo (Core).</td>
</tr>
</tbody>
</table><h4>4. Logística y Tiempos</h4><ul><br>
<li><strong>Prioridad al Vóley:</strong> La preparación física no debe "robar" tiempo de cancha. Si el espacio es reducido, la prevención debe hacerse en pasillos o vestuarios antes de pisar la cancha.</li><br>
<li><strong>Flexibilidad Horaria:</strong> El trabajo de pesas puede realizarse antes, durante (división de grupos) o después de la pelota, adaptándose a la infraestructura de cada club.</li><br>
</ul><blockquote><br>
"El equipo no gana solo por estar bien físicamente, gana porque juega bien al vóley. La preparación física es el aliado que permite entrenar más y mejor."<br>
</blockquote><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-preparacion-atletica-1">2. Preparación Atlética</h3>
<p>Presentación de la segunda asignatura</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522" target="_blank">Preparación Atlética</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-modelos-de-planes-de-sesiones-de-preparacion-fisica-2">3. Modelos de planes de sesiones de preparación física</h3>
<p>Planes de sesiones de preparación física</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648" target="_blank">Modelos de planes de sesiones de preparación física</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-modelos-de-planes-3">4. Modelos de planes</h3>
<p>Planes deportistas intermedios</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649" target="_blank">Modelos de planes</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-planes-deportistas-principiantes-4">5. Planes deportistas principiantes</h3>
<p>Modelos de planes</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650" target="_blank">Planes deportistas principiantes</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-modelo-de-sesiones-de-preparacion-fisica-en-el-voleibol-5">6. Modelo de sesiones de preparación física en el vóleibol</h3>
<p>Modelos de sesiones de preparación física: preventiva, carga, choque y activación</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229" target="_blank">Modelo de sesiones de preparación física en el vóleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-modelo-de-ejercicios-preventivos-de-lesiones-en-el-voleibol-6">7. Modelo de ejercicios preventivos de lesiones en el vóleibol</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1063655414</div>
<p>Sesión preventiva general </p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-sesion-preventiva-post-viaje-7">8. Sesión Preventiva (Post viaje)</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1063657248</div>
<p>Sesión preventiva</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-modelo-de-sesion-de-carga-choque-8">9. Modelo de Sesión de carga - choque</h3>
<p>Modelo de sesión para deportistas expertos y avanzados</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232" target="_blank">Modelo de Sesión de carga - choque</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-efecto-del-entrenamiento-de-fuerza-en-el-salto-de-jugadores-adolescentes-de-voleibol-una-revision-sistematica-9">10. Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233" target="_blank">Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-revision-descriptiva-de-las-lesiones-mas-frecuentes-durante-la-practica-del-voleibol-10">11. Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234" target="_blank">Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-resistencia-y-fuerza-muscular-como-factores-predominantes-en-el-remate-entre-jovenes-atletas-de-voleibol-11">12. Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol</h3>
<p>Artículo de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235" target="_blank">Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-ejercicios-de-fuerza-para-el-tren-inferior-con-el-cinturon-y-el-plano-inclinado-12">13. Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236" target="_blank">Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-como-disenar-entradas-en-calor-sin-pelota-efectivas-en-el-voleibol-13">14. ¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237" target="_blank">¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-caracteristicas-fisicas-y-fisiologicas-de-las-jugadoras-de-voleibol-un-trabajo-de-revision-14">15. Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión</h3>
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238" target="_blank">Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión</a></div>
<h2 class="seccion-titulo" id="sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</h2>
<h3 class="tema-titulo" id="tema-explicacion-del-trabajo-practico-a-presentar-0">1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1173576229</div>
<div><br>
<h4>Consignas: Trabajo Práctico Integrador (TPI)</h4><br>
<p><strong>Profesor:</strong> Alejandro Bertorello</p><br>
<p>Esta clase detalla las pautas para la elaboración del trabajo final, cuyo objetivo es integrar los conocimientos de planificación y preparación atlética en una propuesta práctica aplicada a un equipo de voleibol.</p><br>
<hr><br>
<h4>1. Objetivo del Diseño</h4><br>
<ul><br>
<li><strong>Diseño de Macrociclo:</strong> Se debe completar el archivo Excel suministrado por la cátedra que contempla una estructura de 12 semanas.</li><br>
<li><strong>Periodo de Enfoque:</strong> El trabajo se centra exclusivamente en el periodo de competencia (temporada de partidos).</li><br>
<li><strong>Contexto del Equipo:</strong> Se planifica para un equipo ideal que entrena entre 3 y 4 veces por semana, además de la competencia.</li><br>
</ul><br>
<h4>2. Escenarios y Variables a Incluir</h4><br>
<p>El macrociclo debe reflejar la realidad del deporte, alternando sesiones de entrenamiento con los siguientes hitos obligatorios:</p><br>
<ul><br>
<li><strong>8 partidos de fin de semana:</strong> Encuentros regulares los días sábado o domingo.</li><br>
<li><strong>1 partido reprogramado:</strong> Un encuentro que debe ubicarse en un día de semana (ej. miércoles).</li><br>
<li><strong>2 torneos cortos:</strong> Competencias de tres días consecutivos (sábado, domingo y lunes).</li><br>
<li><strong>1 torneo largo:</strong> Una competencia que abarca casi una semana completa.</li><br>
<li><strong>1 fin de semana libre:</strong> Espacio destinado al descanso o ajuste de cargas.</li><br>
</ul><br>
<h4>3. Metodología de Carga en el Archivo</h4><br>
<ul><br>
<li><strong>Planificación Inversa:</strong> Se recomienda empezar marcando las fechas de competencia y, desde allí, planificar "hacia atrás" los días de carga, choque, activación y descarga.</li><br>
<li><strong>Tipos de Sesión:</strong> Solo se debe indicar el nombre de la sesión (ej. "Plan de Choque" o "Activación") según el código de colores visto en clase, no el detalle de cada ejercicio.</li><br>
<li><strong>Uso de Colores:</strong> El archivo Excel genera automáticamente los colores al ingresar el tipo de sesión o partido, facilitando la lectura visual de la carga.</li><br>
</ul><br>
<h4>4. Importancia de las Observaciones</h4><br>
<ul><br>
<li><strong>Contextualización:</strong> El apartado de observaciones al final del archivo es fundamental para la nota final.</li><br>
<li><strong>Justificación:</strong> Se deben explicar decisiones basadas en el contexto, como el manejo de fatiga tras un partido largo, viajes de muchas horas o limitaciones de infraestructura (ej. gimnasio cerrado).</li><br>
</ul><br>
<h4>5. Evaluación y Entrega</h4><br>
<ul><br>
<li><strong>Fecha Límite:</strong> La entrega final es el 30 de abril a las 23:59 hs.</li><br>
<li><strong>Criterios:</strong> Se valorará la coherencia entre las semanas, la dosificación de las cargas y la capacidad de adaptar el plan a los imprevistos planteados.</li><br>
<li><strong>Recuperación:</strong> En caso de no aprobar (nota mínima 6), el alumno dispone de una semana para corregir y reenviar el trabajo.</li><br>
</ul><br><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-consignas-del-trabajo-practico-1">2. Consignas del Trabajo práctico</h3>
<p>Hola a todos!</p><ul><li>Este es el archivo con las <strong>consignas del trabajo práctico integrador de las 2 asignaturas: planificación de la preparación física y preparación atlética en el vóleibol</strong></li><li>Para poder realizar el trabajo deben descargar desde <strong>Evaluaciones</strong> el archivo en formato Excel <strong>"Trabajo práctico preparación física entrenador nacional 2"</strong></li></ul><div><b><strong>Los saludo y quedo a disposición ante cualquier tipo de consultas!</strong><br></b><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686" target="_blank">Consignas del Trabajo práctico</a></div>
<h1 class="modulo-titulo">Módulo 2 — Entrenamiento</h1>
<h2 class="seccion-titulo" id="sec-entrenamiento-de-centrales-y-opuestos-as">Entrenamiento de Centrales y Opuestos/as</h2>
<h3 class="tema-titulo" id="tema-el-opuesto-0">1. EL OPUESTO</h3>
<p>CARACTERISTICAS Y DESARROLLO DEL OPUESTO<br>
</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960" target="_blank">EL OPUESTO</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-desarrollo-de-los-centrales-1">2. DESARROLLO DE LOS CENTRALES</h3>
<p>EL DESARROLLO DE LAS CENTRALES EN ATAQUE Y BLOQUEO</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961" target="_blank">DESARROLLO DE LOS CENTRALES</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-prioridad-en-el-bloqueo-2">3. PRIORIDAD EN EL BLOQUEO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919369433</div>
<p>PRIORIDAD EN EL BLOQUEO<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-centrales-y-opuestos-3">4. ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1179197191</div>
<p>clase en vivo</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-ataque-b-4">5. ATAQUE B</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919341704</div>
<p>ATAQUE B</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-b-con-recepcion-admiracion-5">6. B CON RECEPCION ADMIRACION</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919342668</div>
<p>B CON RECEPCION ADMIRACION<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-la-b-mantiene-la-distancia-6">7. LA B MANTIENE LA DISTANCIA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919346562</div>
<p>LA B MANTIENE LA DISTANCIA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hatu-recepcion-perfecta-7">8. HATU RECEPCION PERFECTA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919347866</div>
<p>HATU RECEPCION PERFECTA<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hatu-con-pelota-separada-8">9. HATU CON PELOTA SEPARADA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919348493</div>
<p>HATU CON PELOTA SEPARADA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hatu-marcada-9">10. HATU MARCADA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919351892</div>
<p>HATU MARCADA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hatumarcada-bien-atacada-10">11. HATUMARCADA BIEN ATACADA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919352848</div>
<p>HATU MARCADA BIEN ATACADA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hatu-bien-hecha-11">12. HATU BIEN HECHA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919353448</div>
<p>HATU BIEN HECHA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hana-positiva-12">13. HANA POSITIVA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919354134</div>
<p>HANA POSITIVA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hanati-con-recepcion-separada-13">14. HANATI CON RECEPCION SEPARADA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919355668</div>
<p>HANATI CON RECEPCION SEPARADA<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hana-recepcion-a-2-14">15. HANA RECEPCION A 2</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919356423</div>
<p>HANA RECEPCION A 2</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-beti-a-un-pie-atras-15">16. BETI A UN PIE ATRAS</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919357109</div>
<p>BETI A UN PIE ATRAS</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-beti-en-juego-16">17. BETI EN JUEGO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919358607</div>
<p>BETI EN JUEGO<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-central-al-medio-con-recepcion-a-2-17">18. CENTRAL AL MEDIO CON RECEPCION A 2</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919359386</div>
<p>CENTRAL AL MEDIO CON RECEPCION A 2</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hanati-volada-con-recepcion-a-4-18">19. HANATI VOLADA CON RECEPCION A 4</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919359855</div>
<p>HANATI VOLADA CON RECEPCION A 4</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-hana-con-recepcion-a-2-separada-19">20. HANA CON RECEPCION A 2 SEPARADA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919360318</div>
<p>HANA CON RECEPCION A 2 SEPARADA</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-apoyo-0-20">21. APOYO 0</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919363158</div>
<p>APOYO 0</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-central-ataca-de-segunda-entrenamiento-del-tiempo-21">22. CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919363728</div>
<p>CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-skipped-step-22">23. SKIPPED STEP</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919364522</div>
<p>PASO SALTADO PARA CAER DEL BLOQUEO Y SALIR A ATACAR</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-global-tecnico-con-el-central-23">24. GLOBAL TECNICO CON EL CENTRAL</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919365485</div>
<p>EJERCICIO GLOBAL TECNICO CON EL CENTRAL<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-visualizacion-del-central-en-bloqueo-24">25. VISUALIZACION DEL CENTRAL EN BLOQUEO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919366263</div>
<p>VISUALIZACION DEL CENTRAL EN BLOQUEO</p><h2 class="seccion-titulo" id="sec-puntas-y-liberos-as">Puntas y Liberos/as</h2>
<h3 class="tema-titulo" id="tema-puntas-y-liberos-as-0">1. PUNTAS Y LÍBEROS/AS</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1179888270</div>
<p>clase en vivo</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-split-step-1">2. SPLIT STEP</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921876274</div>
<p>SPLIT STEP</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-los-puntas-receptores-y-el-libero-2">3. LOS PUNTAS RECEPTORES Y EL LIBERO</h3>
<p>PUNTAS RECEPTORES Y LIBEROS</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177" target="_blank">LOS PUNTAS RECEPTORES Y EL LIBERO</a></div>
<div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-carrera-de-ataque-desde-6-a-4-3">4. CARRERA DE ATAQUE DESDE 6 A 4</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873304</div>
<p>CARRERA DE ATAQUE DE 6 A 4</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-contrataque-despues-de-caer-de-bloqueo-4">5. CONTRATAQUE DESPUES DE CAER DE BLOQUEO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873724</div>
<p>CONTRATAQUE DESPUES DE CAER DE BLOQUEO</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-contrataque-por-4-despues-de-caer-de-bloqueo-5">6. CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873953</div>
<p>ATAQUE DESPUES DE BLOQUEAR</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-evaluacion-posicional-6">7. EVALUACION POSICIONAL</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921874753</div>
<p>EVALUACION POSICIONAL</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-global-tecnico-de-la-pipe-7">8. GLOBAL TECNICO DE LA PIPE</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875020</div>
<p>GLOBAL TECNICO DE LA PIPE</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-recepcion-de-massimino-con-saque-de-la-maquina-8">9. RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875302</div>
<p>RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-recepcion-sobre-la-linea-saliendo-de-adentro-9">10. RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875519</div>
<p>RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-recepcion-y-ataque-por-4-saliendo-de-adentro-10">11. RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875778</div>
<p>RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-tipo-de-combinaciones-que-juegan-los-puntas-11">12. TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921879520</div>
<p>COMBINACIONES DE LOS PUNTAS<br>
</p><div class="tema-separador"></div>
<h3 class="tema-titulo" id="tema-ataque-de-la-pipe-por-distancia-o-tiempo-12">13. ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921879925</div>
<p>ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</p><h2 class="seccion-titulo" id="sec-entrenamiento-de-armadoras">Entrenamiento de Armadoras</h2>
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-y-las-armadoras-0">1. ENTRENAMIENTO DE LOS Y LAS ARMADORAS</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1181188693</div>
<p>clase en vivo</p><h2 class="seccion-titulo" id="sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</h2>
<h3 class="tema-titulo" id="tema-explicacion-del-trabajo-practico-a-presentar-0">1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</h3>
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1181892359</div>
<p>clase en vivo</p>
</div>
<div class="footer">
<p>Online Education Center — Material de estudio offline</p>
<p style="margin-top: 0.3rem; font-size: 0.8rem;">Generado el 2 de mayo de 2026</p>
</div>
</body>
</html>
@@ -0,0 +1,724 @@
# Curso de Entrenador Nacional de Vóley
## Material de Estudio
*Generado el 2 de mayo de 2026*
*Contenido extraído del curso online — Versión offline para estudio*
---
# Módulo 1 — Planificación
## Planificación
### 1. PLANIFICACIÓN
📹 *Video disponible — ID: 1170245111*
## Resumen de la Clase: Planificación y Periodización Ágil (Voleibol)
Esta clase correspondiente al **Curso de Entrenador Nacional II de Vóleibol (Edición 2026)** aborda la planificación de la preparación física bajo un enfoque moderno de **periodización ágil**. El objetivo central es que el deportista llegue en su mejor versión a la competencia, priorizando la salud y la individualidad sobre planes rígidos.
---
### 1. Concepto de Carga e Individualidad
- **Carga Integral:** No se limita solo al entrenamiento de cancha; incluye el estrés físico, psicológico y el impacto diario en cada jugador.
- **Principio de Individualidad:** Es el factor determinante. Un plan exitoso debe ser flexible y ajustarse según el feedback (carga interna) de cada deportista.
- **Monitoreo:** Se propone el uso de herramientas simples como formularios digitales para registrar la fatiga, el bienestar y la recuperación.
---
### 2. Control de Variables y Prevención de Lesiones
- **El Salto como Indicador:** Es la variable más crítica en vóleibol. Controlar la cantidad y magnitud de saltos es vital para evitar tendinopatías y sobrecargas.
- **Adaptación Progresiva:** Se debe evitar el aumento abrupto de cargas tras periodos de descanso para proteger los tejidos.
- **Cuerpo Técnico Integrado:** La planificación debe coordinarse entre entrenadores, preparadores físicos y el departamento médico.
---
### 3. Propuesta del Sistema de Colores (Periodización Ágil)
Para facilitar la visualización del trabajo semanal y diario, se utiliza un código de colores que define la magnitud y el objetivo de la carga:
| Color | Tipo de Sesión | Objetivo Principal |
| --- | --- | --- |
| Verde | **Preventiva / Adaptación** | Recuperar, mejorar movilidad, estabilidad y técnica de base. Carga baja. |
| Amarillo | **Activación / Puesta a Punto** | Estimular el sistema nervioso antes de competir. Volumen bajo e intensidad alta (velocidad). |
| Naranja | **Carga / Construcción** | Sesiones de mejora física regular. Volumen e intensidad media-alta. |
| Rojo | **Choque / Consolidación** | Máximo nivel de carga. Se ubica lejos de la competencia para permitir la recuperación. |
---
### 4. Situaciones Especiales en la Planificación
- **Prioridad a la Competencia:** Se planifica "hacia atrás", desde el día del partido hacia el inicio de la semana.
- **Impacto de los Viajes:** Las horas y la comodidad del viaje son carga física. Es fundamental programar sesiones de estiramiento o descanso total según el caso.
- **Jugadores con Diferente Rodaje:** Dentro de un mismo equipo, el que no jugó el fin de semana puede realizar una sesión de "choque" (roja), mientras que el titular debe realizar una de "recuperación" o "carga regular".
---
**Conclusión:** La periodización ágil no significa entrenar menos o sin rumbo, sino tener la capacidad resolutiva para adaptar el plan maestro a los vaivenes diarios del equipo y el contexto.
---
### 2. Planificación del Vóleibol
Propuesta de planificación
📄 **Abrir Archivo:** [Planificación del Vóleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219)
---
### 3. Planificación del Vóleibol
Presentación de la 1era asignatura del curso
📄 **Abrir Archivo:** [Planificación del Vóleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139)
---
### 4. Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol
Material de lectura complementaria
🔗 **Abrir Enlace:** [Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221)
---
### 5. Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada
Material de lectura complementaria
📄 **Abrir Archivo:** [Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222)
---
### 6. NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76
Artículo de lectura complementaria
📄 **Abrir Archivo:** [NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223)
---
### 7. Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?
Material de lectura complementaria
🔗 **Abrir Enlace:** [Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224)
---
### 8. ¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?
Material de lectura complementaria
🔗 **Abrir Enlace:** [¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225)
---
### 9. ¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?
Material de lectura complementaria
🔗 **Abrir Enlace:** [¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226)
## Preparación Atlética
### 1. PREPARACIÓN ATLÉTICA
📹 *Video disponible — ID: 1173231315*
## Resumen de Clase: Preparación Atlética en el Voleibol
**Profesor:** Alejandro Bertorello
En este segundo encuentro del curso para Entrenadores Nacionales Nivel 2, se abordó la implementación práctica de la preparación física, enfocándose en la sesión de entrenamiento como la unidad estructural básica y el rol del entrenador/preparador en el campo.
---
### 1. Filosofía y Rol del Preparador Físico
- **Observación Pedagógica:** El preparador debe estar presente y activo, corrigiendo técnicas y dando feedback constante. No se puede dirigir una sesión de pesas de forma pasiva.
- **Individualidad:** Es fundamental diferenciar los planes según el tiempo de juego, historial de lesiones y fatiga acumulada del deportista.
- **Seguridad y Hábitos:** En etapas formativas, es clave enseñar la higiene del gimnasio (orden de materiales) y la seguridad entre compañeros (cuidar al que levanta peso).
### 2. Objetivos Principales
- **Prevención de Lesiones:** El foco está en proteger las zonas críticas del voleibolista: **hombros, rodillas, región lumbar y tobillos**.
- **Entrenamiento de Fuerza:** Se considera la capacidad física prioritaria. Un deportista robusto absorbe mejor las cargas de salto y competencia.
- **Disponibilidad:** El fin último es que el jugador esté disponible para entrenar y jugar la mayor cantidad de tiempo posible.
### 3. Estructura de la Sesión por Bloques
Bertorello propone organizar la sesión en un "gradiente" para optimizar la energía y evitar la fatiga coordinativa:
| Bloque | Contenido |
| --- | --- |
| **Movilidad** | Preparación de columna, cadera, tobillo y zona dorsal. |
| **Prevención** | Ejercicios específicos de hombro (manguito rotador) y rodilla. |
| **Potencia / Dinámicos** | Cargadas, arranques o saltos (realizar con el sistema nervioso fresco). |
| **Fuerza Máxima** | Ejercicios básicos con cargas elevadas (Sentadillas, Pesos Muertos). |
| **Estructura** | Trabajo complementario de masa muscular y núcleo (Core). |
### 4. Logística y Tiempos
- **Prioridad al Vóley:** La preparación física no debe "robar" tiempo de cancha. Si el espacio es reducido, la prevención debe hacerse en pasillos o vestuarios antes de pisar la cancha.
- **Flexibilidad Horaria:** El trabajo de pesas puede realizarse antes, durante (división de grupos) o después de la pelota, adaptándose a la infraestructura de cada club.
>
"El equipo no gana solo por estar bien físicamente, gana porque juega bien al vóley. La preparación física es el aliado que permite entrenar más y mejor."
---
### 2. Preparación Atlética
Presentación de la segunda asignatura
📄 **Abrir Archivo:** [Preparación Atlética](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522)
---
### 3. Modelos de planes de sesiones de preparación física
Planes de sesiones de preparación física
📄 **Abrir Archivo:** [Modelos de planes de sesiones de preparación física](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648)
---
### 4. Modelos de planes
Planes deportistas intermedios
📄 **Abrir Archivo:** [Modelos de planes](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649)
---
### 5. Planes deportistas principiantes
Modelos de planes
📄 **Abrir Archivo:** [Planes deportistas principiantes](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650)
---
### 6. Modelo de sesiones de preparación física en el vóleibol
Modelos de sesiones de preparación física: preventiva, carga, choque y activación
📄 **Abrir Archivo:** [Modelo de sesiones de preparación física en el vóleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229)
---
### 7. Modelo de ejercicios preventivos de lesiones en el vóleibol
📹 *Video disponible — ID: 1063655414*
Sesión preventiva general
---
### 8. Sesión Preventiva (Post viaje)
📹 *Video disponible — ID: 1063657248*
Sesión preventiva
---
### 9. Modelo de Sesión de carga - choque
Modelo de sesión para deportistas expertos y avanzados
📄 **Abrir Archivo:** [Modelo de Sesión de carga - choque](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232)
---
### 10. Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática
Material de lectura complementaria
📄 **Abrir Archivo:** [Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233)
---
### 11. Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol
Material de lectura complementaria
🔗 **Abrir Enlace:** [Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234)
---
### 12. Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol
Artículo de lectura complementaria
📄 **Abrir Archivo:** [Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235)
---
### 13. Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado
Material de lectura complementaria
🔗 **Abrir Enlace:** [Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236)
---
### 14. ¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?
Material de lectura complementaria
🔗 **Abrir Enlace:** [¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237)
---
### 15. Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión
Material de lectura complementaria
🔗 **Abrir Enlace:** [Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238)
## Explicación del Trabajo Práctico
### 1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR
📹 *Video disponible — ID: 1173576229*
## Consignas: Trabajo Práctico Integrador (TPI)
**Profesor:** Alejandro Bertorello
Esta clase detalla las pautas para la elaboración del trabajo final, cuyo objetivo es integrar los conocimientos de planificación y preparación atlética en una propuesta práctica aplicada a un equipo de voleibol.
---
### 1. Objetivo del Diseño
- **Diseño de Macrociclo:** Se debe completar el archivo Excel suministrado por la cátedra que contempla una estructura de 12 semanas.
- **Periodo de Enfoque:** El trabajo se centra exclusivamente en el periodo de competencia (temporada de partidos).
- **Contexto del Equipo:** Se planifica para un equipo ideal que entrena entre 3 y 4 veces por semana, además de la competencia.
### 2. Escenarios y Variables a Incluir
El macrociclo debe reflejar la realidad del deporte, alternando sesiones de entrenamiento con los siguientes hitos obligatorios:
- **8 partidos de fin de semana:** Encuentros regulares los días sábado o domingo.
- **1 partido reprogramado:** Un encuentro que debe ubicarse en un día de semana (ej. miércoles).
- **2 torneos cortos:** Competencias de tres días consecutivos (sábado, domingo y lunes).
- **1 torneo largo:** Una competencia que abarca casi una semana completa.
- **1 fin de semana libre:** Espacio destinado al descanso o ajuste de cargas.
### 3. Metodología de Carga en el Archivo
- **Planificación Inversa:** Se recomienda empezar marcando las fechas de competencia y, desde allí, planificar "hacia atrás" los días de carga, choque, activación y descarga.
- **Tipos de Sesión:** Solo se debe indicar el nombre de la sesión (ej. "Plan de Choque" o "Activación") según el código de colores visto en clase, no el detalle de cada ejercicio.
- **Uso de Colores:** El archivo Excel genera automáticamente los colores al ingresar el tipo de sesión o partido, facilitando la lectura visual de la carga.
### 4. Importancia de las Observaciones
- **Contextualización:** El apartado de observaciones al final del archivo es fundamental para la nota final.
- **Justificación:** Se deben explicar decisiones basadas en el contexto, como el manejo de fatiga tras un partido largo, viajes de muchas horas o limitaciones de infraestructura (ej. gimnasio cerrado).
### 5. Evaluación y Entrega
- **Fecha Límite:** La entrega final es el 30 de abril a las 23:59 hs.
- **Criterios:** Se valorará la coherencia entre las semanas, la dosificación de las cargas y la capacidad de adaptar el plan a los imprevistos planteados.
- **Recuperación:** En caso de no aprobar (nota mínima 6), el alumno dispone de una semana para corregir y reenviar el trabajo.
---
### 2. Consignas del Trabajo práctico
Hola a todos!
- Este es el archivo con las **consignas del trabajo práctico integrador de las 2 asignaturas: planificación de la preparación física y preparación atlética en el vóleibol**
- Para poder realizar el trabajo deben descargar desde **Evaluaciones** el archivo en formato Excel **"Trabajo práctico preparación física entrenador nacional 2"**
****Los saludo y quedo a disposición ante cualquier tipo de consultas!****
📄 **Abrir Archivo:** [Consignas del Trabajo práctico](/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686)
# Módulo 2 — Entrenamiento
## Entrenamiento de Centrales y Opuestos/as
### 1. EL OPUESTO
CARACTERISTICAS Y DESARROLLO DEL OPUESTO
📄 **Abrir Archivo:** [EL OPUESTO](/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960)
---
### 2. DESARROLLO DE LOS CENTRALES
EL DESARROLLO DE LAS CENTRALES EN ATAQUE Y BLOQUEO
📄 **Abrir Archivo:** [DESARROLLO DE LOS CENTRALES](/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961)
---
### 3. PRIORIDAD EN EL BLOQUEO
📹 *Video disponible — ID: 919369433*
PRIORIDAD EN EL BLOQUEO
---
### 4. ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS
📹 *Video disponible — ID: 1179197191*
clase en vivo
---
### 5. ATAQUE B
📹 *Video disponible — ID: 919341704*
ATAQUE B
---
### 6. B CON RECEPCION ADMIRACION
📹 *Video disponible — ID: 919342668*
B CON RECEPCION ADMIRACION
---
### 7. LA B MANTIENE LA DISTANCIA
📹 *Video disponible — ID: 919346562*
LA B MANTIENE LA DISTANCIA
---
### 8. HATU RECEPCION PERFECTA
📹 *Video disponible — ID: 919347866*
HATU RECEPCION PERFECTA
---
### 9. HATU CON PELOTA SEPARADA
📹 *Video disponible — ID: 919348493*
HATU CON PELOTA SEPARADA
---
### 10. HATU MARCADA
📹 *Video disponible — ID: 919351892*
HATU MARCADA
---
### 11. HATUMARCADA BIEN ATACADA
📹 *Video disponible — ID: 919352848*
HATU MARCADA BIEN ATACADA
---
### 12. HATU BIEN HECHA
📹 *Video disponible — ID: 919353448*
HATU BIEN HECHA
---
### 13. HANA POSITIVA
📹 *Video disponible — ID: 919354134*
HANA POSITIVA
---
### 14. HANATI CON RECEPCION SEPARADA
📹 *Video disponible — ID: 919355668*
HANATI CON RECEPCION SEPARADA
---
### 15. HANA RECEPCION A 2
📹 *Video disponible — ID: 919356423*
HANA RECEPCION A 2
---
### 16. BETI A UN PIE ATRAS
📹 *Video disponible — ID: 919357109*
BETI A UN PIE ATRAS
---
### 17. BETI EN JUEGO
📹 *Video disponible — ID: 919358607*
BETI EN JUEGO
---
### 18. CENTRAL AL MEDIO CON RECEPCION A 2
📹 *Video disponible — ID: 919359386*
CENTRAL AL MEDIO CON RECEPCION A 2
---
### 19. HANATI VOLADA CON RECEPCION A 4
📹 *Video disponible — ID: 919359855*
HANATI VOLADA CON RECEPCION A 4
---
### 20. HANA CON RECEPCION A 2 SEPARADA
📹 *Video disponible — ID: 919360318*
HANA CON RECEPCION A 2 SEPARADA
---
### 21. APOYO 0
📹 *Video disponible — ID: 919363158*
APOYO 0
---
### 22. CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO
📹 *Video disponible — ID: 919363728*
CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO
---
### 23. SKIPPED STEP
📹 *Video disponible — ID: 919364522*
PASO SALTADO PARA CAER DEL BLOQUEO Y SALIR A ATACAR
---
### 24. GLOBAL TECNICO CON EL CENTRAL
📹 *Video disponible — ID: 919365485*
EJERCICIO GLOBAL TECNICO CON EL CENTRAL
---
### 25. VISUALIZACION DEL CENTRAL EN BLOQUEO
📹 *Video disponible — ID: 919366263*
VISUALIZACION DEL CENTRAL EN BLOQUEO
## Puntas y Liberos/as
### 1. PUNTAS Y LÍBEROS/AS
📹 *Video disponible — ID: 1179888270*
clase en vivo
---
### 2. SPLIT STEP
📹 *Video disponible — ID: 921876274*
SPLIT STEP
---
### 3. LOS PUNTAS RECEPTORES Y EL LIBERO
PUNTAS RECEPTORES Y LIBEROS
📄 **Abrir Archivo:** [LOS PUNTAS RECEPTORES Y EL LIBERO](/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177)
---
### 4. CARRERA DE ATAQUE DESDE 6 A 4
📹 *Video disponible — ID: 921873304*
CARRERA DE ATAQUE DE 6 A 4
---
### 5. CONTRATAQUE DESPUES DE CAER DE BLOQUEO
📹 *Video disponible — ID: 921873724*
CONTRATAQUE DESPUES DE CAER DE BLOQUEO
---
### 6. CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO
📹 *Video disponible — ID: 921873953*
ATAQUE DESPUES DE BLOQUEAR
---
### 7. EVALUACION POSICIONAL
📹 *Video disponible — ID: 921874753*
EVALUACION POSICIONAL
---
### 8. GLOBAL TECNICO DE LA PIPE
📹 *Video disponible — ID: 921875020*
GLOBAL TECNICO DE LA PIPE
---
### 9. RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA
📹 *Video disponible — ID: 921875302*
RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA
---
### 10. RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO
📹 *Video disponible — ID: 921875519*
RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO
---
### 11. RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO
📹 *Video disponible — ID: 921875778*
RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO
---
### 12. TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS
📹 *Video disponible — ID: 921879520*
COMBINACIONES DE LOS PUNTAS
---
### 13. ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO
📹 *Video disponible — ID: 921879925*
ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO
## Entrenamiento de Armadoras
### 1. ENTRENAMIENTO DE LOS Y LAS ARMADORAS
📹 *Video disponible — ID: 1181188693*
clase en vivo
## Explicación del Trabajo Práctico
### 1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR
📹 *Video disponible — ID: 1181892359*
clase en vivo
---
*Fin del material de estudio. 66 temas extraídos.*
File diff suppressed because one or more lines are too long
@@ -0,0 +1,227 @@
[
{
"text": "Políticas de cookies",
"href": "https://kb.onlineeducation.center/es/cookies/",
"title": ""
},
{
"text": "Políticas de privacidad",
"href": "https://kb.onlineeducation.center/es/privacy/",
"title": ""
},
{
"text": "Términos de uso",
"href": "https://kb.onlineeducation.center/es/terms/",
"title": ""
},
{
"text": "Aceptar",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#agree",
"title": ""
},
{
"text": "",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"title": ""
},
{
"text": "",
"href": "https://voley.onlineeducation.center/es/campus",
"title": "Voley"
},
{
"text": "Elva Karina Saldis",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#",
"title": ""
},
{
"text": "Su cuenta",
"href": "https://account.onlineeducation.center/es/",
"title": ""
},
{
"text": "Configuración regional",
"href": "https://account.onlineeducation.center/es/config?bth=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"title": ""
},
{
"text": "Datos para certificados",
"href": "https://voley.onlineeducation.center/es/campus/student/e/14197/user/account?r=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"title": ""
},
{
"text": "Mesa de ayuda",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/help-desk/tickets",
"title": ""
},
{
"text": "Cerrar sesión",
"href": "https://voley.onlineeducation.center/es/logout",
"title": ""
},
{
"text": "English",
"href": "https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1",
"title": ""
},
{
"text": "Inicio",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197",
"title": ""
},
{
"text": "Información",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/info",
"title": ""
},
{
"text": "Auditorio",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/auditorium/sessions",
"title": ""
},
{
"text": "Material de estudio",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources",
"title": ""
},
{
"text": "Foros",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/forum",
"title": ""
},
{
"text": "Evaluaciones",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#",
"title": ""
},
{
"text": "Trabajos prácticos",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/practice-work",
"title": ""
},
{
"text": "Administración",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"title": ""
},
{
"text": "Calificaciones",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/course-results",
"title": ""
},
{
"text": "Certificaciones",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/certificate/list",
"title": ""
},
{
"text": "Su opinión",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/review/make",
"title": ""
},
{
"text": "Mesa de ayuda",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/help-desk/tickets",
"title": ""
},
{
"text": "Ir a la encuesta",
"href": "https://onlineeducation.center/es/encuesta/modulo/curso-entrenador-nacional-dos-edicion-2022-t-261ca228f64845?email=saldis_karina%40hotmail.com&studentname=Elva%20Karina%20Saldis&editionnumber=5&modulenumber=1",
"title": ""
},
{
"text": "Opinar",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/review/make",
"title": ""
},
{
"text": "Módulo 1",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#collapse1",
"title": ""
},
{
"text": "PLANIFICACION",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list",
"title": ""
},
{
"text": "PREPARACION ATLETICA",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list",
"title": ""
},
{
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list",
"title": ""
},
{
"text": "SEGUIMIENTOS DE EQUIPOS",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list",
"title": ""
},
{
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list",
"title": ""
},
{
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL 2",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list",
"title": ""
},
{
"text": "TRABAJO PRACTICO FINAL DE LA UNIDAD",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list",
"title": ""
},
{
"text": "Módulo 2",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#collapse2",
"title": ""
},
{
"text": "ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"title": ""
},
{
"text": "PUNTAS Y LIBEROS/AS",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list",
"title": ""
},
{
"text": "ENTRENAMIENTO DE LOS Y LAS ARMADORAS",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list",
"title": ""
},
{
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list",
"title": ""
},
{
"text": "Abrir Archivo",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
"title": ""
},
{
"text": "Abrir Archivo",
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
"title": ""
},
{
"text": "Términos de uso",
"href": "https://kb.onlineeducation.center/es/terms/",
"title": ""
},
{
"text": "Política de privacidad",
"href": "https://kb.onlineeducation.center/es/privacy/",
"title": ""
},
{
"text": "Powered by",
"href": "https://onlineeducation.center/",
"title": "powered by Online Education Center"
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

+789
View File
@@ -0,0 +1,789 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Curso de Vóley — Dashboard Offline</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
background: #f4f6f8;
color: #1a1a2e;
line-height: 1.6;
}
.header {
background: linear-gradient(135deg, #004d6c 0%, #00a9b8 100%);
color: white;
padding: 2rem 2rem 1.5rem;
text-align: center;
}
.header h1 { font-size: 1.8rem; margin-bottom: 0.3rem; }
.header p { opacity: 0.9; font-size: 0.95rem; }
.header .stats { display: flex; justify-content: center; gap: 2rem; margin-top: 1rem; flex-wrap: wrap; }
.header .stat { background: rgba(255,255,255,0.15); padding: 0.5rem 1rem; border-radius: 8px; font-size: 0.85rem; }
.container { max-width: 1100px; margin: 0 auto; padding: 1.5rem; }
.modulo-card {
background: white;
border-radius: 12px;
margin-bottom: 1.5rem;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
overflow: hidden;
}
.modulo-header {
background: #004d6c;
color: white;
padding: 1rem 1.5rem;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
transition: background 0.2s;
}
.modulo-header:hover { background: #005f82; }
.modulo-header h2 { font-size: 1.2rem; font-weight: 600; }
.modulo-header .toggle { font-size: 1.2rem; transition: transform 0.3s; }
.modulo-header .toggle.open { transform: rotate(180deg); }
.modulo-body { padding: 0; }
.modulo-body.collapsed { display: none; }
.seccion-card {
border-bottom: 1px solid #eee;
transition: background 0.2s;
}
.seccion-card:last-child { border-bottom: none; }
.seccion-header {
padding: 0.8rem 1.5rem;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
background: #fafafa;
}
.seccion-header:hover { background: #f0f4f8; }
.seccion-header h3 { font-size: 1rem; color: #004d6c; }
.seccion-header .badge-count {
background: #00a9b8;
color: white;
border-radius: 12px;
padding: 0.15rem 0.6rem;
font-size: 0.75rem;
margin-left: 0.5rem;
}
.seccion-content { padding: 1rem 1.5rem; display: none; }
.seccion-content.open { display: block; }
.seccion-content h4 { color: #004d6c; margin: 1rem 0 0.5rem; font-size: 0.95rem; }
.tab-group { display: flex; gap: 0.5rem; margin-bottom: 1rem; flex-wrap: wrap; }
.tab-btn {
padding: 0.4rem 1rem;
border: 1px solid #ddd;
border-radius: 6px;
background: white;
cursor: pointer;
font-size: 0.85rem;
color: #555;
transition: all 0.2s;
}
.tab-btn:hover { border-color: #00a9b8; color: #004d6c; }
.tab-btn.active { background: #00a9b8; color: white; border-color: #00a9b8; }
.tab-panel { display: none; }
.tab-panel.active { display: block; }
.video-list { list-style: none; }
.video-list li {
padding: 0.4rem 0;
border-bottom: 1px solid #f0f0f0;
font-size: 0.9rem;
}
.video-list li:last-child { border-bottom: none; }
.video-list .vimeo-id { color: #00a9b8; font-family: monospace; }
.file-list { list-style: none; }
.file-list li {
padding: 0.3rem 0;
font-size: 0.85rem;
}
.file-list a {
color: #004d6c;
text-decoration: none;
border-bottom: 1px dashed #ccc;
}
.file-list a:hover { border-bottom-color: #004d6c; }
.preview-text {
background: #f9f9f9;
padding: 0.8rem;
border-radius: 8px;
font-size: 0.85rem;
line-height: 1.5;
max-height: 300px;
overflow-y: auto;
white-space: pre-wrap;
font-family: inherit;
}
.preview-text h1 { font-size: 1.1rem; margin: 0.5rem 0; }
.preview-text h2 { font-size: 1rem; margin: 0.5rem 0; }
.preview-text p { margin: 0.3rem 0; }
.vimeo-link {
display: inline-block;
background: #00a9b8;
color: white;
padding: 0.2rem 0.6rem;
border-radius: 4px;
font-size: 0.75rem;
text-decoration: none;
margin-left: 0.5rem;
}
.vimeo-link:hover { background: #008c99; }
.screenshot-img {
max-width: 100%;
border-radius: 8px;
border: 1px solid #ddd;
margin-top: 0.5rem;
cursor: pointer;
transition: opacity 0.2s;
}
.screenshot-img:hover { opacity: 0.9; }
.empty-state { color: #999; font-style: italic; font-size: 0.85rem; padding: 0.5rem 0; }
.footer {
text-align: center;
padding: 2rem;
color: #999;
font-size: 0.8rem;
}
@media (max-width: 600px) {
.header h1 { font-size: 1.3rem; }
.header .stats { gap: 0.8rem; }
.header .stat { font-size: 0.75rem; padding: 0.3rem 0.6rem; }
.container { padding: 0.8rem; }
.modulo-header { padding: 0.8rem 1rem; }
.seccion-header { padding: 0.6rem 1rem; }
.seccion-content { padding: 0.8rem 1rem; }
}
</style>
</head>
<body>
<div class="header">
<h1>🏐 Curso de Entrenador Nacional de Vóley</h1>
<p>Contenido descargado — Navegación offline</p>
<div class="stats">
<div class="stat">📚 2 módulos</div>
<div class="stat">📖 11 secciones</div>
<div class="stat">🎬 42 videos</div>
<div class="stat">📄 32 archivos</div>
</div>
</div>
<div class="container">
<div class="modulo-card">
<div class="modulo-header" onclick="toggleModulo('mod-0')">
<h2>Módulo 1 — Planificación</h2>
<span class="toggle open" id="toggle-mod-0"></span>
</div>
<div class="modulo-body" id="mod-0">
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Planificacion')">
<h3>Planificación <span class="badge-count">13</span></h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Planificacion"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Planificacion">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Planificacion">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Planificacion">🎬 Videos (1)</button>
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Planificacion">📄 Archivos (12)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Planificacion">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Planificacion"><div class="preview-text"><h1>Planificacion</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Planificacion"><ul class="video-list"><li>
<span class="vimeo-id">1170245111</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1170245111" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1170245111"</small>
</li></ul></div>
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Planificacion"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226</code></li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_46541_Abrir_Enlace.bin">archivo_46541_Abrir_Enlace.bin</a> (333.9 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50142_Abrir_Enlace.bin">archivo_50142_Abrir_Enlace.bin</a> (311.7 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50144_Abrir_Enlace.bin">archivo_50144_Abrir_Enlace.bin</a> (312.9 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50145_Abrir_Enlace.bin">archivo_50145_Abrir_Enlace.bin</a> (323.2 KB)</li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Planificacion">
<p><a href="secciones/Modulo_1_Planificacion/Planificacion/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Planificacion/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Preparacion_Atletica')">
<h3>Preparación Atlética <span class="badge-count">19</span></h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Preparacion_Atletica"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Preparacion_Atletica">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Preparacion_Atletica">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Preparacion_Atletica">🎬 Videos (3)</button>
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Preparacion_Atletica">📄 Archivos (16)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Preparacion_Atletica">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Preparacion_Atletica"><div class="preview-text"><h1>Preparacion Atletica</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Preparacion_Atletica"><ul class="video-list"><li>
<span class="vimeo-id">1173231315</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1173231315" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1173231315"</small>
</li><li>
<span class="vimeo-id">1063655414</span>
Video 2
<a class="vimeo-link" href="https://player.vimeo.com/video/1063655414" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1063655414"</small>
</li><li>
<span class="vimeo-id">1063657248</span>
Video 3
<a class="vimeo-link" href="https://player.vimeo.com/video/1063657248" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1063657248"</small>
</li></ul></div>
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Preparacion_Atletica"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238</code></li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50139_Abrir_Enlace.bin">archivo_50139_Abrir_Enlace.bin</a> (337.8 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50140_Abrir_Enlace.bin">archivo_50140_Abrir_Enlace.bin</a> (332.1 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50141_Abrir_Enlace.bin">archivo_50141_Abrir_Enlace.bin</a> (363.5 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50143_Abrir_Enlace.bin">archivo_50143_Abrir_Enlace.bin</a> (322.9 KB)</li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Preparacion_Atletica">
<p><a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Preparacion_Atletica/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Explicacion_TP')">
<h3>Explicación del TP <span class="badge-count">2</span></h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Explicacion_TP"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Explicacion_TP">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Explicacion_TP">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Explicacion_TP">🎬 Videos (1)</button>
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Explicacion_TP">📄 Archivos (1)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Explicacion_TP">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Explicacion_TP"><div class="preview-text"><h1>Explicacion TP</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Explicacion_TP"><ul class="video-list"><li>
<span class="vimeo-id">1173576229</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1173576229" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1173576229"</small>
</li></ul></div>
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Explicacion_TP"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686</code></li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Explicacion_TP">
<p><a href="secciones/Modulo_1_Planificacion/Explicacion_TP/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Explicacion_TP/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Seguimientos_Equipos')">
<h3>Seguimientos de Equipos </h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Seguimientos_Equipos"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Seguimientos_Equipos">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Seguimientos_Equipos">📝 Texto</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Seguimientos_Equipos">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Seguimientos_Equipos"><div class="preview-text"><h1>Seguimientos Equipos</h1>
<br>
<p>Oops! An Error Occurred</p>
<p>The server returned a &quot;500 Internal Server Error&quot;.</p>
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
<br></div></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Seguimientos_Equipos">
<p><a href="secciones/Modulo_1_Planificacion/Seguimientos_Equipos/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Seguimientos_Equipos/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Analisis_Equipos_1')">
<h3>Análisis de Equipos 1 </h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Analisis_Equipos_1"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Analisis_Equipos_1">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_1">📝 Texto</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Analisis_Equipos_1">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_1"><div class="preview-text"><h1>Analisis Equipos 1</h1>
<br>
<p>Oops! An Error Occurred</p>
<p>The server returned a &quot;500 Internal Server Error&quot;.</p>
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
<br></div></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Analisis_Equipos_1">
<p><a href="secciones/Modulo_1_Planificacion/Analisis_Equipos_1/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Analisis_Equipos_1/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Analisis_Equipos_2')">
<h3>Análisis de Equipos 2 </h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Analisis_Equipos_2"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Analisis_Equipos_2">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_2">📝 Texto</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Analisis_Equipos_2">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_2"><div class="preview-text"><h1>Analisis Equipos 2</h1>
<br>
<p>Oops! An Error Occurred</p>
<p>The server returned a &quot;500 Internal Server Error&quot;.</p>
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
<br></div></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Analisis_Equipos_2">
<p><a href="secciones/Modulo_1_Planificacion/Analisis_Equipos_2/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/Analisis_Equipos_2/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-TP_Final_Unidad')">
<h3>TP Final de la Unidad </h3>
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-TP_Final_Unidad"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-TP_Final_Unidad">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-TP_Final_Unidad">📝 Texto</button>
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-TP_Final_Unidad">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-TP_Final_Unidad"><div class="preview-text"><h1>TP Final Unidad</h1>
<br>
<p>Oops! An Error Occurred</p>
<p>The server returned a &quot;500 Internal Server Error&quot;.</p>
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
<br></div></div>
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-TP_Final_Unidad">
<p><a href="secciones/Modulo_1_Planificacion/TP_Final_Unidad/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_1_Planificacion/TP_Final_Unidad/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
</div>
</div>
<div class="modulo-card">
<div class="modulo-header" onclick="toggleModulo('mod-1')">
<h2>Módulo 2 — Entrenamiento</h2>
<span class="toggle open" id="toggle-mod-1"></span>
</div>
<div class="modulo-body" id="mod-1">
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes')">
<h3>Centrales y Opuestos/as <span class="badge-count">25</span></h3>
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">🎬 Videos (23)</button>
<button class="tab-btn" data-tab="archivos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">📄 Archivos (2)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><div class="preview-text"><h1>Centrales y Oponentes</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><ul class="video-list"><li>
<span class="vimeo-id">919369433</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/919369433" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919369433"</small>
</li><li>
<span class="vimeo-id">1179197191</span>
Video 2
<a class="vimeo-link" href="https://player.vimeo.com/video/1179197191" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1179197191"</small>
</li><li>
<span class="vimeo-id">919341704</span>
Video 3
<a class="vimeo-link" href="https://player.vimeo.com/video/919341704" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919341704"</small>
</li><li>
<span class="vimeo-id">919342668</span>
Video 4
<a class="vimeo-link" href="https://player.vimeo.com/video/919342668" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919342668"</small>
</li><li>
<span class="vimeo-id">919346562</span>
Video 5
<a class="vimeo-link" href="https://player.vimeo.com/video/919346562" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919346562"</small>
</li><li>
<span class="vimeo-id">919347866</span>
Video 6
<a class="vimeo-link" href="https://player.vimeo.com/video/919347866" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919347866"</small>
</li><li>
<span class="vimeo-id">919348493</span>
Video 7
<a class="vimeo-link" href="https://player.vimeo.com/video/919348493" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919348493"</small>
</li><li>
<span class="vimeo-id">919351892</span>
Video 8
<a class="vimeo-link" href="https://player.vimeo.com/video/919351892" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919351892"</small>
</li><li>
<span class="vimeo-id">919352848</span>
Video 9
<a class="vimeo-link" href="https://player.vimeo.com/video/919352848" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919352848"</small>
</li><li>
<span class="vimeo-id">919353448</span>
Video 10
<a class="vimeo-link" href="https://player.vimeo.com/video/919353448" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919353448"</small>
</li><li>
<span class="vimeo-id">919354134</span>
Video 11
<a class="vimeo-link" href="https://player.vimeo.com/video/919354134" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919354134"</small>
</li><li>
<span class="vimeo-id">919355668</span>
Video 12
<a class="vimeo-link" href="https://player.vimeo.com/video/919355668" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919355668"</small>
</li><li>
<span class="vimeo-id">919356423</span>
Video 13
<a class="vimeo-link" href="https://player.vimeo.com/video/919356423" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919356423"</small>
</li><li>
<span class="vimeo-id">919357109</span>
Video 14
<a class="vimeo-link" href="https://player.vimeo.com/video/919357109" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919357109"</small>
</li><li>
<span class="vimeo-id">919358607</span>
Video 15
<a class="vimeo-link" href="https://player.vimeo.com/video/919358607" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919358607"</small>
</li><li>
<span class="vimeo-id">919359386</span>
Video 16
<a class="vimeo-link" href="https://player.vimeo.com/video/919359386" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919359386"</small>
</li><li>
<span class="vimeo-id">919359855</span>
Video 17
<a class="vimeo-link" href="https://player.vimeo.com/video/919359855" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919359855"</small>
</li><li>
<span class="vimeo-id">919360318</span>
Video 18
<a class="vimeo-link" href="https://player.vimeo.com/video/919360318" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919360318"</small>
</li><li>
<span class="vimeo-id">919363158</span>
Video 19
<a class="vimeo-link" href="https://player.vimeo.com/video/919363158" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919363158"</small>
</li><li>
<span class="vimeo-id">919363728</span>
Video 20
<a class="vimeo-link" href="https://player.vimeo.com/video/919363728" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919363728"</small>
</li><li>
<span class="vimeo-id">919364522</span>
Video 21
<a class="vimeo-link" href="https://player.vimeo.com/video/919364522" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919364522"</small>
</li><li>
<span class="vimeo-id">919365485</span>
Video 22
<a class="vimeo-link" href="https://player.vimeo.com/video/919365485" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919365485"</small>
</li><li>
<span class="vimeo-id">919366263</span>
Video 23
<a class="vimeo-link" href="https://player.vimeo.com/video/919366263" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919366263"</small>
</li></ul></div>
<div class="tab-panel" id="archivos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961</code></li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">
<p><a href="secciones/Modulo_2_Entrenamiento/Centrales_y_Oponentes/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_2_Entrenamiento/Centrales_y_Oponentes/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Puntas_y_Liberos')">
<h3>Puntas y Liberos/as <span class="badge-count">13</span></h3>
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">🎬 Videos (12)</button>
<button class="tab-btn" data-tab="archivos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">📄 Archivos (1)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><div class="preview-text"><h1>Puntas y Liberos</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><ul class="video-list"><li>
<span class="vimeo-id">1179888270</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1179888270" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1179888270"</small>
</li><li>
<span class="vimeo-id">921876274</span>
Video 2
<a class="vimeo-link" href="https://player.vimeo.com/video/921876274" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921876274"</small>
</li><li>
<span class="vimeo-id">921873304</span>
Video 3
<a class="vimeo-link" href="https://player.vimeo.com/video/921873304" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873304"</small>
</li><li>
<span class="vimeo-id">921873724</span>
Video 4
<a class="vimeo-link" href="https://player.vimeo.com/video/921873724" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873724"</small>
</li><li>
<span class="vimeo-id">921873953</span>
Video 5
<a class="vimeo-link" href="https://player.vimeo.com/video/921873953" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873953"</small>
</li><li>
<span class="vimeo-id">921874753</span>
Video 6
<a class="vimeo-link" href="https://player.vimeo.com/video/921874753" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921874753"</small>
</li><li>
<span class="vimeo-id">921875020</span>
Video 7
<a class="vimeo-link" href="https://player.vimeo.com/video/921875020" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875020"</small>
</li><li>
<span class="vimeo-id">921875302</span>
Video 8
<a class="vimeo-link" href="https://player.vimeo.com/video/921875302" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875302"</small>
</li><li>
<span class="vimeo-id">921875519</span>
Video 9
<a class="vimeo-link" href="https://player.vimeo.com/video/921875519" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875519"</small>
</li><li>
<span class="vimeo-id">921875778</span>
Video 10
<a class="vimeo-link" href="https://player.vimeo.com/video/921875778" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875778"</small>
</li><li>
<span class="vimeo-id">921879520</span>
Video 11
<a class="vimeo-link" href="https://player.vimeo.com/video/921879520" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921879520"</small>
</li><li>
<span class="vimeo-id">921879925</span>
Video 12
<a class="vimeo-link" href="https://player.vimeo.com/video/921879925" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921879925"</small>
</li></ul></div>
<div class="tab-panel" id="archivos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177</code></li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">
<p><a href="secciones/Modulo_2_Entrenamiento/Puntas_y_Liberos/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_2_Entrenamiento/Puntas_y_Liberos/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras')">
<h3>Entrenamiento de Armadoras <span class="badge-count">1</span></h3>
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">🎬 Videos (1)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras"><div class="preview-text"><h1>Entrenamiento Armadoras</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras"><ul class="video-list"><li>
<span class="vimeo-id">1181188693</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1181188693" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1181188693"</small>
</li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">
<p><a href="secciones/Modulo_2_Entrenamiento/Entrenamiento_Armadoras/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_2_Entrenamiento/Entrenamiento_Armadoras/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
<div class="seccion-card">
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Explicacion_TP')">
<h3>Explicación del TP <span class="badge-count">1</span></h3>
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Explicacion_TP"></span>
</div>
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Explicacion_TP">
<div class="tab-group">
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Explicacion_TP">📝 Texto</button>
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Explicacion_TP">🎬 Videos (1)</button>
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Explicacion_TP">🌐 HTML</button>
</div>
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Explicacion_TP"><div class="preview-text"><h1>Explicacion TP</h1>
<br>
<blockquote>Extraído el 2026-05-02</blockquote>
<br>
<p>PLANIFICACION</p>
<p>PREPARACION ATLETICA</p>
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
<p>SEGUIMIENTOS DE EQUIPOS</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
<br></div></div>
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Explicacion_TP"><ul class="video-list"><li>
<span class="vimeo-id">1181892359</span>
Video 1
<a class="vimeo-link" href="https://player.vimeo.com/video/1181892359" target="_blank">▶ Ver online</a>
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1181892359"</small>
</li></ul></div>
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Explicacion_TP">
<p><a href="secciones/Modulo_2_Entrenamiento/Explicacion_TP/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
<iframe src="secciones/Modulo_2_Entrenamiento/Explicacion_TP/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
Generado el 2/5/2026 — Online Education Center · offline dashboard
</div>
<script>
function toggleModulo(id) {
const body = document.getElementById(id);
const toggle = document.getElementById("toggle-" + id);
const isOpen = body.classList.toggle("collapsed");
toggle.classList.toggle("open");
toggle.textContent = isOpen ? "▼" : "▲";
}
function toggleSeccion(id) {
const content = document.getElementById("content-" + id);
const toggle = document.getElementById("toggle-" + id);
const isOpen = content.classList.toggle("open");
toggle.textContent = isOpen ? "▲" : "▼";
}
// Tabs
document.addEventListener("click", function(e) {
const btn = e.target.closest(".tab-btn");
if (!btn) return;
const tabGroup = btn.closest(".tab-group");
tabGroup.querySelectorAll(".tab-btn").forEach(b => b.classList.remove("active"));
btn.classList.add("active");
const tabId = btn.dataset.tab;
const parent = btn.closest(".seccion-content");
parent.querySelectorAll(".tab-panel").forEach(p => p.classList.remove("active"));
document.getElementById(tabId)?.classList.add("active");
});
// Abrir el primer módulo por defecto
document.addEventListener("DOMContentLoaded", function() {
const firstMod = document.querySelector(".modulo-body");
if (firstMod) firstMod.classList.remove("collapsed");
});
</script>
</body>
</html>
@@ -0,0 +1,217 @@
[
{
"type": "pdf-link",
"url": "https://account.onlineeducation.center/es/config?bth=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"text": "Configuración regional"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/e/14197/user/account?r=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"text": "Datos para certificados"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1",
"text": "English"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources",
"text": "Material de estudio"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list",
"text": "PLANIFICACION"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list",
"text": "PREPARACION ATLETICA"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list",
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list",
"text": "SEGUIMIENTOS DE EQUIPOS"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list",
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list",
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL 2"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list",
"text": "TRABAJO PRACTICO FINAL DE LA UNIDAD"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
"text": "ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list",
"text": "PUNTAS Y LIBEROS/AS"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list",
"text": "ENTRENAMIENTO DE LOS Y LAS ARMADORAS"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list",
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
"text": "Abrir Archivo"
},
{
"type": "pdf-link",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
"text": "Abrir Archivo"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919369433?nocache=1777730642",
"title": "https://player.vimeo.com/video/919369433?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/1179197191?nocache=1777730642",
"title": "https://player.vimeo.com/video/1179197191?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919341704?nocache=1777730642",
"title": "https://player.vimeo.com/video/919341704?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919342668?nocache=1777730642",
"title": "https://player.vimeo.com/video/919342668?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919346562?nocache=1777730642",
"title": "https://player.vimeo.com/video/919346562?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919347866?nocache=1777730642",
"title": "https://player.vimeo.com/video/919347866?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919348493?nocache=1777730642",
"title": "https://player.vimeo.com/video/919348493?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919351892?nocache=1777730642",
"title": "https://player.vimeo.com/video/919351892?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919352848?nocache=1777730642",
"title": "https://player.vimeo.com/video/919352848?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919353448?nocache=1777730642",
"title": "https://player.vimeo.com/video/919353448?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919354134?nocache=1777730642",
"title": "https://player.vimeo.com/video/919354134?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919355668?nocache=1777730642",
"title": "https://player.vimeo.com/video/919355668?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919356423?nocache=1777730642",
"title": "https://player.vimeo.com/video/919356423?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919357109?nocache=1777730642",
"title": "https://player.vimeo.com/video/919357109?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919358607?nocache=1777730642",
"title": "https://player.vimeo.com/video/919358607?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919359386?nocache=1777730642",
"title": "https://player.vimeo.com/video/919359386?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919359855?nocache=1777730642",
"title": "https://player.vimeo.com/video/919359855?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919360318?nocache=1777730642",
"title": "https://player.vimeo.com/video/919360318?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919363158?nocache=1777730642",
"title": "https://player.vimeo.com/video/919363158?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919363728?nocache=1777730642",
"title": "https://player.vimeo.com/video/919363728?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919364522?nocache=1777730642",
"title": "https://player.vimeo.com/video/919364522?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919365485?nocache=1777730642",
"title": "https://player.vimeo.com/video/919365485?nocache=1777730642"
},
{
"type": "iframe",
"url": "https://player.vimeo.com/video/919366263?nocache=1777730642",
"title": "https://player.vimeo.com/video/919366263?nocache=1777730642"
},
{
"type": "image",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
},
{
"type": "image",
"url": "https://voley.onlineeducation.center/img/user-default.jpg",
"alt": ""
},
{
"type": "image",
"url": "https://voley.onlineeducation.center/img/oec-logo-grey.png",
"alt": "Online Education Center"
}
]
@@ -0,0 +1,68 @@
[
{
"seccion": "Planificacion",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 10
},
{
"seccion": "Preparacion_Atletica",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 16
},
{
"seccion": "Explicacion_TP",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 3
},
{
"seccion": "Seguimientos_Equipos",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 0
},
{
"seccion": "Analisis_Equipos_1",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 0
},
{
"seccion": "Analisis_Equipos_2",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 0
},
{
"seccion": "TP_Final_Unidad",
"modulo": "Modulo_1_Planificacion",
"ok": true,
"recursos": 0
},
{
"seccion": "Centrales_y_Oponentes",
"modulo": "Modulo_2_Entrenamiento",
"ok": true,
"recursos": 26
},
{
"seccion": "Puntas_y_Liberos",
"modulo": "Modulo_2_Entrenamiento",
"ok": true,
"recursos": 14
},
{
"seccion": "Entrenamiento_Armadoras",
"modulo": "Modulo_2_Entrenamiento",
"ok": true,
"recursos": 2
},
{
"seccion": "Explicacion_TP",
"modulo": "Modulo_2_Entrenamiento",
"ok": true,
"recursos": 2
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

@@ -0,0 +1,5 @@
# Analisis Equipos 1
Oops! An Error Occurred
The server returned a "500 Internal Server Error".
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
@@ -0,0 +1,15 @@
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>An Error Occurred: Internal Server Error</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "500 Internal Server Error".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body></html>
@@ -0,0 +1,5 @@
# Analisis Equipos 2
Oops! An Error Occurred
The server returned a "500 Internal Server Error".
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
@@ -0,0 +1,15 @@
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>An Error Occurred: Internal Server Error</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "500 Internal Server Error".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body></html>
@@ -0,0 +1,11 @@
# Explicacion TP
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
[
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686",
"texto": "Abrir Archivo",
"id": "53173"
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1173576229?nocache=1777731170",
"id": "1173576229",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,12 @@
# Videos - Explicacion TP
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list
## Video Vimeo ID: 1173576229
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1173576229?nocache=1777731170
- **ID**: 1173576229
Para descargar: yt-dlp "https://player.vimeo.com/video/1173576229"
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
# Planificacion
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,62 @@
[
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219",
"texto": "Abrir Archivo",
"id": "50320"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139",
"texto": "Abrir Archivo",
"id": "52903"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221",
"texto": "Abrir Enlace",
"id": "46541"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222",
"texto": "Abrir Archivo",
"id": "46723"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223",
"texto": "Abrir Archivo",
"id": "46724"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224",
"texto": "Abrir Enlace",
"id": "50142"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225",
"texto": "Abrir Enlace",
"id": "50145"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226",
"texto": "Abrir Enlace",
"id": "50144"
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1170245111?nocache=1777731162",
"id": "1170245111",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,12 @@
# Videos - Planificacion
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list
## Video Vimeo ID: 1170245111
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1170245111?nocache=1777731162
- **ID**: 1170245111
Para descargar: yt-dlp "https://player.vimeo.com/video/1170245111"
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
# Preparacion Atletica
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,100 @@
[
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522",
"texto": "Abrir Archivo",
"id": "53012"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648",
"texto": "Abrir Archivo",
"id": "53137"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649",
"texto": "Abrir Archivo",
"id": "53138"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650",
"texto": "Abrir Archivo",
"id": "53139"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229",
"texto": "Abrir Archivo",
"id": "46719"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232",
"texto": "Abrir Archivo",
"id": "50329"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233",
"texto": "Abrir Archivo",
"id": "46726"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234",
"texto": "Abrir Enlace",
"id": "50139"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235",
"texto": "Abrir Archivo",
"id": "46725"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236",
"texto": "Abrir Enlace",
"id": "50140"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237",
"texto": "Abrir Enlace",
"id": "50143"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238",
"texto": "Abrir Enlace",
"id": "50141"
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1173231315?nocache=1777731166",
"id": "1173231315",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1063655414?nocache=1777731166",
"id": "1063655414",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1063657248?nocache=1777731166",
"id": "1063657248",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,28 @@
# Videos - Preparacion Atletica
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list
## Video Vimeo ID: 1173231315
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1173231315?nocache=1777731166
- **ID**: 1173231315
Para descargar: yt-dlp "https://player.vimeo.com/video/1173231315"
## Video Vimeo ID: 1063655414
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1063655414?nocache=1777731166
- **ID**: 1063655414
Para descargar: yt-dlp "https://player.vimeo.com/video/1063655414"
## Video Vimeo ID: 1063657248
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1063657248?nocache=1777731166
- **ID**: 1063657248
Para descargar: yt-dlp "https://player.vimeo.com/video/1063657248"
@@ -0,0 +1,5 @@
# Seguimientos Equipos
Oops! An Error Occurred
The server returned a "500 Internal Server Error".
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
@@ -0,0 +1,15 @@
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>An Error Occurred: Internal Server Error</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "500 Internal Server Error".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body></html>
@@ -0,0 +1,5 @@
# TP Final Unidad
Oops! An Error Occurred
The server returned a "500 Internal Server Error".
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
@@ -0,0 +1,15 @@
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>An Error Occurred: Internal Server Error</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "500 Internal Server Error".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body></html>
@@ -0,0 +1,11 @@
# Centrales y Oponentes
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,180 @@
[
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
"texto": "Abrir Archivo",
"id": "46874"
},
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
"texto": "Abrir Archivo",
"id": "46805"
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919369433?nocache=1777731186",
"id": "919369433",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1179197191?nocache=1777731186",
"id": "1179197191",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919341704?nocache=1777731186",
"id": "919341704",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919342668?nocache=1777731186",
"id": "919342668",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919346562?nocache=1777731186",
"id": "919346562",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919347866?nocache=1777731186",
"id": "919347866",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919348493?nocache=1777731186",
"id": "919348493",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919351892?nocache=1777731186",
"id": "919351892",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919352848?nocache=1777731186",
"id": "919352848",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919353448?nocache=1777731186",
"id": "919353448",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919354134?nocache=1777731186",
"id": "919354134",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919355668?nocache=1777731186",
"id": "919355668",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919356423?nocache=1777731186",
"id": "919356423",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919357109?nocache=1777731186",
"id": "919357109",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919358607?nocache=1777731186",
"id": "919358607",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919359386?nocache=1777731186",
"id": "919359386",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919359855?nocache=1777731186",
"id": "919359855",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919360318?nocache=1777731186",
"id": "919360318",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919363158?nocache=1777731186",
"id": "919363158",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919363728?nocache=1777731186",
"id": "919363728",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919364522?nocache=1777731186",
"id": "919364522",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919365485?nocache=1777731186",
"id": "919365485",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/919366263?nocache=1777731186",
"id": "919366263",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,188 @@
# Videos - Centrales y Oponentes
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
## Video Vimeo ID: 919369433
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919369433?nocache=1777731186
- **ID**: 919369433
Para descargar: yt-dlp "https://player.vimeo.com/video/919369433"
## Video Vimeo ID: 1179197191
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1179197191?nocache=1777731186
- **ID**: 1179197191
Para descargar: yt-dlp "https://player.vimeo.com/video/1179197191"
## Video Vimeo ID: 919341704
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919341704?nocache=1777731186
- **ID**: 919341704
Para descargar: yt-dlp "https://player.vimeo.com/video/919341704"
## Video Vimeo ID: 919342668
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919342668?nocache=1777731186
- **ID**: 919342668
Para descargar: yt-dlp "https://player.vimeo.com/video/919342668"
## Video Vimeo ID: 919346562
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919346562?nocache=1777731186
- **ID**: 919346562
Para descargar: yt-dlp "https://player.vimeo.com/video/919346562"
## Video Vimeo ID: 919347866
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919347866?nocache=1777731186
- **ID**: 919347866
Para descargar: yt-dlp "https://player.vimeo.com/video/919347866"
## Video Vimeo ID: 919348493
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919348493?nocache=1777731186
- **ID**: 919348493
Para descargar: yt-dlp "https://player.vimeo.com/video/919348493"
## Video Vimeo ID: 919351892
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919351892?nocache=1777731186
- **ID**: 919351892
Para descargar: yt-dlp "https://player.vimeo.com/video/919351892"
## Video Vimeo ID: 919352848
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919352848?nocache=1777731186
- **ID**: 919352848
Para descargar: yt-dlp "https://player.vimeo.com/video/919352848"
## Video Vimeo ID: 919353448
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919353448?nocache=1777731186
- **ID**: 919353448
Para descargar: yt-dlp "https://player.vimeo.com/video/919353448"
## Video Vimeo ID: 919354134
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919354134?nocache=1777731186
- **ID**: 919354134
Para descargar: yt-dlp "https://player.vimeo.com/video/919354134"
## Video Vimeo ID: 919355668
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919355668?nocache=1777731186
- **ID**: 919355668
Para descargar: yt-dlp "https://player.vimeo.com/video/919355668"
## Video Vimeo ID: 919356423
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919356423?nocache=1777731186
- **ID**: 919356423
Para descargar: yt-dlp "https://player.vimeo.com/video/919356423"
## Video Vimeo ID: 919357109
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919357109?nocache=1777731186
- **ID**: 919357109
Para descargar: yt-dlp "https://player.vimeo.com/video/919357109"
## Video Vimeo ID: 919358607
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919358607?nocache=1777731186
- **ID**: 919358607
Para descargar: yt-dlp "https://player.vimeo.com/video/919358607"
## Video Vimeo ID: 919359386
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919359386?nocache=1777731186
- **ID**: 919359386
Para descargar: yt-dlp "https://player.vimeo.com/video/919359386"
## Video Vimeo ID: 919359855
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919359855?nocache=1777731186
- **ID**: 919359855
Para descargar: yt-dlp "https://player.vimeo.com/video/919359855"
## Video Vimeo ID: 919360318
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919360318?nocache=1777731186
- **ID**: 919360318
Para descargar: yt-dlp "https://player.vimeo.com/video/919360318"
## Video Vimeo ID: 919363158
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919363158?nocache=1777731186
- **ID**: 919363158
Para descargar: yt-dlp "https://player.vimeo.com/video/919363158"
## Video Vimeo ID: 919363728
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919363728?nocache=1777731186
- **ID**: 919363728
Para descargar: yt-dlp "https://player.vimeo.com/video/919363728"
## Video Vimeo ID: 919364522
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919364522?nocache=1777731186
- **ID**: 919364522
Para descargar: yt-dlp "https://player.vimeo.com/video/919364522"
## Video Vimeo ID: 919365485
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919365485?nocache=1777731186
- **ID**: 919365485
Para descargar: yt-dlp "https://player.vimeo.com/video/919365485"
## Video Vimeo ID: 919366263
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/919366263?nocache=1777731186
- **ID**: 919366263
Para descargar: yt-dlp "https://player.vimeo.com/video/919366263"
@@ -0,0 +1,11 @@
# Entrenamiento Armadoras
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
[
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1181188693?nocache=1777731197",
"id": "1181188693",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,12 @@
# Videos - Entrenamiento Armadoras
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list
## Video Vimeo ID: 1181188693
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1181188693?nocache=1777731197
- **ID**: 1181188693
Para descargar: yt-dlp "https://player.vimeo.com/video/1181188693"
@@ -0,0 +1,11 @@
# Explicacion TP
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
[
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1181892359?nocache=1777731201",
"id": "1181892359",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,12 @@
# Videos - Explicacion TP
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list
## Video Vimeo ID: 1181892359
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1181892359?nocache=1777731201
- **ID**: 1181892359
Para descargar: yt-dlp "https://player.vimeo.com/video/1181892359"
@@ -0,0 +1,11 @@
# Puntas y Liberos
> Extraído el 2026-05-02
PLANIFICACION
PREPARACION ATLETICA
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
SEGUIMIENTOS DE EQUIPOS
ANALISIS DE EQUIPOS DE VOLEIBOL
ANALISIS DE EQUIPOS DE VOLEIBOL 2
TRABAJO PRACTICO FINAL DE LA UNIDAD
File diff suppressed because one or more lines are too long
@@ -0,0 +1,97 @@
[
{
"tipo": "archivo-curso",
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177",
"texto": "Abrir Archivo",
"id": "46926"
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/1179888270?nocache=1777731192",
"id": "1179888270",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921876274?nocache=1777731192",
"id": "921876274",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921873304?nocache=1777731192",
"id": "921873304",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921873724?nocache=1777731192",
"id": "921873724",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921873953?nocache=1777731192",
"id": "921873953",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921874753?nocache=1777731192",
"id": "921874753",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921875020?nocache=1777731192",
"id": "921875020",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921875302?nocache=1777731192",
"id": "921875302",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921875519?nocache=1777731192",
"id": "921875519",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921875778?nocache=1777731192",
"id": "921875778",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921879520?nocache=1777731192",
"id": "921879520",
"titulo": ""
},
{
"tipo": "video-embed",
"plataforma": "Vimeo",
"url": "https://player.vimeo.com/video/921879925?nocache=1777731192",
"id": "921879925",
"titulo": ""
},
{
"tipo": "imagen",
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
"alt": "Voley"
}
]
@@ -0,0 +1,100 @@
# Videos - Puntas y Liberos
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list
## Video Vimeo ID: 1179888270
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/1179888270?nocache=1777731192
- **ID**: 1179888270
Para descargar: yt-dlp "https://player.vimeo.com/video/1179888270"
## Video Vimeo ID: 921876274
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921876274?nocache=1777731192
- **ID**: 921876274
Para descargar: yt-dlp "https://player.vimeo.com/video/921876274"
## Video Vimeo ID: 921873304
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921873304?nocache=1777731192
- **ID**: 921873304
Para descargar: yt-dlp "https://player.vimeo.com/video/921873304"
## Video Vimeo ID: 921873724
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921873724?nocache=1777731192
- **ID**: 921873724
Para descargar: yt-dlp "https://player.vimeo.com/video/921873724"
## Video Vimeo ID: 921873953
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921873953?nocache=1777731192
- **ID**: 921873953
Para descargar: yt-dlp "https://player.vimeo.com/video/921873953"
## Video Vimeo ID: 921874753
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921874753?nocache=1777731192
- **ID**: 921874753
Para descargar: yt-dlp "https://player.vimeo.com/video/921874753"
## Video Vimeo ID: 921875020
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921875020?nocache=1777731192
- **ID**: 921875020
Para descargar: yt-dlp "https://player.vimeo.com/video/921875020"
## Video Vimeo ID: 921875302
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921875302?nocache=1777731192
- **ID**: 921875302
Para descargar: yt-dlp "https://player.vimeo.com/video/921875302"
## Video Vimeo ID: 921875519
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921875519?nocache=1777731192
- **ID**: 921875519
Para descargar: yt-dlp "https://player.vimeo.com/video/921875519"
## Video Vimeo ID: 921875778
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921875778?nocache=1777731192
- **ID**: 921875778
Para descargar: yt-dlp "https://player.vimeo.com/video/921875778"
## Video Vimeo ID: 921879520
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921879520?nocache=1777731192
- **ID**: 921879520
Para descargar: yt-dlp "https://player.vimeo.com/video/921879520"
## Video Vimeo ID: 921879925
- **Plataforma**: Vimeo
- **URL**: https://player.vimeo.com/video/921879925?nocache=1777731192
- **ID**: 921879925
Para descargar: yt-dlp "https://player.vimeo.com/video/921879925"
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/919366263?nocache=1777730695
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1170245111?nocache=1777730716
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1063657248?nocache=1777730720
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/919366263?nocache=1777730650
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1173576229?nocache=1777730724
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1175436659?nocache=1777730727
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/876705933?nocache=1777730732
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1176900332?nocache=1777730740
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/919366263?nocache=1777730743
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/921879925?nocache=1777730751
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1181188693?nocache=1777730755
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/1181892359?nocache=1777730759
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/919366263?nocache=1777730666
Página origen: https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1
@@ -0,0 +1,3 @@
Título:
URL: https://player.vimeo.com/video/919366263?nocache=1777730682
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources
+673
View File
@@ -0,0 +1,673 @@
#!/usr/bin/env node
/**
* Script para descargar el contenido del curso de Voley desde
* Online Education Center usando Playwright.
*
* Versión mejorada: navega directamente a cada sección del curso,
* extrae contenido textual, PDFs, y referencias a videos.
*
* Modo de uso:
* node download_course.mjs
*
* Requisitos:
* - npm install playwright
* - npx playwright install chromium
*
* Para reanudar una descarga interrumpida:
* Simplemente se vuelve a ejecutar, saltea archivos ya existentes.
*/
import { chromium } from "playwright";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const DOWNLOADS_DIR = path.join(__dirname, "descargas");
const CREDENTIALS = {
username: "saldis_karina@hotmail.com",
password: "Martes13#",
};
// Lista de todas las secciones del curso (Módulo 1 y Módulo 2)
const SECCIONES = [
// Módulo 1 (m/19096)
{
modulo: "Modulo_1_Planificacion",
nombre: "Planificacion",
id: "s/34868",
seccion: 34868,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "Preparacion_Atletica",
id: "s/34869",
seccion: 34869,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "Explicacion_TP",
id: "s/34870",
seccion: 34870,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "Seguimientos_Equipos",
id: "s/35523",
seccion: 35523,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "Analisis_Equipos_1",
id: "s/35524",
seccion: 35524,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "Analisis_Equipos_2",
id: "s/35525",
seccion: 35525,
},
{
modulo: "Modulo_1_Planificacion",
nombre: "TP_Final_Unidad",
id: "s/35526",
seccion: 35526,
},
// Módulo 2 (m/19097)
{
modulo: "Modulo_2_Entrenamiento",
nombre: "Centrales_y_Oponentes",
id: "s/35519",
seccion: 35519,
},
{
modulo: "Modulo_2_Entrenamiento",
nombre: "Puntas_y_Liberos",
id: "s/35520",
seccion: 35520,
},
{
modulo: "Modulo_2_Entrenamiento",
nombre: "Entrenamiento_Armadoras",
id: "s/35521",
seccion: 35521,
},
{
modulo: "Modulo_2_Entrenamiento",
nombre: "Explicacion_TP",
id: "s/35522",
seccion: 35522,
},
];
// IDs de los módulos (necesarios para construir las URLs)
const MODULO_1 = "m/19096";
const MODULO_2 = "m/19097";
const CAMPUS_BASE =
"https://voley.onlineeducation.center/es/campus/student/training/e/14197";
// ============================================================
// UTILIDADES
// ============================================================
function ensureDir(dir) {
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
}
function log(msg) {
const ts = new Date().toISOString().replace("T", " ").substring(0, 19);
console.log(`[${ts}] ${msg}`);
}
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
// ============================================================
// DESCARGA DE ARCHIVOS
// ============================================================
/**
* Descarga un archivo desde una URL usando el evento download de Playwright.
* La URL corresponde a un enlace <a href=".../study-resources/{id}/show?me={me_id}">Abrir Archivo</a>
* que inicia una descarga nativa del navegador.
*
* En lugar de navegar con page.goto() (que carga la respuesta como página),
* buscamos el enlace por su href y hacemos click para disparar el evento download.
*/
async function downloadFile(page, url, filepath) {
if (fs.existsSync(filepath)) {
log(` ↺ Ya existe: ${path.basename(filepath)}`);
return filepath;
}
try {
// Buscar el enlace en la página por su URL exacta
const link = page.locator(`a[href="${url}"]`);
const linkCount = await link.count();
if (linkCount === 0) {
throw new Error(`No se encontró el enlace: ${url}`);
}
// Configurar la espera del evento download antes de hacer click
const [download] = await Promise.all([
page.waitForEvent("download", { timeout: 30000 }),
link.first().click(),
]);
// Guardar el archivo descargado
await download.saveAs(filepath);
const suggestedName = download.suggestedFilename();
const sizeKB = (fs.statSync(filepath).size / 1024).toFixed(1);
log(
` ✓ Descargado: ${path.basename(filepath)} (${sizeKB} KB) — original: ${suggestedName || "desconocido"}`,
);
return filepath;
} catch (err) {
log(` ✗ Error descarga: ${err.message}`);
return null;
}
}
/**
* Toma screenshot de la página actual.
*/
async function screenshot(page, name) {
const dir = path.join(DOWNLOADS_DIR, "screenshots");
ensureDir(dir);
const filepath = path.join(dir, name);
await page.screenshot({ path: filepath, fullPage: true });
return filepath;
}
/**
* Extrae el contenido textual de la página como Markdown simple.
*/
async function extractTextAsMarkdown(page, titulo) {
const text = await page.evaluate(() => {
// Intentar extraer el contenido principal
const main = document.querySelector(
"main, .main-content, .content, #content, .panel-body, .tab-content",
);
if (!main) return "";
// Clonar para no modificar el DOM real
const clone = main.cloneNode(true);
// Remover elementos no deseados
clone
.querySelectorAll(
"script, style, nav, footer, header, .btn, .dropdown-menu",
)
.forEach((el) => el.remove());
// Obtener el texto
return clone.innerText.trim();
});
if (!text) return "";
const lines = text.split("\n").filter((l) => l.trim());
const md = [
`# ${titulo}`,
"",
`> Extraído el ${new Date().toISOString().split("T")[0]}`,
"",
...lines.map((l) => l.trim()),
"",
].join("\n");
return md;
}
// ============================================================
// PROCESAR UNA SECCIÓN DEL CURSO
// ============================================================
async function procesarSeccion(page, seccion) {
// Determinar qué módulo le corresponde
const moduloPath = seccion.seccion >= 35519 ? MODULO_2 : MODULO_1;
// URL de la página de recursos de esta sección
const seccionUrl = `${CAMPUS_BASE}/${moduloPath}/${seccion.id}/study-resources/list`;
const subdir = path.join("secciones", seccion.modulo, seccion.nombre);
const dirLocal = path.join(DOWNLOADS_DIR, subdir);
ensureDir(dirLocal);
log(` ── ${seccion.modulo}/${seccion.nombre}`);
try {
await page.goto(seccionUrl, { waitUntil: "networkidle", timeout: 30000 });
await sleep(2000);
// ---- 1. Guardar HTML completo ----
const htmlContent = await page.content();
fs.writeFileSync(path.join(dirLocal, "pagina.html"), htmlContent);
// ---- 2. Extraer texto como Markdown ----
const md = await extractTextAsMarkdown(
page,
seccion.nombre.replace(/_/g, " "),
);
if (md) {
fs.writeFileSync(path.join(dirLocal, "contenido.md"), md);
} else {
// Si no se encontró contenido principal, guardar todo el texto visible
const fullText = await page.evaluate(() =>
document.body.innerText.trim(),
);
if (fullText) {
fs.writeFileSync(
path.join(dirLocal, "contenido.md"),
`# ${seccion.nombre.replace(/_/g, " ")}\n\n${fullText}\n`,
);
}
}
// ---- 3. Buscar recursos en la página ----
const recursos = await page.evaluate((seccionUrlLocal) => {
const items = [];
// Buscar enlaces a recursos/archivos del curso
document.querySelectorAll("a[href]").forEach((el) => {
const href = el.href;
// Enlaces a archivos del curso (study-resources/{id}/show)
if (href.includes("/study-resources/") && href.includes("/show")) {
items.push({
tipo: "archivo-curso",
url: href,
texto: el.textContent.trim(),
id: href.match(/study-resources\/(\d+)\/show/)?.[1] || "",
});
}
// PDFs directos
else if (
href.match(/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)(\?|$)/i)
) {
items.push({
tipo: "documento",
url: href,
texto: el.textContent.trim(),
});
}
// Enlaces de descarga
else if (
href.includes("/download/") ||
href.includes("download=") ||
el.hasAttribute("download")
) {
items.push({
tipo: "descarga",
url: href,
texto: el.textContent.trim(),
});
}
});
// Buscar iframes (videos Vimeo/YouTube embebidos)
document.querySelectorAll("iframe[src]").forEach((el) => {
const src = el.src;
if (
src.includes("vimeo.com") ||
src.includes("youtube.com") ||
src.includes("youtu.be")
) {
const vimeoMatch = src.match(/vimeo\.com\/video\/(\d+)/);
const youtubeMatch = src.match(
/(?:youtube\.com\/embed\/|youtu\.be\/)([a-zA-Z0-9_-]+)/,
);
items.push({
tipo: "video-embed",
plataforma: src.includes("vimeo") ? "Vimeo" : "YouTube",
url: src,
id: vimeoMatch?.[1] || youtubeMatch?.[1] || "",
titulo: el.title || "",
});
}
// Otros iframes (posiblemente contenido útil)
else {
items.push({
tipo: "iframe",
url: src,
titulo: el.title || "",
});
}
});
// Buscar videos directos
document
.querySelectorAll("video[src], video source[src]")
.forEach((el) => {
items.push({
tipo: "video-directo",
url: el.src || el.getAttribute("src") || "",
});
});
// Buscar imágenes relevantes (saltar iconos pequeños)
document.querySelectorAll("img[src]").forEach((el) => {
const src = el.src;
if (
src &&
!src.includes("data:") &&
!src.includes("user-default") &&
!src.includes("logo")
) {
items.push({
tipo: "imagen",
url: src,
alt: el.alt || "",
});
}
});
// Buscar contenido en etiquetas <embed> o <object>
document.querySelectorAll("embed[src], object[data]").forEach((el) => {
const src = el.src || el.getAttribute("data") || "";
if (src) {
items.push({
tipo: "embed",
url: src,
});
}
});
return items;
});
// ---- 4. Guardar JSON de recursos encontrados ----
if (recursos.length > 0) {
fs.writeFileSync(
path.join(dirLocal, "recursos.json"),
JSON.stringify(recursos, null, 2),
);
}
log(
` Recursos: ${recursos.length} (${recursos.filter((r) => r.tipo === "archivo-curso").length} archivos, ${recursos.filter((r) => r.tipo === "video-embed").length} videos)`,
);
// ---- 5. Descargar archivos del curso (PDFs, docs, etc.) ----
// Distinguir entre "Abrir Archivo" (descarga real de archivo) y
// "Abrir Enlace" (página HTML que ya capturamos como pagina.html).
const archivosCurso = recursos.filter((r) => r.tipo === "archivo-curso");
for (let i = 0; i < archivosCurso.length; i++) {
const archivo = archivosCurso[i];
const texto = archivo.texto.toLowerCase();
// Saltar "Abrir Enlace": ya se capturó como HTML en pagina.html
if (texto.includes("abrir enlace")) {
log(
` ↺ Saltando "${archivo.texto}" (${archivo.id}): ya capturado como HTML`,
);
continue;
}
// Solo procesar "Abrir Archivo" (descarga real)
if (!texto.includes("abrir archivo")) {
log(
` ↺ Saltando "${archivo.texto}" (${archivo.id}): tipo de recurso no manejado`,
);
continue;
}
const ext = ".bin"; // placeholder, lo detectaremos del contenido
const filename = `archivo_${archivo.id}_${archivo.texto.replace(/[^a-zA-Z0-9_-]/g, "_").substring(0, 30) || "documento"}${ext}`;
const filepath = path.join(dirLocal, filename);
log(
` Descargando archivo ${i + 1}/${archivosCurso.length}: "${archivo.texto}" (${archivo.id})...`,
);
const result = await downloadFile(page, archivo.url, filepath);
// Clasificar el archivo por su contenido (magic bytes) y renombrar
if (result) {
const stat = fs.statSync(result);
if (stat.size > 0) {
const buffer = fs.readFileSync(result);
let newPath = null;
if (
buffer[0] === 0x25 &&
buffer[1] === 0x50 &&
buffer[2] === 0x44 &&
buffer[3] === 0x46
) {
// Es PDF
newPath = result.replace(/\.bin$/, ".pdf");
fs.renameSync(result, newPath);
log(` ✓ Identificado como PDF: ${path.basename(newPath)}`);
} else if (buffer[0] === 0x50 && buffer[1] === 0x4b) {
// Es ZIP (posiblemente .docx, .xlsx, .pptx)
newPath = result.replace(/\.bin$/, ".zip");
fs.renameSync(result, newPath);
log(
` ⚠ Identificado como ZIP (Office doc?): ${path.basename(newPath)}`,
);
} else if (
buffer[0] === 0x3c || // '<' posible HTML
(buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf) || // BOM UTF-8
buffer.toString("utf8", 0, 100).includes("<!DOCTYPE") ||
buffer.toString("utf8", 0, 100).includes("<html")
) {
// Es HTML (enlace que se abrió como página en lugar de descarga)
newPath = result.replace(/\.bin$/, ".html");
fs.renameSync(result, newPath);
log(
` ⚠ Era HTML (posible "Abrir Enlace"): ${path.basename(newPath)}`,
);
} else {
// Formato desconocido, mantener .bin
log(` ⚠ Formato desconocido: ${path.basename(result)}`);
}
}
}
}
// ---- 6. Guardar referencias a videos ----
const videos = recursos.filter((r) => r.tipo === "video-embed");
if (videos.length > 0) {
let videoMd = `# Videos - ${seccion.nombre.replace(/_/g, " ")}\n\n`;
videoMd += `> Sección: ${seccionUrl}\n\n`;
for (const v of videos) {
videoMd += `## ${v.titulo || `Video ${v.plataforma} ID: ${v.id}`}\n\n`;
videoMd += `- **Plataforma**: ${v.plataforma}\n`;
videoMd += `- **URL**: ${v.url}\n`;
videoMd += `- **ID**: ${v.id}\n\n`;
if (v.plataforma === "Vimeo") {
videoMd += `Para descargar: yt-dlp "https://player.vimeo.com/video/${v.id}"\n\n`;
}
}
fs.writeFileSync(path.join(dirLocal, "videos.md"), videoMd);
}
// ---- 7. Tomar screenshot de referencia ----
await screenshot(page, `${seccion.modulo}_${seccion.nombre}.png`);
log(` ✓ Completado: ${seccion.nombre}`);
return { ok: true, recursos: recursos.length };
} catch (err) {
log(` ✗ Error en sección ${seccion.nombre}: ${err.message}`);
try {
await screenshot(page, `ERROR_${seccion.modulo}_${seccion.nombre}.png`);
} catch (_) {}
return { ok: false, error: err.message };
}
}
// ============================================================
// FUNCIÓN PRINCIPAL
// ============================================================
async function main() {
log("═══════════════════════════════════════════════════════");
log(" DESCARGA DEL CURSO DE VOLEY - Online Education Center");
log("═══════════════════════════════════════════════════════");
log("");
// 1. Login
log("Paso 1: Login en la plataforma...");
const browser = await chromium.launch({
headless: true,
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
const context = await browser.newContext({
viewport: { width: 1280, height: 900 },
locale: "es-AR",
});
const page = await context.newPage();
const sessionFile = path.join(__dirname, "session.json");
let loggedIn = false;
let activeContext = context;
let activePage = page;
try {
if (fs.existsSync(sessionFile)) {
log(" Cargando sesión guardada...");
try {
const sessionContext = await browser.newContext({
storageState: sessionFile,
});
const sessionPage = await sessionContext.newPage();
await sessionPage.goto(CAMPUS_BASE, {
waitUntil: "networkidle",
timeout: 20000,
});
const url = sessionPage.url();
if (url.includes("/campus/")) {
loggedIn = true;
log(" ✓ Sesión recuperada exitosamente");
// Cerrar page/context original, usar los nuevos
await activePage.close();
await activeContext.close();
activePage = sessionPage;
activeContext = sessionContext;
} else {
await sessionPage.close();
await sessionContext.close();
}
} catch (err) {
log(` ⚠ No se pudo reusar sesión: ${err.message}`);
}
}
if (!loggedIn) {
log(" Abriendo página de login...");
await page.goto(
"https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
{ waitUntil: "networkidle", timeout: 30000 },
);
await page.waitForSelector("#login-email", { timeout: 15000 });
await page.fill("#login-email", CREDENTIALS.username);
await page.fill("#login-password", CREDENTIALS.password);
await page.click("#btn-login");
await page.waitForURL("**/campus/**", { timeout: 30000 });
log(" ✓ Login exitoso");
// Guardar sesión para futuras ejecuciones
await activeContext.storageState({ path: sessionFile });
log(" ✓ Sesión guardada en session.json");
}
// 2. Navegar cada sección del curso
log("");
log("Paso 2: Descargando contenido de cada sección...");
log(`Total de secciones: ${SECCIONES.length}`);
log("");
const resultados = [];
for (let i = 0; i < SECCIONES.length; i++) {
log(`[${i + 1}/${SECCIONES.length}] Procesando sección...`);
const resultado = await procesarSeccion(activePage, SECCIONES[i]);
resultados.push({
seccion: SECCIONES[i].nombre,
modulo: SECCIONES[i].modulo,
...resultado,
});
log("");
}
// 3. Resumen final
log("═══════════════════════════════════════════════════════");
log(" RESUMEN DE DESCARGA");
log("═══════════════════════════════════════════════════════");
log("");
log(
` Secciones procesadas: ${resultados.filter((r) => r.ok).length}/${resultados.length}`,
);
log(` Secciones con error: ${resultados.filter((r) => !r.ok).length}`);
log("");
for (const r of resultados) {
const icono = r.ok ? "✓" : "✗";
const detalles = r.ok ? ` (${r.recursos} recursos)` : ` (${r.error})`;
log(` ${icono} ${r.modulo}/${r.seccion}${detalles}`);
}
log("");
log(" Directorio de descarga:");
log(` ${DOWNLOADS_DIR}`);
log("");
log(" Estructura creada:");
log(" secciones/");
log(" Modulo_1_Planificacion/");
for (const sec of SECCIONES.filter(
(s) => s.modulo === "Modulo_1_Planificacion",
)) {
log(
` ${sec.nombre}/ → pagina.html, contenido.md, recursos.json, videos.md, screenshots`,
);
}
log(" Modulo_2_Entrenamiento/");
for (const sec of SECCIONES.filter(
(s) => s.modulo === "Modulo_2_Entrenamiento",
)) {
log(
` ${sec.nombre}/ → pagina.html, contenido.md, recursos.json, videos.md, screenshots`,
);
}
log("");
log(" Para descargar videos de Vimeo:");
log(
' yt-dlp --cookies session.json "https://player.vimeo.com/video/{ID}"',
);
log("");
// Guardar resultados
const reportePath = path.join(DOWNLOADS_DIR, "resultado_descarga.json");
fs.writeFileSync(reportePath, JSON.stringify(resultados, null, 2));
log(` Reporte guardado: resultado_descarga.json`);
log("");
log("═══════════════════════════════════════════════════════");
} catch (err) {
log(`\n✗ ERROR GENERAL: ${err.message}`);
if (err.stack) log(err.stack);
try {
await screenshot(activePage, "ERROR_general.png");
log(" Screenshot guardado");
} catch (_) {}
} finally {
if (activeContext && activeContext !== context) {
await activePage.close().catch(() => {});
await activeContext.close().catch(() => {});
} else {
await page.close().catch(() => {});
await context.close().catch(() => {});
}
await browser.close();
log("Navegador cerrado.");
}
}
main();
File diff suppressed because it is too large Load Diff
+60
View File
@@ -0,0 +1,60 @@
{
"name": "descargar-curso",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "descargar-curso",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"playwright": "^1.59.1"
}
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/playwright": {
"version": "1.59.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz",
"integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==",
"license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.59.1"
},
"bin": {
"playwright": "cli.js"
},
"engines": {
"node": ">=18"
},
"optionalDependencies": {
"fsevents": "2.3.2"
}
},
"node_modules/playwright-core": {
"version": "1.59.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz",
"integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==",
"license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
},
"engines": {
"node": ">=18"
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More