// — Data —
const questions = [
{ id: 2, category: «Objetivos», title: «Pasos Pequeños», prompt: «¿Cuáles son los pasos pequeños que necesitas seguir para lograr tu objetivo?», placeholder: «Ej: Practicar 3 veces por semana, buscar tutoriales…» },
{ id: 3, category: «Objetivos», title: «Hábito Diario/Semanal», prompt: «¿Qué hábito diario o semanal necesitas desarrollar para acercarte a tu meta?», placeholder: «Ej: Estudiar 30 mins diarios…» },
{ id: 4, category: «Consistencia», title: «Mantener Constancia», prompt: «¿Cómo puedes mantener la constancia en tus hábitos diarios?», placeholder: «Ej: Usar un calendario, marcar los días…» },
{ id: 5, category: «Visibilidad», title: «Hacerlo Visible», prompt: «¿Cómo puedes hacer que tu nuevo hábito sea imposible de ignorar?», placeholder: «Ej: Dejar el libro en el escritorio…» },
{ id: 6, category: «Motivación», title: «Conexión Placentera», prompt: «¿Cómo puedes conectar este hábito con algo que te guste hacer?», placeholder: «Ej: Escuchar música mientras estudio…» },
{ id: 7, category: «Facilidad», title: «Reducir Esfuerzo», prompt: «¿Cómo puedes reducir el esfuerzo necesario para cumplir con tu nuevo hábito?», placeholder: «Ej: Empezar con solo 5 minutos…» },
{ id: 8, category: «Recompensa», title: «Recompensa Inmediata», prompt: «¿Qué recompensa te puedes dar cuando completes tu nuevo hábito?», placeholder: «Ej: Ver un video, tomar un snack…» },
{ id: 9, category: «Plan B», title: «Días Difíciles», prompt: «¿Cómo puedes modificar el hábito si un día no puedes cumplirlo completamente?», placeholder: «Ej: Versión corta de 10 minutos…» },
{ id: 10, category: «Señal», title: «Recordatorio Claro», prompt: «¿Cómo puedes crear una señal clara que te recuerde hacer el hábito?», placeholder: «Ej: Después de cenar…» },
{ id: 11, category: «Entorno», title: «Diseño del Entorno», prompt: «¿Qué aspecto de tu entorno podrías cambiar para facilitar el hábito?», placeholder: «Ej: Dejar los libros a la vista…» },
{ id: 12, category: «Social», title: «Apoyo Social», prompt: «¿Cómo puedes involucrar a otras personas para que te ayuden?», placeholder: «Ej: Contarle a un amigo, buscar compañero…» },
{ id: 13, category: «Celebración», title: «Pequeños Logros», prompt: «¿Qué pequeño logro podrías celebrar para sentirte motivado?», placeholder: «Ej: Celebrar cada 10 páginas leídas…» },
{ id: 14, category: «Mejora», title: «Evaluar y Ajustar», prompt: «¿Cómo puedes evaluar tu progreso y ajustar tu hábito para mejorarlo?», placeholder: «Ej: Revisar cada domingo…» }
];
const days = [«Lunes», «Martes», «Miércoles», «Jueves», «Viernes», «Sábado», «Domingo»];
const hours = [«16:00», «16:30», «17:00», «17:30», «18:00», «18:30», «19:00», «19:30», «20:00», «20:30», «21:00»];
// — State Management —
const state = {
step: 0,
schedule: {},
answers: {}
};
// Load data
const savedData = localStorage.getItem(‘djaos_plan_data’);
if (savedData) {
const parsed = JSON.parse(savedData);
Object.assign(state, parsed);
}
// — Core Functions —
function init() {
render();
}
function saveData() {
localStorage.setItem(‘djaos_plan_data’, JSON.stringify(state));
}
function setStep(newStep) {
state.step = newStep;
render();
window.scrollTo(0, 0);
}
function updateSchedule(key, value) {
state.schedule[key] = value;
saveData();
}
function updateAnswer(id, value) {
state.answers[id] = value;
saveData();
}
// — Render Views —
function render() {
const container = document.getElementById(‘app-container’);
const stepIndicator = document.getElementById(‘step-indicator’);
// Update Header Indicator
if (state.step > 0 && state.step < 6) {
stepIndicator.innerHTML = `PASO ${state.step} DE 5`;
} else {
stepIndicator.innerHTML = »;
}
if (state.step === 0) container.innerHTML = getWelcomeHTML();
else if (state.step === 1) {
container.innerHTML = getScheduleHTML();
bindScheduleEvents();
}
else if (state.step >= 2 && state.step <= 5) {
const groupIndex = state.step – 2;
let currentQuestions;
if(groupIndex === 0) currentQuestions = questions.slice(0, 3);
else if(groupIndex === 1) currentQuestions = questions.slice(3, 6);
else if(groupIndex === 2) currentQuestions = questions.slice(6, 9);
else currentQuestions = questions.slice(9, 13);
container.innerHTML = getQuestionsHTML(currentQuestions);
bindQuestionEvents(currentQuestions);
}
else if (state.step === 6) container.innerHTML = getSummaryHTML();
}
// — HTML Generators —
function getWelcomeHTML() {
return `
FASE 2: PLANIFICACIÓN
De la meta anual a las acciones diarias. Este es el mapa para tu ejecución.
Organiza tu semana y define tus hábitos.
`;
}
function getScheduleHTML() {
let tableRows = hours.map(hour => {
let cells = days.map(day => {
let key = `${day}-${hour}`;
let val = state.schedule[key] || »;
return `
`;
}
function getSummaryHTML() {
// FIX: Lógica de detección de actividad corregida
const hasSchedule = Object.values(state.schedule).some(val => val && val.trim() !== »);
// FIX: Generar filas de tabla para el resumen en lugar de tarjetas
const scheduleRows = hours.map(hour => {
const cells = days.map(day => {
const val = state.schedule[`${day}-${hour}`] || »;
return `