<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Panel de Control - Sistema de Rangos</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
body {
background: linear-gradient(135deg, #0f172a 0%, #581c87 50%, #0f172a 100%);
min-height: 100vh;
}
</style>
</head>
<body>
<div id="app" class="p-6">
<!-- El contenido se cargará aquí -->
</div>
<script>
// Estado de la aplicación
let state = {
ganancias: 785,
mesesTranscurridos: 2,
directosDiamante: 7,
directos7Star: 5,
directosAzul: 3
};
// Función para calcular el estado actual
function calcularEstado() {
if (state.directosAzul >= 3) return "Corona";
if (state.directos7Star >= 5) return "Diamante Azul";
if (state.directosDiamante >= 7) return "Diamante 7★";
if (state.ganancias >= 5000) return "Diamante";
if (state.ganancias >= 3000) return "Platino";
if (state.ganancias >= 1500) return "Oro";
if (state.ganancias >= 500) return "Plata";
return "Iniciando";
}
// Definir las fases
const fases = [
{ nombre: "Plata", meses: "1-2", meta: 500, tipo: "dinero", descripcion: "Mantener membresía activa" },
{ nombre: "Oro (Top)", meses: "3-5", meta: 1500, tipo: "dinero", descripcion: "Aumentar patrocinio" },
{ nombre: "Platino", meses: "6-8", meta: 3000, tipo: "dinero", descripcion: "Mentoría y duplicación" },
{ nombre: "Diamante", meses: "9-12", meta: 5000, tipo: "dinero", descripcion: "Expansión continua" },
{ nombre: "Diamante 7★", meses: "13-18", meta: 7, tipo: "directos", metaTexto: "7 directos Diamante", descripcion: "7 afiliados directos Diamante" },
{ nombre: "Diamante Azul", meses: "19-22", meta: 5, tipo: "directos7", metaTexto: "5 directos 7★", descripcion: "5 afiliados directos 7★" },
{ nombre: "Corona (Nivel 3)", meses: "23-24", meta: 3, tipo: "directosAzul", metaTexto: "3 directos Azul", descripcion: "3 afiliados directos Azul" }
];
// Calcular progreso de cada fase
function calcularProgreso(fase) {
if (fase.tipo === "dinero") {
return Math.min(1, state.ganancias / fase.meta);
} else if (fase.tipo === "directos") {
return Math.min(1, state.directosDiamante / fase.meta);
} else if (fase.tipo === "directos7") {
return Math.min(1, state.directos7Star / fase.meta);
} else if (fase.tipo === "directosAzul") {
return Math.min(1, state.directosAzul / fase.meta);
}
return 0;
}
// Verificar si está completado
function estaCompletado(fase) {
return calcularProgreso(fase) >= 1;
}
// Colores por estado
function getColorEstado(estado) {
const colores = {
"Iniciando": "text-gray-600",
"Plata": "text-gray-400",
"Oro": "text-yellow-500",
"Platino": "text-gray-300",
"Diamante": "text-blue-400",
"Diamante 7★": "text-blue-500",
"Diamante Azul": "text-cyan-400",
"Corona": "text-amber-400"
};
return colores[estado] || "text-gray-600";
}
// Renderizar la aplicación
function render() {
const estadoActual = calcularEstado();
const completados = fases.filter(f => estaCompletado(f)).length;
const progresoGeneral = completados / fases.length;
const html = `
<div class="max-w-7xl mx-auto space-y-6">
<!-- Header -->
<div class="text-center mb-8">
<h1 class="text-4xl font-bold text-white mb-2">
🏆 PANEL DE CONTROL
</h1>
<p class="text-purple-200">Sistema de Seguimiento de Rangos y Metas</p>
</div>
<!-- Panel Principal -->
<div class="grid md:grid-cols-2 gap-6">
<!-- Métricas Actuales -->
<div class="bg-white/10 backdrop-blur-lg rounded-xl p-6 border border-white/20">
<h2 class="text-2xl font-bold text-white mb-6">
📈 Métricas Actuales
</h2>
<div class="space-y-4">
<div>
<label class="text-sm text-purple-200 mb-1 block">Ganancias Actuales ($)</label>
<input
type="number"
id="ganancias"
value="${state.ganancias}"
onchange="updateState('ganancias', this.value)"
class="w-full bg-white/5 border border-white/20 rounded-lg px-4 py-3 text-white text-xl font-bold"
/>
</div>
<div>
<label class="text-sm text-purple-200 mb-1 block">Meses Transcurridos</label>
<input
type="number"
id="mesesTranscurridos"
value="${state.mesesTranscurridos}"
onchange="updateState('mesesTranscurridos', this.value)"
class="w-full bg-white/5 border border-white/20 rounded-lg px-4 py-3 text-white"
/>
</div>
<div>
<label class="text-sm text-purple-200 mb-1 block">Directos Diamante</label>
<input
type="number"
id="directosDiamante"
value="${state.directosDiamante}"
onchange="updateState('directosDiamante', this.value)"
class="w-full bg-white/5 border border-white/20 rounded-lg px-4 py-3 text-white"
/>
</div>
<div>
<label class="text-sm text-purple-200 mb-1 block">Directos 7★</label>
<input
type="number"
id="directos7Star"
value="${state.directos7Star}"
onchange="updateState('directos7Star', this.value)"
class="w-full bg-white/5 border border-white/20 rounded-lg px-4 py-3 text-white"
/>
</div>
<div>
<label class="text-sm text-purple-200 mb-1 block">Directos Azul</label>
<input
type="number"
id="directosAzul"
value="${state.directosAzul}"
onchange="updateState('directosAzul', this.value)"
class="w-full bg-white/5 border border-white/20 rounded-lg px-4 py-3 text-white"
/>
</div>
</div>
</div>
<!-- Estado Actual -->
<div class="bg-white/10 backdrop-blur-lg rounded-xl p-6 border border-white/20">
<h2 class="text-2xl font-bold text-white mb-6">
🎯 Estado Actual
</h2>
<div class="text-center py-8">
<div class="${getColorEstado(estadoActual)} text-6xl font-bold mb-4">
${estadoActual}
</div>
<div class="text-6xl mb-6">🏆</div>
</div>
<div class="space-y-4">
<div>
<div class="flex justify-between text-sm mb-2">
<span class="text-purple-200">Progreso General</span>
<span class="text-white font-bold">${(progresoGeneral * 100).toFixed(0)}%</span>
</div>
<div class="w-full bg-white/10 rounded-full h-4 overflow-hidden">
<div
class="h-full bg-gradient-to-r from-green-400 to-emerald-500 transition-all duration-500"
style="width: ${progresoGeneral * 100}%"
></div>
</div>
</div>
<div class="grid grid-cols-2 gap-4 pt-4">
<div class="bg-white/5 rounded-lg p-3 text-center">
<div class="text-2xl font-bold text-white">${completados}/7</div>
<div class="text-xs text-purple-200">Fases Completadas</div>
</div>
<div class="bg-white/5 rounded-lg p-3 text-center">
<div class="text-2xl font-bold text-white">${state.mesesTranscurridos}</div>
<div class="text-xs text-purple-200">Meses Activos</div>
</div>
</div>
</div>
</div>
</div>
<!-- Tabla de Fases y Metas -->
<div class="bg-white/10 backdrop-blur-lg rounded-xl p-6 border border-white/20">
<h2 class="text-2xl font-bold text-white mb-6">FASES Y METAS</h2>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="border-b border-white/20">
<th class="text-left py-3 px-4 text-purple-200 font-semibold">Hito</th>
<th class="text-center py-3 px-4 text-purple-200 font-semibold">Estado</th>
<th class="text-center py-3 px-4 text-purple-200 font-semibold">Meses</th>
<th class="text-left py-3 px-4 text-purple-200 font-semibold">Meta/Requisito</th>
<th class="text-left py-3 px-4 text-purple-200 font-semibold">Descripción</th>
<th class="text-left py-3 px-4 text-purple-200 font-semibold">Progreso</th>
</tr>
</thead>
<tbody>
${fases.map(fase => {
const progreso = calcularProgreso(fase);
const completado = estaCompletado(fase);
return `
<tr class="border-b border-white/10 hover:bg-white/5 transition-colors">
<td class="py-4 px-4 text-white font-semibold">${fase.nombre}</td>
<td class="py-4 px-4 text-center">
<span class="text-2xl ${completado ? 'text-green-400' : 'text-gray-600'}">
${completado ? '✓' : '○'}
</span>
</td>
<td class="py-4 px-4 text-center text-purple-200">${fase.meses}</td>
<td class="py-4 px-4 text-white">
${fase.tipo === "dinero" ? `$${fase.meta.toLocaleString()}` : fase.metaTexto}
</td>
<td class="py-4 px-4 text-purple-200 text-sm">${fase.descripcion}</td>
<td class="py-4 px-4">
<div class="flex items-center gap-2">
<div class="flex-1 bg-white/10 rounded-full h-2 overflow-hidden">
<div
class="h-full transition-all duration-500 ${completado ? 'bg-green-400' : 'bg-blue-400'}"
style="width: ${progreso * 100}%"
></div>
</div>
<span class="text-white text-sm font-semibold w-12 text-right">
${(progreso * 100).toFixed(0)}%
</span>
</div>
</td>
</tr>
`;
}).join('')}
</tbody>
</table>
</div>
</div>
<!-- Consideraciones -->
<div class="bg-white/10 backdrop-blur-lg rounded-xl p-6 border border-white/20">
<h2 class="text-2xl font-bold text-white mb-6">
🎁 CONSIDERACIONES
</h2>
<div class="grid md:grid-cols-2 gap-4">
<div class="bg-white/5 rounded-lg p-4">
<h3 class="font-bold text-green-400 mb-2">Plan Ganancia Mutua</h3>
<p class="text-purple-200 text-sm">Beneficios compartidos entre todos los niveles</p>
</div>
<div class="bg-white/5 rounded-lg p-4">
<h3 class="font-bold text-blue-400 mb-2">Pionero LATAM</h3>
<p class="text-purple-200 text-sm">Oportunidad única para construir red y liderazgo</p>
</div>
<div class="bg-white/5 rounded-lg p-4">
<h3 class="font-bold text-yellow-400 mb-2">Bajos Costos</h3>
<p class="text-purple-200 text-sm">Recompra mínima $20 USD mensuales</p>
</div>
<div class="bg-white/5 rounded-lg p-4">
<h3 class="font-bold text-pink-400 mb-2">Premios Especiales</h3>
<p class="text-purple-200 text-sm">Viajes, autos y departamentos para altos rangos</p>
</div>
</div>
</div>
</div>
`;
document.getElementById('app').innerHTML = html;
}
// Actualizar estado
function updateState(key, value) {
state[key] = Number(value);
render();
}
// Renderizar por primera vez
render();
</script>
</body>
</html>