{"id":243,"date":"2026-03-18T11:50:22","date_gmt":"2026-03-18T11:50:22","guid":{"rendered":"https:\/\/thefiniteearth.org\/?page_id=243"},"modified":"2026-05-14T06:22:15","modified_gmt":"2026-05-14T06:22:15","slug":"know-your-spread","status":"publish","type":"page","link":"https:\/\/thefiniteearth.org\/hindi\/know-your-spread\/","title":{"rendered":"Find Your Referral Code"},"content":{"rendered":"<p>FEM&#8217;Us \u2013 Your Impact[tcb-script src=&#8221;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js&#8221;][\/tcb-script]      Finite Earth Movement &amp; Us    <\/p>\n<h1>Your <em>Impact<\/em><\/h1>\n<p>Measure the change you are creating<\/p>\n<p>  Step 4: Track your impact      <\/p>\n<p>      Climate change is not caused by a few \u2014 <strong>it is the result of everyday consumption by all of us.<\/strong> And it will not be solved by a few \u2014 <strong>it requires action from everyone.<\/strong>      <\/p>\n<p>      Your effort matters. Your impact is measurable. Every person who takes the FEM\u2019Us Pledge of Finite Living reduces air, water, soil pollution and carbon emissions. Enter your FEM\u2019Us code to find out how much your efforts have saved.    <\/p>\n<p>                                                              <span>Submit<\/span>                          <span>or<\/span>                                                    <span>Submit<\/span>                                                            Forgot FEM\u2019Us Code                                            Download Your DP                                        <!-- DP BUILDER PANEL -->                          Back to Impact Search                              <span><img decoding=\"async\" role=\"img\" alt=\"\ud83c\udf96\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f396.svg\"><\/span>          Build Your Satyagrahi Badge                                    How to use                                      1          Photo                          2          Title                          3          Preview                    <!-- STEP 1: Photo -->                                    <img decoding=\"async\" id=\"dp-photo-preview\" src=\"\" alt=\"Preview\" style=\"\">                                                  Upload your photo            Tap to choose from gallery or camera                                            <span>Photo Guidelines<\/span>          <\/p>\n<ul>\n<li>Use a clear, well-lit face photo (selfie works best)<\/li>\n<li>Square crop recommended \u2022 Min 500\u00d7500px<\/li>\n<li>Upload this photo, download it from here, and set it as your DP.<\/li>\n<\/ul>\n<p>                          Choose Identity                              <!-- STEP 2: Title -->              <span>Select the label that appears on your badge:<\/span>                          Preview Badge                                              Back                    <!-- STEP 3: Preview & Share -->                                                              <span>Face Position<\/span>                                            <span>Photo Zoom<\/span>                                      Drag photo to adjust position                            Download HD Badge                Share Your Badge                  <a href=\"#\" target=\"_blank\" id=\"dp-share-wa\">                        WhatsApp          <\/a>          <a href=\"#\" target=\"_blank\" id=\"dp-share-ig\">                        Instagram          <\/a>          <a href=\"#\" target=\"_blank\" id=\"dp-share-li\">                        LinkedIn          <\/a>                          <a href=\"#\" target=\"_blank\" id=\"dp-share-x\">                        Twitter \/ X          <\/a>          <a href=\"#\" target=\"_blank\" id=\"dp-share-fb\">                        Facebook          <\/a>                <\/p>\n<p>After downloading, set the image as your WhatsApp or social media profile picture to support and spread the movement!<\/p>\n<p>                            Back                      <!-- Forgot panel -->                          Back to Impact Search            <span>Search by Name, Phone or Email<\/span>                        Name                          Phone                          Email                                                        <span id=\"fbtxt\">Find My Referral Code<\/span>                        <\/p>\n<p>Still having trouble? <strong>Contact us<\/strong> &nbsp;\u2014&nbsp;      <a href=\"tel:9039034404\">                9039034404      <\/a>      <span>\u00b7<\/span>      <a href=\"mailto:femus@energyswaraj.org\">                femus@energyswaraj.org      <\/a>    <\/p>\n<p>Share your code and grow the FEM\u2019Us tribe<\/p>\n<p>  <!-- HOW TO USE MODAL -->      \u00d7    <\/p>\n<h3>How to Build Your Badge<\/h3>\n<p>          1      <strong>Step 1 \u2013 Photo:<\/strong> Upload your selfie or portrait photo (square or portrait works best, min 500\u00d7500px).              2      <strong>Step 2 \u2013 Title:<\/strong> Choose any one of the 6 identity titles that will appear on your badge.              3      <strong>Step 3 \u2013 Preview &amp; Share:<\/strong>        <br \/>\u2022 Use the <strong>Face Position<\/strong> slider to move the photo up or down.        <br \/>\u2022 Use the <strong>Photo Zoom<\/strong> slider to zoom in or out.        <br \/>\u2022 Click <strong>Download HD Badge<\/strong> to save a high-quality PNG.                    <strong>Tip:<\/strong> After downloading, set the image as your WhatsApp or social media profile picture to spread the movement!      <!-- CERTIFICATE OVERLAY -->      \u00d7    Your Certificate          <img decoding=\"async\" id=\"cert-img\" src=\"\" style=\"width:100%;display:block;border-radius:12px\" crossorigin=\"anonymous\" alt=\"FEM'Us Certificate\" onload=\"positionCertOverlays()\">                                          Download Certificate            Close      [tcb-script]var SHEET_ID = &#8216;1mvbjtWsdNMMKcMkIgDSBXRacCBZ1YbDizKzksGut0To&#8217;;var REF_BASE = &#8216;https:\/\/thefiniteearth.org\/pledge?ref=&#8217;;var BASE = { water_L: 20250, co2_kg: 52.5, chem_kg: 3.75 };var MILESTONES = { bronze: 11, silver: 25, gold: 50, platinum: 100 };var CERT_IMG_BRONZE   = &#8216;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM.jpeg&#8217;;var CERT_IMG_SILVER   = &#8216;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM-1.jpeg&#8217;;var CERT_IMG_GOLD     = &#8216;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM-2.jpeg&#8217;;var CERT_IMG_PLATINUM = &#8216;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/WhatsApp-Image-2026-04-02-at-10.18.45-AM.jpeg&#8217;;var C = { name:&#8217;Name&#8217;, email:&#8217;Email&#8217;, phone:&#8217;Phone&#8217;, city:&#8217;City&#8217;, country:&#8217;Country&#8217;, code:&#8217;Referral Code&#8217;, used:&#8217;Used Referral Code&#8217; };var activeTab = &#8216;name&#8217;;var _sheetCache = null, _sheetFetchPromise = null;var certName = &#8221;, certStats = {}, activeCertType = &#8216;bronze&#8217;, activeCertCode = &#8221;;var milestoneDates = {};var PH = { name:&#8217;Enter your full name&#8217;, phone:&#8217;Enter your phone number&#8217;, email:&#8217;Enter your email address&#8217; };var _cityAllPeople = [];function fetchCSV(sheetName) {  var url = &#8216;https:\/\/docs.google.com\/spreadsheets\/d\/&#8217; + SHEET_ID + &#8216;\/gviz\/tq?tqx=out:csv&#8217; + (sheetName ? &#8216;&amp;sheet=&#8217; + encodeURIComponent(sheetName) : &#8221;);  return fetch(url, { cache: &#8216;no-store&#8217; })    .then(function(r) { if (!r.ok) throw new Error(&#8216;HTTP &#8216; + r.status); return r.text(); })    .then(function(csv) { if (!csv || csv.length &lt; 20) throw new Error(&#8216;Empty&#8217;); return csv; });}function loadSheet() {  if (_sheetCache) return Promise.resolve(_sheetCache);  if (_sheetFetchPromise) return _sheetFetchPromise;  var names = [&#8220;FEMu2019Us Pledge data&#8221;, &#8220;FEM&#8217;Us Pledge data&#8221;, &#8220;&#8221;];  _sheetFetchPromise = new Promise(function(resolve, reject) {    function tryNext(i) {      if (i &gt;= names.length) { _sheetFetchPromise = null; reject(new Error(&#8216;Could not load sheet.&#8217;)); return; }      fetchCSV(names[i])        .then(function(csv) { var p = parseCSV(csv); _sheetCache = p; _sheetFetchPromise = null; resolve(p); })        .catch(function() { tryNext(i + 1); });    }    tryNext(0);  });  return _sheetFetchPromise;}function warmCache() { loadSheet().catch(function() {}); }function parseCSV(text) {  var rows = [], lines = text.split(&#8216;n&#8217;);  for (var i = 0; i &lt; lines.length; i++) {    var l = lines[i].trim();    if (l) rows.push(parseCSVRow(l));  }  return rows;}function parseCSVRow(line) {  var cells = [], cur = &#8221;, inQ = false;  for (var i = 0; i &lt; line.length; i++) {    var ch = line[i];    if (ch === &#8216;&#8221;&#8216;) {      if (inQ &amp;&amp; line[i + 1] === &#8216;&#8221;&#8216;) { cur += &#8216;&#8221;&#8216;; i++; }      else { inQ = !inQ; }    } else if (ch === &#8216;,&#8217; &amp;&amp; !inQ) {      cells.push(cur.trim()); cur = &#8221;;    } else { cur += ch; }  }  cells.push(cur.trim());  return cells;}function buildIdx(h) { var idx = {}; for (var k in C) idx[k] = h.indexOf(C[k]); return idx; }function getReferreds(rows, idx, code) {  var list = [];  for (var i = 1; i &lt; rows.length; i++) {    var used = (rows[i][idx.used] || &#8221;).trim();    if (code &amp;&amp; used.toLowerCase() === code.toLowerCase())      list.push({ name: rows[i][idx.name] || &#8221;, city: rows[i][idx.city] || &#8221;, country: rows[i][idx.country] || &#8221; });  }  return list;}function flashErr(inp) {  inp.style.borderColor = &#8216;#e05050&#8217;; inp.style.boxShadow = &#8216;0 0 0 3px rgba(224,80,80,.15)&#8217;;  setTimeout(function() { inp.style.borderColor = &#8221;; inp.style.boxShadow = &#8221;; }, 1500);}function esc(s) {  return String(s || &#8221;).replace(\/[&amp;&lt;&gt;&#8221;&#8216;]\/g, function(c) {    return { &#8216;&amp;&#8217;: &#8216;&amp;amp;&#8217;, &#8216;&lt;&#8216;: &#8216;&amp;lt;&#8217;, &#8216;&gt;&#8217;: &#8216;&amp;gt;&#8217;, &#8216;&#8221;&#8216;: &#8216;&amp;quot;&#8217;, &#8220;&#8216;&#8221;: &#8216;&amp;#39;&#8217; }[c];  });}function fmt(n) { return Number(n).toLocaleString(); }function toggleForgot() {  document.getElementById(&#8216;panel-dp&#8217;).classList.remove(&#8216;show&#8217;);  var panel = document.getElementById(&#8216;panel-forgot&#8217;);  if (panel.classList.contains(&#8216;show&#8217;)) {    panel.classList.remove(&#8216;show&#8217;);    document.getElementById(&#8216;forgot-out&#8217;).innerHTML = &#8221;;  } else {    panel.classList.add(&#8216;show&#8217;);    document.getElementById(&#8216;out&#8217;).innerHTML = &#8221;;    document.getElementById(&#8216;city-out&#8217;).innerHTML = &#8221;;    panel.scrollIntoView({ behavior: &#8216;smooth&#8217;, block: &#8216;start&#8217; });    setTimeout(function() { document.getElementById(&#8216;fq&#8217;).focus(); }, 300);  }}function setTab(t) {  activeTab = t;  [&#8216;name&#8217;, &#8216;phone&#8217;, &#8217;email&#8217;].forEach(function(k) {    var el = document.getElementById(&#8216;t-&#8216; + k);    if (el) el.className = &#8216;tb&#8217; + (k === t ? &#8216; on&#8217; : &#8221;);  });  var inp = document.getElementById(&#8216;fq&#8217;);  inp.placeholder = PH[t]; inp.value = &#8221;;  inp.style.borderColor = &#8221;; inp.style.boxShadow = &#8221;;  document.getElementById(&#8216;forgot-out&#8217;).innerHTML = &#8221;;  setTimeout(function() { inp.focus(); }, 50);}\/\/ CODE SEARCHfunction doImpactSearch() {  var inp = document.getElementById(&#8216;impact-code&#8217;), btn = document.getElementById(&#8216;impact-btn&#8217;), out = document.getElementById(&#8216;out&#8217;);  var code = inp.value.trim().toUpperCase();  if (!code) { flashErr(inp); inp.focus(); return; }  btn.disabled = true;  btn.innerHTML = &#8216;&lt;div&gt;&lt;\/div&gt; Searchingu2026&#8217;;  out.innerHTML = &#8221;;  document.getElementById(&#8216;city-out&#8217;).innerHTML = &#8221;;  loadSheet().then(function(rows) {    var idx = buildIdx(rows[0]), ownerRow = null;    for (var r = 1; r &lt; rows.length; r++) {      if ((rows[r][idx.code] || &#8221;).trim().toUpperCase() === code) { ownerRow = rows[r]; break; }    }    if (!ownerRow) { showErr(out, &#8216;No record found for code &#8220;&#8216; + esc(code) + &#8216;&#8221;. Please check and try again.&#8217;); return; }    var name = ownerRow[idx.name] || &#8221;, referred = getReferreds(rows, idx, code), cnt = referred.length;    var email = ownerRow[idx.email] || &#8221;, city = ownerRow[idx.city] || &#8221;, country = ownerRow[idx.country] || &#8221;, masked = &#8221;;    if (email) { var p = email.split(&#8216;@&#8217;); masked = p[0].substring(0, 2) + &#8216;***@&#8217; + (p[1] || &#8221;); }    var loc = [city, country].filter(Boolean).join(&#8216;, &#8216;);    var meta = [masked, loc].filter(Boolean).join(&#8216; u00b7 &#8216;);    certName = name; activeCertCode = code;    certStats = { cnt: cnt, water_L: cnt * BASE.water_L, co2_kg: cnt * BASE.co2_kg, chem_kg: cnt * BASE.chem_kg };    showImpactResult(out, { name: name, meta: meta, code: code, referred: referred });    document.getElementById(&#8216;panel-forgot&#8217;).classList.remove(&#8216;show&#8217;);    document.getElementById(&#8216;panel-dp&#8217;).classList.remove(&#8216;show&#8217;);  })  .catch(function(e) { showErr(out, &#8216;Could not load data: &#8216; + e.message); })  .finally(function() {    btn.disabled = false;    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;circle cx=&#8221;11&#8243; cy=&#8221;11&#8243; r=&#8221;8&#8243;\/&gt;&lt;path d=&#8221;M21 21l-4.35-4.35&#8243;\/&gt;&lt;\/svg&gt; Submit&#8217;;  });}\/\/ CITY SEARCHfunction doCitySearch() {  var inp = document.getElementById(&#8216;city-input&#8217;), btn = document.getElementById(&#8216;city-btn&#8217;), out = document.getElementById(&#8216;city-out&#8217;);  var cityQuery = inp.value.trim();  if (!cityQuery) { flashErr(inp); inp.focus(); return; }  btn.disabled = true;  btn.innerHTML = &#8216;&lt;div&gt;&lt;\/div&gt; Searchingu2026&#8217;;  out.innerHTML = &#8221;;  document.getElementById(&#8216;out&#8217;).innerHTML = &#8221;;  loadSheet().then(function(rows) {    var idx = buildIdx(rows[0]), q = cityQuery.toLowerCase(), cityPeople = [];    for (var r = 1; r &lt; rows.length; r++) {      var rc = (rows[r][idx.city] || &#8221;).toLowerCase().trim();      if (rc === q || rc.indexOf(q) !== -1) {        cityPeople.push({ name: rows[r][idx.name] || &#8221;, city: rows[r][idx.city] || &#8221;, country: rows[r][idx.country] || &#8221; });      }    }    var total = cityPeople.length;    if (total === 0) { showErr(out, &#8216;No pledges found for &#8220;&#8216; + esc(cityQuery) + &#8216;&#8221;. Please check spelling or try another city.&#8217;); return; }    _cityAllPeople = cityPeople;    var water = total * BASE.water_L, co2 = (total * BASE.co2_kg).toFixed(1), chem = (total * BASE.chem_kg).toFixed(2);    var displayCity = cityPeople[0].city || cityQuery;    var INITIAL_SHOW = 100;    var peopleRows = buildCityRows(cityPeople, 0, Math.min(INITIAL_SHOW, total));    var showMoreHtml = &#8221;;    if (total &gt; INITIAL_SHOW) {      showMoreHtml = &#8216;&lt;button type=&#8221;button&#8221; id=&#8221;city-show-more-btn&#8221; onclick=&#8221;toggleCityRows(this,&#8217; + INITIAL_SHOW + &#8216;,&#8217; + total + &#8216;)&#8221;&gt;&#8217;        + &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M6 9l6 6 6-6&#8243;\/&gt;&lt;\/svg&gt;&#8217;        + &#8216;+ &#8216; + (total &#8211; INITIAL_SHOW) + &#8216; more people u2014 tap to show all&#8217;        + &#8216;&lt;\/button&gt;&#8217;;    }    out.innerHTML = &#8216;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;\/div&gt; CITY IMPACT REPORT&lt;\/div&gt;&#8217;      + &#8216;&lt;div&gt;&lt;div style=&#8221;font-size:22px&#8221;&gt;&amp;#127759;&lt;\/div&gt;&lt;div&gt;&#8217;      + &#8216;&lt;span&gt;&#8217; + esc(displayCity) + &#8216;&lt;\/span&gt;&#8217;      + &#8216;&lt;span&gt;Collective impact from &#8216; + total + &#8216; FEMu2019Us pledge&#8217; + (total !== 1 ? &#8216;s&#8217; : &#8221;) + &#8216;&lt;\/span&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;      + &#8216;&lt;div&gt;&#8217;      + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + fmt(total) + &#8216;&lt;\/span&gt;&lt;span&gt;Total Pledges&lt;\/span&gt;&lt;\/div&gt;&#8217;      + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + Number((water \/ 1000000).toFixed(2)) + &#8216; Million L&lt;\/span&gt;&lt;span&gt;Water Saved&lt;\/span&gt;&lt;\/div&gt;&#8217;      + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + co2 + &#8216; kg&lt;\/span&gt;&lt;span&gt;CO&amp;#8322; Reduced&lt;\/span&gt;&lt;\/div&gt;&#8217;      + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + chem + &#8216; kg&lt;\/span&gt;&lt;span&gt;Chemicals Reduced&lt;\/span&gt;&lt;\/div&gt;&#8217;      + &#8216;&lt;\/div&gt;&#8217;      + &#8216;&lt;span&gt;Pledges from &#8216; + esc(displayCity) + &#8216; (&#8216; + total + &#8216;)&lt;\/span&gt;&#8217;      + &#8216;&lt;table id=&#8221;city-table&#8221;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;S.No.&lt;\/th&gt;&lt;th&gt;Name&lt;\/th&gt;&lt;th&gt;City \/ Country&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;&#8217;      + &#8216;&lt;tbody id=&#8221;city-tbody&#8221;&gt;&#8217; + peopleRows + &#8216;&lt;\/tbody&gt;&lt;\/table&gt;&#8217;      + showMoreHtml + &#8216;&lt;\/div&gt;&#8217;;    document.getElementById(&#8216;panel-forgot&#8217;).classList.remove(&#8216;show&#8217;);    document.getElementById(&#8216;panel-dp&#8217;).classList.remove(&#8216;show&#8217;);  })  .catch(function(e) { showErr(out, &#8216;Could not load data: &#8216; + e.message); })  .finally(function() {    btn.disabled = false;    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;circle cx=&#8221;11&#8243; cy=&#8221;11&#8243; r=&#8221;8&#8243;\/&gt;&lt;path d=&#8221;M21 21l-4.35-4.35&#8243;\/&gt;&lt;\/svg&gt; Submit&#8217;;  });}function buildCityRows(people, from, to) {  var html = &#8221;;  for (var i = from; i &lt; to; i++) {    var p = people[i];    html += &#8216;&lt;tr&gt;&lt;td&gt;&#8217; + (i + 1) + &#8216;&lt;\/td&gt;&lt;td&gt;&#8217; + esc(p.name) + &#8216;&lt;\/td&gt;&lt;td&gt;&#8217; + esc([p.city, p.country].filter(Boolean).join(&#8216;, &#8216;)) + &#8216;&lt;\/td&gt;&lt;\/tr&gt;&#8217;;  }  return html;}function toggleCityRows(btn, initialShow, total) {  var tbody = document.getElementById(&#8216;city-tbody&#8217;);  var expanded = btn.classList.contains(&#8216;expanded&#8217;);  if (!expanded) {    tbody.innerHTML = buildCityRows(_cityAllPeople, 0, total);    btn.classList.add(&#8216;expanded&#8217;);    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M6 9l6 6 6-6&#8243;\/&gt;&lt;\/svg&gt; Show less&#8217;;  } else {    tbody.innerHTML = buildCityRows(_cityAllPeople, 0, Math.min(initialShow, total));    btn.classList.remove(&#8216;expanded&#8217;);    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M6 9l6 6 6-6&#8243;\/&gt;&lt;\/svg&gt;+ &#8216; + (total &#8211; initialShow) + &#8216; more people u2014 tap to show all&#8217;;    var table = document.getElementById(&#8216;city-table&#8217;);    if (table) table.scrollIntoView({ behavior: &#8216;smooth&#8217;, block: &#8216;nearest&#8217; });  }}function buildImpactTable(cnt) {  var water = cnt * BASE.water_L, co2 = (cnt * BASE.co2_kg).toFixed(1), chem = (cnt * BASE.chem_kg).toFixed(2);  return &#8216;&lt;div&gt;&lt;span&gt;Your Impact in Numbers&lt;\/span&gt;&#8217;    + &#8216;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;No. of People&lt;\/th&gt;&lt;th&gt;Litres of Water Saved&lt;\/th&gt;&lt;th&gt;kg of CO&amp;#8322; Reduced&lt;\/th&gt;&lt;th&gt;kg of Chemicals Reduced&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;&#8217;    + &#8216;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&#8217; + cnt + &#8216;&lt;\/td&gt;&#8217;    + &#8216;&lt;td&gt;&#8217; + Number((water \/ 1000000).toFixed(2)) + &#8216; Million L&lt;\/td&gt;&#8217;    + &#8216;&lt;td&gt;&#8217; + co2 + &#8216; kg&lt;\/td&gt;&#8217;    + &#8216;&lt;td&gt;&#8217; + chem + &#8216; kg&lt;\/td&gt;&#8217;    + &#8216;&lt;\/tr&gt;&lt;\/tbody&gt;&lt;\/table&gt;&lt;\/div&gt;&#8217;;}function buildCertSection(cnt) {  var bronzeOk = cnt &gt;= MILESTONES.bronze, silverOk = cnt &gt;= MILESTONES.silver, goldOk = cnt &gt;= MILESTONES.gold, platinumOk = cnt &gt;= MILESTONES.platinum;  var levels = [{ key: &#8216;bronze&#8217;, val: MILESTONES.bronze }, { key: &#8216;silver&#8217;, val: MILESTONES.silver }, { key: &#8216;gold&#8217;, val: MILESTONES.gold }, { key: &#8216;platinum&#8217;, val: MILESTONES.platinum }];  var nextLevel = null, prevVal = 0;  for (var i = 0; i &lt; levels.length; i++) { if (cnt &lt; levels[i].val) { nextLevel = levels[i]; prevVal = i &gt; 0 ? levels[i &#8211; 1].val : 0; break; } }  var pct = platinumOk ? 100 : Math.min(100, Math.round(((cnt &#8211; prevVal) \/ (nextLevel.val &#8211; prevVal)) * 100));  var barColor = platinumOk ? &#8216;linear-gradient(90deg,#1e3a5a,#4a90b8,#70b8d8,#4a90b8)&#8217; : goldOk ? &#8216;linear-gradient(90deg,#6a4800,#c09000,#f0d040)&#8217; : silverOk ? &#8216;linear-gradient(90deg,#1c2230,#5a7898,#c4d4e4)&#8217; : &#8216;linear-gradient(90deg,#4a1800,#a05a20,#d4883a)&#8217;;  var nextLabel = platinumOk ? &#8216;u2705 All milestones reached!&#8217; : &#8216;Next: &#8216; + nextLevel.val + &#8216; referrals for &#8216; + nextLevel.key.charAt(0).toUpperCase() + nextLevel.key.slice(1);  var nextHint = platinumOk ? &#8216;u2728 You have unlocked all 4 certificates. You are a FEMu2019Us Champion!&#8217; : &#8216;Keep sharing to reach your next milestone.&#8217;;  function certCard(type, icon, label, threshold, unlocked) {    var cls = &#8216;cert-card &#8216; + type + &#8216; &#8216; + (unlocked ? &#8216;unlocked&#8217; : &#8216;locked&#8217;);    var lockIco = unlocked ? &#8221; : &#8216;&lt;span&gt;uD83DuDD12&lt;\/span&gt;&#8217;;    var btnInner = unlocked ? &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3&#8243;\/&gt;&lt;\/svg&gt; Download&#8217; : &#8216;uD83DuDD12 &#8216; + threshold + &#8216; needed&#8217;;    var onclick = unlocked ? &#8216; onclick=&#8221;openCert(&#8221; + type + &#8221;)&#8221;&#8216; : &#8221;;    var disabled = unlocked ? &#8221; : &#8216; disabled&#8217;;    return &#8216;&lt;div&gt;&lt;span&gt;&#8217; + icon + &#8216;&lt;\/span&gt;&#8217; + lockIco + &#8216;&lt;div&gt;&#8217; + label + &#8216;&lt;\/div&gt;&lt;div&gt;&#8217; + threshold + &#8216; referrals&lt;\/div&gt;&lt;button&#8217; + disabled + onclick + &#8216;&gt;&#8217; + btnInner + &#8216;&lt;\/button&gt;&lt;\/div&gt;&#8217;;  }  return &#8216;&lt;div&gt;&lt;div style=&#8221;font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#1a7abf;margin-bottom:8px&#8221;&gt;Step 5: Get your certificate&lt;\/div&gt;&lt;div&gt;Download your Certificate of Impact&lt;\/div&gt;&#8217;    + &#8216;&lt;p&gt;Every pledge you bring is not just a number &amp;mdash; it is a real reduction in resource use and emissions.&lt;\/p&gt;&#8217;    + &#8216;&lt;p&gt;As you reach milestones of &lt;strong&gt;&#8217; + MILESTONES.bronze + &#8216;, &#8216; + MILESTONES.silver + &#8216;, &#8216; + MILESTONES.gold + &#8216;, or &#8216; + MILESTONES.platinum + &#8216; pledges&lt;\/strong&gt;, you unlock your &lt;strong&gt;Certificate of Climate Correction&lt;\/strong&gt;.&lt;br&gt;&lt;br&gt;Keep going. Your next milestone is waiting.&lt;\/p&gt;&#8217;    + &#8216;&lt;div&gt;&lt;div&gt;&lt;span&gt;&#8217; + cnt + &#8216; referral&#8217; + (cnt !== 1 ? &#8216;s&#8217; : &#8221;) + &#8216; so far&lt;\/span&gt;&lt;span&gt;&#8217; + nextLabel + &#8216;&lt;\/span&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&lt;div style=&#8221;width:&#8217; + pct + &#8216;%;background:&#8217; + barColor + &#8216;&#8221;&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&#8217;    + certCard(&#8216;bronze&#8217;, &#8216;uD83EuDD49&#8217;, &#8216;Bronze&#8217;, MILESTONES.bronze, bronzeOk)    + certCard(&#8216;silver&#8217;, &#8216;uD83EuDD48&#8217;, &#8216;Silver&#8217;, MILESTONES.silver, silverOk)    + certCard(&#8216;gold&#8217;, &#8216;uD83EuDD47&#8217;, &#8216;Gold&#8217;, MILESTONES.gold, goldOk)    + certCard(&#8216;platinum&#8217;, &#8216;uD83DuDC8E&#8217;, &#8216;Platinum&#8217;, MILESTONES.platinum, platinumOk)    + &#8216;&lt;\/div&gt;&lt;p&gt;&#8217; + nextHint + &#8216;&lt;\/p&gt;&lt;\/div&gt;&#8217;;}function showImpactResult(outEl, d) {  var cnt = d.referred.length;  var ini = d.name.split(&#8216; &#8216;).map(function(w) { return w.charAt(0); }).slice(0, 2).join(&#8221;).toUpperCase() || &#8216;?&#8217;;  var refTable = &#8221;;  if (cnt === 0) {    refTable = &#8216;&lt;span&gt;No one has used your code yet u2014 start sharing!&lt;\/span&gt;&#8217;;  } else {    refTable = &#8216;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;S.No.&lt;\/th&gt;&lt;th&gt;Name&lt;\/th&gt;&lt;th&gt;City&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;&lt;tbody&gt;&#8217;;    for (var i = 0; i &lt; d.referred.length; i++) {      var p = d.referred[i];      refTable += &#8216;&lt;tr&gt;&lt;td&gt;&#8217; + (i + 1) + &#8216;&lt;\/td&gt;&lt;td&gt;&#8217; + esc(p.name) + &#8216;&lt;\/td&gt;&lt;td&gt;&#8217; + esc([p.city, p.country].filter(Boolean).join(&#8216;, &#8216;)) + &#8216;&lt;\/td&gt;&lt;\/tr&gt;&#8217;;    }    refTable += &#8216;&lt;\/tbody&gt;&lt;\/table&gt;&#8217;;  }  var statsHtml = &#8216;&lt;div style=&#8221;margin-bottom:20px&#8221;&gt;&lt;div&gt;&lt;span&gt;&#8217; + cnt + &#8216;&lt;\/span&gt;&lt;span&gt;People You Referred&lt;\/span&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;;  outEl.innerHTML = &#8216;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;\/div&gt; IMPACT REPORT&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&lt;div&gt;&#8217; + ini + &#8216;&lt;\/div&gt;&lt;div&gt;&#8217;    + &#8216;&lt;span&gt;&#8217; + esc(d.name) + &#8216;&lt;\/span&gt;&#8217;    + (d.meta ? &#8216;&lt;span&gt;&#8217; + esc(d.meta) + &#8216;&lt;\/span&gt;&#8217; : &#8221;)    + &#8216;&lt;\/div&gt;&lt;\/div&gt;&#8217;    + statsHtml    + buildImpactTable(cnt)    + &#8216;&lt;span&gt;People who joined using your code (&#8216; + cnt + &#8216;)&lt;\/span&gt;&#8217;    + refTable    + buildCertSection(cnt)    + &#8216;&lt;\/div&gt;&#8217;;}\/\/ FORGOT CODE SEARCHfunction doForgotSearch() {  var inp = document.getElementById(&#8216;fq&#8217;), btn = document.getElementById(&#8216;fgo&#8217;), out = document.getElementById(&#8216;forgot-out&#8217;);  var query = inp.value.trim();  if (!query) { flashErr(inp); inp.focus(); return; }  btn.disabled = true;  btn.innerHTML = &#8216;&lt;div&gt;&lt;\/div&gt; Searchingu2026&#8217;;  out.innerHTML = &#8221;;  loadSheet().then(function(rows) {    var idx = buildIdx(rows[0]), q = query.toLowerCase(), matches = [];    for (var r = 1; r &lt; rows.length; r++) {      var row = rows[r]; if (!row || row.length &lt; 2) continue;      var hit = false;      if (activeTab === &#8216;name&#8217;) hit = (row[idx.name] || &#8221;).toLowerCase().indexOf(q) !== -1;      else if (activeTab === &#8216;phone&#8217;) {        var s = (row[idx.phone] || &#8221;).replace(\/D\/g, &#8221;), inp2 = q.replace(\/D\/g, &#8221;);        \/\/ Fixed: Mobile number must match exactly        hit = s.length &gt; 0 &amp;&amp; inp2.length &gt; 0 &amp;&amp; s === inp2;      } else hit = (row[idx.email] || &#8221;).toLowerCase() === q;      if (hit) {        var code = (row[idx.code] || &#8221;).trim();        var ref = getReferreds(rows, idx, code);        var email = row[idx.email] || &#8221;, masked = &#8221;;        if (email) { var pa = email.split(&#8216;@&#8217;); masked = pa[0].substring(0, 2) + &#8216;***@&#8217; + (pa[1] || &#8221;); }        matches.push({ name: row[idx.name] || &#8221;, email_masked: masked, city: row[idx.city] || &#8221;, country: row[idx.country] || &#8221;, code: code, referred: ref });      }    }    if (matches.length === 0) showErr(out, &#8216;No record found. Please check the details you entered.&#8217;);    else if (matches.length === 1) showForgotProfile(out, matches[0]);    else showForgotMulti(out, matches);  })  .catch(function(e) { showErr(out, &#8216;Could not load data: &#8216; + e.message); })  .finally(function() {    btn.disabled = false;    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;circle cx=&#8221;11&#8243; cy=&#8221;11&#8243; r=&#8221;8&#8243;\/&gt;&lt;path d=&#8221;M21 21l-4.35-4.35&#8243;\/&gt;&lt;\/svg&gt;&lt;span id=&#8221;fbtxt&#8221;&gt;Find My Referral Code&lt;\/span&gt;&#8217;;  });}function showForgotProfile(outEl, r) {  var ini = r.name.split(&#8216; &#8216;).map(function(w) { return w.charAt(0); }).slice(0, 2).join(&#8221;).toUpperCase() || &#8216;?&#8217;;  var loc = [r.city, r.country].filter(Boolean).join(&#8216;, &#8216;);  var meta = [r.email_masked, loc].filter(Boolean).join(&#8216; u00b7 &#8216;);  var link = REF_BASE + r.code;  certName = r.name; activeCertCode = r.code;  certStats = { cnt: r.referred.length, water_L: r.referred.length * BASE.water_L, co2_kg: r.referred.length * BASE.co2_kg, chem_kg: r.referred.length * BASE.chem_kg };  outEl.innerHTML = &#8216;&lt;div style=&#8221;margin-top:16px&#8221;&gt;&lt;div&gt;&lt;div&gt;&lt;\/div&gt; Profile Found&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&lt;div&gt;&lt;div&gt;&#8217; + ini + &#8216;&lt;\/div&gt;&lt;div&gt;&#8217;    + &#8216;&lt;span&gt;&#8217; + esc(r.name) + &#8216;&lt;\/span&gt;&#8217;    + (meta ? &#8216;&lt;span&gt;&#8217; + esc(meta) + &#8216;&lt;\/span&gt;&#8217; : &#8221;)    + &#8216;&lt;\/div&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&lt;span&gt;Your Referral Code&lt;\/span&gt;&#8217;    + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + esc(r.code) + &#8216;&lt;\/span&gt;&#8217;    + &#8216;&lt;button type=&#8221;button&#8221; id=&#8221;fp-cbtn&#8221; onclick=&#8221;fpCopyCode(&#8221; + esc(r.code) + &#8221;)&#8221;&gt;&#8217;    + &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z&#8221;\/&gt;&lt;\/svg&gt; Copy Code&lt;\/button&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&lt;span&gt;Your Referral Link&lt;\/span&gt;&#8217;    + &#8216;&lt;div&gt;&lt;div&gt;&lt;span&gt;thefiniteearth.org\/pledge?ref=&lt;\/span&gt;&lt;span&gt;&#8217; + esc(r.code) + &#8216;&lt;\/span&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;button type=&#8221;button&#8221; id=&#8221;fp-lbtn&#8221; onclick=&#8221;fpCopyLink(&#8221; + esc(link) + &#8221;)&#8221;&gt;&#8217;    + &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;path d=&#8221;M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z&#8221;\/&gt;&lt;\/svg&gt; Copy Link&lt;\/button&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;    + &#8216;&lt;div&gt;&#8217;    + &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243;&gt;&lt;circle cx=&#8221;12&#8243; cy=&#8221;12&#8243; r=&#8221;10&#8243;\/&gt;&lt;line x1=&#8221;12&#8243; y1=&#8221;8&#8243; x2=&#8221;12&#8243; y2=&#8221;12&#8243;\/&gt;&lt;line x1=&#8221;12&#8243; y1=&#8221;16&#8243; x2=&#8221;12.01&#8243; y2=&#8221;16&#8243;\/&gt;&lt;\/svg&gt;&#8217;    + &#8216;Enter your code above to see your full impact &amp;amp; certificate&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217;;}function showForgotMulti(outEl, arr) {  var items = arr.map(function(r) {    var loc = [r.city, r.country].filter(Boolean).join(&#8216; u00b7 &#8216;);    var met = [r.email_masked, loc].filter(Boolean).join(&#8216; u00b7 &#8216;);    var enc = encodeURIComponent(JSON.stringify(r));    return &#8216;&lt;div onclick=&#8221;pickForgotProfile(&#8221; + enc + &#8221;)&#8221;&gt;&#8217;      + &#8216;&lt;div&gt;&lt;span&gt;&#8217; + esc(r.name || &#8216;u2014&#8217;) + &#8216;&lt;\/span&gt;&#8217;      + (met ? &#8216;&lt;span&gt;&#8217; + esc(met) + &#8216;&lt;\/span&gt;&#8217; : &#8221;) + &#8216;&lt;\/div&gt;&#8217;      + &#8216;&lt;span&gt;&#8217; + esc(r.code) + &#8216;&lt;\/span&gt;&lt;\/div&gt;&#8217;;  }).join(&#8221;);  outEl.innerHTML = &#8216;&lt;div style=&#8221;margin-top:16px&#8221;&gt;&lt;div&gt;&lt;div&gt;&lt;\/div&gt; Multiple Matches u2014 Select Yours&lt;\/div&gt;&lt;div&gt;&#8217; + items + &#8216;&lt;\/div&gt;&lt;\/div&gt;&#8217;;}function pickForgotProfile(enc) {  try { showForgotProfile(document.getElementById(&#8216;forgot-out&#8217;), JSON.parse(decodeURIComponent(enc))); }  catch (e) { showErr(document.getElementById(&#8216;forgot-out&#8217;), &#8216;Could not load profile.&#8217;); }}function showErr(outEl, msg) {  outEl.innerHTML = &#8216;&lt;div style=&#8221;margin-top:16px&#8221;&gt;&lt;div&gt;&lt;div&gt;&lt;\/div&gt; Not Found&lt;\/div&gt;&lt;span&gt;&#8217; + esc(msg) + &#8216;&lt;\/span&gt;&lt;\/div&gt;&#8217;;}function fpCopyCode(code) {  var btn = document.getElementById(&#8216;fp-cbtn&#8217;);  navigator.clipboard.writeText(code).then(function() {    if (btn) { var o = btn.innerHTML; btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;path d=&#8221;M5 13l4 4L19 7&#8243;\/&gt;&lt;\/svg&gt; Copied!&#8217;; btn.classList.add(&#8216;done&#8217;); setTimeout(function() { btn.innerHTML = o; btn.classList.remove(&#8216;done&#8217;); }, 2500); }  }).catch(function() {    var ta = document.createElement(&#8216;textarea&#8217;); ta.value = code; ta.style.cssText = &#8216;position:fixed;opacity:0&#8217;; document.body.appendChild(ta); ta.select(); document.execCommand(&#8216;copy&#8217;); document.body.removeChild(ta);  });}function fpCopyLink(link) {  var btn = document.getElementById(&#8216;fp-lbtn&#8217;);  navigator.clipboard.writeText(link).then(function() {    if (btn) { var o = btn.innerHTML; btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;path d=&#8221;M5 13l4 4L19 7&#8243;\/&gt;&lt;\/svg&gt; Copied!&#8217;; btn.classList.add(&#8216;done&#8217;); setTimeout(function() { btn.innerHTML = o; btn.classList.remove(&#8216;done&#8217;); }, 2500); }  }).catch(function() {    var ta = document.createElement(&#8216;textarea&#8217;); ta.value = link; ta.style.cssText = &#8216;position:fixed;opacity:0&#8217;; document.body.appendChild(ta); ta.select(); document.execCommand(&#8216;copy&#8217;); document.body.removeChild(ta);  });}function showHowModal() { document.getElementById(&#8216;dp-how-modal&#8217;).classList.add(&#8216;show&#8217;); document.body.style.overflow = &#8216;hidden&#8217;; }function hideHowModal(e) { if (!e || e.target === document.getElementById(&#8216;dp-how-modal&#8217;) || e.currentTarget === document.querySelector(&#8216;.dp-how-close&#8217;)) { document.getElementById(&#8216;dp-how-modal&#8217;).classList.remove(&#8216;show&#8217;); document.body.style.overflow = &#8221;; } }\/\/ DP BUILDERvar DP_FRAMES = [  { title: &#8220;I am FEM&#8217;Us&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-FEMUs-11.png&#8221; },  { title: &#8220;I am a Climate Satyagrahi&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-a-Climate-Satyagrahi-22.png&#8221; },  { title: &#8220;I am part of Bharat Climate Satyagraha&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-part-of-Bharat-Climate-Satyagraha-33.png&#8221; },  { title: &#8220;I support Finite Earth Movement &amp; Us (FEM&#8217;Us)&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Finite-Earth-Movement-Us-FEMUs-44.png&#8221; },  { title: &#8220;I support Climate Satyagraha&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Climate-Satyagraha-55.png&#8221; },  { title: &#8220;I support Energy Swaraj&#8221;, url: &#8220;https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Energy-Swaraj-66.png&#8221; }];var dpState = { img: null, frameImg: new Image(), scale: 1, baseScale: 1, dx: 0, dy: 0, manualDy: 0, isDragging: false, startX: 0, startY: 0, activeTitleIdx: 0 };var dpCanvas, dpCtx, dpInited = false;var dpCurrentStep = 1;function toggleDP() {  document.getElementById(&#8216;panel-forgot&#8217;).classList.remove(&#8216;show&#8217;);  var panel = document.getElementById(&#8216;panel-dp&#8217;);  if (panel.classList.contains(&#8216;show&#8217;)) {    panel.classList.remove(&#8216;show&#8217;);  } else {    panel.classList.add(&#8216;show&#8217;);    document.getElementById(&#8216;out&#8217;).innerHTML = &#8221;;    document.getElementById(&#8216;city-out&#8217;).innerHTML = &#8221;;    panel.scrollIntoView({ behavior: &#8216;smooth&#8217;, block: &#8216;start&#8217; });    if (!dpInited) initDP();  }}function dpGoStep(n) {  if (n &gt; 1 &amp;&amp; !dpState.img) { alert(&#8216;Please upload a photo first.&#8217;); return; }  dpCurrentStep = n;  for (var i = 1; i &lt;= 3; i++) {    var tab = document.getElementById(&#8216;dp-tab-&#8216; + i);    if (tab) { tab.className = &#8216;dp-step-tab&#8217;; if (i === n) tab.className += &#8216; active&#8217;; else if (i &lt; n) tab.className += &#8216; done&#8217;; }  }  for (var j = 1; j &lt;= 3; j++) {    var panel = document.getElementById(&#8216;dp-panel-&#8216; + j);    if (panel) panel.className = &#8216;dp-step-panel&#8217; + (j === n ? &#8216; active&#8217; : &#8221;);  }  if (n === 3) setTimeout(drawDP, 50);}function initDP() {  dpInited = true;  dpCanvas = document.getElementById(&#8216;dp-canvas&#8217;);  dpCtx = dpCanvas.getContext(&#8216;2d&#8217;);  var list = document.getElementById(&#8216;dp-radio-list&#8217;);  list.innerHTML = &#8221;;  DP_FRAMES.forEach(function(item, i) {    var div = document.createElement(&#8216;div&#8217;);    div.className = &#8216;dp-radio-item&#8217; + (i === 0 ? &#8216; selected&#8217; : &#8221;);    div.setAttribute(&#8216;data-idx&#8217;, i);    div.innerHTML = &#8216;&lt;div&gt;&lt;div&gt;&lt;\/div&gt;&lt;\/div&gt;&#8217; + item.title;    div.onclick = function() {      document.querySelectorAll(&#8216;.dp-radio-item&#8217;).forEach(function(el) { el.classList.remove(&#8216;selected&#8217;); });      div.classList.add(&#8216;selected&#8217;);      dpState.activeTitleIdx = i;      loadDPFrame(i);    };    list.appendChild(div);  });  dpCanvas.addEventListener(&#8216;mousedown&#8217;, dpStartDrag);  window.addEventListener(&#8216;mousemove&#8217;, dpDrag);  window.addEventListener(&#8216;mouseup&#8217;, dpEndDrag);  dpCanvas.addEventListener(&#8216;touchstart&#8217;, function(e) { dpStartDrag(e.touches[0]); e.preventDefault(); }, { passive: false });  window.addEventListener(&#8216;touchmove&#8217;, function(e) { if (dpState.isDragging) { dpDrag(e.touches[0]); e.preventDefault(); } }, { passive: false });  window.addEventListener(&#8216;touchend&#8217;, dpEndDrag);  loadDPFrame(0);  dpCtx.fillStyle = &#8216;#f0ece3&#8217;; dpCtx.fillRect(0, 0, 1080, 1080);}function loadDPFrame(idx) {  dpState.activeTitleIdx = idx;  dpState.frameImg = new Image();  dpState.frameImg.crossOrigin = &#8216;anonymous&#8217;;  dpState.frameImg.onload = drawDP;  dpState.frameImg.src = DP_FRAMES[idx].url;}function handleDPUpload(e) {  var file = e.target.files[0]; if (!file) return;  var reader = new FileReader();  reader.onload = function(ev) {    var img = new Image();    img.onload = function() {      dpState.img = img;      dpState.baseScale = Math.max(1080 \/ img.width, 1080 \/ img.height);      dpState.scale = dpState.baseScale;      dpState.dx = 0; dpState.dy = 0; dpState.manualDy = 0;      document.getElementById(&#8216;dp-zoom&#8217;).value = 1;      document.getElementById(&#8216;dp-pos-y&#8217;).value = 0;      var preview = document.getElementById(&#8216;dp-photo-preview&#8217;);      preview.src = ev.target.result;      preview.classList.add(&#8216;show&#8217;);      document.getElementById(&#8216;dp-upload-icon&#8217;).style.display = &#8216;none&#8217;;      document.getElementById(&#8216;dp-upload-label-text&#8217;).textContent = &#8216;Photo selected&#8217;;      document.getElementById(&#8216;dp-upload-sub&#8217;).textContent = &#8216;Tap to change photo&#8217;;      document.getElementById(&#8216;dp-upload-zone&#8217;).classList.add(&#8216;has-photo&#8217;);      document.getElementById(&#8216;dp-step1-next&#8217;).disabled = false;      drawDP();    };    img.src = ev.target.result;  };  reader.readAsDataURL(file);}function handleDPZoom() { dpState.scale = dpState.baseScale * parseFloat(document.getElementById(&#8216;dp-zoom&#8217;).value); drawDP(); }function handleDPPosY() { dpState.manualDy = parseFloat(document.getElementById(&#8216;dp-pos-y&#8217;).value); drawDP(); }function dpStartDrag(e) { if (!dpState.img) return; dpState.isDragging = true; dpState.startX = e.clientX; dpState.startY = e.clientY; }function dpDrag(e) {  if (!dpState.isDragging || !dpState.img) return;  var rect = dpCanvas.getBoundingClientRect(), sf = 1080 \/ rect.width;  dpState.dx += (e.clientX &#8211; dpState.startX) * sf; dpState.dy += (e.clientY &#8211; dpState.startY) * sf;  dpState.startX = e.clientX; dpState.startY = e.clientY; drawDP();}function dpEndDrag() { dpState.isDragging = false; }function drawDP() {  if (!dpCtx) return;  dpCtx.clearRect(0, 0, 1080, 1080); dpCtx.fillStyle = &#8216;#ffffff&#8217;; dpCtx.fillRect(0, 0, 1080, 1080);  if (dpState.img) {    dpCtx.save(); dpCtx.beginPath(); dpCtx.arc(540, 540, 500, 0, Math.PI * 2); dpCtx.closePath(); dpCtx.clip();    dpCtx.translate(540 + dpState.dx, 540 + dpState.dy + dpState.manualDy);    dpCtx.scale(dpState.scale, dpState.scale);    dpCtx.drawImage(dpState.img, -dpState.img.width \/ 2, -dpState.img.height \/ 2);    dpCtx.restore();  }  if (dpState.frameImg.complete &amp;&amp; dpState.frameImg.src) dpCtx.drawImage(dpState.frameImg, 0, 0, 1080, 1080);}function downloadDP() {  if (!dpState.img) { alert(&#8216;Please upload a photo first.&#8217;); return; }  var badgeTitle = DP_FRAMES[dpState.activeTitleIdx].title;  var a = document.createElement(&#8216;a&#8217;);  a.download = &#8216;FEMUs_Badge_&#8217; + badgeTitle.replace(\/[^a-zA-Z0-9]\/g, &#8216;_&#8217;) + &#8216;.png&#8217;;  try {    a.href = dpCanvas.toDataURL(&#8216;image\/png&#8217;, 1.0);    document.body.appendChild(a); a.click(); document.body.removeChild(a);    updateShareLinks();    var d = new Date();    var months = [&#8216;January&#8217;,&#8217;February&#8217;,&#8217;March&#8217;,&#8217;April&#8217;,&#8217;May&#8217;,&#8217;June&#8217;,&#8217;July&#8217;,&#8217;August&#8217;,&#8217;September&#8217;,&#8217;October&#8217;,&#8217;November&#8217;,&#8217;December&#8217;];    var downloadDate = d.getDate() + &#8216; &#8216; + months[d.getMonth()] + &#8216; &#8216; + d.getFullYear();    var WEB_APP_URL = &#8216;https:\/\/script.google.com\/macros\/s\/AKfycbyOff7p5rSJxVMiCswVGRP8GyKa4jkRTE6b0dIHKsmio7ndmBN9nS0QabfG0eUE9UGblQ\/exec&#8217;;    var params = [&#8216;action=dp_download&#8217;, &#8216;badgeTitle=&#8217; + encodeURIComponent(badgeTitle), &#8216;downloadDate=&#8217; + encodeURIComponent(downloadDate), &#8216;name=&#8217; + encodeURIComponent(certName || &#8221;), &#8216;code=&#8217; + encodeURIComponent(activeCertCode || &#8221;), &#8216;timestamp=&#8217; + encodeURIComponent(d.toISOString())].join(&#8216;&amp;&#8217;);    fetch(WEB_APP_URL + &#8216;?&#8217; + params, { method: &#8216;GET&#8217;, mode: &#8216;no-cors&#8217; }).then(function() {}).catch(function(err) { console.warn(&#8216;Log failed:&#8217;, err); });  } catch (err) {    alert(&#8216;Image security blocked the download. Please right-click the image and save it manually.&#8217;);  }}function updateShareLinks() {  var text = encodeURIComponent(&#8220;I just built my FEM&#8217;Us &#8221; + DP_FRAMES[dpState.activeTitleIdx].title + &#8221; Badge! Take the pledge and check your impact at &#8221; + REF_BASE.split(&#8216;?&#8217;)[0]);  var url = encodeURIComponent(REF_BASE.split(&#8216;?&#8217;)[0]);  document.getElementById(&#8216;dp-share-wa&#8217;).href = &#8216;https:\/\/api.whatsapp.com\/send?text=&#8217; + text;  document.getElementById(&#8216;dp-share-ig&#8217;).href = &#8216;https:\/\/www.instagram.com\/&#8217;;  document.getElementById(&#8216;dp-share-li&#8217;).href = &#8216;https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=&#8217; + url;  document.getElementById(&#8216;dp-share-x&#8217;).href = &#8216;https:\/\/twitter.com\/intent\/tweet?text=&#8217; + text;  document.getElementById(&#8216;dp-share-fb&#8217;).href = &#8216;https:\/\/www.facebook.com\/sharer\/sharer.php?u=&#8217; + url + &#8216;&amp;quote=&#8217; + text;}\/\/ CERTIFICATE OVERLAYvar CERT_POSITIONS = { name: { top: &#8216;35%&#8217;, fontSize: &#8216;3.2%&#8217; }, date: { top: &#8216;82%&#8217;, fontSize: &#8216;2.8%&#8217; } };var CERT_META = { bronze: { label: &#8216;Bronze&#8217;, icon: &#8216;uD83EuDD49&#8217; }, silver: { label: &#8216;Silver&#8217;, icon: &#8216;uD83EuDD48&#8217; }, gold: { label: &#8216;Gold&#8217;, icon: &#8216;uD83EuDD47&#8217; }, platinum: { label: &#8216;Platinum&#8217;, icon: &#8216;uD83DuDC8E&#8217; } };function getCertImgUrl(type) {  if (type === &#8216;bronze&#8217;) return CERT_IMG_BRONZE;  if (type === &#8216;silver&#8217;) return CERT_IMG_SILVER;  if (type === &#8216;gold&#8217;) return CERT_IMG_GOLD;  if (type === &#8216;platinum&#8217;) return CERT_IMG_PLATINUM;  return CERT_IMG_BRONZE;}function openCert(type) {  if (!certName) { alert(&#8216;Please search for your code first.&#8217;); return; }  var cnt = certStats.cnt || 0, threshold = MILESTONES[type] || MILESTONES.bronze;  if (cnt &lt; threshold) { alert(&#8216;You need &#8216; + threshold + &#8216; referrals to unlock the &#8216; + CERT_META[type].label + &#8216; certificate. You currently have &#8216; + cnt + &#8216;.&#8217;); return; }  activeCertType = type || &#8216;bronze&#8217;;  var meta = CERT_META[activeCertType];  document.getElementById(&#8216;cert-overlay-title&#8217;).textContent = meta.icon + &#8216; Your &#8216; + meta.label + &#8216; Certificate of Impact&#8217;;  var img = document.getElementById(&#8216;cert-img&#8217;); img.src = getCertImgUrl(activeCertType);  document.getElementById(&#8216;cert-overlay&#8217;).style.display = &#8216;flex&#8217;;  document.body.style.overflow = &#8216;hidden&#8217;;  setTimeout(positionCertOverlays, 100);}function closeCert() { document.getElementById(&#8216;cert-overlay&#8217;).style.display = &#8216;none&#8217;; document.body.style.overflow = &#8221;; }function positionCertOverlays() {  var img = document.getElementById(&#8216;cert-img&#8217;), w = img.offsetWidth, h = img.offsetHeight;  var nameEl = document.getElementById(&#8216;co-name&#8217;);  if (nameEl) {    nameEl.style.top = CERT_POSITIONS.name.top;    nameEl.style.fontFamily = &#8220;&#8216;Charm&#8217;,cursive&#8221;;    nameEl.style.fontSize = Math.round(w * parseFloat(CERT_POSITIONS.name.fontSize) \/ 100) + &#8216;px&#8217;;    nameEl.style.fontWeight = &#8216;700&#8217;;    nameEl.textContent = certName;  }  var months = [&#8216;January&#8217;,&#8217;February&#8217;,&#8217;March&#8217;,&#8217;April&#8217;,&#8217;May&#8217;,&#8217;June&#8217;,&#8217;July&#8217;,&#8217;August&#8217;,&#8217;September&#8217;,&#8217;October&#8217;,&#8217;November&#8217;,&#8217;December&#8217;];  var dateStr = milestoneDates[activeCertType] ? milestoneDates[activeCertType] : (function() { var d = new Date(); return d.getDate() + &#8216; &#8216; + months[d.getMonth()] + &#8216; &#8216; + d.getFullYear(); })();  var dateEl = document.getElementById(&#8216;co-date&#8217;);  if (dateEl) {    dateEl.style.top = CERT_POSITIONS.date.top;    dateEl.style.fontSize = Math.round(h * parseFloat(CERT_POSITIONS.date.fontSize) \/ 100) + &#8216;px&#8217;;    dateEl.style.left = &#8216;12%&#8217;; dateEl.style.right = &#8216;auto&#8217;; dateEl.style.textAlign = &#8216;left&#8217;;    dateEl.textContent = dateStr;  }}function downloadCert() {  var btn = document.getElementById(&#8216;dl-btn&#8217;);  btn.disabled = true; btn.innerHTML = &#8216;&lt;div&gt;&lt;\/div&gt; Generatingu2026&#8217;;  html2canvas(document.getElementById(&#8216;cert-wrapper&#8217;), { scale: 3, useCORS: true, allowTaint: true, backgroundColor: null, logging: false }).then(function(canvas) {    var a = document.createElement(&#8216;a&#8217;), meta = CERT_META[activeCertType] || CERT_META.bronze;    a.download = &#8216;FEMUs_&#8217; + meta.label + &#8216;_Certificate_&#8217; + certName.replace(\/s+\/g, &#8216;_&#8217;) + &#8216;.png&#8217;;    a.href = canvas.toDataURL(&#8216;image\/png&#8217;, 1.0);    document.body.appendChild(a); a.click(); document.body.removeChild(a);    var d = new Date(), months = [&#8216;January&#8217;,&#8217;February&#8217;,&#8217;March&#8217;,&#8217;April&#8217;,&#8217;May&#8217;,&#8217;June&#8217;,&#8217;July&#8217;,&#8217;August&#8217;,&#8217;September&#8217;,&#8217;October&#8217;,&#8217;November&#8217;,&#8217;December&#8217;];    var cnt = certStats.cnt || 0;    var WEB_APP_URL = &#8216;https:\/\/script.google.com\/macros\/s\/AKfycbyOff7p5rSJxVMiCswVGRP8GyKa4jkRTE6b0dIHKsmio7ndmBN9nS0QabfG0eUE9UGblQ\/exec&#8217;;    var params = [&#8216;name=&#8217; + encodeURIComponent(certName), &#8216;code=&#8217; + encodeURIComponent(activeCertCode), &#8216;certType=&#8217; + encodeURIComponent(meta.label), &#8216;referralCount=&#8217; + encodeURIComponent(cnt), &#8216;waterSaved=&#8217; + encodeURIComponent(Math.round(cnt * BASE.water_L)), &#8216;co2Reduced=&#8217; + encodeURIComponent((cnt * BASE.co2_kg).toFixed(1)), &#8216;chemReduced=&#8217; + encodeURIComponent((cnt * BASE.chem_kg).toFixed(2)), &#8216;downloadDate=&#8217; + encodeURIComponent(d.getDate() + &#8216; &#8216; + months[d.getMonth()] + &#8216; &#8216; + d.getFullYear()), &#8216;milestoneDate=&#8217; + encodeURIComponent(milestoneDates[activeCertType] || &#8221;)].join(&#8216;&amp;&#8217;);    fetch(WEB_APP_URL + &#8216;?&#8217; + params, { method: &#8216;GET&#8217;, mode: &#8216;no-cors&#8217; }).then(function() {}).catch(function(err) { console.warn(&#8216;Log failed:&#8217;, err); });    btn.disabled = false;    btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;path d=&#8221;M5 13l4 4L19 7&#8243;\/&gt;&lt;\/svg&gt; Downloaded!&#8217;;    setTimeout(function() { btn.innerHTML = &#8216;&lt;svg viewBox=&#8221;0 0 24 24&#8243; style=&#8221;width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round&#8221;&gt;&lt;path d=&#8221;M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3&#8243;\/&gt;&lt;\/svg&gt; Download Certificate&#8217;; }, 3000);  }).catch(function(err) {    console.error(err); btn.disabled = false; btn.innerHTML = &#8216;Download Certificate&#8217;;    alert(&#8216;Download failed. Please right-click the certificate and save image.&#8217;);  });}window.addEventListener(&#8216;resize&#8217;, function() { var overlay = document.getElementById(&#8216;cert-overlay&#8217;); if (overlay &amp;&amp; overlay.style.display !== &#8216;none&#8217;) positionCertOverlays(); });document.addEventListener(&#8216;keydown&#8217;, function(e) {  if (e.key !== &#8216;Enter&#8217;) return;  var a = document.activeElement; if (!a) return;  if (a.id === &#8216;impact-code&#8217;) doImpactSearch();  if (a.id === &#8216;city-input&#8217;) doCitySearch();  if (a.id === &#8216;fq&#8217;) doForgotSearch();});setTimeout(warmCache, 600);updateShareLinks();[\/tcb-script]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FEM&#8217;Us \u2013 Your Impact[tcb-script src=&#8221;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js&#8221;][\/tcb-script] Finite Earth Movement &amp; Us Your Impact Measure the change you are creating Step 4: Track your impact Climate change is not caused by a few \u2014 it is the result of everyday consumption by all of us. And it will not be solved by a few \u2014 it requires [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":"","tve_updated_post":"<div class=\"thrv_wrapper thrv_custom_html_shortcode\" style=\"\" data-css=\"tve-u-19d0aee3a15\"><meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>FEM'Us \u2013 Your Impact<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,500;0,600;1,500&amp;family=Inter:wght@300;400;500;600&amp;family=Charm:wght@400;700&amp;display=swap\" rel=\"stylesheet\">\n<code class=\"tve_js_placeholder\">[tcb-script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"][\/tcb-script]<\/code>\n<style>\nhtml,body{margin:0;padding:0;width:100%;font-family:'Inter',sans-serif;background:#f0ece3;color:#1a1a1a}\n*{box-sizing:border-box}\n.page{width:100%;min-height:100vh;padding:48px 20px 40px;display:flex;flex-direction:column;align-items:center}\n.hdr{width:100%;max-width:640px;text-align:center;margin-bottom:28px}\n.pill{display:inline-block;background:#fff;border:1px solid rgba(30,100,160,.2);border-radius:999px;padding:5px 18px;font-size:11px;font-weight:600;letter-spacing:2px;text-transform:uppercase;color:#1a6896;margin-bottom:16px}\n.h1{font-family:'Cormorant Garamond',serif;font-size:40px;font-weight:500;color:#0f2440;margin:0 0 8px;line-height:1.15}\n.h1 em{font-style:italic;color:#1a7abf}\n.hsub{font-size:14px;font-weight:300;color:#999;margin:0}\n.card{width:100%;max-width:640px;background:#fff;border-radius:24px;padding:36px;box-shadow:0 2px 8px rgba(0,0,0,.05),0 12px 40px rgba(0,0,0,.07);border:1px solid rgba(0,0,0,.06)}\n.impact-intro{font-size:14px;color:#555;line-height:1.75;margin:0 0 22px}\n.impact-intro strong{color:#0d3d6e}\n.search-block{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}\n.input-row{display:flex;gap:10px}\n.finput{display:block;flex:1;padding:14px 16px;background:#f8f5f0;border:1.5px solid #e5e0d5;border-radius:12px;font-family:'Inter',sans-serif;font-size:15px;color:#1a1a1a;outline:none;-webkit-appearance:none;appearance:none;transition:border-color .15s,box-shadow .15s,background .15s}\n.finput:focus{border-color:#1a7abf;box-shadow:0 0 0 3px rgba(26,122,191,.12);background:#fff}\n.finput::placeholder{color:#c5c0b5;font-weight:300}\n.gbtn{display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 24px;background:#e8600a;color:#fff;border:none;border-radius:12px;font-family:'Inter',sans-serif;font-size:15px;font-weight:500;cursor:pointer;transition:background .18s,transform .15s,box-shadow .18s;outline:none;box-shadow:0 3px 12px rgba(232,96,10,.32);white-space:nowrap}\n.gbtn:hover{background:#d05508;box-shadow:0 5px 18px rgba(232,96,10,.38);transform:translateY(-1px)}\n.gbtn:active{transform:translateY(0)}\n.gbtn:disabled{opacity:.6;cursor:not-allowed;transform:none}\n.gbtn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.search-divider{display:flex;align-items:center;gap:10px;margin:4px 0}\n.search-divider span{font-size:11px;font-weight:600;color:#ccc;letter-spacing:1px;text-transform:uppercase;white-space:nowrap}\n.search-divider::before,.search-divider::after{content:'';flex:1;height:1px;background:#ede9e0}\n.spin{width:17px;height:17px;flex-shrink:0;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:rot .7s linear infinite;display:inline-block}\n@keyframes rot{to{transform:rotate(360deg)}}\n.action-links-row{display:flex;gap:10px;margin-top:4px;flex-wrap:wrap}\n.forgot-link{display:flex;align-items:center;justify-content:center;gap:6px;background:transparent;border:1.5px solid rgba(26,122,191,.35);color:#1a7abf;border-radius:10px;padding:11px 20px;font-family:'Inter',sans-serif;font-size:13px;font-weight:500;cursor:pointer;flex:1;transition:all .18s;white-space:nowrap}\n.forgot-link:hover{background:#f0f7ff;border-color:#1a7abf}\n.forgot-link.dp-btn{background:#1a7abf;color:#fff;border-color:#1a7abf;box-shadow:0 3px 10px rgba(26,122,191,.25)}\n.forgot-link.dp-btn:hover{background:#0d3d6e;border-color:#0d3d6e;box-shadow:0 5px 14px rgba(13,61,110,.35);transform:translateY(-1px)}\n.forgot-link svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n#out,#city-out{margin-top:22px}\n.box{border-radius:16px;padding:24px;border:1.5px solid;animation:fu .28s ease}\n@keyframes fu{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}\n.box.ok{background:#f0f7ff;border-color:#a8cfe8}\n.box.err{background:#fdf4f4;border-color:#e8b8b8}\n.blbl{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;margin-bottom:18px}\n.box.ok .blbl{color:#1a6896}\n.box.err .blbl{color:#b04040}\n.bdot{width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0}\n.prof{display:flex;align-items:center;gap:14px;margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid rgba(26,122,191,.12)}\n.avi{width:50px;height:50px;border-radius:14px;flex-shrink:0;background:linear-gradient(135deg,#0d3d6e,#1a7abf);display:flex;align-items:center;justify-content:center;font-family:'Cormorant Garamond',serif;font-size:20px;font-weight:600;color:#d0e8ff}\n.pname{display:block;font-size:17px;font-weight:600;color:#1a1a1a;margin-bottom:3px}\n.pmeta{display:block;font-size:12px;color:#aaa;font-weight:300}\n.fp-card{background:#fff;border:1.5px solid rgba(26,122,191,.18);border-radius:16px;padding:20px;margin-top:18px}\n.fp-header{display:flex;align-items:center;gap:14px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid #e8f2ff}\n.fp-avi{width:52px;height:52px;border-radius:14px;flex-shrink:0;background:linear-gradient(135deg,#0d3d6e,#1a7abf);display:flex;align-items:center;justify-content:center;font-family:'Cormorant Garamond',serif;font-size:21px;font-weight:600;color:#d0e8ff;box-shadow:0 3px 10px rgba(13,61,110,.22)}\n.fp-name{display:block;font-size:18px;font-weight:700;color:#0d3d6e;margin-bottom:4px;line-height:1.2}\n.fp-meta{display:block;font-size:12.5px;color:#666;font-weight:400;line-height:1.5}\n.fp-code-block{background:#f0f7ff;border:1px solid rgba(26,122,191,.18);border-radius:12px;padding:14px 16px;margin-bottom:12px}\n.fp-code-lbl{font-size:9.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#8ab0cc;margin-bottom:8px;display:block}\n.fp-code-row{display:flex;align-items:center;gap:10px}\n.fp-code-val{font-family:'Cormorant Garamond',serif;font-size:26px;font-weight:600;color:#0d3d6e;letter-spacing:3px;line-height:1;flex:1}\n.fp-copy-btn{display:inline-flex;align-items:center;gap:5px;background:#0d3d6e;border:none;color:#d0e8ff;border-radius:8px;padding:8px 13px;font-family:'Inter',sans-serif;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:background .15s;outline:none;flex-shrink:0}\n.fp-copy-btn:hover{background:#1558a0}\n.fp-copy-btn.done{background:#1a7abf}\n.fp-copy-btn svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.fp-link-block{background:#f4fbf0;border:1px solid rgba(26,160,100,.18);border-radius:12px;padding:14px 16px;margin-bottom:16px}\n.fp-link-lbl{font-size:9.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4a9e6a;margin-bottom:8px;display:block}\n.fp-link-row{display:flex;align-items:center;gap:10px}\n.fp-link-url{flex:1;font-size:12px;color:#555;word-break:break-all;line-height:1.5}\n.fp-link-url .fp-url-base{color:#aaa}\n.fp-link-url .fp-url-code{color:#1a7abf;font-weight:700}\n.fp-link-copy-btn{display:inline-flex;align-items:center;gap:5px;background:#1a8a50;border:none;color:#fff;border-radius:8px;padding:8px 13px;font-family:'Inter',sans-serif;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:background .15s;outline:none;flex-shrink:0}\n.fp-link-copy-btn:hover{background:#157a42}\n.fp-link-copy-btn.done{background:#28a05e}\n.fp-link-copy-btn svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.fp-action-hint{display:flex;align-items:center;justify-content:center;gap:6px;background:linear-gradient(135deg,#e8f4ff,#d4ecff);border:1px solid #a8d0f0;border-radius:10px;padding:12px 16px;font-size:13px;color:#1a6896;font-weight:500;text-align:center}\n.fp-action-hint svg{width:15px;height:15px;stroke:#1a7abf;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}\n.multi{display:flex;flex-direction:column;gap:12px;margin-top:8px}\n.mitem{background:#fff;border:1.5px solid #e5e0d5;border-radius:14px;padding:18px 20px;cursor:pointer;transition:all .2s;display:flex;justify-content:space-between;align-items:center}\n.mitem:hover{border-color:#1a7abf;background:#f8fbff;transform:translateY(-1px)}\n.mname{font-size:16.5px;font-weight:600;color:#1a1a1a}\n.mmeta{font-size:13px;color:#777;margin-top:4px}\n.mcode{font-size:15px;font-weight:600;letter-spacing:1px;color:#1a7abf;background:#f0f7ff;padding:7px 14px;border-radius:8px}\n.impact-table-wrap{margin-bottom:20px}\n.impact-table-title{font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#1a6896;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #dceeff;display:block}\n.impact-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid rgba(26,122,191,.15);border-radius:12px;overflow:hidden}\n.impact-table th{background:#f0f7ff;color:#0d3d6e;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.8px;padding:13px 14px;text-align:left;border-bottom:1.5px solid #dde8f5}\n.impact-table td{padding:14px 14px;font-size:14px;color:#1a1a1a;border-bottom:1px solid #f0f5fb;font-weight:500}\n.impact-table tr:last-child td{border-bottom:none}\n.impact-table td:first-child{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:700;color:#0d3d6e}\n.impact-table td.water-cell{color:#1a7abf;font-weight:700}\n.impact-table td.co2-cell{color:#2d8a3e;font-weight:700}\n.impact-table td.chem-cell{color:#a06020;font-weight:700}\n.city-stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:20px}\n.city-stat-card{border-radius:12px;padding:14px 16px;border:1px solid}\n.city-stat-card .csn{font-family:'Cormorant Garamond',serif;font-size:26px;font-weight:700;line-height:1;display:block}\n.city-stat-card .csl{font-size:11px;margin-top:4px;font-weight:400;display:block}\n.city-stat-card.total{background:#f8f5f0;border-color:#ede9e0}.city-stat-card.total .csn{color:#0d3d6e}.city-stat-card.total .csl{color:#bbb}\n.city-stat-card.water{background:#f0f7ff;border-color:#dde8f5}.city-stat-card.water .csn{color:#1a7abf}.city-stat-card.water .csl{color:#8ab0cc}\n.city-stat-card.co2{background:#f0fbf4;border-color:#b8e8c8}.city-stat-card.co2 .csn{color:#2d8a3e}.city-stat-card.co2 .csl{color:#5a9e6a}\n.city-stat-card.chem{background:#fdf6ee;border-color:#e8d0a8}.city-stat-card.chem .csn{color:#a06020}.city-stat-card.chem .csl{color:#b07838}\n.stats-single{margin-bottom:20px}\n.stat-full{background:#fff;border:1px solid #ede9e0;border-radius:12px;padding:18px 24px;display:inline-flex;align-items:baseline;gap:10px}\n.sn{display:block;font-family:'Cormorant Garamond',serif;font-size:38px;font-weight:600;color:#0d3d6e;line-height:1}\n.sl{display:block;font-size:12px;color:#bbb;font-weight:300}\n.reftable{width:100%;border-collapse:collapse;margin-top:12px;background:#fff;border:1px solid rgba(26,122,191,.15);border-radius:12px;overflow:hidden}\n.reftable th,.reftable td{padding:14px 12px;text-align:left;border-bottom:1px solid #e5e0d5}\n.reftable th{background:#f0f7ff;color:#0d3d6e;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.8px}\n.reftable td{font-size:14px}\n.reftable tr:last-child td{border-bottom:none}\n.rhead{display:block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#ccc;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #f0ece3}\n.noref{display:block;text-align:center;font-size:13px;color:#ccc;font-style:italic;padding:14px 0}\n.errtxt{display:block;font-size:14px;color:#b04040;line-height:1.7}\n.show-more-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:13px 20px;margin-top:2px;background:#f0f7ff;border:1.5px solid rgba(26,122,191,.25);border-radius:0 0 12px 12px;font-family:'Inter',sans-serif;font-size:13px;font-weight:600;color:#1a7abf;cursor:pointer;transition:all .18s;outline:none}\n.show-more-btn:hover{background:#dceeff;border-color:#1a7abf;color:#0d3d6e}\n.show-more-btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s}\n.show-more-btn.expanded svg{transform:rotate(180deg)}\n.cert-section{margin-top:18px;padding-top:18px;border-top:1px solid #eef4fb}\n.cert-section-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:600;color:#0d3d6e;margin-bottom:6px}\n.cert-section-desc{font-size:13px;color:#666;line-height:1.7;margin-bottom:6px}\n.cert-section-desc strong{color:#0d3d6e}\n.cert-milestone-note{font-size:13px;color:#444;line-height:1.7;margin-bottom:18px}\n.cert-milestone-note strong{color:#0d3d6e}\n.cert-progress-wrap{margin-bottom:22px}\n.cert-progress-label{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;flex-wrap:wrap;gap:4px}\n.cert-progress-left{font-size:12px;color:#666;font-weight:500}\n.cert-progress-right{font-size:12px;color:#1a7abf;font-weight:700}\n.cert-progress-track{height:10px;background:#e8f0f8;border-radius:99px;overflow:hidden}\n.cert-progress-bar{height:100%;border-radius:99px;transition:width .7s cubic-bezier(.4,0,.2,1)}\n.cert-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:6px}\n.cert-card{border-radius:16px;padding:18px 10px 14px;text-align:center;border:2px solid;transition:transform .28s cubic-bezier(.4,0,.2,1),box-shadow .28s;position:relative;overflow:hidden}\n.cert-card.locked{border-color:#dedad3;background:#f7f5f1;cursor:not-allowed;opacity:.58}\n.cert-card.unlocked{cursor:pointer}\n.cert-card.unlocked:hover{transform:translateY(-6px)}\n.cert-card.unlocked::after{content:'';position:absolute;top:-20%;left:-80%;width:50%;height:140%;background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.5) 50%,transparent 65%);transition:left .5s ease;pointer-events:none;transform:skewX(-10deg)}\n.cert-card.unlocked:hover::after{left:130%}\n@keyframes icon-bounce{0%{transform:scale(.75) translateY(6px);opacity:.5}55%{transform:scale(1.18) translateY(-4px)}80%{transform:scale(.96) translateY(1px)}100%{transform:scale(1) translateY(0);opacity:1}}\n.cert-card.unlocked .cert-card-icon{animation:icon-bounce .65s cubic-bezier(.4,0,.2,1) both}\n.cert-card.bronze.unlocked{background:linear-gradient(145deg,#2e1205,#6b2d0a,#b85e20,#d4883a,#e8a860);border-color:#b85e20;box-shadow:0 5px 20px rgba(140,60,10,.38)}\n.cert-card.bronze.unlocked:hover{box-shadow:0 10px 32px rgba(140,60,10,.55)}\n.cert-card.bronze.locked{border-color:#d4b89a;background:#faf6f1}\n.cert-card.silver.unlocked{background:linear-gradient(145deg,#1c2230,#38485e,#6a80a0,#9ab0c8,#c4d4e4);border-color:#6a80a0;box-shadow:0 5px 20px rgba(80,110,150,.35)}\n.cert-card.silver.unlocked:hover{box-shadow:0 10px 32px rgba(80,110,150,.52)}\n.cert-card.silver.locked{border-color:#b8c8d8;background:#f5f7fa}\n.cert-card.gold.unlocked{background:linear-gradient(145deg,#2a1c00,#6a4800,#b88c00,#ddb800,#f0d040,#d4a800);border-color:#c09000;box-shadow:0 5px 20px rgba(170,130,0,.4)}\n.cert-card.gold.unlocked:hover{box-shadow:0 10px 32px rgba(170,130,0,.62)}\n.cert-card.gold.locked{border-color:#d0c060;background:#fdfbee}\n@keyframes plat-shimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}\n.cert-card.platinum.unlocked{background:linear-gradient(145deg,#0d1a2e,#1e3a5a,#2e6090,#4a90b8,#70b8d8,#4a90b8,#1e3a5a);background-size:300% 300%;animation:plat-shimmer 3.5s ease infinite;border-color:#4a90b8;box-shadow:0 5px 24px rgba(60,130,190,.45)}\n.cert-card.platinum.unlocked:hover{box-shadow:0 12px 40px rgba(60,130,190,.7);transform:translateY(-7px) scale(1.025)}\n.cert-card.platinum.locked{border-color:#a8c8e0;background:#f2f7fb}\n.cert-card-icon{font-size:32px;margin-bottom:7px;line-height:1;display:block;filter:drop-shadow(0 2px 5px rgba(0,0,0,.3))}\n.cert-card.locked .cert-card-icon{filter:none;opacity:.4}\n.cert-card-name{font-size:12px;font-weight:800;margin-bottom:3px;letter-spacing:.6px;text-transform:uppercase}\n.cert-card.unlocked .cert-card-name{color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.5)}\n.cert-card.locked .cert-card-name{color:#bbb}\n.cert-card-threshold{font-size:10px;font-weight:500;margin-bottom:11px}\n.cert-card.unlocked .cert-card-threshold{color:rgba(255,255,255,.65)}\n.cert-card.locked .cert-card-threshold{color:#ccc}\n.cert-lock-icon{font-size:13px;margin-bottom:4px;opacity:.3;display:block}\n.cert-card-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:8px 6px;border:none;border-radius:9px;font-family:'Inter',sans-serif;font-size:10.5px;font-weight:700;width:100%;transition:all .2s;outline:none;letter-spacing:.2px;cursor:pointer}\n.cert-card.locked .cert-card-btn{background:rgba(0,0,0,.07);color:#bbb;cursor:not-allowed}\n.cert-card.unlocked .cert-card-btn{background:rgba(255,255,255,.18);color:#fff;border:1.5px solid rgba(255,255,255,.32)}\n.cert-card.unlocked .cert-card-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.03)}\n.cert-card-btn svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}\n.cert-next-hint{font-size:12px;color:#aaa;text-align:center;margin-top:10px;font-style:italic}\n#panel-forgot,#panel-dp{display:none;margin-top:24px;padding-top:24px;border-top:1.5px solid #e5e0d5}\n#panel-forgot.show,#panel-dp.show{display:block}\n.panel-label{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#bbb;margin-bottom:14px;display:block}\n.tabs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px;background:#f0ece3;border-radius:12px;padding:5px;margin-bottom:20px}\n.tb{display:flex;align-items:center;justify-content:center;gap:6px;padding:11px 6px;border:none;border-radius:9px;background:transparent;font-family:'Inter',sans-serif;font-size:13px;font-weight:500;color:#aaa;cursor:pointer;transition:all .18s;outline:none;-webkit-appearance:none;user-select:none}\n.tb:hover{color:#1a7abf}\n.tb.on{background:#fff;color:#0d3d6e;box-shadow:0 1px 6px rgba(0,0,0,.1)}\n.tb svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}\n.field{position:relative;margin-bottom:14px}\n#forgot-out{margin-top:20px}\n.back-btn{display:flex;align-items:center;justify-content:center;gap:6px;background:transparent;border:none;color:#aaa;font-family:'Inter',sans-serif;font-size:13px;cursor:pointer;padding:6px 0;margin-bottom:16px;transition:color .15s}\n.back-btn:hover{color:#0d3d6e}\n.back-btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.dp-header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}\n.dp-header-title{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;color:#0d3d6e}\n.dp-how-btn{display:flex;align-items:center;gap:5px;background:#f0f7ff;border:1.5px solid rgba(26,122,191,.3);border-radius:99px;padding:7px 13px;font-family:'Inter',sans-serif;font-size:12px;font-weight:600;color:#1a7abf;cursor:pointer;transition:all .18s}\n.dp-how-btn:hover{background:#dceeff}\n.dp-how-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:500;align-items:center;justify-content:center;padding:20px}\n.dp-how-modal.show{display:flex}\n.dp-how-box{background:#fff;border-radius:18px;padding:24px;max-width:380px;width:100%;position:relative;box-shadow:0 20px 60px rgba(0,0,0,.3);animation:fu .25s ease}\n.dp-how-close{position:absolute;top:12px;right:12px;background:#f0ece3;border:none;border-radius:50%;width:32px;height:32px;font-size:18px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#555}\n.dp-how-box h3{font-family:'Cormorant Garamond',serif;font-size:20px;font-weight:600;color:#0d3d6e;margin:0 0 16px}\n.dp-how-step{display:flex;gap:12px;margin-bottom:14px;align-items:flex-start}\n.dp-how-step-num{width:26px;height:26px;background:#1a7abf;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}\n.dp-how-step-text{font-size:13px;color:#444;line-height:1.6;padding-top:3px}\n.dp-how-step-text strong{color:#0d3d6e}\n.dp-how-tip{background:#fffbee;border:1px solid #f0d060;border-radius:10px;padding:12px 14px;font-size:12.5px;color:#7a5a00;line-height:1.6;margin-top:4px}\n.dp-step-tabs{display:flex;background:#f0ece3;border-radius:12px;padding:4px;margin-bottom:22px;gap:3px}\n.dp-step-tab{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;padding:10px 6px;border:none;border-radius:9px;background:transparent;font-family:'Inter',sans-serif;font-size:12px;font-weight:500;color:#aaa;cursor:pointer;transition:all .2s;outline:none;white-space:nowrap}\n.dp-step-tab.active{background:#fff;color:#0d3d6e;font-weight:700;box-shadow:0 1px 6px rgba(0,0,0,.1)}\n.dp-step-tab.done{color:#1a7abf}\n.dp-step-tab-num{width:18px;height:18px;border-radius:50%;background:#e5e0d5;color:#aaa;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s}\n.dp-step-tab.active .dp-step-tab-num{background:#1a7abf;color:#fff}\n.dp-step-tab.done .dp-step-tab-num{background:#1a7abf;color:#fff}\n.dp-step-panel{display:none}\n.dp-step-panel.active{display:block;animation:fu .22s ease}\n.dp-upload-zone{border:2px dashed rgba(26,122,191,.4);border-radius:16px;background:rgba(26,122,191,.04);padding:36px 20px;text-align:center;cursor:pointer;transition:all .25s;margin-bottom:16px}\n.dp-upload-zone:hover,.dp-upload-zone.has-photo{background:rgba(26,122,191,.08);border-color:#1a7abf}\n.dp-upload-icon{width:48px;height:48px;background:rgba(26,122,191,.1);border-radius:14px;display:flex;align-items:center;justify-content:center;margin:0 auto 12px}\n.dp-upload-icon svg{width:24px;height:24px;stroke:#1a7abf;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.dp-upload-label-text{font-size:15px;font-weight:600;color:#1a7abf;margin-bottom:4px}\n.dp-upload-sub{font-size:12px;color:#aaa}\n.dp-photo-preview{width:80px;height:80px;border-radius:50%;object-fit:cover;border:3px solid #1a7abf;display:none;margin:0 auto 10px}\n.dp-photo-preview.show{display:block}\n.dp-guidelines{background:#fffbee;border:1px solid #f0d878;border-radius:12px;padding:14px 16px;margin-bottom:18px}\n.dp-guidelines-title{font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:#a07800;margin-bottom:10px;display:block}\n.dp-guidelines ul{margin:0;padding-left:16px;color:#6a5000;font-size:12.5px;line-height:1.7}\n.dp-guidelines li{margin-bottom:2px}\n.dp-nav-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 20px;background:linear-gradient(135deg,#1a7abf,#0d3d6e);color:#fff;border:none;border-radius:12px;font-family:'Inter',sans-serif;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 4px 14px rgba(13,61,110,.28);transition:all .2s}\n.dp-nav-btn:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(13,61,110,.38)}\n.dp-nav-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}\n.dp-nav-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.dp-back-link{display:flex;align-items:center;justify-content:center;gap:5px;background:transparent;border:none;color:#aaa;font-family:'Inter',sans-serif;font-size:13px;cursor:pointer;padding:10px;margin-top:8px;width:100%;transition:color .15s}\n.dp-back-link:hover{color:#0d3d6e}\n.dp-back-link svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.dp-title-select-label{font-size:13px;color:#555;margin-bottom:14px;line-height:1.5;display:block}\n.dp-radio-list{display:flex;flex-direction:column;gap:8px;margin-bottom:20px}\n.dp-radio-item{display:flex;align-items:center;gap:12px;padding:14px 16px;background:#fff;border:1.5px solid #e5e0d5;border-radius:12px;cursor:pointer;transition:all .18s;font-size:14px;font-weight:500;color:#1a1a1a}\n.dp-radio-item:hover{border-color:#1a7abf;background:#f8fbff}\n.dp-radio-item.selected{border-color:#1a7abf;background:#f0f7ff;color:#0d3d6e;font-weight:600}\n.dp-radio-circle{width:20px;height:20px;border-radius:50%;border:2px solid #ccc;flex-shrink:0;transition:all .18s;display:flex;align-items:center;justify-content:center;background:#fff}\n.dp-radio-item.selected .dp-radio-circle{border-color:#1a7abf;background:#1a7abf}\n.dp-radio-dot{width:8px;height:8px;border-radius:50%;background:#fff;opacity:0;transition:opacity .15s}\n.dp-radio-item.selected .dp-radio-dot{opacity:1}\n.dp-canvas-wrap{position:relative;width:100%;max-width:300px;aspect-ratio:1\/1;margin:0 auto 16px;border-radius:20px;overflow:hidden;background:#f0ece3;touch-action:none;border:2px solid rgba(26,122,191,.25);box-shadow:0 4px 24px rgba(26,122,191,.18)}\n#dp-canvas{display:block;width:100%;height:100%;cursor:grab}\n#dp-canvas:active{cursor:grabbing}\n.dp-controls-row{max-width:300px;margin:0 auto 6px}\n.dp-control-group{display:flex;align-items:center;gap:10px;margin-bottom:10px}\n.dp-ctrl-label{font-size:11px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:#aaa;width:80px;flex-shrink:0}\n.dp-slider{flex:1;-webkit-appearance:none;appearance:none;height:4px;background:#e5e0d5;border-radius:2px;outline:none}\n.dp-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:#1a7abf;cursor:pointer;box-shadow:0 2px 6px rgba(26,122,191,.35)}\n.dp-slider::-moz-range-thumb{width:18px;height:18px;border:none;border-radius:50%;background:#1a7abf;cursor:pointer}\n.dp-control-hint{text-align:center;font-size:11px;color:#bbb;font-style:italic;margin-bottom:16px}\n.dp-download-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 20px;background:linear-gradient(135deg,#e8600a,#c04800);color:#fff;border:none;border-radius:12px;font-family:'Inter',sans-serif;font-size:15px;font-weight:700;cursor:pointer;box-shadow:0 4px 14px rgba(200,80,10,.32);transition:all .2s;margin-bottom:16px}\n.dp-download-btn:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(200,80,10,.42)}\n.dp-download-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.dp-share-section-label{text-align:center;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#ccc;margin-bottom:12px}\n.dp-share-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:8px}\n.dp-share-grid-bottom{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}\n.dp-share-btn{display:flex;align-items:center;justify-content:center;gap:7px;padding:13px 10px;border-radius:14px;font-family:'Inter',sans-serif;font-size:14px;font-weight:600;cursor:pointer;background:#fff;text-decoration:none;transition:all .2s;border:1.5px solid}\n.dp-share-btn:hover{transform:translateY(-2px);filter:brightness(.96)}\n.dp-share-btn svg{width:18px;height:18px;fill:currentColor;flex-shrink:0}\n.dp-share-wa{color:#25D366;border-color:#b2f0cd;background:#f0fff6}\n.dp-share-ig{color:#c13584;border-color:#f4b8d8;background:#fff0f7}\n.dp-share-li{color:#0A66C2;border-color:#b3d4f5;background:#f0f7ff}\n.dp-share-x{color:#111;border-color:#d0d0d0;background:#f8f8f8}\n.dp-share-fb{color:#1877F2;border-color:#b3d0f8;background:#f0f5ff}\n.dp-share-tip{text-align:center;font-size:13px;color:#666;line-height:1.7;padding:4px 12px 0}\n.foot{width:100%;max-width:640px;text-align:center;margin-top:26px}\n.ftxt{font-size:13px;color:#888;margin:0;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:4px}\n.flink-inline{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:#1a7abf;text-decoration:none;font-weight:500;transition:color .15s}\n.flink-inline:hover{color:#0d3d6e}\n.flink-inline svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}\n.fsep{color:#bbb;font-size:12px;margin:0 2px}\n.fshare{font-size:12px;color:#aaa;margin:10px 0 0;font-weight:300}\n@media(max-width:640px){.cert-cards{grid-template-columns:repeat(2,1fr);gap:10px}}\n@media(max-width:480px){\n  .page{padding:20px 12px 28px}\n  .card{padding:18px 14px;border-radius:16px}\n  .h1{font-size:26px}\n  .input-row{flex-direction:column}\n  .gbtn{width:100%}\n  .reftable th,.reftable td{padding:10px 8px;font-size:13px}\n  .cert-cards{grid-template-columns:repeat(2,1fr);gap:8px}\n  .impact-table th,.impact-table td{padding:10px 8px;font-size:12px}\n  .fp-code-row{flex-direction:column;align-items:flex-start;gap:8px}\n  .fp-copy-btn,.fp-link-copy-btn{width:100%;justify-content:center}\n  .fp-link-row{flex-direction:column;align-items:flex-start;gap:8px}\n  .city-stat-grid{grid-template-columns:1fr 1fr}\n  .action-links-row{flex-direction:column}\n  .dp-share-grid{grid-template-columns:1fr 1fr 1fr}\n}\n<\/style>\n\n<div class=\"page\">\n  <div class=\"hdr\">\n    <div class=\"pill\">Finite Earth Movement &amp; Us<\/div>\n    <h1 class=\"h1\">Your <em>Impact<\/em><\/h1>\n    <p class=\"hsub\">Measure the change you are creating<\/p>\n  <\/div>\n<div style=\"font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#1a7abf;margin-bottom:8px\">Step 4: Track your impact<\/div>\n  <div class=\"card\">\n    <p class=\"impact-intro\">\n      Climate change is not caused by a few \u2014 <strong>it is the result of everyday consumption by all of us.<\/strong> And it will not be solved by a few \u2014 <strong>it requires action from everyone.<\/strong>\n      <br><br>\n      Your effort matters. Your impact is measurable. Every person who takes the FEM\u2019Us Pledge of Finite Living reduces air, water, soil pollution and carbon emissions. Enter your FEM\u2019Us code to find out how much your efforts have saved.\n    <\/p>\n\n    <div id=\"impact-section\">\n      <div class=\"search-block\">\n        <div class=\"input-row\">\n          <input class=\"finput\" type=\"text\" id=\"impact-code\" placeholder=\"Enter your FEM'Us Code\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" style=\"text-transform:uppercase;letter-spacing:2px;font-weight:600\">\n          <button type=\"button\" class=\"gbtn\" id=\"impact-btn\" onclick=\"doImpactSearch()\">\n            <svg viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><path d=\"M21 21l-4.35-4.35\"><\/path><\/svg>\n            <span>Submit<\/span>\n          <\/button>\n        <\/div>\n        <div class=\"search-divider\"><span>or<\/span><\/div>\n        <div class=\"input-row\">\n          <input class=\"finput\" type=\"text\" id=\"city-input\" placeholder=\"Enter your city\" autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\">\n          <button type=\"button\" class=\"gbtn\" id=\"city-btn\" onclick=\"doCitySearch()\">\n            <svg viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><path d=\"M21 21l-4.35-4.35\"><\/path><\/svg>\n            <span>Submit<\/span>\n          <\/button>\n        <\/div>\n        <div class=\"action-links-row\">\n          <button type=\"button\" class=\"forgot-link\" onclick=\"toggleForgot()\">\n            <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3M12 17h.01\"><\/path><\/svg>\n            Forgot FEM\u2019Us Code\n          <\/button>\n          <button type=\"button\" class=\"forgot-link dp-btn\" onclick=\"toggleDP()\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"><\/path><\/svg>\n            Download Your DP\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div id=\"out\"><\/div>\n    <div id=\"city-out\"><\/div>\n\n    <!-- DP BUILDER PANEL -->\n    <div id=\"panel-dp\">\n      <button type=\"button\" class=\"back-btn\" onclick=\"toggleDP()\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M19 12H5M12 5l-7 7 7 7\"><\/path><\/svg>\n        Back to Impact Search\n      <\/button>\n\n      <div class=\"dp-header-row\">\n        <div class=\"dp-header-title\">\n          <span><img decoding=\"async\" role=\"img\" class=\"emoji\" alt=\"\ud83c\udf96\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f396.svg\"><\/span>\n          Build Your Satyagrahi Badge\n        <\/div>\n        <button type=\"button\" class=\"dp-how-btn\" onclick=\"showHowModal()\">\n          <svg viewBox=\"0 0 24 24\" style=\"width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3M12 17h.01\"><\/path><\/svg>\n          How to use\n        <\/button>\n      <\/div>\n\n      <div class=\"dp-step-tabs\">\n        <button type=\"button\" class=\"dp-step-tab active\" id=\"dp-tab-1\" onclick=\"dpGoStep(1)\">\n          <div class=\"dp-step-tab-num\">1<\/div>\n          Photo\n        <\/button>\n        <button type=\"button\" class=\"dp-step-tab\" id=\"dp-tab-2\" onclick=\"dpGoStep(2)\">\n          <div class=\"dp-step-tab-num\">2<\/div>\n          Title\n        <\/button>\n        <button type=\"button\" class=\"dp-step-tab\" id=\"dp-tab-3\" onclick=\"dpGoStep(3)\">\n          <div class=\"dp-step-tab-num\">3<\/div>\n          Preview\n        <\/button>\n      <\/div>\n\n      <!-- STEP 1: Photo -->\n      <div class=\"dp-step-panel active\" id=\"dp-panel-1\">\n        <label for=\"dp-upload\">\n          <div class=\"dp-upload-zone\" id=\"dp-upload-zone\">\n            <img decoding=\"async\" id=\"dp-photo-preview\" class=\"dp-photo-preview\" src=\"\" alt=\"Preview\" style=\"\">\n            <div class=\"dp-upload-icon\" id=\"dp-upload-icon\">\n              <svg viewBox=\"0 0 24 24\"><path d=\"M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z\"><\/path><circle cx=\"12\" cy=\"13\" r=\"4\"><\/circle><\/svg>\n            <\/div>\n            <div id=\"dp-upload-label-text\" class=\"dp-upload-label-text\">Upload your photo<\/div>\n            <div id=\"dp-upload-sub\" class=\"dp-upload-sub\">Tap to choose from gallery or camera<\/div>\n          <\/div>\n        <\/label>\n        <input type=\"file\" id=\"dp-upload\" accept=\"image\/*\" onchange=\"handleDPUpload(event)\" style=\"display:none\">\n\n        <div class=\"dp-guidelines\">\n          <span class=\"dp-guidelines-title\">Photo Guidelines<\/span>\n          <ul>\n            <li>Use a clear, well-lit face photo (selfie works best)<\/li>\n            <li>Square crop recommended \u2022 Min 500\u00d7500px<\/li>\n            <li>Upload this photo, download it from here, and set it as your DP.<\/li>\n          <\/ul>\n        <\/div>\n\n        <button type=\"button\" class=\"dp-nav-btn\" id=\"dp-step1-next\" onclick=\"dpGoStep(2)\" disabled=\"\">\n          Choose Identity\n          <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"><\/path><\/svg>\n        <\/button>\n      <\/div>\n\n      <!-- STEP 2: Title -->\n      <div class=\"dp-step-panel\" id=\"dp-panel-2\">\n        <span class=\"dp-title-select-label\">Select the label that appears on your badge:<\/span>\n        <div class=\"dp-radio-list\" id=\"dp-radio-list\"><\/div>\n        <button type=\"button\" class=\"dp-nav-btn\" onclick=\"dpGoStep(3)\">\n          Preview Badge\n          <svg viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"><\/path><\/svg>\n        <\/button>\n        <button type=\"button\" class=\"dp-back-link\" onclick=\"dpGoStep(1)\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M19 12H5M12 5l-7 7 7 7\"><\/path><\/svg>\n          Back\n        <\/button>\n      <\/div>\n\n      <!-- STEP 3: Preview & Share -->\n      <div class=\"dp-step-panel\" id=\"dp-panel-3\">\n        <div class=\"dp-canvas-wrap\">\n          <canvas id=\"dp-canvas\" width=\"1080\" height=\"1080\"><\/canvas>\n        <\/div>\n        <div class=\"dp-controls-row\">\n          <div class=\"dp-control-group\">\n            <span class=\"dp-ctrl-label\">Face Position<\/span>\n            <input type=\"range\" class=\"dp-slider\" id=\"dp-pos-y\" min=\"-400\" max=\"400\" step=\"5\" value=\"0\" oninput=\"handleDPPosY()\">\n          <\/div>\n          <div class=\"dp-control-group\">\n            <span class=\"dp-ctrl-label\">Photo Zoom<\/span>\n            <input type=\"range\" class=\"dp-slider\" id=\"dp-zoom\" min=\"0.5\" max=\"3\" step=\"0.05\" value=\"1\" oninput=\"handleDPZoom()\">\n          <\/div>\n        <\/div>\n        <div class=\"dp-control-hint\">Drag photo to adjust position<\/div>\n\n        <button type=\"button\" class=\"dp-download-btn\" onclick=\"downloadDP()\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"><\/path><\/svg>\n          Download HD Badge\n        <\/button>\n\n        <div class=\"dp-share-section-label\">Share Your Badge<\/div>\n        <div class=\"dp-share-grid\">\n          <a href=\"#\" target=\"_blank\" id=\"dp-share-wa\" class=\"dp-share-btn dp-share-wa\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51a12.8 12.8 0 0 0-.57-.01c-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z\"><\/path><\/svg>\n            WhatsApp\n          <\/a>\n          <a href=\"#\" target=\"_blank\" id=\"dp-share-ig\" class=\"dp-share-btn dp-share-ig\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z\"><\/path><\/svg>\n            Instagram\n          <\/a>\n          <a href=\"#\" target=\"_blank\" id=\"dp-share-li\" class=\"dp-share-btn dp-share-li\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"><\/path><\/svg>\n            LinkedIn\n          <\/a>\n        <\/div>\n        <div class=\"dp-share-grid-bottom\">\n          <a href=\"#\" target=\"_blank\" id=\"dp-share-x\" class=\"dp-share-btn dp-share-x\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"><\/path><\/svg>\n            Twitter \/ X\n          <\/a>\n          <a href=\"#\" target=\"_blank\" id=\"dp-share-fb\" class=\"dp-share-btn dp-share-fb\">\n            <svg viewBox=\"0 0 24 24\"><path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.469h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.469h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\"><\/path><\/svg>\n            Facebook\n          <\/a>\n        <\/div>\n        <p class=\"dp-share-tip\">After downloading, set the image as your WhatsApp or social media profile picture to support and spread the movement!<\/p>\n\n        <button type=\"button\" class=\"dp-back-link\" onclick=\"dpGoStep(2)\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M19 12H5M12 5l-7 7 7 7\"><\/path><\/svg>\n          Back\n        <\/button>\n      <\/div>\n    <\/div>\n\n    <!-- Forgot panel -->\n    <div id=\"panel-forgot\">\n      <button type=\"button\" class=\"back-btn\" onclick=\"toggleForgot()\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M19 12H5M12 5l-7 7 7 7\"><\/path><\/svg>\n        Back to Impact Search\n      <\/button>\n      <span class=\"panel-label\">Search by Name, Phone or Email<\/span>\n      <div class=\"tabs\">\n        <button type=\"button\" class=\"tb on\" id=\"t-name\" onclick=\"setTab('name')\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\"><\/path><\/svg>Name\n        <\/button>\n        <button type=\"button\" class=\"tb\" id=\"t-phone\" onclick=\"setTab('phone')\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\"><\/path><\/svg>Phone\n        <\/button>\n        <button type=\"button\" class=\"tb\" id=\"t-email\" onclick=\"setTab('email')\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"><\/path><\/svg>Email\n        <\/button>\n      <\/div>\n      <div class=\"field\">\n        <input class=\"finput\" type=\"text\" id=\"fq\" placeholder=\"Enter your full name\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\">\n      <\/div>\n      <button type=\"button\" class=\"gbtn\" id=\"fgo\" onclick=\"doForgotSearch()\" style=\"width:100%\">\n        <svg viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"><\/circle><path d=\"M21 21l-4.35-4.35\"><\/path><\/svg>\n        <span id=\"fbtxt\">Find My Referral Code<\/span>\n      <\/button>\n      <div id=\"forgot-out\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"foot\">\n    <p class=\"ftxt\">Still having trouble? <strong>Contact us<\/strong> &nbsp;\u2014&nbsp;\n      <a href=\"tel:9039034404\" class=\"flink-inline\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\"><\/path><\/svg>\n        9039034404\n      <\/a>\n      <span class=\"fsep\">\u00b7<\/span>\n      <a href=\"mailto:femus@energyswaraj.org\" class=\"flink-inline\">\n        <svg viewBox=\"0 0 24 24\"><path d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"><\/path><\/svg>\n        femus@energyswaraj.org\n      <\/a>\n    <\/p>\n    <p class=\"fshare\">Share your code and grow the FEM\u2019Us tribe<\/p>\n  <\/div>\n<\/div>\n\n<!-- HOW TO USE MODAL -->\n<div class=\"dp-how-modal\" id=\"dp-how-modal\" onclick=\"hideHowModal(event)\">\n  <div class=\"dp-how-box\">\n    <button class=\"dp-how-close\" onclick=\"hideHowModal()\">\u00d7<\/button>\n    <h3>How to Build Your Badge<\/h3>\n    <div class=\"dp-how-step\">\n      <div class=\"dp-how-step-num\">1<\/div>\n      <div class=\"dp-how-step-text\"><strong>Step 1 \u2013 Photo:<\/strong> Upload your selfie or portrait photo (square or portrait works best, min 500\u00d7500px).<\/div>\n    <\/div>\n    <div class=\"dp-how-step\">\n      <div class=\"dp-how-step-num\">2<\/div>\n      <div class=\"dp-how-step-text\"><strong>Step 2 \u2013 Title:<\/strong> Choose any one of the 6 identity titles that will appear on your badge.<\/div>\n    <\/div>\n    <div class=\"dp-how-step\">\n      <div class=\"dp-how-step-num\">3<\/div>\n      <div class=\"dp-how-step-text\"><strong>Step 3 \u2013 Preview &amp; Share:<\/strong>\n        <br>\u2022 Use the <strong>Face Position<\/strong> slider to move the photo up or down.\n        <br>\u2022 Use the <strong>Photo Zoom<\/strong> slider to zoom in or out.\n        <br>\u2022 Click <strong>Download HD Badge<\/strong> to save a high-quality PNG.\n      <\/div>\n    <\/div>\n    <div class=\"dp-how-tip\">\n      <strong>Tip:<\/strong> After downloading, set the image as your WhatsApp or social media profile picture to spread the movement!\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- CERTIFICATE OVERLAY -->\n<div id=\"cert-overlay\" style=\"display:none;position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:999;align-items:center;justify-content:center;padding:20px;overflow-y:auto\">\n  <div style=\"background:#fff;border-radius:20px;padding:24px;max-width:720px;width:100%;box-shadow:0 20px 60px rgba(0,0,0,.4);position:relative;margin:auto\">\n    <button onclick=\"closeCert()\" style=\"position:absolute;top:14px;right:14px;background:#f0ece3;border:none;border-radius:50%;width:36px;height:36px;cursor:pointer;font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;color:#555;z-index:2\">\u00d7<\/button>\n    <div id=\"cert-overlay-title\" style=\"font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:600;color:#0d3d6e;margin-bottom:16px\">Your Certificate<\/div>\n    <div id=\"cert-wrapper\" style=\"position:relative;width:100%;border-radius:12px;overflow:hidden;background:#fff\">\n      <img decoding=\"async\" id=\"cert-img\" src=\"\" style=\"width:100%;display:block;border-radius:12px\" crossorigin=\"anonymous\" alt=\"FEM'Us Certificate\" onload=\"positionCertOverlays()\">\n      <div id=\"co-name\" style=\"position:absolute;left:0;right:0;text-align:center;font-family:'Charm',cursive;font-weight:700;color:#0d3d6e;pointer-events:none;letter-spacing:.5px;line-height:1.2\"><\/div>\n      <div id=\"co-date\" style=\"position:absolute;left:5%;right:auto;text-align:left;font-family:'Cormorant Garamond',serif;font-weight:500;color:#555;pointer-events:none;letter-spacing:.3px;\"><\/div>\n    <\/div>\n    <div style=\"display:flex;gap:10px;margin-top:18px;flex-wrap:wrap\">\n      <button onclick=\"downloadCert()\" id=\"dl-btn\" style=\"flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:13px 20px;background:linear-gradient(135deg,#1a7abf,#0d3d6e);color:#fff;border:none;border-radius:12px;font-family:'Inter',sans-serif;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 3px 14px rgba(13,61,110,.28)\">\n        <svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"><path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"><\/path><\/svg>\n        Download Certificate\n      <\/button>\n      <button onclick=\"closeCert()\" style=\"padding:13px 20px;background:#f0ece3;border:none;border-radius:12px;font-family:'Inter',sans-serif;font-size:14px;font-weight:500;cursor:pointer;color:#555\">Close<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<code class=\"tve_js_placeholder\">[tcb-script]\nvar SHEET_ID = '1mvbjtWsdNMMKcMkIgDSBXRacCBZ1YbDizKzksGut0To';\nvar REF_BASE = 'https:\/\/thefiniteearth.org\/pledge?ref=';\nvar BASE = { water_L: 20250, co2_kg: 52.5, chem_kg: 3.75 };\nvar MILESTONES = { bronze: 11, silver: 25, gold: 50, platinum: 100 };\n\nvar CERT_IMG_BRONZE   = 'https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM.jpeg';\nvar CERT_IMG_SILVER   = 'https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM-1.jpeg';\nvar CERT_IMG_GOLD     = 'https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/03\/WhatsApp-Image-2026-03-30-at-3.38.09-PM-2.jpeg';\nvar CERT_IMG_PLATINUM = 'https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/WhatsApp-Image-2026-04-02-at-10.18.45-AM.jpeg';\n\nvar C = { name:'Name', email:'Email', phone:'Phone', city:'City', country:'Country', code:'Referral Code', used:'Used Referral Code' };\nvar activeTab = 'name';\nvar _sheetCache = null, _sheetFetchPromise = null;\nvar certName = '', certStats = {}, activeCertType = 'bronze', activeCertCode = '';\nvar milestoneDates = {};\nvar PH = { name:'Enter your full name', phone:'Enter your phone number', email:'Enter your email address' };\nvar _cityAllPeople = [];\n\nfunction fetchCSV(sheetName) {\n  var url = 'https:\/\/docs.google.com\/spreadsheets\/d\/' + SHEET_ID + '\/gviz\/tq?tqx=out:csv' + (sheetName ? '&amp;sheet=' + encodeURIComponent(sheetName) : '');\n  return fetch(url, { cache: 'no-store' })\n    .then(function(r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.text(); })\n    .then(function(csv) { if (!csv || csv.length &lt; 20) throw new Error('Empty'); return csv; });\n}\n\nfunction loadSheet() {\n  if (_sheetCache) return Promise.resolve(_sheetCache);\n  if (_sheetFetchPromise) return _sheetFetchPromise;\n  var names = [\"FEM\\u2019Us Pledge data\", \"FEM'Us Pledge data\", \"\"];\n  _sheetFetchPromise = new Promise(function(resolve, reject) {\n    function tryNext(i) {\n      if (i &gt;= names.length) { _sheetFetchPromise = null; reject(new Error('Could not load sheet.')); return; }\n      fetchCSV(names[i])\n        .then(function(csv) { var p = parseCSV(csv); _sheetCache = p; _sheetFetchPromise = null; resolve(p); })\n        .catch(function() { tryNext(i + 1); });\n    }\n    tryNext(0);\n  });\n  return _sheetFetchPromise;\n}\n\nfunction warmCache() { loadSheet().catch(function() {}); }\n\nfunction parseCSV(text) {\n  var rows = [], lines = text.split('\\n');\n  for (var i = 0; i &lt; lines.length; i++) {\n    var l = lines[i].trim();\n    if (l) rows.push(parseCSVRow(l));\n  }\n  return rows;\n}\n\nfunction parseCSVRow(line) {\n  var cells = [], cur = '', inQ = false;\n  for (var i = 0; i &lt; line.length; i++) {\n    var ch = line[i];\n    if (ch === '\"') {\n      if (inQ &amp;&amp; line[i + 1] === '\"') { cur += '\"'; i++; }\n      else { inQ = !inQ; }\n    } else if (ch === ',' &amp;&amp; !inQ) {\n      cells.push(cur.trim()); cur = '';\n    } else { cur += ch; }\n  }\n  cells.push(cur.trim());\n  return cells;\n}\n\nfunction buildIdx(h) { var idx = {}; for (var k in C) idx[k] = h.indexOf(C[k]); return idx; }\n\nfunction getReferreds(rows, idx, code) {\n  var list = [];\n  for (var i = 1; i &lt; rows.length; i++) {\n    var used = (rows[i][idx.used] || '').trim();\n    if (code &amp;&amp; used.toLowerCase() === code.toLowerCase())\n      list.push({ name: rows[i][idx.name] || '', city: rows[i][idx.city] || '', country: rows[i][idx.country] || '' });\n  }\n  return list;\n}\n\nfunction flashErr(inp) {\n  inp.style.borderColor = '#e05050'; inp.style.boxShadow = '0 0 0 3px rgba(224,80,80,.15)';\n  setTimeout(function() { inp.style.borderColor = ''; inp.style.boxShadow = ''; }, 1500);\n}\n\nfunction esc(s) {\n  return String(s || '').replace(\/[&amp;&lt;&gt;\"']\/g, function(c) {\n    return { '&amp;': '&amp;amp;', '&lt;': '&amp;lt;', '&gt;': '&amp;gt;', '\"': '&amp;quot;', \"'\": '&amp;#39;' }[c];\n  });\n}\n\nfunction fmt(n) { return Number(n).toLocaleString(); }\n\nfunction toggleForgot() {\n  document.getElementById('panel-dp').classList.remove('show');\n  var panel = document.getElementById('panel-forgot');\n  if (panel.classList.contains('show')) {\n    panel.classList.remove('show');\n    document.getElementById('forgot-out').innerHTML = '';\n  } else {\n    panel.classList.add('show');\n    document.getElementById('out').innerHTML = '';\n    document.getElementById('city-out').innerHTML = '';\n    panel.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    setTimeout(function() { document.getElementById('fq').focus(); }, 300);\n  }\n}\n\nfunction setTab(t) {\n  activeTab = t;\n  ['name', 'phone', 'email'].forEach(function(k) {\n    var el = document.getElementById('t-' + k);\n    if (el) el.className = 'tb' + (k === t ? ' on' : '');\n  });\n  var inp = document.getElementById('fq');\n  inp.placeholder = PH[t]; inp.value = '';\n  inp.style.borderColor = ''; inp.style.boxShadow = '';\n  document.getElementById('forgot-out').innerHTML = '';\n  setTimeout(function() { inp.focus(); }, 50);\n}\n\n\/\/ CODE SEARCH\nfunction doImpactSearch() {\n  var inp = document.getElementById('impact-code'), btn = document.getElementById('impact-btn'), out = document.getElementById('out');\n  var code = inp.value.trim().toUpperCase();\n  if (!code) { flashErr(inp); inp.focus(); return; }\n  btn.disabled = true;\n  btn.innerHTML = '&lt;div class=\"spin\"&gt;&lt;\/div&gt; Searching\\u2026';\n  out.innerHTML = '';\n  document.getElementById('city-out').innerHTML = '';\n  loadSheet().then(function(rows) {\n    var idx = buildIdx(rows[0]), ownerRow = null;\n    for (var r = 1; r &lt; rows.length; r++) {\n      if ((rows[r][idx.code] || '').trim().toUpperCase() === code) { ownerRow = rows[r]; break; }\n    }\n    if (!ownerRow) { showErr(out, 'No record found for code \"' + esc(code) + '\". Please check and try again.'); return; }\n    var name = ownerRow[idx.name] || '', referred = getReferreds(rows, idx, code), cnt = referred.length;\n    var email = ownerRow[idx.email] || '', city = ownerRow[idx.city] || '', country = ownerRow[idx.country] || '', masked = '';\n    if (email) { var p = email.split('@'); masked = p[0].substring(0, 2) + '***@' + (p[1] || ''); }\n    var loc = [city, country].filter(Boolean).join(', ');\n    var meta = [masked, loc].filter(Boolean).join(' \\u00b7 ');\n    certName = name; activeCertCode = code;\n    certStats = { cnt: cnt, water_L: cnt * BASE.water_L, co2_kg: cnt * BASE.co2_kg, chem_kg: cnt * BASE.chem_kg };\n    showImpactResult(out, { name: name, meta: meta, code: code, referred: referred });\n    document.getElementById('panel-forgot').classList.remove('show');\n    document.getElementById('panel-dp').classList.remove('show');\n  })\n  .catch(function(e) { showErr(out, 'Could not load data: ' + e.message); })\n  .finally(function() {\n    btn.disabled = false;\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/&gt;&lt;path d=\"M21 21l-4.35-4.35\"\/&gt;&lt;\/svg&gt; Submit';\n  });\n}\n\n\/\/ CITY SEARCH\nfunction doCitySearch() {\n  var inp = document.getElementById('city-input'), btn = document.getElementById('city-btn'), out = document.getElementById('city-out');\n  var cityQuery = inp.value.trim();\n  if (!cityQuery) { flashErr(inp); inp.focus(); return; }\n  btn.disabled = true;\n  btn.innerHTML = '&lt;div class=\"spin\"&gt;&lt;\/div&gt; Searching\\u2026';\n  out.innerHTML = '';\n  document.getElementById('out').innerHTML = '';\n  loadSheet().then(function(rows) {\n    var idx = buildIdx(rows[0]), q = cityQuery.toLowerCase(), cityPeople = [];\n    for (var r = 1; r &lt; rows.length; r++) {\n      var rc = (rows[r][idx.city] || '').toLowerCase().trim();\n      if (rc === q || rc.indexOf(q) !== -1) {\n        cityPeople.push({ name: rows[r][idx.name] || '', city: rows[r][idx.city] || '', country: rows[r][idx.country] || '' });\n      }\n    }\n    var total = cityPeople.length;\n    if (total === 0) { showErr(out, 'No pledges found for \"' + esc(cityQuery) + '\". Please check spelling or try another city.'); return; }\n    _cityAllPeople = cityPeople;\n    var water = total * BASE.water_L, co2 = (total * BASE.co2_kg).toFixed(1), chem = (total * BASE.chem_kg).toFixed(2);\n    var displayCity = cityPeople[0].city || cityQuery;\n    var INITIAL_SHOW = 100;\n    var peopleRows = buildCityRows(cityPeople, 0, Math.min(INITIAL_SHOW, total));\n    var showMoreHtml = '';\n    if (total &gt; INITIAL_SHOW) {\n      showMoreHtml = '&lt;button type=\"button\" class=\"show-more-btn\" id=\"city-show-more-btn\" onclick=\"toggleCityRows(this,' + INITIAL_SHOW + ',' + total + ')\"&gt;'\n        + '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M6 9l6 6 6-6\"\/&gt;&lt;\/svg&gt;'\n        + '+ ' + (total - INITIAL_SHOW) + ' more people \\u2014 tap to show all'\n        + '&lt;\/button&gt;';\n    }\n    out.innerHTML = '&lt;div class=\"box ok\"&gt;&lt;div class=\"blbl\"&gt;&lt;div class=\"bdot\"&gt;&lt;\/div&gt; CITY IMPACT REPORT&lt;\/div&gt;'\n      + '&lt;div class=\"prof\"&gt;&lt;div class=\"avi\" style=\"font-size:22px\"&gt;&amp;#127759;&lt;\/div&gt;&lt;div&gt;'\n      + '&lt;span class=\"pname\"&gt;' + esc(displayCity) + '&lt;\/span&gt;'\n      + '&lt;span class=\"pmeta\"&gt;Collective impact from ' + total + ' FEM\\u2019Us pledge' + (total !== 1 ? 's' : '') + '&lt;\/span&gt;&lt;\/div&gt;&lt;\/div&gt;'\n      + '&lt;div class=\"city-stat-grid\"&gt;'\n      + '&lt;div class=\"city-stat-card total\"&gt;&lt;span class=\"csn\"&gt;' + fmt(total) + '&lt;\/span&gt;&lt;span class=\"csl\"&gt;Total Pledges&lt;\/span&gt;&lt;\/div&gt;'\n      + '&lt;div class=\"city-stat-card water\"&gt;&lt;span class=\"csn\"&gt;' + Number((water \/ 1000000).toFixed(2)) + ' Million L&lt;\/span&gt;&lt;span class=\"csl\"&gt;Water Saved&lt;\/span&gt;&lt;\/div&gt;'\n      + '&lt;div class=\"city-stat-card co2\"&gt;&lt;span class=\"csn\"&gt;' + co2 + ' kg&lt;\/span&gt;&lt;span class=\"csl\"&gt;CO&amp;#8322; Reduced&lt;\/span&gt;&lt;\/div&gt;'\n      + '&lt;div class=\"city-stat-card chem\"&gt;&lt;span class=\"csn\"&gt;' + chem + ' kg&lt;\/span&gt;&lt;span class=\"csl\"&gt;Chemicals Reduced&lt;\/span&gt;&lt;\/div&gt;'\n      + '&lt;\/div&gt;'\n      + '&lt;span class=\"rhead\"&gt;Pledges from ' + esc(displayCity) + ' (' + total + ')&lt;\/span&gt;'\n      + '&lt;table class=\"reftable\" id=\"city-table\"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;S.No.&lt;\/th&gt;&lt;th&gt;Name&lt;\/th&gt;&lt;th&gt;City \/ Country&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;'\n      + '&lt;tbody id=\"city-tbody\"&gt;' + peopleRows + '&lt;\/tbody&gt;&lt;\/table&gt;'\n      + showMoreHtml + '&lt;\/div&gt;';\n    document.getElementById('panel-forgot').classList.remove('show');\n    document.getElementById('panel-dp').classList.remove('show');\n  })\n  .catch(function(e) { showErr(out, 'Could not load data: ' + e.message); })\n  .finally(function() {\n    btn.disabled = false;\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/&gt;&lt;path d=\"M21 21l-4.35-4.35\"\/&gt;&lt;\/svg&gt; Submit';\n  });\n}\n\nfunction buildCityRows(people, from, to) {\n  var html = '';\n  for (var i = from; i &lt; to; i++) {\n    var p = people[i];\n    html += '&lt;tr&gt;&lt;td&gt;' + (i + 1) + '&lt;\/td&gt;&lt;td&gt;' + esc(p.name) + '&lt;\/td&gt;&lt;td&gt;' + esc([p.city, p.country].filter(Boolean).join(', ')) + '&lt;\/td&gt;&lt;\/tr&gt;';\n  }\n  return html;\n}\n\nfunction toggleCityRows(btn, initialShow, total) {\n  var tbody = document.getElementById('city-tbody');\n  var expanded = btn.classList.contains('expanded');\n  if (!expanded) {\n    tbody.innerHTML = buildCityRows(_cityAllPeople, 0, total);\n    btn.classList.add('expanded');\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M6 9l6 6 6-6\"\/&gt;&lt;\/svg&gt; Show less';\n  } else {\n    tbody.innerHTML = buildCityRows(_cityAllPeople, 0, Math.min(initialShow, total));\n    btn.classList.remove('expanded');\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M6 9l6 6 6-6\"\/&gt;&lt;\/svg&gt;+ ' + (total - initialShow) + ' more people \\u2014 tap to show all';\n    var table = document.getElementById('city-table');\n    if (table) table.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  }\n}\n\nfunction buildImpactTable(cnt) {\n  var water = cnt * BASE.water_L, co2 = (cnt * BASE.co2_kg).toFixed(1), chem = (cnt * BASE.chem_kg).toFixed(2);\n  return '&lt;div class=\"impact-table-wrap\"&gt;&lt;span class=\"impact-table-title\"&gt;Your Impact in Numbers&lt;\/span&gt;'\n    + '&lt;table class=\"impact-table\"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;No. of People&lt;\/th&gt;&lt;th&gt;Litres of Water Saved&lt;\/th&gt;&lt;th&gt;kg of CO&amp;#8322; Reduced&lt;\/th&gt;&lt;th&gt;kg of Chemicals Reduced&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;'\n    + '&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;' + cnt + '&lt;\/td&gt;'\n    + '&lt;td class=\"water-cell\"&gt;' + Number((water \/ 1000000).toFixed(2)) + ' Million L&lt;\/td&gt;'\n    + '&lt;td class=\"co2-cell\"&gt;' + co2 + ' kg&lt;\/td&gt;'\n    + '&lt;td class=\"chem-cell\"&gt;' + chem + ' kg&lt;\/td&gt;'\n    + '&lt;\/tr&gt;&lt;\/tbody&gt;&lt;\/table&gt;&lt;\/div&gt;';\n}\n\nfunction buildCertSection(cnt) {\n  var bronzeOk = cnt &gt;= MILESTONES.bronze, silverOk = cnt &gt;= MILESTONES.silver, goldOk = cnt &gt;= MILESTONES.gold, platinumOk = cnt &gt;= MILESTONES.platinum;\n  var levels = [{ key: 'bronze', val: MILESTONES.bronze }, { key: 'silver', val: MILESTONES.silver }, { key: 'gold', val: MILESTONES.gold }, { key: 'platinum', val: MILESTONES.platinum }];\n  var nextLevel = null, prevVal = 0;\n  for (var i = 0; i &lt; levels.length; i++) { if (cnt &lt; levels[i].val) { nextLevel = levels[i]; prevVal = i &gt; 0 ? levels[i - 1].val : 0; break; } }\n  var pct = platinumOk ? 100 : Math.min(100, Math.round(((cnt - prevVal) \/ (nextLevel.val - prevVal)) * 100));\n  var barColor = platinumOk ? 'linear-gradient(90deg,#1e3a5a,#4a90b8,#70b8d8,#4a90b8)' : goldOk ? 'linear-gradient(90deg,#6a4800,#c09000,#f0d040)' : silverOk ? 'linear-gradient(90deg,#1c2230,#5a7898,#c4d4e4)' : 'linear-gradient(90deg,#4a1800,#a05a20,#d4883a)';\n  var nextLabel = platinumOk ? '\\u2705 All milestones reached!' : 'Next: ' + nextLevel.val + ' referrals for ' + nextLevel.key.charAt(0).toUpperCase() + nextLevel.key.slice(1);\n  var nextHint = platinumOk ? '\\u2728 You have unlocked all 4 certificates. You are a FEM\\u2019Us Champion!' : 'Keep sharing to reach your next milestone.';\n\n  function certCard(type, icon, label, threshold, unlocked) {\n    var cls = 'cert-card ' + type + ' ' + (unlocked ? 'unlocked' : 'locked');\n    var lockIco = unlocked ? '' : '&lt;span class=\"cert-lock-icon\"&gt;\\uD83D\\uDD12&lt;\/span&gt;';\n    var btnInner = unlocked ? '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"\/&gt;&lt;\/svg&gt; Download' : '\\uD83D\\uDD12 ' + threshold + ' needed';\n    var onclick = unlocked ? ' onclick=\"openCert(\\'' + type + '\\')\"' : '';\n    var disabled = unlocked ? '' : ' disabled';\n    return '&lt;div class=\"' + cls + '\"&gt;&lt;span class=\"cert-card-icon\"&gt;' + icon + '&lt;\/span&gt;' + lockIco + '&lt;div class=\"cert-card-name\"&gt;' + label + '&lt;\/div&gt;&lt;div class=\"cert-card-threshold\"&gt;' + threshold + ' referrals&lt;\/div&gt;&lt;button class=\"cert-card-btn\"' + disabled + onclick + '&gt;' + btnInner + '&lt;\/button&gt;&lt;\/div&gt;';\n  }\n\n  return '&lt;div class=\"cert-section\"&gt;&lt;div style=\"font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#1a7abf;margin-bottom:8px\"&gt;Step 5: Get your certificate&lt;\/div&gt;&lt;div class=\"cert-section-title\"&gt;Download your Certificate of Impact&lt;\/div&gt;'\n    + '&lt;p class=\"cert-section-desc\"&gt;Every pledge you bring is not just a number &amp;mdash; it is a real reduction in resource use and emissions.&lt;\/p&gt;'\n    + '&lt;p class=\"cert-milestone-note\"&gt;As you reach milestones of &lt;strong&gt;' + MILESTONES.bronze + ', ' + MILESTONES.silver + ', ' + MILESTONES.gold + ', or ' + MILESTONES.platinum + ' pledges&lt;\/strong&gt;, you unlock your &lt;strong&gt;Certificate of Climate Correction&lt;\/strong&gt;.&lt;br&gt;&lt;br&gt;Keep going. Your next milestone is waiting.&lt;\/p&gt;'\n    + '&lt;div class=\"cert-progress-wrap\"&gt;&lt;div class=\"cert-progress-label\"&gt;&lt;span class=\"cert-progress-left\"&gt;' + cnt + ' referral' + (cnt !== 1 ? 's' : '') + ' so far&lt;\/span&gt;&lt;span class=\"cert-progress-right\"&gt;' + nextLabel + '&lt;\/span&gt;&lt;\/div&gt;'\n    + '&lt;div class=\"cert-progress-track\"&gt;&lt;div class=\"cert-progress-bar\" style=\"width:' + pct + '%;background:' + barColor + '\"&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;'\n    + '&lt;div class=\"cert-cards\"&gt;'\n    + certCard('bronze', '\\uD83E\\uDD49', 'Bronze', MILESTONES.bronze, bronzeOk)\n    + certCard('silver', '\\uD83E\\uDD48', 'Silver', MILESTONES.silver, silverOk)\n    + certCard('gold', '\\uD83E\\uDD47', 'Gold', MILESTONES.gold, goldOk)\n    + certCard('platinum', '\\uD83D\\uDC8E', 'Platinum', MILESTONES.platinum, platinumOk)\n    + '&lt;\/div&gt;&lt;p class=\"cert-next-hint\"&gt;' + nextHint + '&lt;\/p&gt;&lt;\/div&gt;';\n}\n\nfunction showImpactResult(outEl, d) {\n  var cnt = d.referred.length;\n  var ini = d.name.split(' ').map(function(w) { return w.charAt(0); }).slice(0, 2).join('').toUpperCase() || '?';\n  var refTable = '';\n  if (cnt === 0) {\n    refTable = '&lt;span class=\"noref\"&gt;No one has used your code yet \\u2014 start sharing!&lt;\/span&gt;';\n  } else {\n    refTable = '&lt;table class=\"reftable\"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;S.No.&lt;\/th&gt;&lt;th&gt;Name&lt;\/th&gt;&lt;th&gt;City&lt;\/th&gt;&lt;\/tr&gt;&lt;\/thead&gt;&lt;tbody&gt;';\n    for (var i = 0; i &lt; d.referred.length; i++) {\n      var p = d.referred[i];\n      refTable += '&lt;tr&gt;&lt;td&gt;' + (i + 1) + '&lt;\/td&gt;&lt;td&gt;' + esc(p.name) + '&lt;\/td&gt;&lt;td&gt;' + esc([p.city, p.country].filter(Boolean).join(', ')) + '&lt;\/td&gt;&lt;\/tr&gt;';\n    }\n    refTable += '&lt;\/tbody&gt;&lt;\/table&gt;';\n  }\n  var statsHtml = '&lt;div class=\"stats-single\" style=\"margin-bottom:20px\"&gt;&lt;div class=\"stat-full\"&gt;&lt;span class=\"sn\"&gt;' + cnt + '&lt;\/span&gt;&lt;span class=\"sl\"&gt;People You Referred&lt;\/span&gt;&lt;\/div&gt;&lt;\/div&gt;';\n  outEl.innerHTML = '&lt;div class=\"box ok\"&gt;&lt;div class=\"blbl\"&gt;&lt;div class=\"bdot\"&gt;&lt;\/div&gt; IMPACT REPORT&lt;\/div&gt;'\n    + '&lt;div class=\"prof\"&gt;&lt;div class=\"avi\"&gt;' + ini + '&lt;\/div&gt;&lt;div&gt;'\n    + '&lt;span class=\"pname\"&gt;' + esc(d.name) + '&lt;\/span&gt;'\n    + (d.meta ? '&lt;span class=\"pmeta\"&gt;' + esc(d.meta) + '&lt;\/span&gt;' : '')\n    + '&lt;\/div&gt;&lt;\/div&gt;'\n    + statsHtml\n    + buildImpactTable(cnt)\n    + '&lt;span class=\"rhead\"&gt;People who joined using your code (' + cnt + ')&lt;\/span&gt;'\n    + refTable\n    + buildCertSection(cnt)\n    + '&lt;\/div&gt;';\n}\n\n\/\/ FORGOT CODE SEARCH\nfunction doForgotSearch() {\n  var inp = document.getElementById('fq'), btn = document.getElementById('fgo'), out = document.getElementById('forgot-out');\n  var query = inp.value.trim();\n  if (!query) { flashErr(inp); inp.focus(); return; }\n  btn.disabled = true;\n  btn.innerHTML = '&lt;div class=\"spin\"&gt;&lt;\/div&gt; Searching\\u2026';\n  out.innerHTML = '';\n  loadSheet().then(function(rows) {\n    var idx = buildIdx(rows[0]), q = query.toLowerCase(), matches = [];\n    for (var r = 1; r &lt; rows.length; r++) {\n      var row = rows[r]; if (!row || row.length &lt; 2) continue;\n      var hit = false;\n      if (activeTab === 'name') hit = (row[idx.name] || '').toLowerCase().indexOf(q) !== -1;\n      else if (activeTab === 'phone') {\n        var s = (row[idx.phone] || '').replace(\/\\D\/g, ''), inp2 = q.replace(\/\\D\/g, '');\n        \/\/ Fixed: Mobile number must match exactly\n        hit = s.length &gt; 0 &amp;&amp; inp2.length &gt; 0 &amp;&amp; s === inp2;\n      } else hit = (row[idx.email] || '').toLowerCase() === q;\n      if (hit) {\n        var code = (row[idx.code] || '').trim();\n        var ref = getReferreds(rows, idx, code);\n        var email = row[idx.email] || '', masked = '';\n        if (email) { var pa = email.split('@'); masked = pa[0].substring(0, 2) + '***@' + (pa[1] || ''); }\n        matches.push({ name: row[idx.name] || '', email_masked: masked, city: row[idx.city] || '', country: row[idx.country] || '', code: code, referred: ref });\n      }\n    }\n    if (matches.length === 0) showErr(out, 'No record found. Please check the details you entered.');\n    else if (matches.length === 1) showForgotProfile(out, matches[0]);\n    else showForgotMulti(out, matches);\n  })\n  .catch(function(e) { showErr(out, 'Could not load data: ' + e.message); })\n  .finally(function() {\n    btn.disabled = false;\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/&gt;&lt;path d=\"M21 21l-4.35-4.35\"\/&gt;&lt;\/svg&gt;&lt;span id=\"fbtxt\"&gt;Find My Referral Code&lt;\/span&gt;';\n  });\n}\n\nfunction showForgotProfile(outEl, r) {\n  var ini = r.name.split(' ').map(function(w) { return w.charAt(0); }).slice(0, 2).join('').toUpperCase() || '?';\n  var loc = [r.city, r.country].filter(Boolean).join(', ');\n  var meta = [r.email_masked, loc].filter(Boolean).join(' \\u00b7 ');\n  var link = REF_BASE + r.code;\n  certName = r.name; activeCertCode = r.code;\n  certStats = { cnt: r.referred.length, water_L: r.referred.length * BASE.water_L, co2_kg: r.referred.length * BASE.co2_kg, chem_kg: r.referred.length * BASE.chem_kg };\n  outEl.innerHTML = '&lt;div class=\"box ok\" style=\"margin-top:16px\"&gt;&lt;div class=\"blbl\"&gt;&lt;div class=\"bdot\"&gt;&lt;\/div&gt; Profile Found&lt;\/div&gt;'\n    + '&lt;div class=\"fp-card\"&gt;&lt;div class=\"fp-header\"&gt;&lt;div class=\"fp-avi\"&gt;' + ini + '&lt;\/div&gt;&lt;div&gt;'\n    + '&lt;span class=\"fp-name\"&gt;' + esc(r.name) + '&lt;\/span&gt;'\n    + (meta ? '&lt;span class=\"fp-meta\"&gt;' + esc(meta) + '&lt;\/span&gt;' : '')\n    + '&lt;\/div&gt;&lt;\/div&gt;'\n    + '&lt;div class=\"fp-code-block\"&gt;&lt;span class=\"fp-code-lbl\"&gt;Your Referral Code&lt;\/span&gt;'\n    + '&lt;div class=\"fp-code-row\"&gt;&lt;span class=\"fp-code-val\"&gt;' + esc(r.code) + '&lt;\/span&gt;'\n    + '&lt;button type=\"button\" class=\"fp-copy-btn\" id=\"fp-cbtn\" onclick=\"fpCopyCode(\\'' + esc(r.code) + '\\')\"&gt;'\n    + '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\/&gt;&lt;\/svg&gt; Copy Code&lt;\/button&gt;&lt;\/div&gt;&lt;\/div&gt;'\n    + '&lt;div class=\"fp-link-block\"&gt;&lt;span class=\"fp-link-lbl\"&gt;Your Referral Link&lt;\/span&gt;'\n    + '&lt;div class=\"fp-link-row\"&gt;&lt;div class=\"fp-link-url\"&gt;&lt;span class=\"fp-url-base\"&gt;thefiniteearth.org\/pledge?ref=&lt;\/span&gt;&lt;span class=\"fp-url-code\"&gt;' + esc(r.code) + '&lt;\/span&gt;&lt;\/div&gt;'\n    + '&lt;button type=\"button\" class=\"fp-link-copy-btn\" id=\"fp-lbtn\" onclick=\"fpCopyLink(\\'' + esc(link) + '\\')\"&gt;'\n    + '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;path d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\/&gt;&lt;\/svg&gt; Copy Link&lt;\/button&gt;&lt;\/div&gt;&lt;\/div&gt;'\n    + '&lt;div class=\"fp-action-hint\"&gt;'\n    + '&lt;svg viewBox=\"0 0 24 24\"&gt;&lt;circle cx=\"12\" cy=\"12\" r=\"10\"\/&gt;&lt;line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/&gt;&lt;line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/&gt;&lt;\/svg&gt;'\n    + 'Enter your code above to see your full impact &amp;amp; certificate&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;';\n}\n\nfunction showForgotMulti(outEl, arr) {\n  var items = arr.map(function(r) {\n    var loc = [r.city, r.country].filter(Boolean).join(' \\u00b7 ');\n    var met = [r.email_masked, loc].filter(Boolean).join(' \\u00b7 ');\n    var enc = encodeURIComponent(JSON.stringify(r));\n    return '&lt;div class=\"mitem\" onclick=\"pickForgotProfile(\\'' + enc + '\\')\"&gt;'\n      + '&lt;div&gt;&lt;span class=\"mname\"&gt;' + esc(r.name || '\\u2014') + '&lt;\/span&gt;'\n      + (met ? '&lt;span class=\"mmeta\"&gt;' + esc(met) + '&lt;\/span&gt;' : '') + '&lt;\/div&gt;'\n      + '&lt;span class=\"mcode\"&gt;' + esc(r.code) + '&lt;\/span&gt;&lt;\/div&gt;';\n  }).join('');\n  outEl.innerHTML = '&lt;div class=\"box ok\" style=\"margin-top:16px\"&gt;&lt;div class=\"blbl\"&gt;&lt;div class=\"bdot\"&gt;&lt;\/div&gt; Multiple Matches \\u2014 Select Yours&lt;\/div&gt;&lt;div class=\"multi\"&gt;' + items + '&lt;\/div&gt;&lt;\/div&gt;';\n}\n\nfunction pickForgotProfile(enc) {\n  try { showForgotProfile(document.getElementById('forgot-out'), JSON.parse(decodeURIComponent(enc))); }\n  catch (e) { showErr(document.getElementById('forgot-out'), 'Could not load profile.'); }\n}\n\nfunction showErr(outEl, msg) {\n  outEl.innerHTML = '&lt;div class=\"box err\" style=\"margin-top:16px\"&gt;&lt;div class=\"blbl\"&gt;&lt;div class=\"bdot\"&gt;&lt;\/div&gt; Not Found&lt;\/div&gt;&lt;span class=\"errtxt\"&gt;' + esc(msg) + '&lt;\/span&gt;&lt;\/div&gt;';\n}\n\nfunction fpCopyCode(code) {\n  var btn = document.getElementById('fp-cbtn');\n  navigator.clipboard.writeText(code).then(function() {\n    if (btn) { var o = btn.innerHTML; btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;path d=\"M5 13l4 4L19 7\"\/&gt;&lt;\/svg&gt; Copied!'; btn.classList.add('done'); setTimeout(function() { btn.innerHTML = o; btn.classList.remove('done'); }, 2500); }\n  }).catch(function() {\n    var ta = document.createElement('textarea'); ta.value = code; ta.style.cssText = 'position:fixed;opacity:0'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);\n  });\n}\n\nfunction fpCopyLink(link) {\n  var btn = document.getElementById('fp-lbtn');\n  navigator.clipboard.writeText(link).then(function() {\n    if (btn) { var o = btn.innerHTML; btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;path d=\"M5 13l4 4L19 7\"\/&gt;&lt;\/svg&gt; Copied!'; btn.classList.add('done'); setTimeout(function() { btn.innerHTML = o; btn.classList.remove('done'); }, 2500); }\n  }).catch(function() {\n    var ta = document.createElement('textarea'); ta.value = link; ta.style.cssText = 'position:fixed;opacity:0'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);\n  });\n}\n\nfunction showHowModal() { document.getElementById('dp-how-modal').classList.add('show'); document.body.style.overflow = 'hidden'; }\nfunction hideHowModal(e) { if (!e || e.target === document.getElementById('dp-how-modal') || e.currentTarget === document.querySelector('.dp-how-close')) { document.getElementById('dp-how-modal').classList.remove('show'); document.body.style.overflow = ''; } }\n\n\/\/ DP BUILDER\nvar DP_FRAMES = [\n  { title: \"I am FEM'Us\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-FEMUs-11.png\" },\n  { title: \"I am a Climate Satyagrahi\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-a-Climate-Satyagrahi-22.png\" },\n  { title: \"I am part of Bharat Climate Satyagraha\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-am-part-of-Bharat-Climate-Satyagraha-33.png\" },\n  { title: \"I support Finite Earth Movement &amp; Us (FEM'Us)\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Finite-Earth-Movement-Us-FEMUs-44.png\" },\n  { title: \"I support Climate Satyagraha\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Climate-Satyagraha-55.png\" },\n  { title: \"I support Energy Swaraj\", url: \"https:\/\/thefiniteearth.org\/wp-content\/uploads\/2026\/04\/I-support-Energy-Swaraj-66.png\" }\n];\n\nvar dpState = { img: null, frameImg: new Image(), scale: 1, baseScale: 1, dx: 0, dy: 0, manualDy: 0, isDragging: false, startX: 0, startY: 0, activeTitleIdx: 0 };\nvar dpCanvas, dpCtx, dpInited = false;\nvar dpCurrentStep = 1;\n\nfunction toggleDP() {\n  document.getElementById('panel-forgot').classList.remove('show');\n  var panel = document.getElementById('panel-dp');\n  if (panel.classList.contains('show')) {\n    panel.classList.remove('show');\n  } else {\n    panel.classList.add('show');\n    document.getElementById('out').innerHTML = '';\n    document.getElementById('city-out').innerHTML = '';\n    panel.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    if (!dpInited) initDP();\n  }\n}\n\nfunction dpGoStep(n) {\n  if (n &gt; 1 &amp;&amp; !dpState.img) { alert('Please upload a photo first.'); return; }\n  dpCurrentStep = n;\n  for (var i = 1; i &lt;= 3; i++) {\n    var tab = document.getElementById('dp-tab-' + i);\n    if (tab) { tab.className = 'dp-step-tab'; if (i === n) tab.className += ' active'; else if (i &lt; n) tab.className += ' done'; }\n  }\n  for (var j = 1; j &lt;= 3; j++) {\n    var panel = document.getElementById('dp-panel-' + j);\n    if (panel) panel.className = 'dp-step-panel' + (j === n ? ' active' : '');\n  }\n  if (n === 3) setTimeout(drawDP, 50);\n}\n\nfunction initDP() {\n  dpInited = true;\n  dpCanvas = document.getElementById('dp-canvas');\n  dpCtx = dpCanvas.getContext('2d');\n  var list = document.getElementById('dp-radio-list');\n  list.innerHTML = '';\n  DP_FRAMES.forEach(function(item, i) {\n    var div = document.createElement('div');\n    div.className = 'dp-radio-item' + (i === 0 ? ' selected' : '');\n    div.setAttribute('data-idx', i);\n    div.innerHTML = '&lt;div class=\"dp-radio-circle\"&gt;&lt;div class=\"dp-radio-dot\"&gt;&lt;\/div&gt;&lt;\/div&gt;' + item.title;\n    div.onclick = function() {\n      document.querySelectorAll('.dp-radio-item').forEach(function(el) { el.classList.remove('selected'); });\n      div.classList.add('selected');\n      dpState.activeTitleIdx = i;\n      loadDPFrame(i);\n    };\n    list.appendChild(div);\n  });\n  dpCanvas.addEventListener('mousedown', dpStartDrag);\n  window.addEventListener('mousemove', dpDrag);\n  window.addEventListener('mouseup', dpEndDrag);\n  dpCanvas.addEventListener('touchstart', function(e) { dpStartDrag(e.touches[0]); e.preventDefault(); }, { passive: false });\n  window.addEventListener('touchmove', function(e) { if (dpState.isDragging) { dpDrag(e.touches[0]); e.preventDefault(); } }, { passive: false });\n  window.addEventListener('touchend', dpEndDrag);\n  loadDPFrame(0);\n  dpCtx.fillStyle = '#f0ece3'; dpCtx.fillRect(0, 0, 1080, 1080);\n}\n\nfunction loadDPFrame(idx) {\n  dpState.activeTitleIdx = idx;\n  dpState.frameImg = new Image();\n  dpState.frameImg.crossOrigin = 'anonymous';\n  dpState.frameImg.onload = drawDP;\n  dpState.frameImg.src = DP_FRAMES[idx].url;\n}\n\nfunction handleDPUpload(e) {\n  var file = e.target.files[0]; if (!file) return;\n  var reader = new FileReader();\n  reader.onload = function(ev) {\n    var img = new Image();\n    img.onload = function() {\n      dpState.img = img;\n      dpState.baseScale = Math.max(1080 \/ img.width, 1080 \/ img.height);\n      dpState.scale = dpState.baseScale;\n      dpState.dx = 0; dpState.dy = 0; dpState.manualDy = 0;\n      document.getElementById('dp-zoom').value = 1;\n      document.getElementById('dp-pos-y').value = 0;\n      var preview = document.getElementById('dp-photo-preview');\n      preview.src = ev.target.result;\n      preview.classList.add('show');\n      document.getElementById('dp-upload-icon').style.display = 'none';\n      document.getElementById('dp-upload-label-text').textContent = 'Photo selected';\n      document.getElementById('dp-upload-sub').textContent = 'Tap to change photo';\n      document.getElementById('dp-upload-zone').classList.add('has-photo');\n      document.getElementById('dp-step1-next').disabled = false;\n      drawDP();\n    };\n    img.src = ev.target.result;\n  };\n  reader.readAsDataURL(file);\n}\n\nfunction handleDPZoom() { dpState.scale = dpState.baseScale * parseFloat(document.getElementById('dp-zoom').value); drawDP(); }\nfunction handleDPPosY() { dpState.manualDy = parseFloat(document.getElementById('dp-pos-y').value); drawDP(); }\n\nfunction dpStartDrag(e) { if (!dpState.img) return; dpState.isDragging = true; dpState.startX = e.clientX; dpState.startY = e.clientY; }\nfunction dpDrag(e) {\n  if (!dpState.isDragging || !dpState.img) return;\n  var rect = dpCanvas.getBoundingClientRect(), sf = 1080 \/ rect.width;\n  dpState.dx += (e.clientX - dpState.startX) * sf; dpState.dy += (e.clientY - dpState.startY) * sf;\n  dpState.startX = e.clientX; dpState.startY = e.clientY; drawDP();\n}\nfunction dpEndDrag() { dpState.isDragging = false; }\n\nfunction drawDP() {\n  if (!dpCtx) return;\n  dpCtx.clearRect(0, 0, 1080, 1080); dpCtx.fillStyle = '#ffffff'; dpCtx.fillRect(0, 0, 1080, 1080);\n  if (dpState.img) {\n    dpCtx.save(); dpCtx.beginPath(); dpCtx.arc(540, 540, 500, 0, Math.PI * 2); dpCtx.closePath(); dpCtx.clip();\n    dpCtx.translate(540 + dpState.dx, 540 + dpState.dy + dpState.manualDy);\n    dpCtx.scale(dpState.scale, dpState.scale);\n    dpCtx.drawImage(dpState.img, -dpState.img.width \/ 2, -dpState.img.height \/ 2);\n    dpCtx.restore();\n  }\n  if (dpState.frameImg.complete &amp;&amp; dpState.frameImg.src) dpCtx.drawImage(dpState.frameImg, 0, 0, 1080, 1080);\n}\n\nfunction downloadDP() {\n  if (!dpState.img) { alert('Please upload a photo first.'); return; }\n  var badgeTitle = DP_FRAMES[dpState.activeTitleIdx].title;\n  var a = document.createElement('a');\n  a.download = 'FEMUs_Badge_' + badgeTitle.replace(\/[^a-zA-Z0-9]\/g, '_') + '.png';\n  try {\n    a.href = dpCanvas.toDataURL('image\/png', 1.0);\n    document.body.appendChild(a); a.click(); document.body.removeChild(a);\n    updateShareLinks();\n    var d = new Date();\n    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];\n    var downloadDate = d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear();\n    var WEB_APP_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbyOff7p5rSJxVMiCswVGRP8GyKa4jkRTE6b0dIHKsmio7ndmBN9nS0QabfG0eUE9UGblQ\/exec';\n    var params = ['action=dp_download', 'badgeTitle=' + encodeURIComponent(badgeTitle), 'downloadDate=' + encodeURIComponent(downloadDate), 'name=' + encodeURIComponent(certName || ''), 'code=' + encodeURIComponent(activeCertCode || ''), 'timestamp=' + encodeURIComponent(d.toISOString())].join('&amp;');\n    fetch(WEB_APP_URL + '?' + params, { method: 'GET', mode: 'no-cors' }).then(function() {}).catch(function(err) { console.warn('Log failed:', err); });\n  } catch (err) {\n    alert('Image security blocked the download. Please right-click the image and save it manually.');\n  }\n}\n\nfunction updateShareLinks() {\n  var text = encodeURIComponent(\"I just built my FEM'Us \" + DP_FRAMES[dpState.activeTitleIdx].title + \" Badge! Take the pledge and check your impact at \" + REF_BASE.split('?')[0]);\n  var url = encodeURIComponent(REF_BASE.split('?')[0]);\n  document.getElementById('dp-share-wa').href = 'https:\/\/api.whatsapp.com\/send?text=' + text;\n  document.getElementById('dp-share-ig').href = 'https:\/\/www.instagram.com\/';\n  document.getElementById('dp-share-li').href = 'https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=' + url;\n  document.getElementById('dp-share-x').href = 'https:\/\/twitter.com\/intent\/tweet?text=' + text;\n  document.getElementById('dp-share-fb').href = 'https:\/\/www.facebook.com\/sharer\/sharer.php?u=' + url + '&amp;quote=' + text;\n}\n\n\/\/ CERTIFICATE OVERLAY\nvar CERT_POSITIONS = { name: { top: '35%', fontSize: '3.2%' }, date: { top: '82%', fontSize: '2.8%' } };\nvar CERT_META = { bronze: { label: 'Bronze', icon: '\\uD83E\\uDD49' }, silver: { label: 'Silver', icon: '\\uD83E\\uDD48' }, gold: { label: 'Gold', icon: '\\uD83E\\uDD47' }, platinum: { label: 'Platinum', icon: '\\uD83D\\uDC8E' } };\n\nfunction getCertImgUrl(type) {\n  if (type === 'bronze') return CERT_IMG_BRONZE;\n  if (type === 'silver') return CERT_IMG_SILVER;\n  if (type === 'gold') return CERT_IMG_GOLD;\n  if (type === 'platinum') return CERT_IMG_PLATINUM;\n  return CERT_IMG_BRONZE;\n}\n\nfunction openCert(type) {\n  if (!certName) { alert('Please search for your code first.'); return; }\n  var cnt = certStats.cnt || 0, threshold = MILESTONES[type] || MILESTONES.bronze;\n  if (cnt &lt; threshold) { alert('You need ' + threshold + ' referrals to unlock the ' + CERT_META[type].label + ' certificate. You currently have ' + cnt + '.'); return; }\n  activeCertType = type || 'bronze';\n  var meta = CERT_META[activeCertType];\n  document.getElementById('cert-overlay-title').textContent = meta.icon + ' Your ' + meta.label + ' Certificate of Impact';\n  var img = document.getElementById('cert-img'); img.src = getCertImgUrl(activeCertType);\n  document.getElementById('cert-overlay').style.display = 'flex';\n  document.body.style.overflow = 'hidden';\n  setTimeout(positionCertOverlays, 100);\n}\n\nfunction closeCert() { document.getElementById('cert-overlay').style.display = 'none'; document.body.style.overflow = ''; }\n\nfunction positionCertOverlays() {\n  var img = document.getElementById('cert-img'), w = img.offsetWidth, h = img.offsetHeight;\n  var nameEl = document.getElementById('co-name');\n  if (nameEl) {\n    nameEl.style.top = CERT_POSITIONS.name.top;\n    nameEl.style.fontFamily = \"'Charm',cursive\";\n    nameEl.style.fontSize = Math.round(w * parseFloat(CERT_POSITIONS.name.fontSize) \/ 100) + 'px';\n    nameEl.style.fontWeight = '700';\n    nameEl.textContent = certName;\n  }\n  var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];\n  var dateStr = milestoneDates[activeCertType] ? milestoneDates[activeCertType] : (function() { var d = new Date(); return d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear(); })();\n  var dateEl = document.getElementById('co-date');\n  if (dateEl) {\n    dateEl.style.top = CERT_POSITIONS.date.top;\n    dateEl.style.fontSize = Math.round(h * parseFloat(CERT_POSITIONS.date.fontSize) \/ 100) + 'px';\n    dateEl.style.left = '12%'; dateEl.style.right = 'auto'; dateEl.style.textAlign = 'left';\n    dateEl.textContent = dateStr;\n  }\n}\n\nfunction downloadCert() {\n  var btn = document.getElementById('dl-btn');\n  btn.disabled = true; btn.innerHTML = '&lt;div class=\"spin\"&gt;&lt;\/div&gt; Generating\\u2026';\n  html2canvas(document.getElementById('cert-wrapper'), { scale: 3, useCORS: true, allowTaint: true, backgroundColor: null, logging: false }).then(function(canvas) {\n    var a = document.createElement('a'), meta = CERT_META[activeCertType] || CERT_META.bronze;\n    a.download = 'FEMUs_' + meta.label + '_Certificate_' + certName.replace(\/\\s+\/g, '_') + '.png';\n    a.href = canvas.toDataURL('image\/png', 1.0);\n    document.body.appendChild(a); a.click(); document.body.removeChild(a);\n    var d = new Date(), months = ['January','February','March','April','May','June','July','August','September','October','November','December'];\n    var cnt = certStats.cnt || 0;\n    var WEB_APP_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbyOff7p5rSJxVMiCswVGRP8GyKa4jkRTE6b0dIHKsmio7ndmBN9nS0QabfG0eUE9UGblQ\/exec';\n    var params = ['name=' + encodeURIComponent(certName), 'code=' + encodeURIComponent(activeCertCode), 'certType=' + encodeURIComponent(meta.label), 'referralCount=' + encodeURIComponent(cnt), 'waterSaved=' + encodeURIComponent(Math.round(cnt * BASE.water_L)), 'co2Reduced=' + encodeURIComponent((cnt * BASE.co2_kg).toFixed(1)), 'chemReduced=' + encodeURIComponent((cnt * BASE.chem_kg).toFixed(2)), 'downloadDate=' + encodeURIComponent(d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear()), 'milestoneDate=' + encodeURIComponent(milestoneDates[activeCertType] || '')].join('&amp;');\n    fetch(WEB_APP_URL + '?' + params, { method: 'GET', mode: 'no-cors' }).then(function() {}).catch(function(err) { console.warn('Log failed:', err); });\n    btn.disabled = false;\n    btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;path d=\"M5 13l4 4L19 7\"\/&gt;&lt;\/svg&gt; Downloaded!';\n    setTimeout(function() { btn.innerHTML = '&lt;svg viewBox=\"0 0 24 24\" style=\"width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round\"&gt;&lt;path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"\/&gt;&lt;\/svg&gt; Download Certificate'; }, 3000);\n  }).catch(function(err) {\n    console.error(err); btn.disabled = false; btn.innerHTML = 'Download Certificate';\n    alert('Download failed. Please right-click the certificate and save image.');\n  });\n}\n\nwindow.addEventListener('resize', function() { var overlay = document.getElementById('cert-overlay'); if (overlay &amp;&amp; overlay.style.display !== 'none') positionCertOverlays(); });\ndocument.addEventListener('keydown', function(e) {\n  if (e.key !== 'Enter') return;\n  var a = document.activeElement; if (!a) return;\n  if (a.id === 'impact-code') doImpactSearch();\n  if (a.id === 'city-input') doCitySearch();\n  if (a.id === 'fq') doForgotSearch();\n});\n\nsetTimeout(warmCache, 600);\nupdateShareLinks();\n[\/tcb-script]<\/code><\/div>","tve_custom_css":"@media (min-width: 300px){[data-css=\"tve-u-19d0aee3a15\"] { --tve-alignment: center; float: none; margin-right: 20px !important; margin-left: 20px !important; }}@media (max-width: 767px){[data-css=\"tve-u-19d0aee3a15\"] { --tve-alignment: center; float: none; margin-right: 297px !important; padding-right: 87px !important; margin-left: 30px !important; margin-bottom: 14px !important; padding-left: 349px !important; }}","tve_user_custom_css":"","tve_globals":{"e":"1","font_cls":[]},"tcb2_ready":1,"tcb_editor_enabled":1,"tve_landing_page":"","_tve_header":"","_tve_footer":""},"class_list":["post-243","page","type-page","status-publish","hentry","post-wrapper","thrv_wrapper"],"_links":{"self":[{"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/pages\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/comments?post=243"}],"version-history":[{"count":87,"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/pages\/243\/revisions"}],"predecessor-version":[{"id":1668,"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/pages\/243\/revisions\/1668"}],"wp:attachment":[{"href":"https:\/\/thefiniteearth.org\/hindi\/wp-json\/wp\/v2\/media?parent=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}