{"id":5414,"date":"2026-03-27T04:34:49","date_gmt":"2026-03-27T04:34:49","guid":{"rendered":"https:\/\/prathaminternational.org\/plan-du-site-pi\/"},"modified":"2026-03-27T04:43:38","modified_gmt":"2026-03-27T04:43:38","slug":"plan-du-site-pi","status":"publish","type":"page","link":"https:\/\/prathaminternational.org\/fr\/plan-du-site-pi\/","title":{"rendered":"Plan du site PI"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5414\" class=\"elementor elementor-5414 elementor-5412\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ccc0fe3 e-flex e-con-boxed e-con e-parent\" data-id=\"ccc0fe3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8101b0c elementor-widget elementor-widget-spacer\" data-id=\"8101b0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e4584e elementor-widget elementor-widget-heading\" data-id=\"6e4584e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2026 Plan du site<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d874458 elementor-widget elementor-widget-html\" data-id=\"d874458\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div>\n\n\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Pratham International - Constructeur de plan du site<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display&amp;family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --bg: #f5f4f0;\n  --surface: #ffffff;\n  --border: #e2e0d8;\n  --border2: #ccc9be;\n  --ink: #1c1c1a;\n  --mute: #6b6b66;\n  --hint: #9c9a92;\n  --accent: #1A5C38;\n  --accent-light: #d6efe0;\n  --danger: #c0392b;\n  --radius: 10px;\n  --shadow: 0 2px 16px rgba(0,0,0,0.08);\n}\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nbody {\n  font-family: 'DM Sans', sans-serif;\n  background: var(--bg);\n  color: var(--ink);\n  min-height: 100vh;\n  font-size: 14px;\n  line-height: 1.5;\n}\n\n\/* \u2500\u2500 LAYOUT \u2500\u2500 *\/\n.app { display: grid; grid-template-rows: auto 1fr; min-height: 100vh; }\n\n.topbar {\n  background: var(--accent);\n  padding: 14px 24px;\n  display: flex; align-items: center; justify-content: space-between;\n  gap: 16px; flex-wrap: wrap;\n}\n.topbar-left { display: flex; align-items: center; gap: 12px; }\n.topbar h1 {\n  font-family: 'DM Serif Display', serif;\n  font-size: 18px; font-weight: 400;\n  color: #fff; letter-spacing: -0.2px;\n}\n.topbar-badge {\n  background: rgba(255,255,255,0.15);\n  color: rgba(255,255,255,0.85);\n  font-size: 10px; font-weight: 500;\n  padding: 3px 8px; border-radius: 99px;\n  letter-spacing: 0.4px;\n}\n.sync-status {\n  font-size: 11px; font-weight: 500;\n  padding: 4px 10px; border-radius: 99px;\n  display: flex; align-items: center; gap: 5px;\n  transition: all 0.3s;\n}\n.sync-status.saved    { background: rgba(255,255,255,0.15); color: rgba(255,255,255,0.85); }\n.sync-status.saving   { background: rgba(255,255,255,0.10); color: rgba(255,255,255,0.6);  }\n.sync-status.error    { background: rgba(220,50,50,0.3);    color: #ffdddd; }\n.sync-status.loading  { background: rgba(255,255,255,0.10); color: rgba(255,255,255,0.6);  }\n.sync-dot {\n  width: 6px; height: 6px; border-radius: 50%;\n  background: currentColor; flex-shrink: 0;\n}\n.sync-dot.pulse { animation: pulse 1.2s infinite; }\n@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.3} }\n.topbar-actions { display: flex; gap: 8px; }\n.btn {\n  font-family: 'DM Sans', sans-serif;\n  font-size: 12px; font-weight: 500;\n  padding: 7px 14px; border-radius: 7px;\n  border: none; cursor: pointer;\n  transition: all 0.15s;\n  display: flex; align-items: center; gap: 5px;\n}\n.btn-ghost { background: rgba(255,255,255,0.15); color: #fff; }\n.btn-ghost:hover { background: rgba(255,255,255,0.25); }\n.btn-white { background: #fff; color: var(--accent); }\n.btn-white:hover { background: var(--accent-light); }\n.btn-danger { background: #fdecea; color: var(--danger); }\n.btn-danger:hover { background: #f7c1c1; }\n.btn-sm { padding: 5px 10px; font-size: 11px; }\n\n.main { display: grid; grid-template-columns: 1fr; overflow: hidden; }\n\n\/* \u2500\u2500 EDITOR AREA \u2500\u2500 *\/\n.editor-wrap {\n  padding: 24px;\n  overflow-y: auto;\n}\n\n\/* Home row *\/\n.home-row {\n  display: flex; align-items: center; gap: 12px;\n  margin-bottom: 24px;\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: var(--radius);\n  padding: 14px 18px;\n  box-shadow: var(--shadow);\n}\n.home-row label { font-size: 11px; font-weight: 600; color: var(--mute); text-transform: uppercase; letter-spacing: 0.6px; white-space: nowrap; }\n.home-row input {\n  flex: 1; border: 1.5px solid var(--border);\n  border-radius: 7px; padding: 7px 12px;\n  font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 500;\n  color: var(--ink); background: #fafaf8;\n  transition: border 0.15s;\n}\n.home-row input:focus { outline: none; border-color: var(--accent); }\n\n\/* Donate row *\/\n.donate-row {\n  display: flex; align-items: center; gap: 12px;\n  margin-bottom: 24px;\n  background: #fffbf5;\n  border: 1.5px dashed #d85a30;\n  border-radius: var(--radius);\n  padding: 12px 18px;\n}\n.donate-row label { font-size: 11px; font-weight: 600; color: #7D3C00; text-transform: uppercase; letter-spacing: 0.6px; white-space: nowrap; }\n.donate-row input {\n  flex: 1; border: 1.5px solid #f0c898;\n  border-radius: 7px; padding: 7px 12px;\n  font-family: 'DM Sans', sans-serif; font-size: 13px;\n  color: var(--ink); background: #fffbf5;\n}\n.donate-row input:focus { outline: none; border-color: #d85a30; }\n.donate-note-text { font-size: 11px; color: #9c6030; font-style: italic; white-space: nowrap; }\n\n\/* Sections grid *\/\n.sections-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n  gap: 16px;\n  margin-bottom: 24px;\n}\n\n\/* Section card *\/\n.section-card {\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: var(--radius);\n  overflow: hidden;\n  box-shadow: var(--shadow);\n  display: flex; flex-direction: column;\n}\n.section-card-header {\n  padding: 12px 14px;\n  display: flex; align-items: center; gap: 8px;\n  border-bottom: 1px solid var(--border);\n}\n.color-swatch {\n  width: 28px; height: 28px; border-radius: 6px;\n  border: none; cursor: pointer; padding: 0;\n  overflow: hidden; flex-shrink: 0;\n}\n.color-swatch input[type=color] {\n  width: 44px; height: 44px;\n  border: none; padding: 0; cursor: pointer;\n  transform: translate(-8px, -8px);\n  background: none;\n}\n.section-header-inputs { flex: 1; display: flex; flex-direction: column; gap: 4px; }\n.section-title-input {\n  font-family: 'DM Sans', sans-serif;\n  font-size: 13px; font-weight: 600;\n  border: 1.5px solid transparent;\n  border-radius: 5px; padding: 4px 8px;\n  color: var(--ink); background: transparent;\n  width: 100%; transition: border 0.15s;\n}\n.section-title-input:focus { outline: none; border-color: var(--border2); background: #fafaf8; }\n.section-sub-input {\n  font-family: 'DM Sans', sans-serif;\n  font-size: 11px; font-style: italic;\n  border: 1.5px solid transparent;\n  border-radius: 5px; padding: 3px 8px;\n  color: var(--mute); background: transparent;\n  width: 100%; transition: border 0.15s;\n}\n.section-sub-input:focus { outline: none; border-color: var(--border2); background: #fafaf8; }\n.section-delete-btn {\n  background: none; border: none; cursor: pointer;\n  color: var(--hint); font-size: 16px; padding: 2px 4px;\n  border-radius: 4px; transition: all 0.12s; flex-shrink: 0;\n  line-height: 1;\n}\n.section-delete-btn:hover { background: #fdecea; color: var(--danger); }\n\n\/* Pages list *\/\n.pages-list { padding: 10px 14px; flex: 1; display: flex; flex-direction: column; gap: 6px; }\n\n\/* Page item *\/\n.page-item {\n  display: flex; align-items: center; gap: 6px;\n}\n.page-item-color {\n  width: 22px; height: 22px; border-radius: 4px;\n  border: none; cursor: pointer; padding: 0;\n  overflow: hidden; flex-shrink: 0;\n}\n.page-item-color input[type=color] {\n  width: 36px; height: 36px; border: none; padding: 0; cursor: pointer;\n  transform: translate(-7px, -7px); background: none;\n}\n.page-input {\n  flex: 1; border: 1.5px solid var(--border);\n  border-radius: 6px; padding: 5px 9px;\n  font-family: 'DM Sans', sans-serif; font-size: 12px;\n  color: var(--ink); background: #fafaf8;\n  transition: border 0.15s;\n}\n.page-input:focus { outline: none; border-color: var(--border2); }\n.page-delete-btn {\n  background: none; border: none; cursor: pointer;\n  color: var(--hint); font-size: 13px; padding: 2px;\n  border-radius: 3px; transition: all 0.12s; flex-shrink: 0;\n}\n.page-delete-btn:hover { color: var(--danger); }\n\n\/* Comment *\/\n.comment-item {\n  display: flex; align-items: flex-start; gap: 6px; margin-top: 2px;\n}\n.comment-icon { color: #f59e0b; font-size: 13px; margin-top: 6px; flex-shrink: 0; }\n.comment-input {\n  flex: 1; border: 1.5px solid #fcd34d;\n  border-radius: 6px; padding: 5px 9px;\n  font-family: 'DM Sans', sans-serif; font-size: 11px; font-style: italic;\n  color: #92400e; background: #fffbeb;\n  resize: none; transition: border 0.15s;\n  min-height: 32px;\n}\n.comment-input:focus { outline: none; border-color: #f59e0b; }\n.comment-delete-btn {\n  background: none; border: none; cursor: pointer;\n  color: var(--hint); font-size: 13px; padding: 2px; margin-top: 5px;\n  border-radius: 3px; transition: all 0.12s; flex-shrink: 0;\n}\n.comment-delete-btn:hover { color: #d97706; }\n\n\/* Add buttons row *\/\n.add-row {\n  padding: 8px 14px 12px;\n  display: flex; gap: 6px; flex-wrap: wrap;\n  border-top: 1px solid var(--border);\n}\n\n\/* Divider inside section *\/\n.section-divider-item {\n  display: flex; align-items: center; gap: 6px;\n}\n.section-divider-label-input {\n  flex: 1; border: 1.5px solid var(--border);\n  border-radius: 6px; padding: 4px 9px;\n  font-family: 'DM Sans', sans-serif; font-size: 10px;\n  font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px;\n  color: var(--mute); background: #f5f4f0;\n}\n.section-divider-label-input:focus { outline: none; border-color: var(--border2); }\n.divider-icon { color: var(--hint); font-size: 11px; flex-shrink: 0; }\n\n\/* Add section button *\/\n.add-section-card {\n  border: 2px dashed var(--border2);\n  border-radius: var(--radius);\n  display: flex; align-items: center; justify-content: center;\n  min-height: 120px; cursor: pointer;\n  transition: all 0.15s; color: var(--hint);\n  font-size: 13px; font-weight: 500; gap: 8px;\n  background: transparent;\n}\n.add-section-card:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-light); }\n\n\/* \u2500\u2500 MAP PREVIEW \u2500\u2500 *\/\n.map-section {\n  background: var(--surface);\n  border-top: 2px solid var(--border);\n  padding: 32px 24px 48px;\n}\n.map-header {\n  display: flex; align-items: center; justify-content: space-between;\n  margin-bottom: 24px;\n}\n.map-title {\n  font-family: 'DM Serif Display', serif;\n  font-size: 20px; font-weight: 400; color: var(--ink);\n}\n.map-subtitle { font-size: 12px; color: var(--mute); margin-top: 2px; }\n\n\/* Map donate pill *\/\n.map-donate-note {\n  display: flex; justify-content: center; margin-bottom: 18px;\n}\n.map-donate-pill {\n  background: #FAECE7; border: 1.5px dashed #D85A30;\n  border-radius: 99px; padding: 5px 16px;\n  font-size: 11px; color: #4A1B0C;\n  display: flex; align-items: center; gap: 6px;\n}\n.map-donate-pill strong { color: #993C1D; }\n\n\/* Map home *\/\n.map-home-wrap { display: flex; justify-content: center; margin-bottom: 8px; }\n.map-home-box {\n  border-radius: 10px; padding: 10px 32px;\n  font-size: 13px; font-weight: 600; text-align: center;\n  color: #fff;\n}\n.map-home-box .msub { font-size: 10px; opacity: 0.75; margin-top: 2px; }\n.map-connector-wrap { display: flex; justify-content: center; margin-bottom: 8px; }\n.map-connector-line { width: 1.5px; height: 20px; background: var(--border2); }\n\n\/* Map cols *\/\n.map-cols { display: flex; gap: 8px; flex-wrap: nowrap; overflow-x: auto; padding-bottom: 8px; }\n.map-col { display: flex; flex-direction: column; align-items: center; min-width: 130px; flex: 1; }\n.map-nav-box {\n  border-radius: 8px; padding: 9px 6px;\n  font-size: 11px; font-weight: 600; text-align: center;\n  width: 100%; line-height: 1.3;\n}\n.map-nav-sub { font-size: 9px; opacity: 0.78; margin-top: 3px; font-style: italic; font-weight: 400; }\n.map-col-connector { width: 1.5px; height: 14px; background: var(--border2); margin: 0 auto; }\n.map-children { width: 100%; display: flex; flex-direction: column; gap: 4px; }\n.map-child {\n  border-radius: 5px; padding: 5px 6px;\n  font-size: 10px; text-align: center;\n  border: 0.5px solid rgba(0,0,0,0.12);\n  line-height: 1.3;\n}\n.map-child-note {\n  background: #fffbeb;\n  border: 0.5px dashed #f59e0b !important;\n  color: #92400e;\n  font-style: italic;\n  font-size: 9px;\n  padding: 4px 6px;\n}\n.map-divider-label {\n  font-size: 8.5px; font-weight: 700; letter-spacing: 0.7px;\n  text-transform: uppercase; color: var(--hint);\n  text-align: center; padding: 4px 0 2px; width: 100%;\n}\n.map-divider-line { height: 0.5px; background: var(--border); width: 100%; margin: 2px 0; }\n\n\/* Legend *\/\n.map-legend {\n  display: flex; flex-wrap: wrap; gap: 8px;\n  margin-top: 20px; padding-top: 14px;\n  border-top: 0.5px solid var(--border);\n  font-size: 10px; color: var(--mute);\n  align-items: center;\n}\n.map-legend-item { display: flex; align-items: center; gap: 4px; }\n.map-legend-dot { width: 9px; height: 9px; border-radius: 2px; flex-shrink: 0; }\n\n\/* Export preview label *\/\n.export-bar {\n  display: flex; align-items: center; justify-content: space-between;\n  background: #f0fdf4; border: 1px solid #86efac;\n  border-radius: 8px; padding: 10px 16px;\n  margin-bottom: 20px; font-size: 12px; color: #14532d;\n}\n<\/style>\n\n\n<div class=\"app\">\n\n<div class=\"topbar\">\n  <div class=\"topbar-left\">\n    <h1>Constructeur de plan du site<\/h1>\n    <span class=\"topbar-badge\">Pratham International<\/span>\n  <\/div>\n  <div class=\"topbar-actions\" style=\"align-items:center;\">\n    <div class=\"sync-status loading\" id=\"syncStatus\">\n      <span class=\"sync-dot pulse\" id=\"syncDot\"><\/span>\n      <span id=\"syncLabel\">Chargement...<\/span>\n    <\/div>\n    <button class=\"btn btn-ghost\" onclick=\"exportHTML()\">\u2b07 Exporter HTML<\/button>\n    <button class=\"btn btn-white\" onclick=\"scrollToMap()\">\u2193 Voir la carte<\/button>\n  <\/div>\n<\/div>\n\n<div class=\"main\">\n<div class=\"editor-wrap\" id=\"editorWrap\">\n\n  <!-- HOME -->\n  <div class=\"home-row\">\n    <label>Libell\u00e9 de la page d'accueil<\/label>\n    <input type=\"text\" id=\"homeLabel\" value=\"Accueil\" oninput=\"renderMap()\">\n    <input type=\"text\" id=\"homeUrl\" value=\"prathaminternational.org\" placeholder=\"URL \/ sous-titre\" oninput=\"renderMap()\" style=\"max-width:220px; color: var(--mute); font-size:12px;\">\n  <\/div>\n\n  <!-- DONATE -->\n  <div class=\"donate-row\">\n    <label>Bouton de don<\/label>\n    <input type=\"text\" id=\"donateLabel\" value=\"Faire un don\" oninput=\"renderMap()\">\n    <span class=\"donate-note-text\">CTA autonome dans la barre de navigation globale<\/span>\n  <\/div>\n\n  <!-- SECTIONS -->\n  <div class=\"sections-grid\" id=\"sectionsGrid\"><\/div>\n\n  <button class=\"add-section-card\" onclick=\"addSection()\">\n    <span style=\"font-size:20px;\">\uff0b<\/span> Ajouter une section de navigation\n  <\/button>\n\n<\/div>\n\n<!-- MAP PREVIEW -->\n<div class=\"map-section\" id=\"mapSection\">\n  <div class=\"map-header\">\n    <div>\n      <div class=\"map-title\">Aper\u00e7u du plan du site en direct<\/div>\n      <div class=\"map-subtitle\">Mise \u00e0 jour automatique au fur et \u00e0 mesure que vous modifiez le texte ci-dessus<\/div>\n    <\/div>\n    <button class=\"btn btn-white\" style=\"background:var(--accent);color:#fff;\" onclick=\"exportHTML()\">\u2b07 Exporter en HTML<\/button>\n  <\/div>\n  <div class=\"export-bar\">\n    <span>\ud83d\udca1 <strong>Conseil :<\/strong> Toutes les sections, noms de pages, couleurs et commentaires ci-dessus sont refl\u00e9t\u00e9s ici en temps r\u00e9el.<\/span>\n    <span id=\"sectionCount\" style=\"font-weight:600;\"><\/span>\n  <\/div>\n  <div id=\"mapOutput\"><\/div>\n<\/div>\n\n<\/div>\n<\/div>\n\n<script>\n\/\/ \u2500\u2500 SHARED STORAGE KEY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst STORAGE_KEY = 'sitemap-data-v1';\nconst HOME_KEY    = 'sitemap-home-v1';\n\n\/\/ \u2500\u2500 SYNC STATUS UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction setSyncStatus(state, label) {\n  const el  = document.getElementById('syncStatus');\n  const dot = document.getElementById('syncDot');\n  const lbl = document.getElementById('syncLabel');\n  el.className  = 'sync-status ' + state;\n  dot.className = 'sync-dot' + (state === 'saving' || state === 'loading' ? ' pulse' : '');\n  lbl.textContent = label;\n}\n\nlet _isLoading = true; \/\/ suppress saves until initial load completes\n\n\/\/ \u2500\u2500 SAVE TO SHARED STORAGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet saveTimer = null;\nfunction scheduleSave() {\n  if (_isLoading) return;\n  clearTimeout(saveTimer);\n  setSyncStatus('saving', 'Saving\u2026');\n  saveTimer = setTimeout(saveNow, 800);\n}\n\nasync function saveNow() {\n  const homeData = {\n    homeLabel:    document.getElementById('homeLabel').value,\n    homeUrl:      document.getElementById('homeUrl').value,\n    donateLabel:  document.getElementById('donateLabel').value,\n  };\n  try {\n    await window.storage.set(STORAGE_KEY, JSON.stringify(sections), true);\n    await window.storage.set(HOME_KEY,    JSON.stringify(homeData),  true);\n    const t = new Date().toLocaleTimeString([], { hour:'2-digit', minute:'2-digit' });\n    setSyncStatus('saved', '\u2713 Saved ' + t);\n  } catch(e) {\n    setSyncStatus('error', '\u26a0 Save failed');\n    console.error('Storage save error:', e);\n  }\n}\n\n\/\/ \u2500\u2500 LOAD FROM SHARED STORAGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function loadFromStorage() {\n  setSyncStatus('loading', 'Loading\u2026');\n  try {\n    const sectRes = await window.storage.get(STORAGE_KEY, true);\n    const homeRes = await window.storage.get(HOME_KEY,    true);\n\n    if (sectRes && sectRes.value) {\n      sections = JSON.parse(sectRes.value);\n    }\n    if (homeRes && homeRes.value) {\n      const h = JSON.parse(homeRes.value);\n      document.getElementById('homeLabel').value   = h.homeLabel   || 'Home';\n      document.getElementById('homeUrl').value     = h.homeUrl     || 'prathaminternational.org';\n      document.getElementById('donateLabel').value = h.donateLabel || 'Donate';\n    }\n    setSyncStatus('saved', '\u2713 Up to date');\n  } catch(e) {\n    \/\/ Key doesn't exist yet \u2014 first run, use defaults\n    setSyncStatus('saved', '\u2713 Ready');\n  }\n  _isLoading = false;\n  renderEditor();\n}\n\n\/\/ \u2500\u2500 HOOK ALL CHANGES TO SAVE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ Wrap renderMap so every data change triggers a save\nconst _origRenderMap = typeof renderMap === 'function' ? renderMap : null;\n\n\/\/ \u2500\u2500 DATA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet sections = [\n  {\n    id: uid(), title: 'Who We Are', sub: 'Identity & governance',\n    navColor: '#0F6E56', childBg: '#E1F5EE', childText: '#085041',\n    items: [\n      { type: 'page', text: 'Our founding story' },\n      { type: 'page', text: 'Mission, vision & values' },\n      { type: 'page', text: 'Leadership & governance' },\n      { type: 'page', text: 'Board of trustees' },\n      { type: 'page', text: 'The Pratham network' },\n      { type: 'page', text: 'Recognition & affiliations' },\n    ]\n  },\n  {\n    id: uid(), title: 'Our Innovations', sub: 'Programmes & approaches',\n    navColor: '#534AB7', childBg: '#EEEDFE', childText: '#26215C',\n    items: [\n      { type: 'page', text: 'Teaching at the Right Level (TaRL)' },\n      { type: 'page', text: 'Early childhood development' },\n      { type: 'page', text: 'Foundational learning' },\n      { type: 'page', text: 'Youth & livelihoods' },\n      { type: 'page', text: 'Digital & AI tools' },\n      { type: 'page', text: 'NexTayari' },\n    ]\n  },\n  {\n    id: uid(), title: 'Our Reach', sub: 'Countries & regions',\n    navColor: '#993C1D', childBg: '#FAECE7', childText: '#4A1B0C',\n    items: [\n      { type: 'page', text: 'Global footprint' },\n      { type: 'page', text: 'Sub-Saharan Africa' },\n      { type: 'page', text: 'South & Southeast Asia' },\n      { type: 'page', text: 'Latin America & the Caribbean' },\n      { type: 'page', text: 'India \u2014 the origin story' },\n      { type: 'page', text: 'Country profiles' },\n    ]\n  },\n  {\n    id: uid(), title: 'Evidence & Accountability', sub: 'Data, research & financials',\n    navColor: '#185FA5', childBg: '#E6F1FB', childText: '#042C53',\n    items: [\n      { type: 'page', text: 'Impact at a glance' },\n      { type: 'page', text: 'Research & evaluations' },\n      { type: 'page', text: 'ASER \u2014 Annual Status of Education' },\n      { type: 'page', text: 'Partner case studies' },\n      { type: 'page', text: 'Annual reports' },\n      { type: 'page', text: 'Financials & audited statements' },\n      { type: 'page', text: 'Publications library' },\n    ]\n  },\n  {\n    id: uid(), title: 'Voices from the Field', sub: 'Stories, media & insight',\n    navColor: '#854F0B', childBg: '#FAEEDA', childText: '#412402',\n    items: [\n      { type: 'page', text: 'Stories of transformation' },\n      { type: 'page', text: 'Field dispatches & blog' },\n      { type: 'page', text: 'News & press coverage' },\n      { type: 'page', text: 'Op-eds & thought leadership' },\n      { type: 'page', text: 'Films & multimedia' },\n      { type: 'comment', text: 'Link every story to its relevant programme and country page for SEO and user flow' },\n    ]\n  },\n  {\n    id: uid(), title: 'Join the Movement', sub: 'Partnerships & engagement',\n    navColor: '#444441', childBg: '#F1EFE8', childText: '#2C2C2A',\n    items: [\n      { type: 'divider', text: 'Partner with us' },\n      { type: 'page', text: 'For governments & ministries' },\n      { type: 'page', text: 'For funders & foundations' },\n      { type: 'page', text: 'For NGOs & civil society' },\n      { type: 'page', text: 'Technical assistance & TA' },\n      { type: 'divider', text: 'Get involved' },\n      { type: 'page', text: 'Careers' },\n      { type: 'page', text: 'Internships & fellowships' },\n      { type: 'page', text: 'Events & convenings' },\n      { type: 'page', text: 'Subscribe to our newsletter' },\n      { type: 'comment', text: 'Consider a unified contact form at the bottom of each partner page' },\n    ]\n  },\n];\n\nfunction uid() { return '_' + Math.random().toString(36).slice(2, 9); }\n\n\/\/ \u2500\u2500 RENDER EDITOR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderEditor() {\n  const grid = document.getElementById('sectionsGrid');\n  grid.innerHTML = '';\n  sections.forEach((sec, si) => {\n    const card = document.createElement('div');\n    card.className = 'section-card';\n    card.innerHTML = `\n      <div class=\"section-card-header\">\n        <div class=\"color-swatch\" title=\"Nav header colour\">\n          <input type=\"color\" value=\"${sec.navColor}\" oninput=\"sections[${si}].navColor=this.value;renderMap();scheduleSave();\" onchange=\"renderMap();scheduleSave();\">\n        <\/div>\n        <div class=\"section-header-inputs\">\n          <input class=\"section-title-input\" type=\"text\" value=\"${esc(sec.title)}\" placeholder=\"Section title\"\n            oninput=\"sections[${si}].title=this.value;renderMap();scheduleSave();\">\n          <input class=\"section-sub-input\" type=\"text\" value=\"${esc(sec.sub)}\" placeholder=\"Subtitle \/ description\"\n            oninput=\"sections[${si}].sub=this.value;renderMap();scheduleSave();\">\n        <\/div>\n        <button class=\"section-delete-btn\" onclick=\"deleteSection(${si})\" title=\"Delete section\">\u2715<\/button>\n      <\/div>\n      <div class=\"pages-list\" id=\"pages-${sec.id}\">\n        ${sec.items.map((item, ii) => renderItem(si, ii, item, sec)).join('')}\n      <\/div>\n      <div class=\"add-row\">\n        <button class=\"btn btn-sm\" style=\"background:#f0fdf4;color:#14532d;border:1px solid #86efac;\" onclick=\"addPage(${si})\">\uff0b Page<\/button>\n        <button class=\"btn btn-sm\" style=\"background:#fef9c3;color:#713f12;border:1px solid #fde047;\" onclick=\"addComment(${si})\">\ud83d\udcac Comment<\/button>\n        <button class=\"btn btn-sm\" style=\"background:#f5f4f0;color:var(--mute);border:1px solid var(--border2);\" onclick=\"addDivider(${si})\">\u2014 Divider<\/button>\n        <div style=\"margin-left:auto;display:flex;align-items:center;gap:4px;\">\n          <span style=\"font-size:10px;color:var(--hint);\">Child colour:<\/span>\n          <div class=\"page-item-color\" title=\"Default child box colour\" style=\"width:26px;height:26px;border-radius:5px;overflow:hidden;border:1px solid var(--border);\">\n            <input type=\"color\" value=\"${sec.childBg}\" oninput=\"sections[${si}].childBg=this.value;renderEditor();renderMap();scheduleSave();\">\n          <\/div>\n        <\/div>\n      <\/div>`;\n    grid.appendChild(card);\n  });\n  renderMap();\n  scheduleSave();\n}\n\nfunction renderItem(si, ii, item, sec) {\n  if (item.type === 'page') {\n    return `<div class=\"page-item\">\n      <div class=\"page-item-color\" title=\"Box colour\">\n        <input type=\"color\" value=\"${item.color || sec.childBg}\" oninput=\"sections[${si}].items[${ii}].color=this.value;renderMap();scheduleSave();\">\n      <\/div>\n      <input class=\"page-input\" type=\"text\" value=\"${esc(item.text)}\" placeholder=\"Page name\"\n        oninput=\"sections[${si}].items[${ii}].text=this.value;renderMap();scheduleSave()\">\n      <button class=\"page-delete-btn\" onclick=\"deleteItem(${si},${ii})\">\u2715<\/button>\n    <\/div>`;\n  }\n  if (item.type === 'comment') {\n    return `<div class=\"comment-item\">\n      <span class=\"comment-icon\">\ud83d\udcac<\/span>\n      <textarea class=\"comment-input\" placeholder=\"Add a note or direction\u2026\" oninput=\"sections[${si}].items[${ii}].text=this.value;renderMap();scheduleSave()\">${esc(item.text)}<\/textarea>\n      <button class=\"comment-delete-btn\" onclick=\"deleteItem(${si},${ii})\">\u2715<\/button>\n    <\/div>`;\n  }\n  if (item.type === 'divider') {\n    return `<div class=\"section-divider-item\">\n      <span class=\"divider-icon\">\u2014<\/span>\n      <input class=\"section-divider-label-input\" type=\"text\" value=\"${esc(item.text)}\" placeholder=\"Sub-section label\"\n        oninput=\"sections[${si}].items[${ii}].text=this.value;renderMap();scheduleSave()\">\n      <button class=\"page-delete-btn\" onclick=\"deleteItem(${si},${ii})\">\u2715<\/button>\n    <\/div>`;\n  }\n  return '';\n}\n\nfunction esc(s) { return (s||'').replace(\/&\/g,'&amp;').replace(\/\"\/g,'&quot;').replace(\/<\/g,'&lt;'); }\n\n\/\/ \u2500\u2500 ACTIONS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction addSection() {\n  const colors = ['#1A5C38','#534AB7','#993C1D','#185FA5','#854F0B','#444441','#0F6E56','#D85A30'];\n  const bgs    = ['#EAF7EE','#EEEDFE','#FAECE7','#E6F1FB','#FAEEDA','#F1EFE8','#E1F5EE','#FFF3CD'];\n  const i = sections.length % colors.length;\n  sections.push({\n    id: uid(), title: 'New Section', sub: 'Sub-label',\n    navColor: colors[i], childBg: bgs[i], childText: '#1a1a1a',\n    items: [{ type: 'page', text: 'Page name' }]\n  });\n  renderEditor();\n}\n\nfunction deleteSection(si) {\n  if (!confirm('Delete this section?')) return;\n  sections.splice(si, 1);\n  renderEditor();\n}\n\nfunction addPage(si) {\n  sections[si].items.push({ type: 'page', text: '' });\n  renderEditor();\n}\nfunction addComment(si) {\n  sections[si].items.push({ type: 'comment', text: '' });\n  renderEditor();\n}\nfunction addDivider(si) {\n  sections[si].items.push({ type: 'divider', text: 'Sub-section' });\n  renderEditor();\n}\nfunction deleteItem(si, ii) {\n  sections[si].items.splice(ii, 1);\n  renderEditor();\n}\n\n\/\/ \u2500\u2500 RENDER MAP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderMap() {\n  const homeLabel = document.getElementById('homeLabel').value || 'Home';\n  const homeUrl   = document.getElementById('homeUrl').value || '';\n  const donateLabel = document.getElementById('donateLabel').value || 'Donate';\n\n  document.getElementById('sectionCount').textContent = `${sections.length} nav section${sections.length !== 1 ? 's' : ''}`;\n\n  let html = '';\n\n  \/\/ Donate note\n  html += `<div class=\"map-donate-note\">\n    <div class=\"map-donate-pill\">\n      <strong>${esc(donateLabel)}<\/strong> \u2014 standalone CTA button in the global navigation bar\n    <\/div>\n  <\/div>`;\n\n  \/\/ Home\n  html += `<div class=\"map-home-wrap\">\n    <div class=\"map-home-box\" style=\"background:#1A5C38;\">\n      ${esc(homeLabel)}\n      ${homeUrl ? `<div class=\"msub\">${esc(homeUrl)}<\/div>` : ''}\n    <\/div>\n  <\/div>\n  <div class=\"map-connector-wrap\"><div class=\"map-connector-line\"><\/div><\/div>`;\n\n  \/\/ Columns\n  html += `<div class=\"map-cols\">`;\n  sections.forEach(sec => {\n    const navFg = contrastColor(sec.navColor);\n    html += `<div class=\"map-col\">\n      <div class=\"map-nav-box\" style=\"background:${sec.navColor};color:${navFg};\">\n        ${esc(sec.title)}\n        ${sec.sub ? `<div class=\"map-nav-sub\">${esc(sec.sub)}<\/div>` : ''}\n      <\/div>\n      <div class=\"map-col-connector\"><\/div>\n      <div class=\"map-children\">`;\n\n    sec.items.forEach(item => {\n      if (item.type === 'page') {\n        const bg = item.color || sec.childBg;\n        const tc = sec.childText || '#1a1a1a';\n        html += `<div class=\"map-child\" style=\"background:${bg};color:${tc};border-color:${sec.navColor}33;\">${esc(item.text)}<\/div>`;\n      } else if (item.type === 'comment') {\n        html += `<div class=\"map-child map-child-note\">\ud83d\udcac ${esc(item.text)}<\/div>`;\n      } else if (item.type === 'divider') {\n        html += `<div class=\"map-divider-line\"><\/div><div class=\"map-divider-label\">${esc(item.text)}<\/div>`;\n      }\n    });\n\n    html += `<\/div><\/div>`;\n  });\n  html += `<\/div>`;\n\n  \/\/ Legend\n  if (sections.length > 0) {\n    html += `<div class=\"map-legend\"><span style=\"font-weight:600;color:var(--ink);font-size:10px;\">Sections:<\/span>`;\n    sections.forEach(sec => {\n      html += `<span class=\"map-legend-item\"><span class=\"map-legend-dot\" style=\"background:${sec.navColor};\"><\/span>${esc(sec.title)}<\/span>`;\n    });\n    html += `<span style=\"color:var(--border2);margin:0 4px;\">|<\/span>\n      <span class=\"map-legend-item\"><span class=\"map-legend-dot\" style=\"background:#f59e0b;\"><\/span>\ud83d\udcac = notes &amp; directions<\/span>`;\n    html += `<\/div>`;\n  }\n\n  document.getElementById('mapOutput').innerHTML = html;\n}\n\nfunction contrastColor(hex) {\n  const r = parseInt(hex.slice(1,3),16);\n  const g = parseInt(hex.slice(3,5),16);\n  const b = parseInt(hex.slice(5,7),16);\n  const lum = (0.299*r + 0.587*g + 0.114*b) \/ 255;\n  return lum > 0.5 ? '#1a1a1a' : '#ffffff';\n}\n\nfunction scrollToMap() {\n  document.getElementById('mapSection').scrollIntoView({ behavior: 'smooth' });\n}\n\n\/\/ \u2500\u2500 EXPORT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction exportHTML() {\n  const homeLabel   = document.getElementById('homeLabel').value || 'Home';\n  const homeUrl     = document.getElementById('homeUrl').value || '';\n  const donateLabel = document.getElementById('donateLabel').value || 'Donate';\n\n  let colsHTML = '';\n  sections.forEach(sec => {\n    const navFg = contrastColor(sec.navColor);\n    let childrenHTML = '';\n    sec.items.forEach(item => {\n      if (item.type === 'page') {\n        const bg = item.color || sec.childBg;\n        const tc = sec.childText || '#1a1a1a';\n        childrenHTML += `<div style=\"border-radius:5px;padding:6px 7px;font-size:10.5px;text-align:center;border:0.5px solid ${sec.navColor}44;background:${bg};color:${tc};line-height:1.3;\">${item.text}<\/div>`;\n      } else if (item.type === 'comment') {\n        childrenHTML += `<div style=\"border-radius:5px;padding:5px 7px;font-size:9.5px;text-align:center;border:0.5px dashed #f59e0b;background:#fffbeb;color:#92400e;font-style:italic;line-height:1.3;\">\ud83d\udcac ${item.text}<\/div>`;\n      } else if (item.type === 'divider') {\n        childrenHTML += `<div style=\"height:0.5px;background:#e2e0d8;margin:4px 0 2px;\"><\/div><div style=\"font-size:8.5px;font-weight:700;letter-spacing:0.7px;text-transform:uppercase;color:#9c9a92;text-align:center;padding:2px 0;\">${item.text}<\/div>`;\n      }\n    });\n    colsHTML += `<div style=\"display:flex;flex-direction:column;align-items:center;min-width:130px;flex:1;\">\n      <div style=\"border-radius:8px;padding:9px 6px;font-size:11px;font-weight:600;text-align:center;width:100%;line-height:1.3;background:${sec.navColor};color:${navFg};\">\n        ${sec.title}${sec.sub ? `<div style=\"font-size:9px;opacity:0.78;margin-top:3px;font-style:italic;font-weight:400;\">${sec.sub}<\/div>` : ''}\n      <\/div>\n      <div style=\"width:1.5px;height:14px;background:#ccc9be;margin:0 auto;\"><\/div>\n      <div style=\"width:100%;display:flex;flex-direction:column;gap:4px;\">${childrenHTML}<\/div>\n    <\/div>`;\n  });\n\n  let legendHTML = sections.map(sec =>\n    `<span style=\"display:flex;align-items:center;gap:4px;\"><span style=\"width:9px;height:9px;border-radius:2px;background:${sec.navColor};display:inline-block;flex-shrink:0;\"><\/span>${sec.title}<\/span>`\n  ).join('');\n\n  const doc = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Pratham International \u2014 Sitemap<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display&family=DM+Sans:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n<style>\n*{box-sizing:border-box;margin:0;padding:0;}\nbody{font-family:'DM Sans',sans-serif;background:#f5f4f0;color:#1c1c1a;padding:40px 20px 60px;}\n.wrap{max-width:1100px;margin:0 auto;}\n<\/style>\n<\/head>\n<body>\n<div class=\"wrap\">\n  <p style=\"text-align:center;font-size:11px;font-weight:600;letter-spacing:0.8px;text-transform:uppercase;color:#6b6b66;margin-bottom:4px;\">Pratham International<\/p>\n  <p style=\"text-align:center;font-size:11px;color:#9c9a92;margin-bottom:24px;\">Website sitemap \u2014 exported from Sitemap Builder<\/p>\n\n  <div style=\"display:flex;justify-content:center;margin-bottom:16px;\">\n    <div style=\"background:#FAECE7;border:1.5px dashed #D85A30;border-radius:99px;padding:5px 16px;font-size:11px;color:#4A1B0C;\">\n      <strong style=\"color:#993C1D;\">${donateLabel}<\/strong> \u2014 standalone CTA button in the global navigation bar\n    <\/div>\n  <\/div>\n\n  <div style=\"display:flex;justify-content:center;margin-bottom:8px;\">\n    <div style=\"background:#1A5C38;border-radius:10px;padding:10px 28px;color:#fff;font-size:13px;font-weight:600;text-align:center;\">\n      ${homeLabel}${homeUrl ? `<div style=\"font-size:10px;opacity:0.72;margin-top:2px;\">${homeUrl}<\/div>` : ''}\n    <\/div>\n  <\/div>\n\n  <div style=\"display:flex;justify-content:center;margin-bottom:8px;\"><div style=\"width:1.5px;height:20px;background:#ccc9be;\"><\/div><\/div>\n\n  <div style=\"display:flex;gap:8px;flex-wrap:nowrap;overflow-x:auto;padding-bottom:8px;\">${colsHTML}<\/div>\n\n  <div style=\"display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;padding-top:14px;border-top:0.5px solid #e2e0d8;font-size:10px;color:#6b6b66;align-items:center;\">\n    <span style=\"font-weight:600;color:#1c1c1a;font-size:10px;\">Sections:<\/span>\n    ${legendHTML}\n    <span style=\"color:#ccc9be;margin:0 4px;\">|<\/span>\n    <span style=\"display:flex;align-items:center;gap:4px;\"><span style=\"display:inline-block;width:9px;height:9px;border-radius:2px;background:#f59e0b;\"><\/span>\ud83d\udcac = notes &amp; directions<\/span>\n  <\/div>\n\n  <p style=\"text-align:center;margin-top:28px;font-size:10px;color:#9c9a92;\">Pratham International \u00b7 Website sitemap \u00b7 Prepared for WordPress build<\/p>\n<\/div>\n<\/body>\n<\/html>`;\n\n  const blob = new Blob([doc], { type: 'text\/html' });\n  const a = document.createElement('a');\n  a.href = URL.createObjectURL(blob);\n  a.download = 'pratham_sitemap.html';\n  a.click();\n}\n\n\/\/ \u2500\u2500 INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ Hook the home\/donate inputs so their changes also save\ndocument.getElementById('homeLabel').addEventListener('input',   scheduleSave);\ndocument.getElementById('homeUrl').addEventListener('input',     scheduleSave);\ndocument.getElementById('donateLabel').addEventListener('input', scheduleSave);\n\n\/\/ Load shared state (falls back to defaults if nothing stored yet)\nloadFromStorage();\n<\/script>\n\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15910fe elementor-widget elementor-widget-spacer\" data-id=\"15910fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>2026 Plan du site Pratham International &#8211; Constructeur de plan du site Constructeur de plan du site Pratham International Chargement&#8230; \u2b07 Exporter HTML \u2193 Voir la carte Libell\u00e9 de la page d&rsquo;accueil Bouton de don CTA autonome dans la barre de navigation globale \uff0b Ajouter une section de navigation Aper\u00e7u du plan du site en [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-5414","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/pages\/5414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/comments?post=5414"}],"version-history":[{"count":3,"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/pages\/5414\/revisions"}],"predecessor-version":[{"id":5439,"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/pages\/5414\/revisions\/5439"}],"wp:attachment":[{"href":"https:\/\/prathaminternational.org\/fr\/wp-json\/wp\/v2\/media?parent=5414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}