IMC Intégratif — Analyse & Protocole IMC Intégratif — Analyse & Protocole personnalisé
Médecine intégrative · Nutrition · Protocoles · Recettes · Suivi graphique
Données biométriques
✓ Vos informations ont bien été prises en compte
Métabolisme basal
—
kcal/jour
Morphologie & mensurations
Progression vers l'objectif
Protocole & Recommandations
Outil à visée informative — ne remplace pas un professionnel de santé · OMS · ANSES · HAS · PREDIMED
`;
const pw=window.open('','_blank','width=960,height=760');
if(!pw){alert("Popup bloquée.");return;}
pw.document.open();pw.document.write(doc);pw.document.close();
pw.onload=()=>{pw.focus();pw.print();};
setTimeout(()=>{if(pw&&!pw.closed){pw.focus();pw.print();}},900);
}/* ══ Utilitaires ══ */
function stab(id,btn){
const map={proto:'tp',nutri:'tn',rec:'tr',men:'tm',sci:'ts'};
Object.values(map).forEach(v=>document.getElementById(v).classList.remove('on'));
document.querySelectorAll('.tb').forEach(b=>b.classList.remove('on'));
document.getElementById(map[id]).classList.add('on');btn.classList.add('on');
}
function imcCat(v){
if(v<16.5)return{c:'Dénutrition sévère',col:'#ff6b6b',r:'< 16.5',risk:'Très élevé'};
if(v<18.5)return{c:'Insuffisance pondérale',col:'#ff9944',r:'16.5–18.4',risk:'Élevé'};
if(v<25)return{c:'Poids normal',col:'#4cdd88',r:'18.5–24.9',risk:'Faible'};
if(v<30)return{c:'Surpoids',col:'#f5c842',r:'25–29.9',risk:'Modéré'};
if(v<35)return{c:'Obésité modérée (I)',col:'#ff7733',r:'30–34.9',risk:'Élevé'};
if(v<40)return{c:'Obésité sévère (II)',col:'#ff5050',r:'35–39.9',risk:'Très élevé'};
return{c:'Obésité morbide (III)',col:'#cc2222',r:'≥ 40',risk:'Extrême'};
}
function drawGauge(imc){
['cbg','cnd','clb'].forEach(id=>{document.getElementById(id).innerHTML='';});
const svg=document.getElementById('cdran'),cx=230,cy=210,ro=170,ri=115;
const zones=[{l:'Dénutrition',mn:10,mx:16.5,cl:'#b03030'},{l:'Maigreur',mn:16.5,mx:18.5,cl:'#c97020'},{l:'Normal',mn:18.5,mx:25,cl:'#2e8b50'},{l:'Surpoids',mn:25,mx:30,cl:'#c8a000'},{l:'Obés. I',mn:30,mx:35,cl:'#c05010'},{l:'Obés. II',mn:35,mx:40,cl:'#b02020'},{l:'Obés. III',mn:40,mx:50,cl:'#7a1515'}];
const IMN=10,IMX=50,ia=v=>{const q=(Math.min(Math.max(v,IMN),IMX)-IMN)/(IMX-IMN);return Math.PI+q*Math.PI;},pt=(a,r)=>[cx+r*Math.cos(a),cy+r*Math.sin(a)];
const arc=(a1,a2,R,r2)=>{const[x1,y1]=pt(a1,R),[x2,y2]=pt(a2,R),[x3,y3]=pt(a2,r2),[x4,y4]=pt(a1,r2);const lg=(a2-a1)>Math.PI?1:0;return`M${x1.toFixed(1)},${y1.toFixed(1)} A${R},${R} 0 ${lg},1 ${x2.toFixed(1)},${y2.toFixed(1)} L${x3.toFixed(1)},${y3.toFixed(1)} A${r2},${r2} 0 ${lg},0 ${x4.toFixed(1)},${y4.toFixed(1)} Z`;};
const mkEl=(tag,at)=>{const e=document.createElementNS('http://www.w3.org/2000/svg',tag);Object.entries(at).forEach(([k,v])=>e.setAttribute(k,v));return e;};
const mkT=(txt,x,y,fs,fw,fill,fi)=>{const e=document.createElementNS('http://www.w3.org/2000/svg','text');[['x',x.toFixed(1)],['y',y.toFixed(1)],['text-anchor','middle'],['dominant-baseline','middle'],['font-size',String(fs)],['font-weight',String(fw)],['fill',fill],['font-family','Segoe UI,system-ui,sans-serif']].forEach(([k,v])=>e.setAttribute(k,v));if(fi)e.setAttribute('filter',fi);e.textContent=txt;return e;};
const od=svg.querySelector('defs');if(od)od.remove();
const defs=document.createElementNS('http://www.w3.org/2000/svg','defs');
defs.innerHTML=`
`;
svg.insertBefore(defs,svg.firstChild);
const bg=document.getElementById('cbg'),nd=document.getElementById('cnd'),lb=document.getElementById('clb');
bg.appendChild(mkEl('path',{d:arc(Math.PI,2*Math.PI,ro+1,ri-1),fill:'#060f1e'}));
zones.forEach(z=>{bg.appendChild(mkEl('path',{d:arc(ia(z.mn),ia(z.mx),ro,ri),fill:z.cl,opacity:'0.95'}));});
[16.5,18.5,25,30,35,40].forEach(v=>{const a=ia(v),[x1,y1]=pt(a,ri),[x2,y2]=pt(a,ro);bg.appendChild(mkEl('line',{x1:x1.toFixed(1),y1:y1.toFixed(1),x2:x2.toFixed(1),y2:y2.toFixed(1),stroke:'rgba(0,0,0,0.6)','stroke-width':'1.5'}));});
zones.forEach(z=>{const a1=ia(z.mn),a2=ia(z.mx),ma=(a1+a2)/2,mr=(ro+ri)/2;const[tx,ty]=[cx+mr*Math.cos(ma),cy+mr*Math.sin(ma)];bg.appendChild(mkT(z.l,tx,ty,11,700,'#fff','url(#sh)'));});
[16.5,18.5,25,30,35,40].forEach(v=>{const a=ia(v),[x1,y1]=pt(a,ro+2),[x2,y2]=pt(a,ro+13);lb.appendChild(mkEl('line',{x1:x1.toFixed(1),y1:y1.toFixed(1),x2:x2.toFixed(1),y2:y2.toFixed(1),stroke:'#ffffffd9','stroke-width':'1.2'}));const[lx,ly]=pt(a,ro+25);lb.appendChild(mkT(v,lx,ly,10.5,600,'#ffffffd9'));});
nd.appendChild(mkEl('circle',{cx,cy,r:String(ri-3),fill:'#070d1a',opacity:'0.95'}));
nd.appendChild(mkEl('circle',{cx,cy,r:String(ri-2),fill:'none',stroke:'rgba(245,200,66,.2)','stroke-width':'1'}));
const cat=imcCat(imc),na=ia(imc),[nx,ny]=pt(na,ro-8),[blx,bly]=pt(na+Math.PI/2,13),[brx,bry]=pt(na-Math.PI/2,13);
nd.appendChild(mkEl('polygon',{points:`${nx.toFixed(1)},${ny.toFixed(1)} ${blx.toFixed(1)},${bly.toFixed(1)} ${cx},${cy} ${brx.toFixed(1)},${bry.toFixed(1)}`,fill:cat.col,filter:'url(#sh2)'}));
nd.appendChild(mkEl('circle',{cx,cy,r:'14',fill:cat.col,stroke:'#070d1a','stroke-width':'2.5',filter:'url(#sh2)'}));
nd.appendChild(mkEl('circle',{cx,cy,r:'6',fill:'#070d1a'}));nd.appendChild(mkEl('circle',{cx,cy,r:'3',fill:cat.col}));
nd.appendChild(mkT(imc.toFixed(1),cx,cy+32,28,700,cat.col,'url(#sh2)'));
nd.appendChild(mkT('kg / m²',cx,cy+52,10,400,'#ffffffd9'));
nd.appendChild(mkT(cat.c,cx,cy+68,11,700,cat.col,'url(#sh)'));
}
function initChart(){
if(sch)sch.destroy();
const ctx=document.getElementById('sc').getContext('2d');
const lbs=pts.map(d=>d.dt),vals=pts.map(d=>d.p);
const ds=[{label:'Poids',data:vals,borderColor:'#f5c842',backgroundColor:'rgba(245,200,66,.06)',pointBackgroundColor:'#f5c842',pointBorderColor:'#070d1a',pointBorderWidth:2,pointRadius:5,tension:0.35,fill:true}];
if(ST.obj&&!isNaN(ST.obj))ds.push({label:'Objectif',data:Array(Math.max(vals.length,2)).fill(ST.obj),borderColor:'#4caf7d',borderDash:[6,3],pointRadius:0,fill:false,borderWidth:1.5});
sch=new Chart(ctx,{type:'line',data:{labels:lbs,datasets:ds},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{display:false}},scales:{y:{grid:{color:'rgba(255,255,255,0.04)'},ticks:{color:'#ffffffd9',font:{size:11}},border:{color:'rgba(255,255,255,0.07)'}},x:{grid:{display:false},ticks:{color:'#ffffffd9',font:{size:11},maxRotation:40},border:{color:'rgba(255,255,255,0.07)'}}}}});
}
function addPt(){
const p=parseFloat(document.getElementById('sp').value),d=document.getElementById('sd').value||new Date().toISOString().slice(0,10);
if(!p||isNaN(p)){alert('Entrez un poids valide.');return;}
pts=pts.filter(x=>x.dt!==d);pts.push({dt:d,p});pts.sort((a,b)=>a.dt.localeCompare(b.dt));
document.getElementById('sp').value='';initChart();
}
function resetPts(){pts=ST.p?[{dt:new Date().toISOString().slice(0,10),p:ST.p}]:[];initChart();}
function buildProto(){
const{imc,tdee,gol,p,sex,morph,tt,th}=ST;
const cal={perte:Math.round(tdee-500),maintien:Math.round(tdee),prise:Math.round(tdee+300),sante:Math.round(tdee-200)}[gol];
const prot=Math.round(p*(gol==='prise'?2.0:gol==='perte'?1.8:1.6));
const lip=Math.round(cal*0.30/9),glu=Math.round((cal-prot*4-lip*9)/4);
const pd={perte:{titre:'Perte de poids — Déficit progressif',items:[`Apport :
${cal} kcal/j (déficit ~500 kcal/j)`,`Protéines :
${prot} g/j (1.8 g/kg)`,`Glucides cycliques : +30% entraînement / −20% repos`,`Chrononutrition : fenêtre 10–12h`,`Hydratation :
${(Math.round(p*35/100)/10).toFixed(1)} L/j`,`LISS 3×45 min/sem + HIIT 1×/sem · Muscu 2–3×/sem`],suivi:'Pesée 1×/sem. Réévaluation 4 sem. Objectif −0,5 kg/sem.'},maintien:{titre:'Maintien — Équilibre durable',items:[`Apport :
${cal} kcal/j`,`Macros : P
${prot}g / L
${lip}g / G
${glu}g`,`Régime méditerranéen (PREDIMED 2018)`,`Activité : 150–300 min/sem (OMS 2020)`,`Sommeil 7–9h · Cohérence cardiaque 3×5 min/j`,`Bilan annuel : glycémie, lipides, Vit D`],suivi:'Pesée 1×/mois. Oscillation < ±2 kg.'},prise:{titre:'Prise de masse — Surplus contrôlé',items:[`Surplus :
${cal} kcal/j (+300 kcal/j)`,`Protéines :
${prot} g/j — 4–5 prises/j`,`Glucides anaboliques autour des séances`,`Résistance 4×/sem · Surcharge progressive`,`Sommeil 8–9h · Créatine 3–5 g/j (niv.A)`,`Bioimpédancemétrie 1×/trimestre`],suivi:'+0,5–1 kg/mois. Réduire si prise graisseuse.'},sante:{titre:'Santé optimisée — Médecine intégrative',items:[`Apport :
${cal} kcal/j`,`ω-3/ω-6 < 1:4 · Mg, Zn, Vit D3+K2, B12`,`JI 16:8 si glycémie stable (Levine 2019)`,`Activité mixte : endurance + renforcement`,`Réduction exposome (plastiques, PE)`,`Bilan : microbiote, TSH, cortisol, CRP-us`],suivi:'Bilan trimestriel marqueurs biologiques.'}};
const d=pd[gol];
let h=`
${d.titre}
${d.items.map(i=>`- ${i}
`).join('')}
${d.suivi}
`;
if(morph||(!isNaN(tt)&&tt>0)){const mL={petite:'Petite (gracile)',moyenne:'Moyenne',grosse:'Robuste / athlétique'};const mA={petite:'IMC idéal −1–2 pts vs OMS',moyenne:'Références OMS standard',grosse:'IMC idéal +1–3 pts vs OMS'};const sm=sex==='F'?80:94,se=sex==='F'?88:102;let tl='',rl='';if(!isNaN(tt)&&tt>0){const ts=tt>=se?'⛔ Élevé':tt>=sm?'⚠ Modéré':'✓ Faible';tl=`
Tour de taille : ${tt} cm → ${ts}`;}if(!isNaN(tt)&&tt>0&&!isNaN(th)&&th>0){const rth=(tt/th).toFixed(2),rm=sex==='F'?0.85:0.90;rl=`
Ratio T/H : ${rth} → ${parseFloat(rth)>rm?'⚠ Élevé':'✓ Normal ≤'+rm}`;}h+=`
Analyse morphologique
${morph?`- Ossature : ${mL[morph]} — ${mA[morph]}
`:''}${tl}${rl}
`;}
if(imc>=30)h+=`
⚠ Accompagnement médical
IMC ≥ 30 : suivi spécialisé conseillé (HAS 2023).
`;
document.getElementById('tp').innerHTML=h;
document.getElementById('tn').innerHTML=`
Macronutriments
Protéines
${prot}g
${(prot/p).toFixed(1)} g/kg
Glucides
${glu}g
reste cal.
Total : ${cal} kcal/j · Fibres : 25–35 g/j
`;
let rh='
';
[{n:'Bowl quinoa–saumon',t:'20 min',k:'480 kcal',m:'P:42g L:18g G:35g',d:'Quinoa 80g, saumon 130g, avocat, épinards, vinaigrette citron.'},{n:'Omelette épinards–feta',t:'10 min',k:'310 kcal',m:'P:28g L:20g G:4g',d:"3 œufs, épinards 80g, feta 30g."},{n:'Soupe miso–tofu',t:'15 min',k:'220 kcal',m:'P:18g L:8g G:20g',d:'Dashi, miso blanc, tofu 100g, wakamé.'},{n:'Curry lentilles corail',t:'25 min',k:'380 kcal',m:'P:22g L:10g G:50g',d:'Lentilles corail, lait de coco, curcuma, gingembre.'},{n:'Smoothie récupération',t:'5 min',k:'350 kcal',m:'P:30g L:8g G:40g',d:"Banane, whey 30g, lait d'amande, chia."},{n:'Salade niçoise',t:'15 min',k:'420 kcal',m:'P:35g L:22g G:18g',d:'Thon, haricots verts, tomates, olives, œuf dur.'}].forEach(r=>{rh+=`
${r.n}
⏱ ${r.t}🔥 ${r.k}${r.m}
${r.d}
`;});
document.getElementById('tr').innerHTML=rh+'
';
const md={perte:[{h:'7h00',l:'Petit-déj.',c:'Fromage blanc 0% + myrtilles + avoine · ≈280 kcal'},{h:'10h00',l:'Collation',c:'1 pomme + 15g amandes · ≈130 kcal'},{h:'12h30',l:'Déjeuner',c:'Poulet 120g + riz complet + légumes rôtis · ≈450 kcal'},{h:'16h00',l:'Collation',c:'Yaourt grec + 1 kiwi · ≈130 kcal'},{h:'19h30',l:'Dîner',c:'Poisson vapeur + légumes verts + miso · ≈280 kcal'}],maintien:[{h:'7h30',l:'Petit-déj.',c:'2 œufs + pain complet + ½ avocat · ≈380 kcal'},{h:'10h30',l:'Collation',c:'Fruit + 20g noix · ≈180 kcal'},{h:'12h30',l:'Déjeuner',c:'Bowl quinoa + saumon 130g + crudités · ≈520 kcal'},{h:'16h30',l:'Collation',c:'Smoothie amande + banane + whey · ≈250 kcal'},{h:'19h30',l:'Dîner',c:'Curry lentilles + riz basmati + salade · ≈420 kcal'}],prise:[{h:'7h00',l:'Petit-déj.',c:"4 œufs + avoine 80g + banane + beurre amande · ≈680 kcal"},{h:'10h00',l:'Collation',c:'Whey 30g + lait 300ml + 1 fruit · ≈380 kcal'},{h:'12h30',l:'Déjeuner',c:'Poulet 180g + patate douce 200g · ≈620 kcal'},{h:'15h30',l:'Pré-training',c:'Riz 80g + thon 100g · ≈420 kcal'},{h:'18h30',l:'Post-train.',c:'Whey 40g + banane · ≈320 kcal'},{h:'20h30',l:'Dîner',c:'Viande 150g + légumineuses · ≈450 kcal'}],sante:[{h:'8h00',l:'Petit-déj.',c:'Smoothie vert épinards + pomme + gingembre · ≈280 kcal'},{h:'11h00',l:'Collation',c:'Thé matcha + oléagineux 25g · ≈170 kcal'},{h:'13h00',l:'Déjeuner',c:'Miso + légumes wok + tofu + quinoa 60g · ≈430 kcal'},{h:'16h00',l:'Collation',c:'Infusion curcuma + fruit + chocolat ≥85% · ≈130 kcal'},{h:'19h00',l:'Dîner',c:'Sardines + légumes vapeur + quinoa · ≈380 kcal'}]};
const dm2=md[gol]||md.maintien;const gl={perte:'perte de poids',maintien:'maintien',prise:'prise de masse',sante:'santé optimisée'};
let mh=`
Menu type${gl[gol]} · ~${cal} kcal
`;
dm2.forEach(r=>{mh+=`
`;});
document.getElementById('tm').innerHTML=mh;
document.getElementById('ts').innerHTML=`
Références
- OMS (2004) — Classification IMC
- Mifflin & St Jeor (1990) — Métabolisme basal
- ANSES (2019) — Protéines 0.83–2.0 g/kg
- Levine & Kroemer (2019) — Autophagy. Cell 176(1)
- Lanhers (2017) — Créatine. Eur J Sport Sci
- OMS (2020) — Physical activity guidelines
- HAS (2023) — Obésité adulte
- PREDIMED (2018) — NEJM 378(25)
`;
}