Suivi performance physique – p pp

Vous devez être connecté.

Vous devez être connecté.

Suivi performance physique

Ajoutez vos mesures, suivez votre évolution et préparez votre alimentation semaine par semaine.

Guide des mesures corporelles

Mesures corporelles

Mesure

Suivi alimentation

#fast-suivi-app{ max-width:1100px; margin:0 auto; padding:20px; font-family:Arial,sans-serif; } .fast-suivi-header{ background:linear-gradient(180deg,#D90429,#a0001c); color:white; padding:30px; border-radius:24px; text-align:center; margin-bottom:25px; box-shadow:0 8px 22px rgba(0,0,0,0.15); } .fast-suivi-header h1{ margin:0; font-size:30px; } .fast-suivi-header p{ margin:10px 0 0; } .fast-image-guide{ background:white; padding:15px; border-radius:22px; box-shadow:0 6px 18px rgba(0,0,0,0.10); margin-bottom:25px; } .fast-image-guide img{ width:100%; border-radius:16px; display:block; } .fast-card{ background:white; border-radius:22px; padding:22px; margin-bottom:25px; box-shadow:0 6px 18px rgba(0,0,0,0.10); border:1px solid #eee; } .fast-section-title{ display:flex; justify-content:space-between; gap:12px; align-items:center; flex-wrap:wrap; margin-bottom:18px; } .fast-section-title h2{ margin:0; color:#111; } button{ border:none; cursor:pointer; border-radius:14px; font-weight:700; } #addMeasureColumn, #addFoodWeek, .add-day, .add-meal, .add-food{ background:#D90429; color:white; padding:12px 18px; } .fast-table-scroll{ overflow-x:auto; border-radius:16px; border:1px solid #eee; } #measureTable{ border-collapse:collapse; min-width:760px; width:max-content; } #measureTable th, #measureTable td{ border-bottom:1px solid #eee; padding:12px; text-align:center; min-width:145px; } #measureTable th{ background:#f7f7f7; font-weight:800; } #measureTable input{ width:100%; padding:9px; border:1px solid #ddd; border-radius:10px; text-align:center; } .fixed-col{ position:sticky; left:0; z-index:2; background:#fff !important; min-width:245px !important; text-align:left !important; font-weight:800; box-shadow:4px 0 8px rgba(0,0,0,0.05); } .measure-label{ text-align:left !important; background:white; position:sticky; left:0; z-index:1; min-width:245px !important; font-weight:700; box-shadow:4px 0 8px rgba(0,0,0,0.05); } .date-input{ font-weight:700; } .food-week{ border:1px solid #eee; border-radius:18px; margin-bottom:18px; overflow:hidden; } .food-week-header{ background:#f7f7f7; padding:15px; display:flex; gap:10px; align-items:center; justify-content:space-between; flex-wrap:wrap; } .food-week-header input{ flex:1; min-width:220px; font-size:17px; font-weight:800; padding:10px; border:1px solid #ddd; border-radius:12px; } .week-actions{ display:flex; gap:8px; } .week-actions button{ background:#D90429; color:white; padding:10px 12px; } .food-week-content{ padding:16px; } .food-day{ background:#fafafa; border:1px solid #eee; border-radius:16px; margin-bottom:14px; padding:14px; } .food-day-header{ display:flex; gap:10px; align-items:center; margin-bottom:12px; } .food-day-header input{ flex:1; padding:10px; border:1px solid #ddd; border-radius:12px; font-weight:700; } .delete-btn{ background:#333; color:white; padding:10px 12px; } .food-meal{ background:white; border:1px solid #eee; border-radius:14px; padding:12px; margin-bottom:12px; } .food-meal-header{ display:flex; gap:10px; margin-bottom:10px; } .food-meal-header input{ flex:1; padding:10px; border:1px solid #ddd; border-radius:12px; font-weight:700; } .food-line{ display:grid; grid-template-columns:1fr 100px 100px 40px; gap:8px; margin-bottom:8px; } .food-line input{ padding:9px; border:1px solid #ddd; border-radius:10px; } .collapsed .food-week-content{ display:none; } @media(max-width:700px){ .food-line{ grid-template-columns:1fr; } .fast-suivi-header h1{ font-size:24px; } } document.addEventListener(“DOMContentLoaded”, function(){ const storageKey = “fast_suivi_perf_” + window.location.pathname; const measures = [ “A — Tour d’épaules (cm)”, “B — Tour de poitrine (cm)”, “C — Tour de bras / biceps (cm)”, “D — Tour d’avant-bras (cm)”, “E — Tour du ventre / nombril (cm)”, “F — Tour de taille (cm)”, “G — Poids (kg)”, “H — Taux de masse grasse (%)”, “I — Tour de cuisse (cm)”, “J — Tour de mollet (cm)”, “K — Tour de fessier (cm)”, “L — IMC” ]; let data = JSON.parse(localStorage.getItem(storageKey) || “{}”); if(!data.measureDates){ data.measureDates = []; } if(!data.measureValues){ data.measureValues = {}; } if(!data.foodWeeks){ data.foodWeeks = []; } function save(){ localStorage.setItem(storageKey, JSON.stringify(data)); } function renderMeasures(){ const header = document.getElementById(“measureHeader”); const body = document.getElementById(“measureBody”); header.innerHTML = ‘Mesure‘; body.innerHTML = “”; data.measureDates.forEach(function(date, colIndex){ const th = document.createElement(“th”); th.innerHTML = ”; th.querySelector(“input”).addEventListener(“input”, function(){ data.measureDates[colIndex] = this.value; save(); }); header.appendChild(th); }); measures.forEach(function(label, rowIndex){ const tr = document.createElement(“tr”); tr.innerHTML = ‘‘ + label + ‘‘; data.measureDates.forEach(function(date, colIndex){ const key = rowIndex + “_” + colIndex; const td = document.createElement(“td”); td.innerHTML = ”; td.querySelector(“input”).addEventListener(“input”, function(){ data.measureValues[key] = this.value; save(); }); tr.appendChild(td); }); body.appendChild(tr); }); } document.getElementById(“addMeasureColumn”).addEventListener(“click”, function(){ const today = new Date().toLocaleDateString(“fr-FR”); data.measureDates.unshift(today); const newValues = {}; Object.keys(data.measureValues).forEach(function(key){ const parts = key.split(“_”); const row = parts[0]; const col = parseInt(parts[1],10); newValues[row + “_” + (col + 1)] = data.measureValues[key]; }); data.measureValues = newValues; save(); renderMeasures(); }); function renderFood(){ const box = document.getElementById(“foodWeeks”); box.innerHTML = “”; data.foodWeeks.forEach(function(week, weekIndex){ const weekDiv = document.createElement(“div”); weekDiv.className = “food-week ” + (week.collapsed ? “collapsed” : “”); weekDiv.innerHTML = `
`; weekDiv.querySelector(“.food-week-header input”).addEventListener(“input”, function(){ data.foodWeeks[weekIndex].title = this.value; save(); }); weekDiv.querySelector(“.toggle-week”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].collapsed = !data.foodWeeks[weekIndex].collapsed; save(); renderFood(); }); weekDiv.querySelector(“.delete-week”).addEventListener(“click”, function(){ if(confirm(“Supprimer cette semaine alimentation ?”)){ data.foodWeeks.splice(weekIndex,1); save(); renderFood(); } }); weekDiv.querySelector(“.add-day”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days.unshift({ title:”Nouveau jour”, meals:[] }); save(); renderFood(); }); const daysBox = weekDiv.querySelector(“.days-box”); week.days.forEach(function(day, dayIndex){ const dayDiv = document.createElement(“div”); dayDiv.className = “food-day”; dayDiv.innerHTML = `
`; dayDiv.querySelector(“.food-day-header input”).addEventListener(“input”, function(){ data.foodWeeks[weekIndex].days[dayIndex].title = this.value; save(); }); dayDiv.querySelector(“.delete-day”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days.splice(dayIndex,1); save(); renderFood(); }); dayDiv.querySelector(“.add-meal”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals.push({ title:”Nouveau repas”, foods:[] }); save(); renderFood(); }); const mealsBox = dayDiv.querySelector(“.meals-box”); day.meals.forEach(function(meal, mealIndex){ const mealDiv = document.createElement(“div”); mealDiv.className = “food-meal”; mealDiv.innerHTML = `
`; mealDiv.querySelector(“.food-meal-header input”).addEventListener(“input”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].title = this.value; save(); }); mealDiv.querySelector(“.delete-meal”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals.splice(mealIndex,1); save(); renderFood(); }); mealDiv.querySelector(“.add-food”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].foods.push({ title:””, mass:””, calories:”” }); save(); renderFood(); }); const foodsBox = mealDiv.querySelector(“.foods-box”); meal.foods.forEach(function(food, foodIndex){ const foodLine = document.createElement(“div”); foodLine.className = “food-line”; foodLine.innerHTML = ` `; const inputs = foodLine.querySelectorAll(“input”); inputs[0].addEventListener(“input”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].foods[foodIndex].title = this.value; save(); }); inputs[1].addEventListener(“input”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].foods[foodIndex].mass = this.value; save(); }); inputs[2].addEventListener(“input”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].foods[foodIndex].calories = this.value; save(); }); foodLine.querySelector(“button”).addEventListener(“click”, function(){ data.foodWeeks[weekIndex].days[dayIndex].meals[mealIndex].foods.splice(foodIndex,1); save(); renderFood(); }); foodsBox.appendChild(foodLine); }); mealsBox.appendChild(mealDiv); }); daysBox.appendChild(dayDiv); }); box.appendChild(weekDiv); }); } document.getElementById(“addFoodWeek”).addEventListener(“click”, function(){ const today = new Date().toLocaleDateString(“fr-FR”); data.foodWeeks.unshift({ title:”Semaine du ” + today, collapsed:false, days:[] }); save(); renderFood(); }); renderMeasures(); renderFood(); });
FAST Coaching