{"id":169,"date":"2025-10-19T08:38:32","date_gmt":"2025-10-19T08:38:32","guid":{"rendered":"https:\/\/aman360.org\/?page_id=169"},"modified":"2025-10-19T10:32:51","modified_gmt":"2025-10-19T10:32:51","slug":"global-risk-index-generator","status":"publish","type":"page","link":"https:\/\/aman360.org\/ar\/tools\/global-risk-index-generator\/","title":{"rendered":"Global Risk Index Generator"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"ar\" dir=\"rtl\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"\/>\n<title>Aman360 \u2022 Global Risk Index Generator<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tajawal:wght@400;600;800&#038;family=Inter:wght@400;600;800&#038;display=swap\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js\"><\/script>\n<style>\n:root{\n  --bg:#0b1224; --panel:#0f1b36; --ink:#e6f0ff; --mut:#9fb3d9; --brand:#22a3ff; --line:#21335d; --chip:#0a1531;\n  --ok:#22c55e; --mid:#f59e0b; --bad:#ef4444;\n}\n*{box-sizing:border-box}\nbody{margin:0;background:var(--bg);color:var(--ink);font-family:Tajawal,Inter,system-ui,Segoe UI,Roboto,Arial,sans-serif}\n.container{max-width:1250px;margin:36px auto;padding:0 16px}\n.header{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-bottom:12px}\n.h-title{font-weight:800;font-size:28px;letter-spacing:.2px}\n.controls{display:flex;gap:8px;flex-wrap:wrap}\n.btn{background:var(--brand);color:#00162b;border:none;padding:10px 14px;border-radius:10px;font-weight:700;cursor:pointer}\n.btn.alt{background:#1b2f59;color:var(--ink)}\n.select,.input, input[type=range]{background:#0a1330;border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:8px 10px}\n.card{background:linear-gradient(180deg,#0f1b36,#0c1630);border:1px solid var(--line);border-radius:16px;padding:14px}\n.grid{display:grid;gap:14px}\n@media(min-width:1080px){ .grid-2{grid-template-columns:1.1fr .9fr} }\n.label{color:var(--mut);font-size:13px;margin-bottom:6px}\n.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}\n.sep{height:1px;background:var(--line);border:0;margin:10px 0}\n.small{font-size:12px;color:var(--mut)}\n.badge{display:inline-block;background:#12366a;color:#cfe4ff;border:1px solid #1f4c93;padding:3px 8px;border-radius:999px}\n.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}\n.kpi{background:#0a1531;border:1px solid var(--line);border-radius:12px;padding:10px}\n.kpi h3{margin:0;font-size:22px}\n.table{width:100%;border-collapse:separate;border-spacing:0 8px}\n.table th,.table td{padding:8px 10px}\n.table tbody tr{background:#0a1531;border:1px solid var(--line)}\n.status{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;border:1px solid var(--line);background:#0a1330}\n.dot{width:10px;height:10px;border-radius:50%}\n.notice{background:#0a1531;border:1px dashed var(--line);padding:10px;border-radius:12px}\n<\/style>\n<\/head>\n<body>\n<div class=\"container\" id=\"capture\">\n  <!-- Header -->\n  <div class=\"header\">\n    <div class=\"h-title\" id=\"title\">\u0645\u0648\u0644\u0651\u062f \u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0627\u0644\u0645\u064a \u0644\u0644\u0645\u062e\u0627\u0637\u0631<\/div>\n    <div class=\"controls\">\n      <select id=\"lang\" class=\"select\">\n        <option value=\"ar\" selected>\u0627\u0644\u0639\u0631\u0628\u064a\u0629<\/option>\n        <option value=\"en\">English<\/option>\n      <\/select>\n      <input type=\"file\" id=\"csv\" accept=\".csv\" class=\"select\">\n      <button class=\"btn alt\" id=\"btnSample\">Load sample<\/button>\n      <button class=\"btn alt\" id=\"btnPng\">PNG<\/button>\n      <button class=\"btn alt\" id=\"btnCsvOut\">CSV<\/button>\n      <button class=\"btn\" id=\"btnRun\">\u062a\u062d\u062f\u064a\u062b<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"grid grid-2\">\n    <!-- Controls -->\n    <div class=\"card\">\n      <div class=\"badge\" id=\"about\">\u0645\u0646\u0635\u0629 \u062a\u062d\u0644\u064a\u0644\u064a\u0629 \u062a\u0648\u0644\u0651\u062f \u0645\u0624\u0634\u0631\u0627\u062a \u0645\u062e\u0627\u0637\u0631 \u0639\u0627\u0644\u0645\u064a\u0629 \u0648\u0648\u0637\u0646\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0635\u0627\u062f\u0631<\/div>\n      <hr class=\"sep\">\n\n      <!-- Column mapping -->\n      <div class=\"row\">\n        <div>\n          <div class=\"label\" data-i=\"country\">\u062d\u0642\u0644 \u0627\u0644\u062f\u0648\u0644\u0629\/\u0627\u0644\u0643\u064a\u0627\u0646<\/div>\n          <select id=\"colCountry\" class=\"select\" style=\"min-width:220px\"><\/select>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"haz\">Hazard<\/div>\n          <select id=\"colH\" class=\"select\"><\/select>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"exp\">Exposure<\/div>\n          <select id=\"colE\" class=\"select\"><\/select>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"vul\">Vulnerability<\/div>\n          <select id=\"colV\" class=\"select\"><\/select>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"sens\">Sensitivity<\/div>\n          <select id=\"colS\" class=\"select\"><\/select>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"cap\">Adaptive Capacity<\/div>\n          <select id=\"colA\" class=\"select\"><\/select>\n        <\/div>\n      <\/div>\n      <div class=\"small\" id=\"rowsInfo\">\u2014<\/div>\n      <hr class=\"sep\">\n\n      <!-- Weights + formula -->\n      <div class=\"row\">\n        <div>\n          <div class=\"label\" data-i=\"weights\">\u0623\u0648\u0632\u0627\u0646 \u0627\u0644\u0623\u0628\u0639\u0627\u062f (\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0644\u0646\u0635\u064a\u0628 \u0627\u0644\u0645\u062e\u0627\u0637\u0631\u0629 = 1.0)<\/div>\n          <div class=\"row\">\n            <div><div class=\"label\">H<\/div><input id=\"wH\" type=\"number\" class=\"select\" step=\"0.01\" value=\"0.30\" style=\"width:90px\"><\/div>\n            <div><div class=\"label\">E<\/div><input id=\"wE\" type=\"number\" class=\"select\" step=\"0.01\" value=\"0.30\" style=\"width:90px\"><\/div>\n            <div><div class=\"label\">V<\/div><input id=\"wV\" type=\"number\" class=\"select\" step=\"0.01\" value=\"0.25\" style=\"width:90px\"><\/div>\n            <div><div class=\"label\">S<\/div><input id=\"wS\" type=\"number\" class=\"select\" step=\"0.01\" value=\"0.15\" style=\"width:90px\"><\/div>\n          <\/div>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"capw\">\u0648\u0632\u0646 \u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0642\u062f\u0631\u0629 \u0627\u0644\u062a\u0643\u064a\u0641\u064a\u0629 (0\u20131)<\/div>\n          <input id=\"wA\" type=\"number\" class=\"select\" step=\"0.05\" min=\"0\" max=\"1\" value=\"0.6\" style=\"width:120px\">\n          <div class=\"small\" id=\"wNote\">Risk weights sum: 1.00<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"notice small\" id=\"formula\">\n        \u0627\u0644\u0645\u0639\u0627\u062f\u0644\u0629: <b>GRI<\/b> = Average(H,E,V,S; \u0623\u0648\u0632\u0627\u0646\u0643) \u00d7 (1 \u2212 wA \u00d7 A) \u27f6 \u0628\u0639\u062f \u0630\u0644\u0643 \u00d7 100 (0..100)\n      <\/div>\n\n      <!-- Select country -->\n      <hr class=\"sep\">\n      <div class=\"row\">\n        <div>\n          <div class=\"label\" data-i=\"view\">\u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0641\u0635\u064a\u0644\u064a \u0644\u0650\u0640<\/div>\n          <select id=\"countrySel\" class=\"select\" style=\"min-width:240px\"><\/select>\n        <\/div>\n        <div class=\"small\" id=\"normNote\">\u0633\u064a\u062a\u0645 \u062a\u0637\u0628\u064a\u0639 \u0627\u0644\u0623\u0639\u0645\u062f\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0625\u0644\u0649 0\u20131 \u0628\u0646\u0627\u0621\u064b \u0639\u0644\u0649 \u0646\u0637\u0627\u0642 \u0628\u064a\u0627\u0646\u0627\u062a\u0643.<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Results -->\n    <div class=\"card\">\n      <div class=\"kpis\">\n        <div class=\"kpi\"><div class=\"label\" data-i=\"gri\">Global Risk Index<\/div><h3 id=\"kGRI\">\u2014<\/h3><\/div>\n        <div class=\"kpi\"><div class=\"label\" data-i=\"band\">\u0627\u0644\u062a\u0635\u0646\u064a\u0641<\/div><h3 id=\"kBand\"><span class=\"status\"><span class=\"dot\" style=\"background:var(--ok)\"><\/span> \u2014<\/span><\/h3><\/div>\n        <div class=\"kpi\"><div class=\"label\" data-i=\"weak\">\u0623\u0636\u0639\u0641 \u0628\u064f\u0639\u062f<\/div><h3 id=\"kWeak\">\u2014<\/h3><\/div>\n      <\/div>\n      <hr class=\"sep\">\n      <div class=\"row\">\n        <canvas id=\"radar\" height=\"210\"><\/canvas>\n      <\/div>\n      <hr class=\"sep\">\n      <div class=\"label\" data-i=\"ranking\">\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062f\u0648\u0644 \u062d\u0633\u0628 GRI<\/div>\n      <canvas id=\"bars\" height=\"210\" style=\"margin-top:6px\"><\/canvas>\n      <hr class=\"sep\">\n      <div class=\"small\" id=\"insights\">\u2014<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n\/* ================= i18n ================= *\/\nconst I18N={\n  ar:{\n    title:\"\u0645\u0648\u0644\u0651\u062f \u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0627\u0644\u0645\u064a \u0644\u0644\u0645\u062e\u0627\u0637\u0631\",\n    about:\"\u0645\u0646\u0635\u0629 \u062a\u062d\u0644\u064a\u0644\u064a\u0629 \u062a\u0648\u0644\u0651\u062f \u0645\u0624\u0634\u0631\u0627\u062a \u0645\u062e\u0627\u0637\u0631 \u0639\u0627\u0644\u0645\u064a\u0629 \u0648\u0648\u0637\u0646\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0635\u0627\u062f\u0631\",\n    country:\"\u062d\u0642\u0644 \u0627\u0644\u062f\u0648\u0644\u0629\/\u0627\u0644\u0643\u064a\u0627\u0646\", haz:\"Hazard\", exp:\"Exposure\", vul:\"Vulnerability\", sens:\"Sensitivity\", cap:\"Adaptive Capacity\",\n    weights:\"\u0623\u0648\u0632\u0627\u0646 \u0627\u0644\u0623\u0628\u0639\u0627\u062f (\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0644\u0646\u0635\u064a\u0628 \u0627\u0644\u0645\u062e\u0627\u0637\u0631\u0629 = 1.0)\", capw:\"\u0648\u0632\u0646 \u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0642\u062f\u0631\u0629 \u0627\u0644\u062a\u0643\u064a\u0641\u064a\u0629 (0\u20131)\",\n    view:\"\u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u062a\u0641\u0635\u064a\u0644\u064a \u0644\u0640\", gri:\"\u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0627\u0645 \u0644\u0644\u0645\u062e\u0627\u0637\u0631 (0\u2013100)\", band:\"\u0627\u0644\u062a\u0635\u0646\u064a\u0641\", weak:\"\u0623\u0636\u0639\u0641 \u0628\u064f\u0639\u062f\", ranking:\"\u062a\u0631\u062a\u064a\u0628 \u0627\u0644\u062f\u0648\u0644 \u062d\u0633\u0628 GRI\",\n    formula:\"\u0627\u0644\u0645\u0639\u0627\u062f\u0644\u0629: GRI = \u0645\u062a\u0648\u0633\u0637 \u0645\u0631\u062c\u0651\u062d (H,E,V,S) \u00d7 (1 \u2212 wA \u00d7 A) \u2192 \u0645\u0636\u0631\u0648\u0628 \u0641\u064a 100\",\n    norm:\"\u0633\u064a\u062a\u0645 \u062a\u0637\u0628\u064a\u0639 \u0627\u0644\u0623\u0639\u0645\u062f\u0629 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0625\u0644\u0649 0\u20131 \u0628\u0646\u0627\u0621\u064b \u0639\u0644\u0649 \u0646\u0637\u0627\u0642 \u0628\u064a\u0627\u0646\u0627\u062a\u0643.\",\n    bands:{low:\"\u0645\u0646\u062e\u0641\u0636\", mod:\"\u0645\u062a\u0648\u0633\u0637\", hi:\"\u0639\u0627\u0644\u064d\"},\n    insights:(ctx)=>`\u0623\u0639\u0644\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0641\u064a \u0627\u0644\u0645\u062e\u0627\u0637\u0631: ${ctx.topDim} \u2022 \u0645\u0633\u0627\u0647\u0645\u0629 \u0645\u0646\u062e\u0641\u0636\u0629: ${ctx.lowDim}. \n\u0627\u0644\u062a\u063a\u064a\u0651\u0631 \u0627\u0644\u0645\u0642\u062a\u0631\u062d: \u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u0642\u062f\u0631\u0629 \u0627\u0644\u062a\u0643\u064a\u0641\u064a\u0629 \u0628\u0645\u0642\u062f\u0627\u0631 10% \u0642\u062f \u062a\u062e\u0641\u0651\u0636 GRI \u0625\u0644\u0649 \u0646\u062d\u0648 ${ctx.next}.`\n  },\n  en:{\n    title:\"Global Risk Index Generator\",\n    about:\"An analytics engine that generates global & national risk indices from multi-source data\",\n    country:\"Country\/Entity field\", haz:\"Hazard\", exp:\"Exposure\", vul:\"Vulnerability\", sens:\"Sensitivity\", cap:\"Adaptive Capacity\",\n    weights:\"Dimension weights (risk share = 1.0)\", capw:\"Adaptive Capacity weight (0\u20131)\",\n    view:\"Detail view for\", gri:\"Global Risk Index (0\u2013100)\", band:\"Band\", weak:\"Weakest dimension\", ranking:\"Ranking by GRI\",\n    formula:\"Formula: GRI = weighted average (H,E,V,S) \u00d7 (1 \u2212 wA \u00d7 A) \u2192 scaled to 0\u2013100\",\n    norm:\"Columns are auto-normalized to 0\u20131 based on your dataset.\",\n    bands:{low:\"Low\", mod:\"Moderate\", hi:\"High\"},\n    insights:(ctx)=>`Top driver: ${ctx.topDim} \u2022 Lowest: ${ctx.lowDim}. \nIf Adaptive Capacity rises by 10%, projected GRI \u2248 ${ctx.next}.`\n  }\n};\n\nconst els={\n  lang:document.getElementById('lang'),\n  title:document.getElementById('title'),\n  about:document.getElementById('about'),\n  formula:document.getElementById('formula'),\n  normNote:document.getElementById('normNote'),\n  wNote:document.getElementById('wNote'),\n  csv:document.getElementById('csv'),\n  btnSample:document.getElementById('btnSample'),\n  btnRun:document.getElementById('btnRun'),\n  btnPng:document.getElementById('btnPng'),\n  btnCsvOut:document.getElementById('btnCsvOut'),\n  rowsInfo:document.getElementById('rowsInfo'),\n  colCountry:document.getElementById('colCountry'),\n  colH:document.getElementById('colH'),\n  colE:document.getElementById('colE'),\n  colV:document.getElementById('colV'),\n  colS:document.getElementById('colS'),\n  colA:document.getElementById('colA'),\n  countrySel:document.getElementById('countrySel'),\n  kGRI:document.getElementById('kGRI'),\n  kBand:document.getElementById('kBand'),\n  kWeak:document.getElementById('kWeak'),\n  radar:document.getElementById('radar'),\n  bars:document.getElementById('bars'),\n  insights:document.getElementById('insights'),\n  \/\/ weights\n  wH:document.getElementById('wH'), wE:document.getElementById('wE'), wV:document.getElementById('wV'), wS:document.getElementById('wS'), wA:document.getElementById('wA')\n};\n\nlet RAW=[], COLS=[], NORM={}, RES=[];\nlet RADAR, BARS;\n\nfunction applyLang(){\n  const t=I18N[els.lang.value];\n  document.documentElement.lang=els.lang.value;\n  document.documentElement.dir=(els.lang.value==='ar')?'rtl':'ltr';\n  els.title.textContent=t.title;\n  els.about.textContent=t.about;\n  document.querySelectorAll('[data-i]').forEach(e=>{e.textContent=t[e.getAttribute('data-i')]});\n  els.formula.textContent=(els.lang.value==='ar')? \"\u0627\u0644\u0645\u0639\u0627\u062f\u0644\u0629: GRI = \u0645\u062a\u0648\u0633\u0637 \u0645\u0631\u062c\u0651\u062d (H,E,V,S) \u00d7 (1 \u2212 wA \u00d7 A) \u2192 \u0645\u0636\u0631\u0648\u0628 \u0641\u064a 100\" : \"Formula: GRI = weighted average (H,E,V,S) \u00d7 (1 \u2212 wA \u00d7 A) \u2192 scaled to 0\u2013100\";\n  els.normNote.textContent=t.norm;\n  runAll();\n}\n\nfunction setColumns(cols){\n  COLS = cols;\n  [els.colCountry, els.colH, els.colE, els.colV, els.colS, els.colA].forEach(sel=>{\n    sel.innerHTML=''; cols.forEach(c=>{const o=document.createElement('option'); o.value=c; o.textContent=c; sel.appendChild(o);});\n  });\n  \/\/ heuristic defaults\n  const find=(pat,def)=> cols.find(c=>pat.test(c)) || def || cols[0];\n  els.colCountry.value = find(\/country|name|region|entity\/i, cols[0]);\n  els.colH.value = find(\/haz|flood|drought|risk\/i, cols[1]);\n  els.colE.value = find(\/expos\/i, cols[2]);\n  els.colV.value = find(\/vuln\/i, cols[3]);\n  els.colS.value = find(\/sens\/i, cols[4]);\n  els.colA.value = find(\/adapt|cap\/i, cols[5]);\n}\n\nfunction parseCSV(text){\n  const lines=text.split(\/\\r?\\n\/).map(l=>l.trim()).filter(Boolean);\n  const head=lines[0].split(',').map(x=>x.trim());\n  const rows=lines.slice(1).map(l=>l.split(',').map(x=>x.trim()));\n  RAW = rows.map(r=>{\n    const obj={}; head.forEach((h,i)=>obj[h]=r[i]); return obj;\n  });\n  setColumns(head);\n  els.rowsInfo.textContent=`${RAW.length} rows \u2022 ${head.length} columns`;\n  populateCountrySel();\n}\n\nfunction populateCountrySel(){\n  const cCol=els.colCountry.value;\n  const names = [...new Set(RAW.map(r=>r[cCol]).filter(Boolean))];\n  els.countrySel.innerHTML=''; names.forEach(n=>{const o=document.createElement('option'); o.value=n; o.textContent=n; els.countrySel.appendChild(o);});\n}\n\nfunction minmax(vals){\n  const nums=vals.map(v=>+v).filter(v=>isFinite(v));\n  const mn=Math.min(...nums), mx=Math.max(...nums);\n  return {mn, mx, norm:(x)=> (mx===mn? 0.5 : ( (x-mn)\/(mx-mn) )) };\n}\n\nfunction normalize(){\n  const cH=els.colH.value, cE=els.colE.value, cV=els.colV.value, cS=els.colS.value, cA=els.colA.value;\n  const mmH=minmax(RAW.map(r=>+r[cH])); const mmE=minmax(RAW.map(r=>+r[cE]));\n  const mmV=minmax(RAW.map(r=>+r[cV])); const mmS=minmax(RAW.map(r=>+r[cS]));\n  const mmA=minmax(RAW.map(r=>+r[cA]));\n  NORM = {H:mmH, E:mmE, V:mmV, S:mmS, A:mmA};\n\n  const wH=+els.wH.value||0, wE=+els.wE.value||0, wV=+els.wV.value||0, wS=+els.wS.value||0, wA=+els.wA.value||0;\n  const riskW = Math.max(1e-9, (wH+wE+wV+wS));\n  els.wNote.textContent = `Risk weights sum: ${riskW.toFixed(2)}`;\n\n  RES = RAW.map(r=>{\n    const H = mmH.norm(+r[cH]); const E=mmE.norm(+r[cE]); const V=mmV.norm(+r[cV]); const S=mmS.norm(+r[cS]); const A=mmA.norm(+r[cA]);\n    const riskAvg = (wH*H + wE*E + wV*V + wS*S)\/riskW;            \/\/ 0..1\n    const adjusted = Math.max(0, Math.min(1, riskAvg * (1 - wA*A))); \/\/ reduce by capacity\n    const gri = Math.round(adjusted * 100);                          \/\/ 0..100\n    \/\/ top\/low dimensions (by contribution)\n    const contr = [\n      {k:'H', v:wH*H}, {k:'E', v:wE*E}, {k:'V', v:wV*V}, {k:'S', v:wS*S}, {k:'A', v:wA*A}\n    ];\n    contr.sort((a,b)=>b.v-a.v);\n    return { name:r[els.colCountry.value], H,E,V,S,A, gri, top:contr[0].k, low:contr[contr.length-1].k };\n  });\n\n  \/\/ fill country selector\n  populateCountrySel();\n}\n\nfunction bandColor(score){\n  if(score<50) return {txt:I18N[els.lang.value].bands.low, color:'var(--bad)'};\n  if(score<70) return {txt:I18N[els.lang.value].bands.mod, color:'var(--mid)'};\n  return {txt:I18N[els.lang.value].bands.hi, color:'var(--ok)'};\n}\n\nfunction drawRadar(name){\n  const rec = RES.find(x=>x.name===name) || RES[0]; if(!rec) return;\n  const t=I18N[els.lang.value];\n  \/\/ KPIs\n  els.kGRI.textContent = rec.gri;\n  const band = bandColor(rec.gri);\n  els.kBand.innerHTML = `<span class=\"status\"><span class=\"dot\" style=\"background:${band.color}\"><\/span> ${band.txt}<\/span>`;\n  const dimNames = {H:t.haz, E:t.exp, V:t.vul, S:t.sens, A:t.cap};\n  const weakKey = ['H','E','V','S'].reduce((w,k)=> rec[k] < rec[w]? k:w, 'H'); \/\/ \u0623\u0636\u0639\u0641 \u0628\u064a\u0646 \u0639\u0648\u0627\u0645\u0644 \u0627\u0644\u062e\u0637\u0631 (\u0628\u062f\u0648\u0646 A)\n  els.kWeak.textContent = dimNames[weakKey];\n\n  \/\/ Insights\n  const contribLabel = {H:t.haz,E:t.exp,V:t.vul,S:t.sens,A:t.cap};\n  const topDim = contribLabel[rec.top], lowDim = contribLabel[rec.low];\n  const proj = Math.max(0, Math.min(100, Math.round(rec.gri * (1 - (0.1 * (+els.wA.value||0))))));\n  els.insights.textContent = I18N[els.lang.value].insights({topDim, lowDim, next:proj});\n\n  \/\/ Radar\n  const labels=[t.haz,t.exp,t.vul,t.sens,t.cap];\n  const vals=[rec.H,rec.E,rec.V,rec.S,rec.A].map(x=>Math.round(x*100));\n  if(RADAR) RADAR.destroy();\n  RADAR = new Chart(els.radar.getContext('2d'), {\n    type:'radar',\n    data:{labels, datasets:[{data:vals, borderColor:'#22a3ff', backgroundColor:'rgba(34,163,255,0.25)', pointBackgroundColor:'#60a5fa'}]},\n    options:{plugins:{legend:{display:false}}, scales:{r:{suggestedMin:0,suggestedMax:100, angleLines:{color:'#21335d'}, grid:{color:'#1b2f59'}, pointLabels:{color:'#9fb3d9'}, ticks:{display:true, color:'#9fb3d9', stepSize:20, showLabelBackdrop:false}}}}\n  });\n}\n\nfunction drawBars(){\n  const t=I18N[els.lang.value];\n  const top = [...RES].sort((a,b)=>b.gri-a.gri).slice(0,12);\n  if(BARS) BARS.destroy();\n  BARS = new Chart(els.bars.getContext('2d'), {\n    type:'bar',\n    data:{labels: top.map(x=>x.name), datasets:[{data: top.map(x=>x.gri), backgroundColor: top.map(x=>bandColor(x.gri).color)}]},\n    options:{plugins:{legend:{display:false}}, scales:{y:{grid:{color:'#1d2e57'}, ticks:{color:'#9fb3d9'}}, x:{grid:{display:false}, ticks:{color:'#9fb3d9'}}}}\n  });\n}\n\nfunction runAll(){\n  if(!RAW.length){ loadSample(); }\n  normalize();\n  drawBars();\n  drawRadar(els.countrySel.value || (RES[0]?.name));\n}\n\n\/\/ Export\nels.btnPng.onclick=()=>{ html2canvas(document.getElementById('capture'),{backgroundColor:'#0b1224',scale:2}).then(c=>{const a=document.createElement('a'); a.href=c.toDataURL('image\/png'); a.download='aman360-global-risk-index.png'; a.click();}); };\nels.btnCsvOut.onclick=()=>{\n  const rows=[['country','H','E','V','S','A','GRI']];\n  RES.forEach(r=>rows.push([r.name, r.H.toFixed(4), r.E.toFixed(4), r.V.toFixed(4), r.S.toFixed(4), r.A.toFixed(4), r.gri]));\n  const csv=rows.map(r=>r.join(',')).join('\\n'); const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'}); const url=URL.createObjectURL(blob);\n  const a=document.createElement('a'); a.href=url; a.download='aman360-gri-results.csv'; a.click(); URL.revokeObjectURL(url);\n};\n\n\/\/ Events\nels.lang.onchange=applyLang;\nels.btnRun.onclick=runAll;\nels.countrySel.onchange=()=>drawRadar(els.countrySel.value);\n[els.colCountry, els.colH, els.colE, els.colV, els.colS, els.colA].forEach(s=> s.addEventListener('change', ()=>{normalize(); drawBars(); drawRadar(els.countrySel.value);} ));\n[els.wH,els.wE,els.wV,els.wS,els.wA].forEach(i=> i.addEventListener('input', ()=>{runAll();}) );\n\n\/\/ CSV loader\nels.csv.onchange=(e)=>{\n  const f=e.target.files?.[0]; if(!f) return;\n  const rd=new FileReader();\n  rd.onload=()=>{ parseCSV(rd.result); runAll(); };\n  rd.readAsText(f,'utf-8');\n};\n\n\/\/ Sample dataset\nconst SAMPLE = `country,hazard,exposure,vulnerability,sensitivity,adaptive_capacity\nJordan,0.65,0.55,0.38,0.32,0.62\nEgypt,0.40,0.60,0.30,0.28,0.55\nLebanon,0.35,0.48,0.45,0.40,0.50\nSaudiArabia,0.25,0.42,0.22,0.20,0.78\nUAE,0.20,0.38,0.18,0.16,0.82\nMorocco,0.50,0.52,0.41,0.33,0.57\nTunisia,0.45,0.49,0.36,0.31,0.56\nIraq,0.55,0.58,0.44,0.37,0.48\nSudan,0.60,0.62,0.47,0.42,0.40\nAlgeria,0.30,0.44,0.29,0.25,0.63\nKuwait,0.22,0.35,0.21,0.18,0.80\nQatar,0.18,0.33,0.17,0.15,0.85\nOman,0.28,0.41,0.24,0.22,0.72\nBahrain,0.26,0.39,0.20,0.18,0.77\nPalestine,0.48,0.54,0.43,0.39,0.45\nYemen,0.70,0.68,0.55,0.48,0.30`;\nfunction loadSample(){ parseCSV(SAMPLE); }\nels.btnSample.onclick=()=>{ loadSample(); runAll(); };\n\n\/\/ init\napplyLang(); loadSample(); runAll();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Aman360 \u2022 Global Risk Index Generator \u0645\u0648\u0644\u0651\u062f \u0627\u0644\u0645\u0624\u0634\u0631 \u0627\u0644\u0639\u0627\u0644\u0645\u064a \u0644\u0644\u0645\u062e\u0627\u0637\u0631 \u0627\u0644\u0639\u0631\u0628\u064a\u0629English Load sample PNG CSV \u062a\u062d\u062f\u064a\u062b \u0645\u0646\u0635\u0629 \u062a\u062d\u0644\u064a\u0644\u064a\u0629 \u062a\u0648\u0644\u0651\u062f \u0645\u0624\u0634\u0631\u0627\u062a \u0645\u062e\u0627\u0637\u0631 \u0639\u0627\u0644\u0645\u064a\u0629 \u0648\u0648\u0637\u0646\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0628\u064a\u0627\u0646\u0627\u062a \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0645\u0635\u0627\u062f\u0631 \u062d\u0642\u0644 \u0627\u0644\u062f\u0648\u0644\u0629\/\u0627\u0644\u0643\u064a\u0627\u0646 Hazard Exposure Vulnerability Sensitivity Adaptive Capacity \u2014 \u0623\u0648\u0632\u0627\u0646 \u0627\u0644\u0623\u0628\u0639\u0627\u062f (\u0627\u0644\u0645\u062c\u0645\u0648\u0639 \u0644\u0646\u0635\u064a\u0628 \u0627\u0644\u0645\u062e\u0627\u0637\u0631\u0629 = 1.0) H E V S \u0648\u0632\u0646 \u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0642\u062f\u0631\u0629 \u0627\u0644\u062a\u0643\u064a\u0641\u064a\u0629 (0\u20131) Risk weights sum: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":148,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-169","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/comments?post=169"}],"version-history":[{"count":2,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/169\/revisions"}],"predecessor-version":[{"id":171,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/169\/revisions\/171"}],"up":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/148"}],"wp:attachment":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/media?parent=169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}