{"id":5415,"date":"2026-03-27T04:34:49","date_gmt":"2026-03-27T04:34:49","guid":{"rendered":"https:\/\/prathaminternational.org\/mapa-del-sitio-web-de-pi\/"},"modified":"2026-03-27T04:43:44","modified_gmt":"2026-03-27T04:43:44","slug":"mapa-del-sitio-web-de-pi","status":"publish","type":"page","link":"https:\/\/prathaminternational.org\/es\/mapa-del-sitio-web-de-pi\/","title":{"rendered":"Mapa del sitio web de PI"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5415\" class=\"elementor elementor-5415 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\">Mapa del sitio web 2026<\/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=anchura-dispositivo, initial-scale=1.0\">\n<title>Pratham Internacional - Generador de sitemaps<\/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>Generador de sitemaps<\/h1>\n    <span class=\"topbar-badge\">Pratham Internacional<\/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\">Cargando...<\/span>\n    <\/div>\n    <button class=\"btn btn-ghost\" onclick=\"exportHTML()\">\u2b07 Exportar HTML<\/button>\n    <button class=\"btn btn-white\" onclick=\"scrollToMap()\">\u2193 Ver mapa<\/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>Etiqueta de la p\u00e1gina de inicio<\/label>\n    <input type=\"text\" id=\"homeLabel\" value=\"Inicio\" oninput=\"renderMap()\">\n    <input type=\"text\" id=\"homeUrl\" value=\"prathaminternational.org\" placeholder=\"URL \/ subt\u00edtulo\" oninput=\"renderMap()\" style=\"max-width:220px; color: var(--mute); font-size:12px;\">\n  <\/div>\n\n  <!-- DONATE -->\n  <div class=\"donate-row\">\n    <label>Bot\u00f3n Donar<\/label>\n    <input type=\"text\" id=\"donateLabel\" value=\"Dona\" oninput=\"renderMap()\">\n    <span class=\"donate-note-text\">CTA independiente en la barra de navegaci\u00f3n global<\/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> A\u00f1adir secci\u00f3n nav\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\">Vista previa del mapa del sitio en directo<\/div>\n      <div class=\"map-subtitle\">Se actualiza autom\u00e1ticamente a medida que editas arriba<\/div>\n    <\/div>\n    <button class=\"btn btn-white\" style=\"background:var(--accent);color:#fff;\" onclick=\"exportHTML()\">\u2b07 Exportar como HTML<\/button>\n  <\/div>\n  <div class=\"export-bar\">\n    <span>\ud83d\udca1 <strong>Consejo:<\/strong> Todas las secciones, nombres de p\u00e1ginas, colores y comentarios anteriores se reflejan aqu\u00ed en tiempo real.<\/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>Mapa del sitio web 2026 Pratham Internacional &#8211; Generador de sitemaps Generador de sitemaps Pratham Internacional Cargando&#8230; \u2b07 Exportar HTML \u2193 Ver mapa Etiqueta de la p\u00e1gina de inicio Bot\u00f3n Donar CTA independiente en la barra de navegaci\u00f3n global \uff0b A\u00f1adir secci\u00f3n nav Vista previa del mapa del sitio en directo Se actualiza autom\u00e1ticamente a [&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-5415","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/pages\/5415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/comments?post=5415"}],"version-history":[{"count":9,"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/pages\/5415\/revisions"}],"predecessor-version":[{"id":5445,"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/pages\/5415\/revisions\/5445"}],"wp:attachment":[{"href":"https:\/\/prathaminternational.org\/es\/wp-json\/wp\/v2\/media?parent=5415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}