Vous devez être connecté.
#fast-coaching-app{max-width:950px;margin:auto;padding:20px;font-family:Arial,sans-serif}
.fast-header{background:linear-gradient(180deg,#D90429,#a0001c);color:#fff;padding:28px;border-radius:22px;text-align:center;margin-bottom:25px}
.fast-header h1{margin:0;font-size:28px}
.fast-header p{margin:10px 0 20px}
button{border:0;cursor:pointer;border-radius:12px;font-weight:700}
#addSessionBtn{background:#fff;color:#D90429;padding:14px 22px;font-size:16px}
.session{background:#fff;border-radius:18px;box-shadow:0 6px 18px rgba(0,0,0,.12);margin-bottom:20px;overflow:hidden;border:1px solid #eee}
.session-title{padding:18px;background:#f7f7f7;display:flex;gap:10px;align-items:center}
.session-title input{flex:1;font-size:18px;font-weight:700;border:1px solid #ddd;border-radius:10px;padding:10px}
.session-actions{display:flex;gap:8px}
.session-actions button,.add-exercise{background:#D90429;color:#fff;padding:10px 14px}
.session-content{padding:18px}
.add-exercise{margin-bottom:15px}
.exercise-search{display:none;background:#fafafa;padding:15px;border-radius:14px;margin-bottom:15px;border:1px solid #eee}
.exercise-search input{width:100%;padding:12px;border-radius:10px;border:1px solid #ddd}
.search-item{display:flex;align-items:center;gap:12px;padding:10px;border-bottom:1px solid #eee;cursor:pointer}
.search-item img{width:60px;height:60px;object-fit:cover;border-radius:10px;background:#eee}
.exercise-line{display:grid;grid-template-columns:65px 1fr 80px 80px 90px 95px 40px;gap:8px;align-items:center;padding:12px;border:1px solid #eee;border-radius:14px;margin-bottom:10px}
.exercise-line img{width:60px;height:60px;object-fit:cover;border-radius:10px}
.exercise-line input{padding:8px;border:1px solid #ddd;border-radius:8px;width:100%}
.exercise-title{font-weight:700;color:#111;text-decoration:none}
.delete-exercise{background:#333;color:white;padding:8px}
.done{opacity:.45;text-decoration:line-through}
.collapsed .session-content{display:none}
@media(max-width:700px){
.session-title{flex-direction:column;align-items:stretch}
.exercise-line{grid-template-columns:60px 1fr}
.exercise-line input,.exercise-line label,.delete-exercise{grid-column:2}
}
document.addEventListener(“DOMContentLoaded”, function(){
const storageKey = “fast_coaching_sessions_” + window.location.pathname;
const sessionsList = document.getElementById(“sessionsList”);
const addSessionBtn = document.getElementById(“addSessionBtn”);
let sessions = JSON.parse(localStorage.getItem(storageKey) || “[]”);
function save(){
localStorage.setItem(storageKey, JSON.stringify(sessions));
}
function cleanTitle(html){
let div = document.createElement(“div”);
div.innerHTML = html;
return div.textContent || div.innerText || “”;
}
function getPostImage(post){
return new Promise(resolve => {
if(post._embedded && post._embedded[“wp:featuredmedia”] && post._embedded[“wp:featuredmedia”][0]){
let media = post._embedded[“wp:featuredmedia”][0];
if(media.media_details && media.media_details.sizes && media.media_details.sizes.thumbnail){
resolve(media.media_details.sizes.thumbnail.source_url);
return;
}
if(media.source_url){
resolve(media.source_url);
return;
}
}
if(post.featured_media && post.featured_media !== 0){
fetch(“/wp-json/wp/v2/media/” + post.featured_media)
.then(r => r.json())
.then(media => {
if(media.media_details && media.media_details.sizes && media.media_details.sizes.thumbnail){
resolve(media.media_details.sizes.thumbnail.source_url);
} else if(media.source_url){
resolve(media.source_url);
} else {
resolve(“https://fast-coaching.fr/wp-content/uploads/2026/04/ChatGPT-Image-21-avr.-2026-13_34_33.png”);
}
})
.catch(() => {
resolve(“https://fast-coaching.fr/wp-content/uploads/2026/04/ChatGPT-Image-21-avr.-2026-13_34_33.png”);
});
} else {
resolve(“https://fast-coaching.fr/wp-content/uploads/2026/04/ChatGPT-Image-21-avr.-2026-13_34_33.png”);
}
});
}
function render(){
sessionsList.innerHTML = “”;
sessions.forEach((session, sessionIndex) => {
const div = document.createElement(“div”);
div.className = “session ” + (session.collapsed ? “collapsed” : “”);
div.innerHTML = `
`;
div.querySelector(“.session-title input”).addEventListener(“input”, function(){
sessions[sessionIndex].title = this.value;
save();
});
div.querySelector(“.toggleSession”).addEventListener(“click”, function(){
sessions[sessionIndex].collapsed = !sessions[sessionIndex].collapsed;
save();
render();
});
div.querySelector(“.deleteSession”).addEventListener(“click”, function(){
if(confirm(“Supprimer cette séance ?”)){
sessions.splice(sessionIndex, 1);
save();
render();
}
});
const searchBox = div.querySelector(“.exercise-search”);
const searchInput = searchBox.querySelector(“input”);
const resultsBox = searchBox.querySelector(“.search-results”);
div.querySelector(“.add-exercise”).addEventListener(“click”, function(){
searchBox.style.display = “block”;
searchInput.focus();
});
searchInput.addEventListener(“input”, function(){
const q = this.value.trim();
if(q.length res.json())
.then(posts => {
resultsBox.innerHTML = “”;
posts.forEach(post => {
getPostImage(post).then(img => {
const item = document.createElement(“div”);
item.className = “search-item”;
item.innerHTML = `
${cleanTitle(post.title.rendered)}
`;
item.addEventListener(“click”, function(){
sessions[sessionIndex].exercises.push({
title: cleanTitle(post.title.rendered),
image: img,
url: post.link,
masse: “”,
series: “”,
reps: “”,
done: false
});
save();
render();
});
resultsBox.appendChild(item);
});
});
});
});
const exercisesBox = div.querySelector(“.exercises”);
session.exercises.forEach((exo, exoIndex) => {
const line = document.createElement(“div”);
line.className = “exercise-line ” + (exo.done ? “done” : “”);
line.innerHTML = `
${exo.title}
`;
const inputs = line.querySelectorAll(“input”);
inputs[0].addEventListener(“input”, function(){
sessions[sessionIndex].exercises[exoIndex].masse = this.value;
save();
});
inputs[1].addEventListener(“input”, function(){
sessions[sessionIndex].exercises[exoIndex].series = this.value;
save();
});
inputs[2].addEventListener(“input”, function(){
sessions[sessionIndex].exercises[exoIndex].reps = this.value;
save();
});
inputs[3].addEventListener(“change”, function(){
sessions[sessionIndex].exercises[exoIndex].done = this.checked;
save();
render();
});
line.querySelector(“.delete-exercise”).addEventListener(“click”, function(){
sessions[sessionIndex].exercises.splice(exoIndex, 1);
save();
render();
});
exercisesBox.appendChild(line);
});
sessionsList.appendChild(div);
});
}
addSessionBtn.addEventListener(“click”, function(){
const today = new Date().toLocaleDateString(“fr-FR”);
sessions.unshift({
title: “Séance du ” + today,
collapsed: false,
exercises: []
});
save();
render();
});
render();
});