{"id":1314,"date":"2025-08-23T11:59:01","date_gmt":"2025-08-23T10:59:01","guid":{"rendered":"https:\/\/protocole-csr.com\/?post_type=download&#038;p=1314"},"modified":"2025-08-23T11:59:02","modified_gmt":"2025-08-23T10:59:02","slug":"fiche-dautoevaluation-sante-apres-50-ans","status":"publish","type":"download","link":"https:\/\/protocole-csr.com\/?download=fiche-dautoevaluation-sante-apres-50-ans","title":{"rendered":"Fiche d\u2019auto\u00e9valuation \u2013 Sant\u00e9 apr\u00e8s 50 ans"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n  <title>Fiche d\u2019auto\u00e9valuation \u2013 Sant\u00e9 apr\u00e8s 50 ans<\/title>\n  <style>\n    :root{\n      --bg:#f7f9fc;--card:#ffffff;--text:#222;--muted:#6b7280;--brand:#2d6a4f;\n      --ok:#16a34a;--warn:#f59e0b;--bad:#dc2626;--info:#0ea5e9;--border:#e5e7eb;\n    }\n    [data-theme=\"dark\"]{\n      --bg:#0f172a;--card:#111827;--text:#f3f4f6;--muted:#9ca3af;--brand:#22c55e;\n      --ok:#22c55e;--warn:#fbbf24;--bad:#f87171;--info:#38bdf8;--border:#1f2937;\n    }\n    *{box-sizing:border-box}\n    body{\n      margin:0; font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Apple Color Emoji\",\"Segoe UI Emoji\";\n      background:var(--bg); color:var(--text); line-height:1.5;\n    }\n    header{\n      position:sticky; top:0; z-index:10; backdrop-filter:saturate(1.2) blur(6px);\n      background:color-mix(in srgb,var(--bg) 80%, transparent);\n      border-bottom:1px solid var(--border);\n    }\n    .wrap{max-width:1100px; margin:0 auto; padding:18px;}\n    h1{margin:0 0 6px; font-size:1.6rem}\n    .subtitle{color:var(--muted); font-size:.95rem}\n    .grid{\n      display:grid; gap:16px; grid-template-columns:repeat(12,1fr);\n    }\n    .card{\n      background:var(--card); border:1px solid var(--border); border-radius:12px; padding:16px;\n      box-shadow:0 1px 2px rgba(0,0,0,.04);\n    }\n    .col-12{grid-column:span 12}\n    .col-6{grid-column:span 6}\n    .col-4{grid-column:span 4}\n    .controls{display:flex; flex-wrap:wrap; gap:8px}\n    button, .btn{\n      border:1px solid var(--border); background:var(--brand); color:white; padding:10px 14px; border-radius:10px;\n      font-weight:600; cursor:pointer; text-decoration:none; display:inline-flex; gap:8px; align-items:center;\n    }\n    button.secondary{background:transparent; color:var(--text)}\n    button.ghost{background:transparent; border-color:var(--border); color:var(--muted)}\n    .row{display:flex; gap:8px; flex-wrap:wrap; align-items:center}\n    label.inline{display:inline-flex; gap:8px; align-items:center; cursor:pointer}\n    .pill{\n      display:inline-flex; align-items:center; gap:6px; padding:6px 10px; border-radius:999px; font-weight:600; font-size:.9rem;\n      border:1px solid var(--border); background:color-mix(in srgb,var(--card) 85%, transparent);\n    }\n    .pill.ok{color:var(--ok); border-color:color-mix(in srgb, var(--ok) 50%, var(--border))}\n    .pill.warn{color:var(--warn); border-color:color-mix(in srgb, var(--warn) 50%, var(--border))}\n    .pill.bad{color:var(--bad); border-color:color-mix(in srgb, var(--bad) 50%, var(--border))}\n    .meter{height:10px; background:#e5e7eb; border-radius:999px; overflow:hidden; border:1px solid var(--border)}\n    [data-theme=\"dark\"] .meter{background:#0b1220}\n    .meter>span{display:block; height:100%; width:0%; background:linear-gradient(90deg,var(--brand),var(--info)); transition:width .25s ease}\n    .q{display:flex; justify-content:space-between; gap:12px; padding:10px 0; border-bottom:1px dashed var(--border)}\n    .q:last-child{border-bottom:none}\n    .q .txt{flex:1}\n    .q .ans{display:flex; gap:12px; align-items:center}\n    .hint{color:var(--muted); font-size:.9rem}\n    .sphere-title{display:flex; justify-content:space-between; align-items:center; gap:12px}\n    .score-box{display:flex; gap:10px; align-items:center}\n    .score-num{font-weight:800}\n    .footnote{font-size:.85rem; color:var(--muted)}\n    .recommend{margin-top:10px; padding:10px; border-radius:10px; border:1px dashed var(--border); background:color-mix(in srgb,var(--card) 90%, transparent)}\n    details summary{cursor:pointer; user-select:none; font-weight:700}\n    .sr-only{position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden}\n    \/* Print *\/\n    @media print{\n      header, .no-print{display:none !important}\n      body{background:#fff}\n      .card{break-inside:avoid}\n    }\n    @media (max-width:900px){.col-6{grid-column:span 12}.col-4{grid-column:span 12}}\n  <\/style>\n<\/head>\n<body data-theme=\"light\">\n  <header>\n    <div class=\"wrap\">\n      <h1>\ud83e\uddec Fiche d\u2019auto\u00e9valuation \u2013 Sant\u00e9 apr\u00e8s 50 ans<\/h1>\n      <div class=\"subtitle\">\u00c9valuez vos habitudes par sph\u00e8re, obtenez un score instantan\u00e9, sauvegardez et exportez votre r\u00e9sultat.<\/div>\n    <\/div>\n  <\/header>\n\n  <main class=\"wrap\">\n    <!-- Profil & actions -->\n    <div class=\"grid\">\n      <section class=\"card col-12\">\n        <div class=\"grid\">\n          <div class=\"col-6\">\n            <h2 style=\"margin-top:0\">\ud83d\udc64 Profil<\/h2>\n            <div class=\"row\">\n              <label class=\"inline\">Nom&nbsp;:\n                <input id=\"userName\" type=\"text\" placeholder=\"Ex. Marie Dupont\" style=\"padding:8px;border:1px solid var(--border);border-radius:8px\"\/>\n              <\/label>\n              <label class=\"inline\">Email&nbsp;:\n                <input id=\"userEmail\" type=\"email\" placeholder=\"facultatif\" style=\"padding:8px;border:1px solid var(--border);border-radius:8px\"\/>\n              <\/label>\n              <label class=\"inline\">ID Profil&nbsp;:\n                <input id=\"profileId\" type=\"text\" placeholder=\"par ex. marie_2025\" style=\"padding:8px;border:1px solid var(--border);border-radius:8px\"\/>\n              <\/label>\n            <\/div>\n            <div class=\"hint\">\ud83d\udca1 Astuce : L\u2019ID sert de cl\u00e9 pour la reprise automatique (ex. <em>prenom_date<\/em>).<\/div>\n          <\/div>\n          <div class=\"col-6\">\n            <h2 style=\"margin-top:0\">\u2699\ufe0f Actions<\/h2>\n            <div class=\"controls no-print\">\n              <button id=\"btnSave\" class=\"secondary\" type=\"button\">\ud83d\udcbe Sauvegarder<\/button>\n              <button id=\"btnLoad\" class=\"secondary\" type=\"button\">\u2934\ufe0f Reprendre<\/button>\n              <button id=\"btnReset\" class=\"ghost\" type=\"button\">\ud83e\uddf9 R\u00e9initialiser<\/button>\n              <button id=\"btnExport\" class=\"secondary\" type=\"button\">\ud83d\udce4 Export JSON<\/button>\n              <label class=\"btn\" style=\"cursor:pointer\">\n                \ud83d\udce5 Import JSON\n                <input id=\"fileImport\" type=\"file\" accept=\"application\/json\" class=\"sr-only\" \/>\n              <\/label>\n              <button id=\"btnPDF\" type=\"button\">\u2b07\ufe0f T\u00e9l\u00e9charger PDF<\/button>\n              <button id=\"btnTheme\" class=\"secondary\" type=\"button\">\ud83c\udf13 Mode sombre<\/button>\n            <\/div>\n            <div id=\"saveStatus\" class=\"hint\">Sauvegarde auto : <strong>activ\u00e9e<\/strong>. Derni\u00e8re sauvegarde : <span id=\"lastSaved\">\u2014<\/span><\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- R\u00e9sum\u00e9 global -->\n      <section class=\"card col-12\" id=\"resumeCard\">\n        <div class=\"sphere-title\">\n          <h2 style=\"margin:0\">\ud83d\udcca R\u00e9sum\u00e9 global<\/h2>\n          <div class=\"score-box\">\n            <span class=\"pill\" id=\"badgeGlobal\">Score global&nbsp;: <span class=\"score-num\" id=\"scoreGlobal\">0<\/span>\/16<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"meter\" aria-label=\"Progression globale\"><span id=\"meterGlobal\"><\/span><\/div>\n        <div class=\"hint\">Interpr\u00e9tation rapide : <strong>14\u201316<\/strong> excellente \u00b7 <strong>10\u201313<\/strong> bon \u00b7 <strong>6\u20139<\/strong> \u00e0 am\u00e9liorer \u00b7 <strong>&lt;6<\/strong> critique<\/div>\n      <\/section>\n\n      <!-- Sph\u00e8re 1 -->\n      <section class=\"card col-6\" data-sphere=\"physique\">\n        <div class=\"sphere-title\">\n          <h3 style=\"margin:0\">\ud83c\udfc3\u200d\u2640\ufe0f Activit\u00e9 physique<\/h3>\n          <span class=\"pill\" id=\"badge-physique\">0\/4<\/span>\n        <\/div>\n        <div class=\"meter\"><span id=\"meter-physique\"><\/span><\/div>\n        <div class=\"q\"><div class=\"txt\">Je pratique \u2265 150 min\/semaine d\u2019endurance (ou 75 min intense)<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"physique-1\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Je fais 2\u20133 s\u00e9ances de renforcement musculaire\/semaine<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"physique-2\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">J\u2019int\u00e8gre des exercices d\u2019\u00e9quilibre\/coordination<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"physique-3\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Je m\u2019\u00e9tire r\u00e9guli\u00e8rement (\u2265 2\u00d7\/semaine)<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"physique-4\"\/><\/div><\/div>\n        <details class=\"recommend\"><summary>\ud83d\udca1 Recommandations<\/summary>\n          <ul>\n            <li>Fractionnez vos 150 minutes en 5 \u00d7 30 min de marche active.<\/li>\n            <li>Renforcement : 8\u201312 reps, 2\u20134 s\u00e9ries, 2\u20133\u00d7\/semaine.<\/li>\n            <li>\u00c9quilibre : tai-chi, yoga, exercices sur un pied.<\/li>\n            <li>\u00c9tirements dynamiques avant \/ statiques apr\u00e8s l\u2019effort.<\/li>\n          <\/ul>\n        <\/details>\n      <\/section>\n\n      <!-- Sph\u00e8re 2 -->\n      <section class=\"card col-6\" data-sphere=\"alimentation\">\n        <div class=\"sphere-title\">\n          <h3 style=\"margin:0\">\ud83e\udd57 Alimentation<\/h3>\n          <span class=\"pill\" id=\"badge-alimentation\">0\/4<\/span>\n        <\/div>\n        <div class=\"meter\"><span id=\"meter-alimentation\"><\/span><\/div>\n        <div class=\"q\"><div class=\"txt\">Apport prot\u00e9ique 1.2\u20131.5 g\/kg\/jour<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"alimentation-1\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Glucides \u00e0 IG bas, peu d\u2019ultra-transform\u00e9s<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"alimentation-2\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">\u2265 5 portions de fruits &#038; l\u00e9gumes\/jour<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"alimentation-3\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Om\u00e9ga\u20113 \/ Vitamine D \/ Magn\u00e9sium si besoin m\u00e9dical<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"alimentation-4\"\/><\/div><\/div>\n        <details class=\"recommend\"><summary>\ud83d\udca1 Recommandations<\/summary>\n          <ul>\n            <li>Assiette : \u00bd l\u00e9gumes, \u00bc prot\u00e9ines, \u00bc f\u00e9culents complets.<\/li>\n            <li>Hydratation 1,5\u20132 L\/jour (plus en \u00e9t\u00e9\/activit\u00e9).<\/li>\n            <li>Fibres : 25\u201335 g\/j (l\u00e9gumineuses, fruits, graines).<\/li>\n          <\/ul>\n        <\/details>\n      <\/section>\n\n      <!-- Sph\u00e8re 3 -->\n      <section class=\"card col-6\" data-sphere=\"sommeil\">\n        <div class=\"sphere-title\">\n          <h3 style=\"margin:0\">\ud83d\ude34 Sommeil &#038; Stress<\/h3>\n          <span class=\"pill\" id=\"badge-sommeil\">0\/4<\/span>\n        <\/div>\n        <div class=\"meter\"><span id=\"meter-sommeil\"><\/span><\/div>\n        <div class=\"q\"><div class=\"txt\">Je dors 7\u20139 h\/nuit, de fa\u00e7on r\u00e9guli\u00e8re<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"sommeil-1\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Routine du soir sans \u00e9crans 60 min avant coucher<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"sommeil-2\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Je pratique une technique anti-stress (respiration, m\u00e9ditation, marche)<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"sommeil-3\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Je maintiens des liens sociaux r\u00e9guliers<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"sommeil-4\"\/><\/div><\/div>\n        <details class=\"recommend\"><summary>\ud83d\udca1 Recommandations<\/summary>\n          <ul>\n            <li>Lumi\u00e8re du matin, heure de lever stable.<\/li>\n            <li>Limiter caf\u00e9ine apr\u00e8s 14h, alcool le soir.<\/li>\n            <li>Respiration 4\u20116 (inspire 4s \/ expire 6s) 5 min.<\/li>\n          <\/ul>\n        <\/details>\n      <\/section>\n\n      <!-- Sph\u00e8re 4 -->\n      <section class=\"card col-6\" data-sphere=\"medical\">\n        <div class=\"sphere-title\">\n          <h3 style=\"margin:0\">\ud83e\ude7a Suivi m\u00e9dical<\/h3>\n          <span class=\"pill\" id=\"badge-medical\">0\/4<\/span>\n        <\/div>\n        <div class=\"meter\"><span id=\"meter-medical\"><\/span><\/div>\n        <div class=\"q\"><div class=\"txt\">Bilan sanguin annuel r\u00e9alis\u00e9<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"medical-1\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">D\u00e9pistages \u00e0 jour (colorectal, prostate, seins, etc.)<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"medical-2\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Suivi tension art\u00e9rielle \/ glyc\u00e9mie \/ lipides<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"medical-3\"\/><\/div><\/div>\n        <div class=\"q\"><div class=\"txt\">Consultation si sympt\u00f4me inhabituel<\/div><div class=\"ans\"><input type=\"checkbox\" data-q=\"medical-4\"\/><\/div><\/div>\n        <details class=\"recommend\"><summary>\ud83d\udca1 Recommandations<\/summary>\n          <ul>\n            <li>V\u00e9rifier le calendrier de d\u00e9pistage avec votre m\u00e9decin.<\/li>\n            <li>Conserver vos r\u00e9sultats (PDF\/num\u00e9rique) pour suivi.<\/li>\n          <\/ul>\n        <\/details>\n      <\/section>\n\n      <!-- Conseils & signature -->\n      <section class=\"card col-12\">\n        <h3 style=\"margin-top:0\">\ud83e\udded Interpr\u00e9tation &#038; Conseils personnalis\u00e9s<\/h3>\n        <div id=\"adviceText\" class=\"recommend\">Compl\u00e9tez la fiche pour afficher des conseils cibl\u00e9s.<\/div>\n        <div class=\"grid\" style=\"margin-top:6px\">\n          <div class=\"col-6\">\n            <label class=\"inline\">Date :\n              <input id=\"dateEval\" type=\"date\" style=\"padding:8px;border:1px solid var(--border);border-radius:8px\"\/>\n            <\/label>\n          <\/div>\n          <div class=\"col-6\">\n            <label class=\"inline\">Signature :\n              <input id=\"signEval\" type=\"text\" placeholder=\"Nom lisible\" style=\"padding:8px;border:1px solid var(--border);border-radius:8px\"\/>\n            <\/label>\n          <\/div>\n        <\/div>\n        <div class=\"footnote\">\u26a0\ufe0f Cette fiche est un outil d\u2019auto\u2011suivi. Elle ne remplace pas un avis m\u00e9dical.<\/div>\n      <\/section>\n    <\/div>\n  <\/main>\n\n  <!-- html2pdf (optionnel). Si non charg\u00e9, on bascule sur window.print() -->\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/html2pdf.js@0.10.1\/dist\/html2pdf.bundle.min.js\"><\/script>\n  <script>\n    (function(){\n      const qs = (s, r=document)=>r.querySelector(s);\n      const qsa = (s, r=document)=>[...r.querySelectorAll(s)];\n      const spheres = [\"physique\",\"alimentation\",\"sommeil\",\"medical\"];\n      const totals = {physique:4, alimentation:4, sommeil:4, medical:4};\n\n      \/\/ Theme toggle\n      const btnTheme = qs('#btnTheme');\n      const root = document.body;\n      btnTheme.addEventListener('click',()=>{\n        root.dataset.theme = root.dataset.theme === 'dark' ? 'light' : 'dark';\n      });\n\n      \/\/ Live scoring\n      function scoreSphere(key){\n        const checks = qsa(`[data-q^=\"${key}-\"]`).filter(inEl=>inEl.checked).length;\n        const pct = Math.round((100*checks)\/totals[key]);\n        qs(`#badge-${key}`).textContent = `${checks}\/${totals[key]}`;\n        const meter = qs(`#meter-${key}`);\n        if(meter) meter.style.width = pct+'%';\n        return checks;\n      }\n\n      function badgeTone(value, max, el){\n        const ratio = value\/max;\n        el.classList.remove('ok','warn','bad');\n        if(ratio >= .875){ el.classList.add('ok'); }\n        else if(ratio >= .625){ el.classList.add('warn'); }\n        else{ el.classList.add('bad'); }\n      }\n\n      function updateGlobal(){\n        let sum=0;\n        spheres.forEach(s=> sum += scoreSphere(s));\n        const max=16;\n        qs('#scoreGlobal').textContent = sum;\n        const pct = Math.round((100*sum)\/max);\n        qs('#meterGlobal').style.width = pct+'%';\n        const badge = qs('#badgeGlobal');\n        badgeTone(sum, max, badge);\n        renderAdvice(sum);\n      }\n\n      \/\/ Advice generator\n      function renderAdvice(sum){\n        const missingBySphere = spheres.map(s=>{\n          const done = qsa(`[data-q^=\"${s}-\"]`).filter(x=>x.checked).length;\n          return {s, miss: totals[s]-done};\n        }).sort((a,b)=>b.miss-a.miss);\n\n        let txt = \"\";\n        if(sum >= 14) {\n          txt = \"\ud83c\udf89 Excellent ! Vous avez mis en place des habitudes solides. Poursuivez la r\u00e9gularit\u00e9 et envisagez des objectifs \u00ab performance sant\u00e9 \u00bb (force, VO\u2082, \u00e9quilibre).\";\n        } else if(sum >= 10){\n          txt = \"\u2705 Bon niveau global. Ciblez 1\u20132 axes d\u2019am\u00e9lioration majeurs au cours des 4 prochaines semaines pour passer un cap.\";\n        } else if(sum >= 6){\n          txt = \"\u26a0\ufe0f Plusieurs leviers faciles \u00e0 actionner. Priorisez l\u2019organisation hebdomadaire (cr\u00e9neaux sport, menus, routine de sommeil).\";\n        } else {\n          txt = \"\ud83d\udea8 Priorit\u00e9 aux fondamentaux : bouger chaque jour, repas simples non transform\u00e9s, heure de coucher fixe et rendez\u2011vous m\u00e9dical de contr\u00f4le.\";\n        }\n\n        const top = missingBySphere.filter(x=>x.miss>0).slice(0,2)\n          .map(x=>{\n            const label = {physique:\"activit\u00e9 physique\", alimentation:\"alimentation\", sommeil:\"sommeil & stress\", medical:\"suivi m\u00e9dical\"}[x.s];\n            return `\u2022 ${label} : ${x.miss} point(s) \u00e0 gagner.`;\n          }).join(\"<br>\");\n\n        qs('#adviceText').innerHTML = `<strong>Analyse rapide :<\/strong> ${txt}<br>${top ? \"<br><em>Vos priorit\u00e9s :<\/em><br>\"+top : \"\"}`;\n      }\n\n      \/\/ Attach events\n      qsa('input[type=\"checkbox\"]').forEach(cb=> cb.addEventListener('change', ()=>{\n        updateGlobal();\n        autoSaveDebounced();\n      }));\n\n      \/\/ Save\/Load (localStorage)\n      const LS_PREFIX = \"eval50_v1_\";\n      function getKey(){\n        const pid = (qs('#profileId').value || \"default\").trim();\n        return LS_PREFIX + pid;\n      }\n      function save(){\n        const data = {\n          name: qs('#userName').value || \"\",\n          email: qs('#userEmail').value || \"\",\n          profileId: qs('#profileId').value || \"\",\n          date: qs('#dateEval').value || \"\",\n          sign: qs('#signEval').value || \"\",\n          checks: qsa('input[type=\"checkbox\"]').map(el=>({k:el.getAttribute('data-q'), v:el.checked})),\n          theme: document.body.dataset.theme || \"light\",\n          ts: new Date().toISOString()\n        };\n        localStorage.setItem(getKey(), JSON.stringify(data));\n        qs('#lastSaved').textContent = new Date().toLocaleString();\n      }\n      function load(){\n        const raw = localStorage.getItem(getKey());\n        if(!raw){ alert(\"Aucune sauvegarde trouv\u00e9e pour cet ID.\"); return; }\n        try{\n          const data = JSON.parse(raw);\n          qs('#userName').value = data.name || \"\";\n          qs('#userEmail').value = data.email || \"\";\n          qs('#profileId').value = data.profileId || qs('#profileId').value;\n          qs('#dateEval').value = data.date || \"\";\n          qs('#signEval').value = data.sign || \"\";\n          if(data.theme){ document.body.dataset.theme = data.theme; }\n          if(Array.isArray(data.checks)){\n            const map = new Map(data.checks.map(x=>[x.k,x.v]));\n            qsa('input[type=\"checkbox\"]').forEach(el=>{\n              const key = el.getAttribute('data-q');\n              if(map.has(key)) el.checked = !!map.get(key);\n            });\n          }\n          updateGlobal();\n          qs('#lastSaved').textContent = data.ts ? new Date(data.ts).toLocaleString() : \"\u2014\";\n        }catch(e){\n          alert(\"Impossible de lire la sauvegarde.\");\n        }\n      }\n      function resetAll(){\n        if(!confirm(\"R\u00e9initialiser toutes les r\u00e9ponses ?\")) return;\n        qsa('input[type=\"checkbox\"]').forEach(el=> el.checked = false);\n        qs('#userName').value = \"\";\n        qs('#userEmail').value = \"\";\n        qs('#dateEval').value = \"\";\n        qs('#signEval').value = \"\";\n        updateGlobal();\n        autoSaveDebounced();\n      }\n\n      \/\/ Debounce autosave\n      let t=null;\n      function autoSaveDebounced(){\n        clearTimeout(t);\n        t = setTimeout(save, 400);\n      }\n      ['userName','userEmail','profileId','dateEval','signEval'].forEach(id=>{\n        qs('#'+id).addEventListener('input', autoSaveDebounced);\n      });\n\n      \/\/ Buttons\n      qs('#btnSave').addEventListener('click', save);\n      qs('#btnLoad').addEventListener('click', load);\n      qs('#btnReset').addEventListener('click', resetAll);\n\n      \/\/ Export \/ Import\n      function download(filename, text){\n        const blob = new Blob([text], {type:'application\/json'});\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url; a.download = filename; a.click();\n        URL.revokeObjectURL(url);\n      }\n      qs('#btnExport').addEventListener('click', ()=>{\n        const key = getKey();\n        const raw = localStorage.getItem(key);\n        if(!raw){ save(); }\n        const out = localStorage.getItem(key);\n        download(`auto-evaluation-${(qs('#profileId').value||'profil')}.json`, out || \"{}\");\n      });\n      qs('#fileImport').addEventListener('change', (e)=>{\n        const file = e.target.files[0];\n        if(!file) return;\n        const reader = new FileReader();\n        reader.onload = function(){\n          try{\n            const data = JSON.parse(reader.result);\n            \/\/ Import direct dans le profil courant\n            localStorage.setItem(getKey(), JSON.stringify(data));\n            load();\n          }catch(err){ alert(\"Fichier invalide.\"); }\n        };\n        reader.readAsText(file);\n      });\n\n      \/\/ PDF\n      qs('#btnPDF').addEventListener('click', ()=>{\n        const el = document.body;\n        const opt = {\n          margin:       10,\n          filename:     `auto-evaluation-50+-${(qs('#profileId').value||'profil')}.pdf`,\n          image:        { type: 'jpeg', quality: 0.98 },\n          html2canvas:  { scale: 2, useCORS: true },\n          jsPDF:        { unit: 'mm', format: 'a4', orientation: 'portrait' },\n          pagebreak:    { mode: ['css','legacy'] }\n        };\n        if(window.html2pdf){\n          html2pdf().set(opt).from(el).save();\n        } else {\n          window.print(); \/\/ Repli natif\n        }\n      });\n\n      \/\/ Init\n      (function init(){\n        \/\/ Pr\u00e9remplir la date du jour\n        const d = new Date();\n        const iso = d.toISOString().slice(0,10);\n        qs('#dateEval').value = iso;\n        updateGlobal();\n        \/\/ Si un profil ID est pr\u00e9sent et une sauvegarde existe, proposer reprise\n        const tryLoad = () => {\n          const k = getKey();\n          if(localStorage.getItem(k)){\n            if(confirm(\"Reprendre la derni\u00e8re sauvegarde du profil courant ?\")) load();\n          }\n        };\n        \/\/ Essai diff\u00e9r\u00e9 pour laisser l\u2019utilisateur saisir l\u2019ID s\u2019il veut\n        setTimeout(tryLoad, 600);\n      })();\n    })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Fiche d\u2019auto\u00e9valuation \u2013 Sant\u00e9 apr\u00e8s 50 ans \ud83e\uddec Fiche d\u2019auto\u00e9valuation \u2013 Sant\u00e9 apr\u00e8s 50 ans \u00c9valuez vos habitudes par sph\u00e8re, obtenez un score instantan\u00e9, sauvegardez et exportez votre r\u00e9sultat. \ud83d\udc64 Profil Nom&nbsp;: Email&nbsp;: ID Profil&nbsp;: \ud83d\udca1 Astuce : L\u2019ID sert de cl\u00e9 pour la reprise automatique (ex. prenom_date). \u2699\ufe0f Actions \ud83d\udcbe Sauvegarder \u2934\ufe0f Reprendre \ud83e\uddf9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"template":"","edd-categories":[],"edd-tags":[],"class_list":["post-1314","download","type-download","status-publish","hentry","edd-download"],"blocksy_meta":[],"aioseo_notices":[],"acf":[],"_links":{"self":[{"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/edd-downloads\/1314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/edd-downloads"}],"about":[{"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/types\/download"}],"author":[{"embeddable":true,"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"version-history":[{"count":1,"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/edd-downloads\/1314\/revisions"}],"predecessor-version":[{"id":1316,"href":"https:\/\/protocole-csr.com\/index.php?rest_route=\/wp\/v2\/edd-downloads\/1314\/revisions\/1316"}],"wp:attachment":[{"href":"https:\/\/protocole-csr.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1314"}],"wp:term":[{"taxonomy":"download_category","embeddable":true,"href":"https:\/\/protocole-csr.com\/index.php?rest_route=%2Fwp%2Fv2%2Fedd-categories&post=1314"},{"taxonomy":"download_tag","embeddable":true,"href":"https:\/\/protocole-csr.com\/index.php?rest_route=%2Fwp%2Fv2%2Fedd-tags&post=1314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}