<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2619536654761151932</id><updated>2026-06-10T05:00:00.123+05:30</updated><category term="Hadees"/><category term="Quran"/><category term="April"/><category term="March"/><category term="Ilm and Dhikr"/><category term="IslamicKnowledge"/><category term="zikr"/><category term="February"/><category term="Morning Zikr"/><category term="May"/><category term="June"/><category term="Evening Zikr"/><category term="Qur&#39;aan"/><category term="Bukhari"/><category term="Tirmizi"/><category term="Qur&#39;an"/><category term="Ilm"/><category term="Imaan"/><category term="Abu Dawud"/><category term="Rabb"/><category term="azaab"/><category term="insaan"/><category term="rahem"/><category term="shaitaan"/><category term="Aasmaan"/><category term="Al-Baqarah"/><category term="Bayaan"/><category term="Ghaafil"/><category term="Iman"/><category term="Islam"/><category term="Kharch"/><category term="Namaaz"/><category term="Nek"/><category term="Tirimizi"/><category term="dozakh"/><category term="kaafir"/><category term="maaf"/><category term="muhabbat"/><category term="namaz"/><category term="rizq"/><category term="subah"/><category term="Al Nisa"/><category term="Al-&#39;Ankabut"/><category term="Al-Mu&#39;min"/><category term="Amal"/><category term="An-Nahl"/><category term="An-Naml"/><category term="An-Nisa"/><category term="At-Tauba"/><category term="Aurton"/><category term="Azmat"/><category term="Baagaat"/><category term="Dawud"/><category term="Deen"/><category term="Farz"/><category term="Fatir"/><category term="Hud"/><category term="Ibne Maaja"/><category term="Ibne Maajah"/><category term="Jannat"/><category term="Jhoot"/><category term="Khoon"/><category term="Mard"/><category term="Mohabbat"/><category term="Momineen"/><category term="Naseehat"/><category term="Nisai"/><category term="Nishaaniyaan"/><category term="Qayaamat"/><category term="Rozi"/><category term="Shaam"/><category term="Shoaib &#39;alaihissalam"/><category term="Sulaiman"/><category term="Sura-e-Aaraaf"/><category term="Sura-e-Ankaboot"/><category term="Sura-e-Bani Israail"/><category term="Sura-e-Bani Israel"/><category term="Sura-e-Nisa"/><category term="Suwar"/><category term="Yaad"/><category term="bakhsh"/><category term="bakhshish"/><category term="bande"/><category term="be-hayaai"/><category term="behayayi"/><category term="bhai"/><category term="bharosa"/><category term="burayee"/><category term="darte"/><category term="dua"/><category term="duniya"/><category term="dushmani"/><category term="ehkaam"/><category term="ehsanat"/><category term="fasaad"/><category term="fazal"/><category term="fazeelat"/><category term="fazilat"/><category term="fazl-o-karam"/><category term="ghafil"/><category term="ghamgeen"/><category term="ghosht"/><category term="ghussa"/><category term="ghusse"/><category term="gumraahi"/><category term="gunah"/><category term="hikmat"/><category term="insaaf"/><category term="isteghfaar"/><category term="istighfaar"/><category term="jaanne waale"/><category term="khajoor"/><category term="khazane"/><category term="khushnoodi"/><category term="kitaab"/><category term="kufr"/><category term="libaas"/><category term="maherbaan"/><category term="mardon"/><category term="mazboot"/><category term="meharbaan"/><category term="miqdar"/><category term="misaalein"/><category term="mu&#39;af"/><category term="musallat"/><category term="musalmaan"/><category term="naam"/><category term="nadaani"/><category term="nafarmani"/><category term="paak"/><category term="paakeezah"/><category term="paida"/><category term="qareeb"/><category term="rehmat"/><category term="saath"/><category term="sadaabahaar"/><category term="sarkashi"/><category term="saza"/><category term="shaan"/><category term="surat"/><category term="tahajjud"/><category term="tangi"/><category term="tareeqa"/><category term="tasbeeh"/><category term="tasbih"/><category term="touba"/><category term="waqt"/><category term="wiraasat"/><category term="wus&#39;at"/><category term="zaat"/><category term="zameen"/><category term="zina"/><category term="zindagi"/><title type='text'>Islamic Messages in Urdu-English Transliteration</title><subtitle type='html'>&lt;a href=&quot;https://www.youtube.com/c/dailyislamicmessages&quot;&gt;Daily Islamic Messages Youtube Channel&lt;/a&gt; | &lt;a href=&quot;https://www.youtube.com/Bayanats&quot;&gt;Bayanat YouTube Channel&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>257</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-1821638289776343437</id><published>2026-06-10T05:00:00.000+05:30</published><updated>2026-06-10T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>10 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/1821638289776343437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/10-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1821638289776343437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1821638289776343437'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/10-june-morning-zikr-2026.html' title='10 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-6971580119259470167</id><published>2026-06-10T05:00:00.000+05:30</published><updated>2026-06-10T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 10</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;لاَ تَسُبَّنَّ أَحَدًا&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;Laa tasubbanna ahadaa&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Hargiz kisi ko gaali mat do.&lt;br /&gt;
&lt;br /&gt;
(Abu Dawood: 4084)&lt;br /&gt;
&lt;br /&gt;
◇ Kisi ko gaali dena bahot bada gunaah hai.&lt;br /&gt;
◇ Gaali dene se Allah Ta&#39;ala naaraaz hota hai.&lt;br /&gt;
◇ Gaali dene waalon se log nafrat karte hain.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2010&amp;amp;body=%D9%84%D8%A7%D9%8E%20%D8%AA%D9%8E%D8%B3%D9%8F%D8%A8%D9%91%D9%8E%D9%86%D9%91%D9%8E%20%D8%A3%D9%8E%D8%AD%D9%8E%D8%AF%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Laa%20tasubbanna%20ahadaa*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Hargiz%20kisi%20ko%20gaali%20mat%20do.%0D%0A%0D%0A%E2%9C%BA%20(Abu%20Dawood:%204084)%0D%0A%0D%0A%E2%97%87%20Kisi%20ko%20gaali%20dena%20bahot%20bada%20gunaah%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20se%20Allah%20Ta&#39;ala%20naaraaz%20hota%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20waalon%20se%20log%20nafrat%20karte%20hain.%0D%0A%0D%0A%F0%9F%93%B2%20*Download%20Islamic%20Messages%20Android%20App*%20-%20Goo.gl/mg4455&quot; target=&quot;_blank&quot; title=&quot;Send June – 10 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%84%D8%A7%D9%8E%20%D8%AA%D9%8E%D8%B3%D9%8F%D8%A8%D9%91%D9%8E%D9%86%D9%91%D9%8E%20%D8%A3%D9%8E%D8%AD%D9%8E%D8%AF%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Laa%20tasubbanna%20ahadaa*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Hargiz%20kisi%20ko%20gaali%20mat%20do.%0D%0A%0D%0A%E2%9C%BA%20%28Abu%20Dawood:%204084%29%0D%0A%0D%0A%E2%97%87%20Kisi%20ko%20gaali%20dena%20bahot%20bada%20gunaah%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20se%20Allah%20Ta%27ala%20naaraaz%20hota%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20waalon%20se%20log%20nafrat%20karte%20hain.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%84%D8%A7%D9%8E%20%D8%AA%D9%8E%D8%B3%D9%8F%D8%A8%D9%91%D9%8E%D9%86%D9%91%D9%8E%20%D8%A3%D9%8E%D8%AD%D9%8E%D8%AF%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Laa%20tasubbanna%20ahadaa*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Hargiz%20kisi%20ko%20gaali%20mat%20do.%0D%0A%0D%0A%E2%9C%BA%20(Abu%20Dawood:%204084)%0D%0A%0D%0A%E2%97%87%20Kisi%20ko%20gaali%20dena%20bahot%20bada%20gunaah%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20se%20Allah%20Ta&#39;ala%20naaraaz%20hota%20hai.%0D%0A%0D%0A%E2%97%87%20Gaali%20dene%20waalon%20se%20log%20nafrat%20karte%20hain.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/center&gt;
&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/6971580119259470167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6971580119259470167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6971580119259470167'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-10.html' title='June - 10'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-257398208153792436</id><published>2026-06-09T16:30:00.000+05:30</published><updated>2026-06-09T16:30:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>09 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/257398208153792436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/09-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/257398208153792436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/257398208153792436'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/09-june-evening-zikr-2026.html' title='09 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-4741254676235897382</id><published>2026-06-09T05:00:00.000+05:30</published><updated>2026-06-09T05:00:00.205+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 09</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;لَعَنَ رَسُوْلُ اللهِ صَلَّى اللهُ عَلَيْهِ وَسَلَّمَ الرَّاشِيَ وَالْمُرْتَشِيَ&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;La&#39;ana rasoolullaahi sallallaahu &#39;alaihi wasallam arraashiya walmurtashee&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tarjama: Rasoolullah ﷺ ne rishwat dene aur lene waale par laanat farmaai hai.&lt;br /&gt;&lt;br /&gt;(Abu Dawud: 3580)&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2009&amp;amp;body=%D9%84%D9%8E%D8%B9%D9%8E%D9%86%D9%8E%20%D8%B1%D9%8E%D8%B3%D9%8F%D9%88%D9%92%D9%84%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D8%B5%D9%8E%D9%84%D9%91%D9%8E%D9%89%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D8%B9%D9%8E%D9%84%D9%8E%D9%8A%D9%92%D9%87%D9%90%20%D9%88%D9%8E%D8%B3%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A7%D8%B4%D9%90%D9%8A%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%B1%D9%92%D8%AA%D9%8E%D8%B4%D9%90%D9%8A%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*La&#39;ana%20rasoolullaahi%20sallallaahu%20&#39;alaihi%20wasallam%20arraashiya%20walmurtashee*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasoolullah%20%EF%B7%BA%20ne%20rishwat%20dene%20aur%20lene%20waale%20par%20laanat%20farmaai%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Abu%20Dawud:%203580)%0D%0A%0D%0A%F0%9F%93%B2%20Shared Via DailyIslamicMessage.blogspot.com&quot; target=&quot;_blank&quot; title=&quot;Send June – 09 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%84%D9%8E%D8%B9%D9%8E%D9%86%D9%8E%20%D8%B1%D9%8E%D8%B3%D9%8F%D9%88%D9%92%D9%84%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D8%B5%D9%8E%D9%84%D9%91%D9%8E%D9%89%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D8%B9%D9%8E%D9%84%D9%8E%D9%8A%D9%92%D9%87%D9%90%20%D9%88%D9%8E%D8%B3%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A7%D8%B4%D9%90%D9%8A%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%B1%D9%92%D8%AA%D9%8E%D8%B4%D9%90%D9%8A%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*La%27ana%20rasoolullaahi%20sallallaahu%20%27alaihi%20wasallam%20arraashiya%20walmurtashee*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasoolullah%20%EF%B7%BA%20ne%20rishwat%20dene%20aur%20lene%20waale%20par%20laanat%20farmaai%20hai.%0D%0A%0D%0A%E2%9C%BA%20%28Abu%20Dawud:%203580%29%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%84%D9%8E%D8%B9%D9%8E%D9%86%D9%8E%20%D8%B1%D9%8E%D8%B3%D9%8F%D9%88%D9%92%D9%84%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D8%B5%D9%8E%D9%84%D9%91%D9%8E%D9%89%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D8%B9%D9%8E%D9%84%D9%8E%D9%8A%D9%92%D9%87%D9%90%20%D9%88%D9%8E%D8%B3%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A7%D8%B4%D9%90%D9%8A%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%B1%D9%92%D8%AA%D9%8E%D8%B4%D9%90%D9%8A%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*La&#39;ana%20rasoolullaahi%20sallallaahu%20&#39;alaihi%20wasallam%20arraashiya%20walmurtashee*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasoolullah%20%EF%B7%BA%20ne%20rishwat%20dene%20aur%20lene%20waale%20par%20laanat%20farmaai%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Abu%20Dawud:%203580)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/center&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/4741254676235897382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-09_0546795434.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4741254676235897382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4741254676235897382'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-09_0546795434.html' title='June - 09'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-7231629597748194742</id><published>2026-06-09T05:00:00.000+05:30</published><updated>2026-06-09T05:00:00.205+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>09 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/7231629597748194742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/09-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7231629597748194742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7231629597748194742'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/09-june-morning-zikr-2026.html' title='09 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-278789869426666377</id><published>2026-06-08T16:30:00.000+05:30</published><updated>2026-06-08T16:30:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>08 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/278789869426666377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/08-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/278789869426666377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/278789869426666377'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/08-june-evening-zikr-2026.html' title='08 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-1899226042072293224</id><published>2026-06-08T05:00:00.009+05:30</published><updated>2026-06-08T05:00:00.195+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 08</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;إِذَاسَأَلْتَ فَاسْأَلِ اللهَ&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;Izaa sa&#39;alta fas&#39;alillaah&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tarjama: Tujhe jab kuchh maangna ho to Allah Ta&#39;ala hi se maanga kar.&lt;br /&gt;&lt;br /&gt;(Tirmizi: 2516)&lt;br /&gt;  &lt;br /&gt;&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/center&gt;&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2008&amp;amp;body=%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa&#39;alta%20fas&#39;alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta&#39;ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%0D%0A%F0%9F%93%B2%20Shared Via DailyIslamicMessage.blogspot.com&quot; target=&quot;_blank&quot; title=&quot;Send June – 08 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa%27alta%20fas%27alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta%27ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%202516%29%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa&#39;alta%20fas&#39;alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta&#39;ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20App*%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/center&gt;&lt;b&gt;&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/1899226042072293224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2024/06/june-08_3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1899226042072293224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1899226042072293224'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2024/06/june-08_3.html' title='June - 08'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-3347625449841611904</id><published>2026-06-08T05:00:00.000+05:30</published><updated>2026-06-08T05:00:00.549+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>08 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/3347625449841611904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/08-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3347625449841611904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3347625449841611904'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/08-june-morning-zikr-2026.html' title='08 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-5045635402538054719</id><published>2026-06-08T05:00:00.000+05:30</published><updated>2026-06-08T05:00:00.549+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 08</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;&lt;center&gt;&lt;b&gt;إِذَاسَأَلْتَ فَاسْأَلِ اللهَ&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;&lt;center&gt;&lt;b&gt;Izaa sa&#39;alta fas&#39;alillaah&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tarjama: Tujhe jab kuchh maangna ho to Allah Ta&#39;ala hi se maanga kar.&lt;br /&gt;&lt;br /&gt;(Tirmizi: 2516)&lt;br /&gt;  &lt;br /&gt;&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/center&gt;&lt;center&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2008&amp;amp;body=%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa&#39;alta%20fas&#39;alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta&#39;ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%0D%0A%F0%9F%93%B2%20Shared Via DailyIslamicMessage.blogspot.com&quot; target=&quot;_blank&quot; title=&quot;Send June – 08 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa%27alta%20fas%27alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta%27ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%202516%29%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%B3%D9%8E%D8%A3%D9%8E%D9%84%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%A3%D9%8E%D9%84%D9%90%20%D8%A7%D9%84%D9%84%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*Izaa%20sa&#39;alta%20fas&#39;alillaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tujhe%20jab%20kuchh%20maangna%20ho%20to%20Allah%20Ta&#39;ala%20hi%20se%20maanga%20kar.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/center&gt;&lt;b&gt;&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/5045635402538054719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-08_0359176927.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5045635402538054719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5045635402538054719'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-08_0359176927.html' title='June - 08'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-4275903679762804078</id><published>2026-06-07T16:30:00.000+05:30</published><updated>2026-06-07T16:30:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>07 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/4275903679762804078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/07-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4275903679762804078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4275903679762804078'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/07-june-evening-zikr-2026.html' title='07 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-2708660659850569478</id><published>2026-06-07T05:00:00.002+05:30</published><updated>2026-06-07T05:00:00.123+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 07</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;اَلسَّخِيُّ قَرِيبٌ مِّنَ اللهِ قَرِيبٌ مِّنَ الْجَنَّةِ&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;Assakhiyyu qareebum minallaahi qareebum minal jannah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Sakhi aadmi Allah se qareeb hota hai, Jannat ke qareeb hota hai.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 1961)&lt;br /&gt;
  &lt;br /&gt;
&lt;center&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2007&amp;amp;body=%D8%A7%D9%8E%D9%84%D8%B3%D9%91%D9%8E%D8%AE%D9%90%D9%8A%D9%91%D9%8F%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Assakhiyyu%20qareebum%20minallaahi%20qareebum%20minal%20jannah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sakhi%20aadmi%20Allah%20se%20qareeb%20hota%20hai,%20Jannat%20ke%20qareeb%20hota%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202061)%0D%0A%0D%0A%F0%9F%93%B2%20*Download%20Islamic%20Messages%20Android%20App*%20-%20Goo.gl/mg4455&quot; target=&quot;_blank&quot; title=&quot;Send June – 07 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A7%D9%8E%D9%84%D8%B3%D9%91%D9%8E%D8%AE%D9%90%D9%8A%D9%91%D9%8F%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Assakhiyyu%20qareebum%20minallaahi%20qareebum%20minal%20jannah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sakhi%20aadmi%20Allah%20se%20qareeb%20hota%20hai,%20Jannat%20ke%20qareeb%20hota%20hai.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%202061%29%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A7%D9%8E%D9%84%D8%B3%D9%91%D9%8E%D8%AE%D9%90%D9%8A%D9%91%D9%8F%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%84%D9%87%D9%90%20%D9%82%D9%8E%D8%B1%D9%90%D9%8A%D8%A8%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Assakhiyyu%20qareebum%20minallaahi%20qareebum%20minal%20jannah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sakhi%20aadmi%20Allah%20se%20qareeb%20hota%20hai,%20Jannat%20ke%20qareeb%20hota%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202061)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/center&gt;
&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2708660659850569478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2708660659850569478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2708660659850569478'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-07.html' title='June - 07'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-8948257362178827362</id><published>2026-06-07T05:00:00.000+05:30</published><updated>2026-06-07T05:00:00.270+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>07 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/8948257362178827362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/07-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8948257362178827362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8948257362178827362'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/07-june-morning-zikr-2026.html' title='07 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-2325841913458758932</id><published>2026-06-06T16:30:00.000+05:30</published><updated>2026-06-06T16:30:00.132+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>06 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2325841913458758932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/06-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2325841913458758932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2325841913458758932'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/06-june-evening-zikr-2026.html' title='06 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-1030885325879799131</id><published>2026-06-06T05:00:00.000+05:30</published><updated>2026-06-06T05:00:00.191+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 06</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;span class=&quot;arabic_text_details arabic&quot;&gt;لَعَنَ اللَّهُ السَّارِقَ&lt;/span&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;La&#39;anallaahus saariq&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Allah Ta&#39;ala chor par laanat farmaata hai.&lt;br /&gt;
&lt;br /&gt;
(Bukhari: 6799)&lt;br /&gt;
&lt;br /&gt;
Chori karn bahot bada gunaah hai.&lt;br /&gt;
Chori karne waale se Allah Ta&#39;al bahot naaraaz hote hain.&lt;br /&gt;
Chori karne waala har ek ke nazdeek naapasand aur zaleel hota hai.&lt;br /&gt;
  &lt;br /&gt;
&lt;center&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on: &lt;/span&gt;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%D9%84%D9%8E%D8%B9%D9%8E%D9%86%D9%8E%20%D8%A7%D9%84%D9%84%D9%91%D9%8E%D9%87%D9%8F%20%D8%A7%D9%84%D8%B3%D9%91%D9%8E%D8%A7%D8%B1%D9%90%D9%82%D9%8E%0D%0A%0D%0A%E2%9C%BA%20*La&#39;anallaahus%20saariq*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Allah%20Ta&#39;ala%20chor%20par%20laanat%20farmaata%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%206799)%0D%0A%0D%0A%E2%9C%BA%20Chori%20karn%20bahot%20bada%20gunaah%20hai.%0D%0A%0D%0A%E2%9C%BA%20Chori%20karne%20waale%20se%20Allah%20Ta&#39;al%20bahot%20naaraaz%20hote%20hain.%0D%0A%0D%0A%E2%9C%BA%20Chori%20karne%20waala%20har%20ek%20ke%20nazdeek%20naapasand%20aur%20zaleel%20hota%20hai.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/center&gt;
&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/1030885325879799131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-06.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1030885325879799131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1030885325879799131'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-06.html' title='June - 06'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-7293772421592327744</id><published>2026-06-06T05:00:00.000+05:30</published><updated>2026-06-06T05:00:00.191+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>06 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/7293772421592327744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/06-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7293772421592327744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7293772421592327744'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/06-june-morning-zikr-2026.html' title='06 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-2888119676135329672</id><published>2026-06-05T16:30:00.000+05:30</published><updated>2026-06-05T16:30:00.195+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>05 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2888119676135329672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/05-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2888119676135329672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2888119676135329672'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/05-june-evening-zikr-2026.html' title='05 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-262228635413411135</id><published>2026-06-05T05:00:00.000+05:30</published><updated>2026-06-05T05:00:00.208+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>June - 05</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;إِذَااسْتَعَنْتَ فَاسْتَعِنْ بِاللهِ&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;Izasta&#39;anta fasta&#39;in billaah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Jab tum madad maango to Allah Ta&#39;ala hi se madad maango.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 2516)&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2005&amp;amp;body=%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%8E%D9%86%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%90%D9%86%D9%92%20%D8%A8%D9%90%D8%A7%D9%84%D9%84%D9%87%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Izasta&#39;anta%20fasta&#39;in%20billaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jab%20tum%20madad%20maango%20to%20Allah%20Ta&#39;ala%20hi%20se%20madad%20maango.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%0D%0A%F0%9F%93%B2%20*Download%20Islamic%20Messages%20Android%20App*%20-%20Goo.gl/mg4455&quot; target=&quot;_blank&quot; title=&quot;Send June – 05 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%8E%D9%86%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%90%D9%86%D9%92%20%D8%A8%D9%90%D8%A7%D9%84%D9%84%D9%87%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Izasta%27anta%20fasta%27in%20billaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jab%20tum%20madad%20maango%20to%20Allah%20Ta%27ala%20hi%20se%20madad%20maango.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%202516%29%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D8%A5%D9%90%D8%B0%D9%8E%D8%A7%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%8E%D9%86%D9%92%D8%AA%D9%8E%20%D9%81%D9%8E%D8%A7%D8%B3%D9%92%D8%AA%D9%8E%D8%B9%D9%90%D9%86%D9%92%20%D8%A8%D9%90%D8%A7%D9%84%D9%84%D9%87%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Izasta&#39;anta%20fasta&#39;in%20billaah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jab%20tum%20madad%20maango%20to%20Allah%20Ta&#39;ala%20hi%20se%20madad%20maango.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202516)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;/center&gt;
&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/262228635413411135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-05.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/262228635413411135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/262228635413411135'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-05.html' title='June - 05'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-6931999520751746411</id><published>2026-06-05T05:00:00.000+05:30</published><updated>2026-06-05T05:00:00.208+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>05 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/6931999520751746411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/05-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6931999520751746411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6931999520751746411'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/05-june-morning-zikr-2026.html' title='05 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-8013113108210276641</id><published>2026-06-04T16:30:00.000+05:30</published><updated>2026-06-04T16:30:00.207+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>04 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/8013113108210276641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8013113108210276641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8013113108210276641'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-evening-zikr-2026.html' title='04 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-6627067782787111951</id><published>2026-06-04T05:00:00.001+05:30</published><updated>2026-06-04T05:00:00.212+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>04 JUNE Hadees - Jis Ne Logon Ka Shukriya Ada Nahin Kiya Us Ne Allah Ka Shukriya Ada Nahin Kiya</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;مَنْ لَّمْ يَشْكُرِ النٌَاسَ لَمْ يَشْكُرِاللَّهَ&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;Mallam yashkurinnaasa lam yashkurillaah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Jis ne logon ka shukriya ada nahin kiya us ne Allah ka shukriya ada nahin kiya.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 1955)&lt;br /&gt;
&lt;br /&gt;
□ Shukriya ada karna achchhi aadat hai.&lt;br /&gt;
□ Agar koi ehsaan Kare to uska shukriya ada karna chaahiye.&lt;br /&gt;
□ Na shukri Allah Ta&#39;ala ko na pasand hai.&lt;br /&gt;
  &lt;br /&gt;
&lt;center&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=June%20%E2%80%93%2004&amp;amp;body=%D9%85%D9%8E%D9%86%D9%92%20%D9%84%D9%91%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%20%D8%A7%D9%84%D9%86%D9%8C%D9%8E%D8%A7%D8%B3%D9%8E%20%D9%84%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%D8%A7%D9%84%D9%84%D9%91%D9%8E%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20Mallam%20yashkurinnaasa%20lam%20yashkurillaah%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jis%20ne%20logon%20ka%20shukriya%20ada%20nahin%20kiya%20us%20ne%20Allah%20ka%20shukriya%20ada%20nahin%20kiya.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202055)%0D%0A%0D%0A%E2%96%A1%20Shukriya%20ada%20karna%20achchhi%20aadat%20hai.%0D%0A%0D%0A%E2%96%A1%20Agar%20koi%20ehsaan%20Kare%20to%20uska%20shukriya%20ada%20karna%20chaahiye.%0D%0A%0D%0A%E2%96%A1%20Na%20shukri%20Allah%20Ta&#39;ala%20ko%20na%20pasand%20hai.%0D%0A%0D%0A%F0%9F%93%B2%20*Download%20Islamic%20Messages%20Android%20App*%20-%20Goo.gl/mg4455&quot; target=&quot;_blank&quot; title=&quot;Send June – 04 in an Email&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Email&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%85%D9%8E%D9%86%D9%92%20%D9%84%D9%91%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%20%D8%A7%D9%84%D9%86%D9%8C%D9%8E%D8%A7%D8%B3%D9%8E%20%D9%84%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%D8%A7%D9%84%D9%84%D9%91%D9%8E%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20Mallam%20yashkurinnaasa%20lam%20yashkurillaah%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jis%20ne%20logon%20ka%20shukriya%20ada%20nahin%20kiya%20us%20ne%20Allah%20ka%20shukriya%20ada%20nahin%20kiya.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%202055%29%0D%0A%0D%0A%E2%96%A1%20Shukriya%20ada%20karna%20achchhi%20aadat%20hai.%0D%0A%0D%0A%E2%96%A1%20Agar%20koi%20ehsaan%20Kare%20to%20uska%20shukriya%20ada%20karna%20chaahiye.%0D%0A%0D%0A%E2%96%A1%20Na%20shukri%20Allah%20Ta%27ala%20ko%20na%20pasand%20hai.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20Download%20App%20Goo.gl/mg4455&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%85%D9%8E%D9%86%D9%92%20%D9%84%D9%91%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%20%D8%A7%D9%84%D9%86%D9%8C%D9%8E%D8%A7%D8%B3%D9%8E%20%D9%84%D9%8E%D9%85%D9%92%20%D9%8A%D9%8E%D8%B4%D9%92%D9%83%D9%8F%D8%B1%D9%90%D8%A7%D9%84%D9%84%D9%91%D9%8E%D9%87%D9%8E%0D%0A%0D%0A%E2%9C%BA%20Mallam%20yashkurinnaasa%20lam%20yashkurillaah%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jis%20ne%20logon%20ka%20shukriya%20ada%20nahin%20kiya%20us%20ne%20Allah%20ka%20shukriya%20ada%20nahin%20kiya.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%202055)%0D%0A%0D%0A%E2%96%A1%20Shukriya%20ada%20karna%20achchhi%20aadat%20hai.%0D%0A%0D%0A%E2%96%A1%20Agar%20koi%20ehsaan%20Kare%20to%20uska%20shukriya%20ada%20karna%20chaahiye.%0D%0A%0D%0A%E2%96%A1%20Na%20shukri%20Allah%20Ta&#39;ala%20ko%20na%20pasand%20hai.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/center&gt;
&lt;b&gt;&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;  &lt;td style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;height: 270px; overflow: hidden; position: relative; width: 320px;&quot;&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/Vfk_-LiQ944/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; id=&quot;okplayer&quot; mozallowfullscreen=&quot;mozallowfullscreen&quot; name=&quot;okplayer&quot; scrolling=&quot;no&quot; seamless=&quot;seamless&quot; src=&quot;https://Youtube.com/embed/Vfk_-LiQ944&quot; style=&quot;height: 270px; left: 0px; position: absolute; top: 0px; width: 320px;&quot; webkitallowfullscreen=&quot;webkitAllowFullScreen&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;  &lt;/div&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/6627067782787111951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-hadees-jis-ne-logon-ka-shukriya.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6627067782787111951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6627067782787111951'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-hadees-jis-ne-logon-ka-shukriya.html' title='04 JUNE Hadees - Jis Ne Logon Ka Shukriya Ada Nahin Kiya Us Ne Allah Ka Shukriya Ada Nahin Kiya'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Vfk_-LiQ944/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-7302511107757812696</id><published>2026-06-04T05:00:00.000+05:30</published><updated>2026-06-04T05:00:00.481+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>04 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/7302511107757812696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7302511107757812696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7302511107757812696'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/04-june-morning-zikr-2026.html' title='04 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-2261021123720323209</id><published>2026-06-03T16:30:00.000+05:30</published><updated>2026-06-03T16:30:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>03 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2261021123720323209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/03-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2261021123720323209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2261021123720323209'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/03-june-evening-zikr-2026.html' title='03 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-3200802853793302873</id><published>2026-06-03T05:00:00.000+05:30</published><updated>2026-06-03T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><title type='text'>03 JUNE (Aaj Ki Hadees) - Jo Shakhs Meri Itaa&#39;at Karega Woh Jannat Mein Daakhil Hoga</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;  &lt;tbody&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;Aaj Ki Hadees&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;center&gt;
&lt;b&gt;مَنْ أَطَاعَنِيْ دَخَلَ الْجَنَّةَ&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;Man ataa&#39;ani dakhalal jannah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Jo shakhs meri itaa&#39;at karega woh Jannat mein daakhil hoga.&lt;br /&gt;
&lt;br /&gt;
(Bukhari: 7280)&lt;br /&gt;
&lt;br /&gt;
Hamare liye Hazrat Muhammad ﷺ  ko Rasool maanna zaroori hai.&lt;br /&gt;
&lt;br /&gt;
Aap ﷺ  ke tareeqon par chalna zaroori hai.&lt;br /&gt;
&lt;br /&gt;  Jo Aap ﷺ  ke tareeqon par chalega woh Jannat mein daakhil hoga.&lt;br /&gt;
  &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%85%D9%8E%D9%86%D9%92%20%D8%A3%D9%8E%D8%B7%D9%8E%D8%A7%D8%B9%D9%8E%D9%86%D9%90%D9%8A%D9%92%20%D8%AF%D9%8E%D8%AE%D9%8E%D9%84%D9%8E%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%8E%0D%0A%0D%0A%E2%9C%BA%20Man%20ataa%27ani%20dakhalal%20jannah%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jo%20shakhs%20meri%20itaa%27at%20karega%20woh%20Jannat%20mein%20daakhil%20hoga.%0D%0A%0D%0A%E2%9C%BA%20%28Bukhari:%207280%29%0D%0A%0D%0A%E2%9C%BA%20Hamare%20liye%20Hazrat%20Muhammad%20%EF%B7%BA%20%20ko%20Rasool%20maanna%20zaroori%20hai.%0D%0A%0D%0A%E2%9C%BA%20Aap%20%EF%B7%BA%20%20ke%20tareeqon%20par%20chalna%20zaroori%20hai.%0D%0A%0D%0A%E2%9C%BA%20Jo%20Aap%20%EF%B7%BA%20%20ke%20tareeqon%20par%20chalega%20woh%20Jannat%20mein%20daakhil%20hoga.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20%D9%85%D9%8E%D9%86%D9%92%20%D8%A3%D9%8E%D8%B7%D9%8E%D8%A7%D8%B9%D9%8E%D9%86%D9%90%D9%8A%D9%92%20%D8%AF%D9%8E%D8%AE%D9%8E%D9%84%D9%8E%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%8E%0D%0A%0D%0A%E2%9C%BA%20Man%20ataa&#39;ani%20dakhalal%20jannah%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Jo%20shakhs%20meri%20itaa&#39;at%20karega%20woh%20Jannat%20mein%20daakhil%20hoga.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%207280)%0D%0A%0D%0A%E2%9C%BA%20Hamare%20liye%20Hazrat%20Muhammad%20%EF%B7%BA%20%20ko%20Rasool%20maanna%20zaroori%20hai.%0D%0A%0D%0A%E2%9C%BA%20Aap%20%EF%B7%BA%20%20ke%20tareeqon%20par%20chalna%20zaroori%20hai.%0D%0A%0D%0A%E2%9C%BA%20Jo%20Aap%20%EF%B7%BA%20%20ke%20tareeqon%20par%20chalega%20woh%20Jannat%20mein%20daakhil%20hoga.%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;  &lt;td style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;height: 270px; overflow: hidden; position: relative; width: 320px;&quot;&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/1UQy-zd40SA/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; id=&quot;okplayer&quot; mozallowfullscreen=&quot;mozallowfullscreen&quot; name=&quot;okplayer&quot; scrolling=&quot;no&quot; seamless=&quot;seamless&quot; src=&quot;https://Youtube.com/embed/1UQy-zd40SA&quot; style=&quot;height: 270px; left: 0px; position: absolute; top: 0px; width: 320px;&quot; webkitallowfullscreen=&quot;webkitAllowFullScreen&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;  &lt;/div&gt;
&lt;/td&gt;  &lt;/tr&gt;

&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/3200802853793302873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/06/june-03.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3200802853793302873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3200802853793302873'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/06/june-03.html' title='03 JUNE (Aaj Ki Hadees) - Jo Shakhs Meri Itaa&#39;at Karega Woh Jannat Mein Daakhil Hoga'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/1UQy-zd40SA/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-8232918838891426813</id><published>2026-06-03T05:00:00.000+05:30</published><updated>2026-06-03T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>03 June Morning Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/8232918838891426813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/03-june-morning-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8232918838891426813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8232918838891426813'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/03-june-morning-zikr-2026.html' title='03 June Morning Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-5733247027684757422</id><published>2026-06-02T16:30:00.000+05:30</published><updated>2026-06-02T16:30:00.128+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Evening Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="June"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>02 June Evening Zikr 2026</title><content type='html'>&lt;div class=&quot;light-theme&quot; id=&quot;tasbihThemeWrapper&quot; style=&quot;min-height: 4vh; padding-bottom: 0px; transition: background 0.4s;&quot;&gt; 
&lt;div id=&quot;tasbihApp&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(226, 232, 240); box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 60px; color: #1e293b; font-family: system-ui, sans-serif; margin: 0px auto; max-width: 440px; overflow: hidden; padding: 6px; position: relative; transition: 0.4s;&quot;&gt;

  &lt;div id=&quot;goalSuccess&quot; style=&quot;animation: 2s ease 0s infinite normal none running pulseGlow; background: rgba(34, 197, 94, 0.1); display: none; inset: 0px; pointer-events: none; position: absolute; z-index: 10;&quot;&gt;&lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; justify-content: space-between; margin-bottom: 4px;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; gap: 4px;&quot;&gt;
      &lt;div style=&quot;color: #0f172a; font-size: 18px; font-weight: 700; letter-spacing: 0.5px;&quot;&gt;Dhikr Counter&lt;/div&gt;
      &lt;div style=&quot;align-items: center; display: flex; flex-wrap: wrap; gap: 6px;&quot;&gt;
        &lt;div id=&quot;userLevelBadge&quot; style=&quot;background: rgb(254, 243, 199); border-radius: 6px; border: 1px solid rgb(252, 211, 77); color: #b45309; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;Lvl 1: Beginner&lt;/div&gt;
        &lt;div id=&quot;streakBadge&quot; style=&quot;background: rgb(254, 226, 226); border-radius: 6px; border: 1px solid rgb(252, 165, 165); color: #ef4444; font-size: 11px; font-weight: 800; padding: 2px 8px;&quot;&gt;🔥 &lt;span id=&quot;streakCount&quot;&gt;0&lt;/span&gt; Days&lt;/div&gt;
        &lt;div id=&quot;goalBadge&quot; style=&quot;animation: 0.3s ease 0s 1 normal none running popUp; background: rgb(22, 163, 74); border-radius: 4px; color: white; display: none; font-size: 10px; font-weight: 800; padding: 2px 6px;&quot;&gt;🏆 GOAL MET&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;soundToggle&quot; onclick=&quot;toggleSound()&quot; style=&quot;cursor: pointer; font-size: 26px; opacity: 0.8; transition: 0.2s;&quot;&gt;🔊&lt;/div&gt;
  &lt;/div&gt;


&lt;div style=&quot;position: relative; width: 100%; max-width: 800px; height: 0; padding-bottom: 60%;&quot;&gt;
  
&lt;div id=&quot;player&quot; style=&quot;width:100%; max-width:640px; height:200px;&quot;&gt;&lt;/div&gt;

&lt;script&gt;
async function loadVideo() {
  const sheetURL = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=867132479&amp;single=true&amp;output=csv&quot;;

  const response = await fetch(sheetURL);
  const text = await response.text();

  // Get first cell (video ID)
  const videoId = text.split(&quot;,&quot;)[0].trim();

  // Inject YouTube player
  document.getElementById(&quot;player&quot;).innerHTML = `
    &lt;iframe 
      width=&quot;100%&quot; 
      height=&quot;100%&quot; 
      src=&quot;https://www.youtube.com/embed/${videoId}?autoplay=1&amp;mute=0&amp;rel=0&quot;
      frameborder=&quot;0&quot;
      allow=&quot;autoplay; encrypted-media&quot;
      allowfullscreen&gt;
    &lt;/iframe&gt;
  `;
}

loadVideo();
&lt;/script&gt;
&lt;/div&gt;
  

  &lt;div style=&quot;display: flex; gap: 4px; margin: 12px 0px; text-align: center;&quot;&gt;
    &lt;select id=&quot;dhikrSelect&quot; onchange=&quot;loadDhikr(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 4px; border: 1px solid rgb(203, 213, 225); box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 4px; color: #1e293b; cursor: pointer; flex: 1 1 0%; font-size: 12px; outline: none; padding: 2px;&quot;&gt;
      &lt;option value=&quot;0&quot;&gt;Astaghfirullah&lt;/option&gt;
      &lt;option value=&quot;1&quot;&gt;SubhanAllah&lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt;Alhamdulillah&lt;/option&gt;
      &lt;option value=&quot;3&quot;&gt;Allahu Akbar&lt;/option&gt;
      &lt;option value=&quot;4&quot;&gt;La ilaha illallah&lt;/option&gt;
      &lt;option value=&quot;5&quot;&gt;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&lt;/option&gt;
      &lt;option value=&quot;6&quot;&gt;La hawla wala quwwata illa billah&lt;/option&gt;
      &lt;option value=&quot;7&quot;&gt;Hasbunallah wa ni&#39;mal wakeel&lt;/option&gt;
      &lt;option value=&quot;8&quot;&gt;SubhanAllahi wa bihamdihi&lt;/option&gt;
      &lt;option value=&quot;9&quot;&gt;Allahumma salli ala Muhammad&lt;/option&gt;
      &lt;option value=&quot;10&quot;&gt;Rabbighfir li (My Lord, forgive me)&lt;/option&gt;
      &lt;option value=&quot;11&quot;&gt;Allahumma inni as&#39;alukal jannah&lt;/option&gt;
      &lt;option value=&quot;12&quot;&gt;A&#39;udhu billahi minash shaytanir rajeem&lt;/option&gt;
      &lt;option value=&quot;13&quot;&gt;Bismillahilladhi la yadurru...&lt;/option&gt;
      &lt;option value=&quot;14&quot;&gt;La ilaha illallah wahdahu la sharika lah...&lt;/option&gt;
      &lt;option value=&quot;15&quot;&gt;Allahumma antas salam...&lt;/option&gt;
    &lt;/select&gt;
    &lt;div style=&quot;width: 8px;&quot;&gt;
        &lt;input id=&quot;dailyGoalInput&quot; onchange=&quot;updateGoal(this.value)&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 6px; border: 1px solid rgb(203, 213, 225); color: #d97706; font-size: 12px; font-weight: bold; padding: 2px; text-align: center; width: 100%;&quot; type=&quot;number&quot; value=&quot;100&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div id=&quot;dhikrText&quot; style=&quot;color: #0284c7; font-size: 22px; font-weight: 700; line-height: 1.35; margin: 16px 0px 8px; min-height: 20px; padding: 0px 10px; text-align: center;&quot;&gt;Astaghfirullah (I seek forgiveness from Allah)&lt;/div&gt;

  &lt;div id=&quot;fazailBox&quot; style=&quot;background: rgb(241, 245, 249); border-radius: 6px; border: 1px solid rgb(226, 232, 240); color: #64748b; font-size: 13px; line-height: 1; margin: 0px 0px 24px; min-height: 20px; padding: 4px; text-align: center;&quot;&gt;Loading virtue...&lt;/div&gt;

  &lt;div style=&quot;color: #94a3b8; font-size: 11px; margin-bottom: 1px; margin-top: -15px; text-align: center; font-weight: bold;&quot;&gt;Session: &lt;span id=&quot;sessionTimer&quot;&gt;00:00&lt;/span&gt;&lt;/div&gt;

  &lt;div id=&quot;counterZone&quot; onclick=&quot;increment()&quot; style=&quot;cursor: pointer; height: 300px; margin: 0px auto 32px; position: relative; user-select: none; width: 300px;&quot;&gt;
    &lt;svg style=&quot;height: 100%; inset: 0px; position: absolute; width: 100%;&quot; viewbox=&quot;0 0 140 140&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; r=&quot;54&quot; stroke-width=&quot;10&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; opacity=&quot;0.6&quot; r=&quot;64&quot; stroke-width=&quot;4&quot; stroke=&quot;#e2e8f0&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;prog&quot; r=&quot;54&quot; stroke-dasharray=&quot;339.29&quot; stroke-dashoffset=&quot;339.29&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;10&quot; stroke=&quot;#22c55e&quot; style=&quot;transition: stroke-dashoffset 0.3s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
      &lt;circle cx=&quot;70&quot; cy=&quot;70&quot; fill=&quot;none&quot; id=&quot;dailyProg&quot; r=&quot;64&quot; stroke-dasharray=&quot;402.12&quot; stroke-dashoffset=&quot;402.12&quot; stroke-linecap=&quot;round&quot; stroke-width=&quot;4&quot; stroke=&quot;#f59e0b&quot; style=&quot;transition: stroke-dashoffset 0.5s;&quot; transform=&quot;rotate(-90 70 70)&quot;&gt;
    &lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/circle&gt;&lt;/svg&gt;
    &lt;div id=&quot;countDisplay&quot; style=&quot;color: #0f172a; display: grid; font-family: &amp;quot;Courier New&amp;quot;, monospace; font-size: 90px; font-weight: bold; inset: 0px; letter-spacing: 4px; place-items: center; position: absolute;&quot;&gt;00&lt;/div&gt;
    &lt;div id=&quot;percent&quot; style=&quot;bottom: 35px; color: #16a34a; font-size: 20px; font-weight: 800; left: 50%; position: absolute; transform: translateX(-50%);&quot;&gt;0%&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;color: #f59e0b; font-size: 13px; font-weight: 700; margin-bottom: 20px; margin-top: -10px; text-align: center;&quot;&gt;Daily Goal: &lt;span id=&quot;dailyGoalText&quot;&gt;0 / 100&lt;/span&gt;&lt;/div&gt;

  &lt;div style=&quot;color: #475569; display: flex; flex-wrap: wrap; font-size: 15px; font-weight: 600; gap: 16px; justify-content: space-around; margin: 20px 0px 36px;&quot;&gt;
    &lt;div&gt;Round: &lt;b id=&quot;round&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Today: &lt;b id=&quot;thisRound&quot; style=&quot;color: #d97706;&quot;&gt;0 / 100&lt;/b&gt;&lt;/div&gt;
    &lt;div&gt;Total: &lt;b id=&quot;total&quot; style=&quot;color: #d97706;&quot;&gt;0&lt;/b&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;align-items: center; display: flex; flex-direction: column; gap: 36px; margin: 36px 0px;&quot;&gt;
    &lt;button id=&quot;tapBtn&quot; onclick=&quot;increment()&quot; style=&quot;background: linear-gradient(145deg, rgb(34, 197, 94), rgb(21, 128, 61)); border-radius: 50%; border: none; box-shadow: rgba(34, 197, 94, 0.4) 0px 12px 30px; color: white; cursor: pointer; font-size: 24px; font-weight: 800; height: 100px; transition: 0.18s; width: 100px;&quot;&gt;+1 Dhikr&lt;/button&gt;

    &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 15px; justify-content: center;&quot;&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;decrement()&quot; style=&quot;--color: #ef4444;&quot;&gt;-1&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;resetCount()&quot; style=&quot;--color: #f59e0b;&quot;&gt;Reset&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;exportCounts()&quot; style=&quot;--color: #8b5cf6;&quot;&gt;Export&lt;/button&gt;
      &lt;button class=&quot;control-btn&quot; onclick=&quot;shareToWhatsApp()&quot; style=&quot;--color: #22c55e;&quot;&gt;WhatsApp&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;style&gt;
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 20px;
      background: #f9f9f9;
    }
    .form-container {
      max-width: 700px;
      margin: 40px auto;
      background: white;
      padding: 30px;
      border-radius: 12px;
      box-shadow: 0 4px 20px rgba(0,0,0,0.1);
    }
    h1 {
      text-align: center;
      color: #333;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;div class=&quot;form-container&quot;&gt;
  &lt;!-- Paste your Google Forms embed code here --&gt;
    &lt;iframe src=&quot;https://docs.google.com/forms/d/e/1FAIpQLSdrX6-hzpENQ5oogEZHFEcpME8lq-A0XqkN-XpM3JRCDqmVxQ/viewform?embedded=true&quot;
            width=&quot;100%&quot;
            height=&quot;552&quot;
            frameborder=&quot;0&quot;
            marginheight=&quot;0&quot;
            marginwidth=&quot;0&quot;&gt;
      Loading…
    &lt;/iframe&gt;
  &lt;/div&gt;

&lt;/body&gt;
  &lt;/html&gt;
  &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div id=&quot;latestBox&quot; style=&quot;background:#fff; border-radius:16px; border:0px solid #f1f5f9; padding:0px; font-size:13px; box-shadow:0 0px 0px rgba(0,0,0,0.03);&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;fetchtotal&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
 &lt;div style=&quot;margin-top:0px; padding-top:0px; border-top:1px solid #e2e8f0; text-align:center;&quot;&gt;
  &lt;div style=&quot;font-size:16px; color:#334155; margin-bottom:12px; font-weight:700;&quot;&gt;📅 Latest Submissions&lt;/div&gt;
  &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
      &lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;
          &lt;tbody id=&quot;latestSubmissionsList&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;Loading recent submissions...&lt;/td&gt;&lt;/tr&gt;
          &lt;/tbody&gt;
      &lt;/table&gt;
  &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;div style=&quot;border-top: 1px solid rgb(226, 232, 240); margin-top: 0px; padding-top: 0px; text-align: center;&quot;&gt;
    &lt;div style=&quot;color: #334155; font-size: 16px; font-weight: 700; margin-bottom: 12px;&quot;&gt;🏆 Top 100 Leaderboard&lt;/div&gt;
    &lt;div id=&quot;leaderboardBox&quot; style=&quot;background: rgb(255, 255, 255); border-radius: 16px; border: 1px solid rgb(241, 245, 249); box-shadow: rgba(0, 0, 0, 0.03) 0px 4px 12px; font-size: 13px; padding: 0px;&quot;&gt;
        &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;
            &lt;tbody id=&quot;leaderboardList&quot;&gt;&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;Loading rankings...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;div style=&quot;border-top: 1px solid #334155; margin-top: 20px; padding-top: 12px;&quot;&gt;
    &lt;!-- Title: Muted Cyan-Grey --&gt;
    &lt;div style=&quot;color: #94a3b8; font-size: 11px; font-weight: 800; margin-bottom: 8px; text-align: center; text-transform: uppercase; letter-spacing: 0.12em;&quot;&gt;All Dhikr Summary&lt;/div&gt;
    
    &lt;!-- Progress Bar: Dark Track with Vibrant Glow --&gt;
    &lt;div style=&quot;background: #1e293b; border-radius: 10px; height: 6px; margin: 0 0 10px; overflow: hidden; border: 1px solid #334155;&quot;&gt;
        &lt;div id=&quot;levelProgressBar&quot; style=&quot;background: linear-gradient(90deg, #fbbf24, #f59e0b); height: 100%; width: 0%; box-shadow: 0 0 8px rgba(251, 191, 36, 0.4);&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Summary Box: DEEP DARK BACKGROUND --&gt;
    &lt;div id=&quot;summarySection&quot; style=&quot;background: #0f172a; border-radius: 12px; border: 1px solid #1e293b; box-shadow: 0 4px 20px rgba(0,0,0,0.4); padding: 12px;&quot;&gt;
      &lt;div id=&quot;summaryList&quot; style=&quot;color: #cbd5e1; display: flex; flex-direction: column; gap: 5px; font-size: 11px;&quot;&gt;&lt;/div&gt;
      
      &lt;!-- Grand Total: GOLD ACCENT BOX (Dark Mode Style) --&gt;
      &lt;div style=&quot;background: rgba(251, 191, 36, 0.1); border-radius: 8px; border: 1px solid rgba(251, 191, 36, 0.2); color: #fbbf24; font-size: 13px; font-weight: 900; margin-top: 10px; padding: 8px; text-align: center; text-shadow: 0 0 5px rgba(251, 191, 36, 0.2);&quot;&gt;
        Grand Total: &lt;span id=&quot;grandTotal&quot; style=&quot;color: #fcd34d;&quot;&gt;0&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;style&gt;
  .control-btn { width: 75px; height: 75px; border-radius: 50%; background: var(--color); color: #fff !important; font-size: 13px; font-weight: 700; border: none; cursor: pointer; box-shadow: 0 4px 10px rgba(0,0,0,0.1); display: flex; align-items: center; justify-content: center; transition: 0.2s; }
  .control-btn:active { transform: scale(0.9); }
  #counterZone:active { transform: scale(0.98); }
  @keyframes pulseGlow { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.6; } }
  @keyframes popUp { from { transform: scale(0.5); opacity: 0; } to { transform: scale(1); opacity: 1; } }
&lt;/style&gt;

&lt;script&gt;
const levels = [
  { min: 0, title: &quot;Lvl 1: Beginner&quot;, next: 100 }, { min: 100, title: &quot;Lvl 2: Seeker&quot;, next: 500 },
  { min: 500, title: &quot;Lvl 3: Devoted&quot;, next: 1000 }, { min: 1000, title: &quot;Lvl 4: Persistent&quot;, next: 5000 },
  { min: 5000, title: &quot;Lvl 5: Zakir&quot;, next: 10000 }, { min: 10000, title: &quot;Lvl 6: Master&quot;, next: 50000 }
];

const dhikrData = [
  { 
    name: &quot;Astaghfirullah&quot;, 
    translation: &quot;I seek forgiveness from Allah&quot;, 
    romanUrdu: &quot;Main Allah se mafi mangta hoon&quot;, 
    fazail: &quot;Major Fazilat &amp; Benefits of Istighfar (especially 100 times regularly): 1) Forgiveness of sins — even if they are as numerous as the foam of the sea (minor sins especially wiped away with sincere istighfar). 2) Relief from anxiety, distress &amp; worries — it brings peace to the heart and removes sadness. 3) Opening doors of rizq (provision/sustenance) — Allah removes hardship and brings barakah in wealth &amp; ease. 4) Mercy &amp; blessings descend — affairs become easy, knowledge increases, and protection from calamities. 5) Heart purification — polishes the heart, strengthens iman, and increases closeness to Allah. 6) Acceptance of dua — removes barriers between you and Allah. 7) Path to Jannah — regular istighfar is a means of entering Paradise and repelling harm. &#39;Scholars emphasize that while the number 100 is Sunnah (and easy — you can say Astaghfirullah over 100 times in just 1 minute), the key is sincerity and presence of heart, not just rushing through the count.&#39;&quot; 
  },
  { 
    name: &quot;SubhanAllah&quot;, 
    translation: &quot;Glory be to Allah&quot;, 
    romanUrdu: &quot;Pak hai Allah&quot;, 
    fazail: &quot;Fills scale of good deeds on Judgment Day (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Alhamdulillah&quot;, 
    translation: &quot;Praise be to Allah&quot;, 
    romanUrdu: &quot;Tamam tareefein Allah ke liye hain&quot;, 
    fazail: &quot;Fills half the scale - best dhikr (Tirmidhi 3383)&quot; 
  },
  { 
    name: &quot;Allahu Akbar&quot;, 
    translation: &quot;Allah is the Greatest&quot;, 
    romanUrdu: &quot;Allah sab se bada hai&quot;, 
    fazail: &quot;Greater than everything - fills heavens and earth (Muslim 2137)&quot; 
  },
  { 
    name: &quot;La ilaha illallah&quot;, 
    translation: &quot;There is no god but Allah&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi&quot;, 
    fazail: &quot;Heaviest on scale, key to Paradise (Bukhari 6403)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi SubhanAllahil Azeem&quot;, 
    translation: &quot;Glory be to Allah and Praise, Glory be to Allah the Supreme&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath, Pak hai Allah azmat wala&quot;, 
    fazail: &quot;Light on tongue, heavy on scale (Bukhari 6682)&quot; 
  },
  { 
    name: &quot;La hawla wala quwwata illa billah&quot;, 
    translation: &quot;There is no power nor might except with Allah&quot;, 
    romanUrdu: &quot;Na gunaah se bachne ki taqat hai na neki karne ki quwwat magar Allah ki tawfeeq se&quot;, 
    fazail: &quot;Treasure from Paradise (Bukhari 4205)&quot; 
  },
  { 
    name: &quot;Hasbunallah wa ni&#39;mal wakeel&quot;, 
    translation: &quot;Sufficient for us is Allah, and He is the best Disposer of affairs&quot;, 
    romanUrdu: &quot;Hamein Allah kafi hai aur woh behtareen karsaz hai&quot;, 
    fazail: &quot;Protection saved Ibrahim (Bukhari 3370)&quot; 
  },
  { 
    name: &quot;SubhanAllahi wa bihamdihi&quot;, 
    translation: &quot;Glory be to Allah and Praise be to Him&quot;, 
    romanUrdu: &quot;Pak hai Allah apni tareef ke sath&quot;, 
    fazail: &quot;100 times forgives sins (Muslim 2691)&quot; 
  },
  { 
    name: &quot;Allahumma salli ala Muhammad&quot;, 
    translation: &quot;O Allah, send blessings upon Muhammad&quot;, 
    romanUrdu: &quot;Ay Allah, Muhammad (S.A.W) par darood o salam bhej&quot;, 
    fazail: &quot;10 blessings for each salawat (Muslim 408)&quot; 
  },
  { 
    name: &quot;Rabbighfir li&quot;, 
    translation: &quot;My Lord, forgive me&quot;, 
    romanUrdu: &quot;Ay mere Rub, mujhe maaf kar de&quot;, 
    fazail: &quot;Prophet said 70-100 times (Bukhari 6307)&quot; 
  },
  { 
    name: &quot;Allahumma inni as&#39;alukal jannah&quot;, 
    translation: &quot;O Allah, I ask You for Paradise&quot;, 
    romanUrdu: &quot;Ay Allah, main Tujh se Jannat ka suwal karta hoon&quot;, 
    fazail: &quot;Sincere dua grants Jannah (Tirmidhi 2572)&quot; 
  },
  { 
    name: &quot;A&#39;udhu billahi minash shaytanir rajeem&quot;, 
    translation: &quot;I seek refuge in Allah from Satan the outcast&quot;, 
    romanUrdu: &quot;Main Allah ki panah mangta hoon shaitan mardood se&quot;, 
    fazail: &quot;Protection from Shaytan (Bukhari 6115)&quot; 
  },
  { 
    name: &quot;Bismillahilladhi la yadurru ma’asmihi shay’un fil-ardi wa la fis-sama’i wa huwas-Sami’ul-‘Alim&quot;, 
    translation: &quot;In the name of Allah, with whose name nothing can cause harm in the earth nor in the heavens&quot;, 
    romanUrdu: &quot;Allah ke naam ke sath jis ke naam ki barkat se zameen aur aasman ki koi cheez nuqsan nahi pahuncha sakti&quot;, 
    fazail: &quot;Protection from harm (Abu Dawud 5088)&quot; 
  },
  { 
    name: &quot;La ilaha illallahu wahdahu la sharika lah, lahul-mulku wa lahul-hamdu, wa huwa &#39;ala kulli shay&#39;in qadir.&quot;, 
    translation: &quot;There is no god but Allah alone, He has no partner, His is the dominion and His is the praise&quot;, 
    romanUrdu: &quot;Allah ke siwa koi mabood nahi, woh akela hai uska koi shareek nahi, usi ki badshahi hai aur usi ke liye tareef hai&quot;, 
    fazail: &quot;100 times is a great reward (Bukhari 3293)&quot; 
  },
  { 
    name: &quot;Allahumma antas-salamu wa minkas-salamu, tabarakta ya dhal-jalali wal-ikram.&quot;, 
    translation: &quot;O Allah, You are Peace and from You comes peace. Blessed are You, O Possessor of Majesty and Honor&quot;, 
    romanUrdu: &quot;Ay Allah, Tu salamti wala hai aur Tujhi se salamti hai, barkat wala hai Tu ay azmat aur buzurgi wale&quot;, 
    fazail: &quot;Beautiful ending dua (Muslim 592)&quot; 
  }
];
  
let currentIdx = 0, soundEnabled = true, totalCount = 0, roundCount = 0, roundsCompleted = 0;
let startTime = Date.now();

const els = {
  dhikrText: document.getElementById(&quot;dhikrText&quot;), fazailBox: document.getElementById(&quot;fazailBox&quot;),
  countDisplay: document.getElementById(&quot;countDisplay&quot;), percent: document.getElementById(&quot;percent&quot;),
  round: document.getElementById(&quot;round&quot;), thisRound: document.getElementById(&quot;thisRound&quot;),
  total: document.getElementById(&quot;total&quot;), prog: document.getElementById(&quot;prog&quot;),
  dailyProg: document.getElementById(&quot;dailyProg&quot;), dailyGoalText: document.getElementById(&quot;dailyGoalText&quot;),
  goalInput: document.getElementById(&quot;dailyGoalInput&quot;), summaryList: document.getElementById(&quot;summaryList&quot;),
  grandTotal: document.getElementById(&quot;grandTotal&quot;), levelBadge: document.getElementById(&quot;userLevelBadge&quot;),
  levelBar: document.getElementById(&quot;levelProgressBar&quot;), goalSuccess: document.getElementById(&quot;goalSuccess&quot;),
  goalBadge: document.getElementById(&quot;goalBadge&quot;), leaderboardList: document.getElementById(&quot;leaderboardList&quot;),
  streakCount: document.getElementById(&quot;streakCount&quot;), sessionTimer: document.getElementById(&quot;sessionTimer&quot;)
};

function format(n) { return n.toString().padStart(3, &quot;0&quot;); }

function checkStreak() {
    const today = new Date().toDateString();
    const lastDate = localStorage.getItem(&#39;lastDhikrDate&#39;);
    let streak = parseInt(localStorage.getItem(&#39;userStreak&#39;) || &quot;0&quot;);
    if (lastDate &amp;&amp; lastDate !== today) {
        const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1);
        if (lastDate === yesterday.toDateString()) { streak++; } 
        else { streak = 0; }
    }
    els.streakCount.textContent = streak;
    localStorage.setItem(&#39;userStreak&#39;, streak);
}

setInterval(() =&gt; {
    let diff = Math.floor((Date.now() - startTime) / 1000);
    let m = Math.floor(diff / 60).toString().padStart(2, &#39;0&#39;);
    let s = (diff % 60).toString().padStart(2, &#39;0&#39;);
    els.sessionTimer.textContent = `${m}:${s}`;
}, 1000);
  
 async function fetchtotalList() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=2066860714&amp;single=true&amp;output=csv&quot;;

    try {
        const res = await fetch(url);
        if (!res.ok) throw new Error();
        
        const csv = await res.text();
        const rows = csv.trim().split(&#39;\n&#39;).filter(line =&gt; line.trim() !== &#39;&#39;);
        const totalCount = rows.length &gt; 1 ? (rows.length - 1) : 0;
        const finalValue = totalCount + &quot;00&quot;;

        document.getElementById(&quot;fetchtotal&quot;).innerHTML = `
            &lt;div style=&quot;
                background: #e0f2fe;
                color: #0369a1;
                padding: 10px 14px;
                border-radius: 12px;
                text-align: center;
                font-family: sans-serif;
                max-width: 150px;
                margin: 10px auto;
            &quot;&gt;
                &lt;div style=&quot;
                    font-size: 0.6rem; 
                    font-weight: 800; 
                    text-transform: uppercase; 
                    letter-spacing: 0.05em; 
                    color: #0ea5e9;
                    margin-bottom: 2px;
                &quot;&gt;
                    Total Zikr Done
                &lt;/div&gt;
                &lt;div style=&quot;font-size: 1.6rem; font-weight: 900; line-height: 1;&quot;&gt;
                    ${finalValue}
                &lt;/div&gt;
            &lt;/div&gt;
        `;

    } catch (e) {
        document.getElementById(&quot;fetchtotal&quot;).innerText = &quot;000&quot;;
    }
}


    async function fetchLatestSubmissions() {
    // Use this export format — more reliable in 2026 for public sheets
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=1441647287&amp;single=true&amp;output=csv&quot;;

    try {
        // Optional: show loading
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; text-align:center;&#39;&gt;Loading submissions...&lt;/td&gt;&lt;/tr&gt;&quot;;

        const res = await fetch(url);
        if (!res.ok) {
            throw new Error(`HTTP error! Status: ${res.status}`);
        }

        const csv = await res.text();

        // Split into lines, trim, filter empty, then split by comma (still fragile — see note below)
        const rows = csv.trim().split(&#39;\n&#39;)
            .filter(line =&gt; line.trim() !== &#39;&#39;)
            .map(line =&gt; line.split(&#39;,&#39;));

        // Skip header row (row 0)
        const dataRows = rows.slice(1);

        let html = &quot;&quot;;
        if (dataRows.length === 0) {
            html = &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#64748b; text-align:center;&#39;&gt;No submissions yet&lt;/td&gt;&lt;/tr&gt;&quot;;
        } else {
            dataRows.forEach((row, i) =&gt; {
                // Column B = index 1 = Name
                let name = (row[1] || &#39;Anon&#39;).trim();

                // Basic HTML escape to prevent XSS
                name = name
                    .replace(/&amp;/g, &#39;&amp;amp;&#39;)
                    .replace(/&lt;/g, &#39;&amp;lt;&#39;)
                    .replace(/&gt;/g, &#39;&amp;gt;&#39;)
                    .replace(/&quot;/g, &#39;&amp;quot;&#39;);

                html += `&lt;tr style=&quot;border-bottom: 1px solid #f1f5f9; height: 34px; background-color: ${i &lt; 3 ? &#39;#fffbeb&#39; : &#39;transparent&#39;};&quot;&gt;
    &lt;!-- Rank Number: Larger, more legible bubble --&gt;
    &lt;td style=&quot;padding: 6px 10px; width: 35px; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            display: inline-block; 
            width: 22px; 
            height: 22px; 
            line-height: 22px; 
            text-align: center; 
            border-radius: 6px; 
            font-size: 0.8rem; 
            font-weight: 900;
            background: ${i === 0 ? &#39;#fbbf24&#39; : i === 1 ? &#39;#94a3b8&#39; : i === 2 ? &#39;#b45309&#39; : &#39;#f1f5f9&#39;};
            color: ${i &lt; 3 ? &#39;#ffffff&#39; : &#39;#475569&#39;};
        &quot;&gt;
            ${i + 1}
        &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;!-- Name: Prominent and clear --&gt;
    &lt;td style=&quot;padding: 6px 10px; text-align: left; vertical-align: middle;&quot;&gt;
        &lt;div style=&quot;
            font-size: 0.9rem; 
            font-weight: ${i &lt; 3 ? &#39;800&#39; : &#39;600&#39;}; 
            color: ${i === 0 ? &#39;#92400e&#39; : &#39;#0f172a&#39;}; 
            letter-spacing: -0.01em;
            line-height: 1.2;
        &quot;&gt;
            ${name}
        &lt;/div&gt;
    &lt;/td&gt;

    &lt;!-- Icon/Points: Scaled up for balance --&gt;
    &lt;td style=&quot;padding: 6px 12px; text-align: right; vertical-align: middle;&quot;&gt;
        &lt;span style=&quot;font-size: 0.8rem; font-weight: 700; color: ${i &lt; 3 ? &#39;#fbbf24&#39; : &#39;#cbd5e1&#39;};&quot;&gt;
            ${i &lt; 3 ? &#39;★&#39; : &#39;✦&#39;}
        &lt;/span&gt;
    &lt;/td&gt;
&lt;/tr&gt;




`;
            });
        }

        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = html;

    } catch (e) {
        console.error(&quot;Fetch error:&quot;, e);
        document.getElementById(&quot;latestSubmissionsList&quot;).innerHTML = 
            &quot;&lt;tr&gt;&lt;td colspan=&#39;2&#39; style=&#39;padding:12px; color:#ef4444; text-align:center;&#39;&gt;Error loading submissions (check if sheet is still published)&lt;/td&gt;&lt;/tr&gt;&quot;;
    }
}

   async function fetchLeaderboard() {
    const url = &quot;https://docs.google.com/spreadsheets/d/e/2PACX-1vS03daWU5zAUkAiqw25mELsgoYKPl0A2Z3KOpeYtStOyBi-amwG44n0DR78Ztyc1Go3yO50_Fav4D9i/pub?gid=189690890&amp;single=true&amp;output=csv&quot;;
    try {
        const res = await fetch(url); 
        const csv = await res.text();
        const rows = csv.split(&#39;\n&#39;).map(r =&gt; r.split(&#39;,&#39;)).slice(1);
        
        const leaderboardData = rows
            .map(c =&gt; ({ name: (c[1] || &#39;Anon&#39;).trim(), total: parseInt(c[2]) || 0 }))
            .sort((a, b) =&gt; b.total - a.total)
            .slice(0, 100);

        if (leaderboardData.length === 0) throw new Error();

        // 1. Separate the Champion
        const [champion, ...runnersUp] = leaderboardData;

        // 2. Render Champion Card (Unique Style)
        const championHTML = `
      &lt;div style=&quot;margin-bottom: 15px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: separate; border-spacing: 0; background: linear-gradient(135deg, #fef3c7 0%, #fcd34d 100%); border: 2px solid #fbbf24; border-radius: 12px; box-shadow: 0 4px 15px rgba(251, 191, 36, 0.3); overflow: hidden;&quot;&gt;
        &lt;tr&gt;
            &lt;td style=&quot;padding: 12px 20px; width: 50px; text-align: center; font-size: 1.8rem; vertical-align: middle;&quot;&gt;👑&lt;/td&gt;
            &lt;td style=&quot;padding: 12px 10px; vertical-align: middle;&quot;&gt;
               &lt;div style=&quot;text-transform: uppercase; font-size: 0.5rem; font-weight: 900; color: #92400e; letter-spacing: 0.15em; line-height: 1;&quot;&gt;Current Champion&lt;/div&gt;

         &lt;div style=&quot;font-size: 0.9rem; font-weight: 800; color: #1e3a8a; margin: 0; line-height: 1.1;&quot;&gt;${champion.name}&lt;/div&gt;


            &lt;td style=&quot;padding: 12px 20px; text-align: right; vertical-align: middle;&quot;&gt;
             &lt;div style=&quot;font-size: 0.75rem; font-weight: 900; color: #16a34a; white-space: nowrap; line-height: 1;&quot;&gt;
    ${champion.total.toLocaleString()}00 &lt;span style=&quot;font-size: 0.6rem; font-weight: 700; opacity: 0.8;&quot;&gt;ZIKR&lt;/span&gt;
&lt;/div&gt;


            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
     `;

        // 3. Render the rest of the list
        const rowsHTML = runnersUp.map((u, i) =&gt; {
            const rank = i + 2; // Offset by 2 because we sliced the first one
            const medal = rank === 2 ? &quot;🥈&quot; : rank === 3 ? &quot;🥉&quot; : rank;
            return `
                &lt;table style=&quot;width: 100%; border-collapse: collapse;&quot;&gt;
   &lt;tbody&gt;
    &lt;tr style=&quot;border-bottom: 1px solid #f1f5f9;&quot;&gt;
        &lt;!-- Medal --&gt;
        &lt;td style=&quot;padding: 4px 8px; font-size: 0.7rem; font-weight: bold; color: #64748b; width: 10px; line-height: 1;&quot;&gt;
            ${medal}
        &lt;/td&gt;
        
        &lt;!-- Name --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: left; font-size: 0.75rem; font-weight: 500; line-height: 1;&quot;&gt;
            ${u.name}
        &lt;/td&gt;
        
        &lt;!-- Total --&gt;
        &lt;td style=&quot;padding: 4px 8px; text-align: right; font-size: 0.75rem; font-weight: 800; color: #16a34a; line-height: 1;&quot;&gt;
            ${u.total.toLocaleString()}00
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;


&lt;/table&gt;`;
        }).join(&#39;&#39;);

        // Inject both into your container
        els.leaderboardList.innerHTML = championHTML + `&lt;table style=&quot;width:100%; border-collapse:collapse;&quot;&gt;${rowsHTML}&lt;/table&gt;`;

    } catch (e) { 
        els.leaderboardList.innerHTML = &quot;&lt;div style=&#39;text-align:center; padding:20px; color:#ef4444;&#39;&gt;Unable to load rankings&lt;/div&gt;&quot;; 
    }
}
         

// Auto-refresh latest every 60 seconds
setInterval(fetchLatestSubmissions, 60000);
  
function loadCurrent() {
  const data = JSON.parse(localStorage.getItem(`zikrCount_${currentIdx}`) || &#39;{&quot;total&quot;:0}&#39;);
  totalCount = data.total; roundCount = totalCount % 100;
  roundsCompleted = Math.floor(totalCount / 100);
  els.goalInput.value = localStorage.getItem(&#39;dailyGoal&#39;) || 100;
  updateUI(); fetchLeaderboard(); fetchLatestSubmissions(); checkStreak();fetchtotalList();
}

function updateUI() {
  // Modified: Using full name from dhikrData
  els.dhikrText.textContent = dhikrData[currentIdx].name;
  els.fazailBox.textContent = dhikrData[currentIdx].fazail;
  els.countDisplay.textContent = format(roundCount);
  els.total.textContent = totalCount; els.round.textContent = roundsCompleted;
  els.thisRound.textContent = `${roundCount} / 100`;
  const p = (roundCount / 100) * 100;
  els.percent.textContent = Math.round(p) + &quot;%&quot;;
  els.prog.setAttribute(&quot;stroke-dashoffset&quot;, 339.29 - (p / 100) * 339.29);
  updateStats();
}

function updateStats() {
  let grand = 0; let html = &quot;&quot;;
  dhikrData.forEach((item, i) =&gt; {
    const cnt = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
    grand += cnt;
    // Modified: Removed split to show full name in summary list
    html += `&lt;div style=&quot;display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid #f1f5f9; gap:10px;&quot;&gt;&lt;span style=&quot;text-align:left;&quot;&gt;${item.name}&lt;/span&gt;&lt;b style=&quot;color:#16a34a; white-space:nowrap;&quot;&gt;${cnt}&lt;/b&gt;&lt;/div&gt;`;
  });
  els.summaryList.innerHTML = html;
  els.grandTotal.textContent = grand;
  
  let lvl = levels.slice().reverse().find(l =&gt; grand &gt;= l.min) || levels[0];
  els.levelBadge.textContent = lvl.title;
  els.levelBar.style.width = lvl.next ? Math.min(((grand - lvl.min)/(lvl.next - lvl.min)) * 100, 100) + &quot;%&quot; : &quot;100%&quot;;
  
  const goal = parseInt(els.goalInput.value) || 100;
  els.dailyGoalText.textContent = `${grand} / ${goal}`;
  const dailyP = Math.min((grand / goal) * 100, 100);
  els.dailyProg.setAttribute(&quot;stroke-dashoffset&quot;, 402.12 - (dailyP / 100) * 402.12);

  if (grand &gt;= goal) {
      els.goalSuccess.style.display = &quot;block&quot;; els.goalBadge.style.display = &quot;block&quot;;
      localStorage.setItem(&#39;lastDhikrDate&#39;, new Date().toDateString());
  } else { els.goalSuccess.style.display = &quot;none&quot;; els.goalBadge.style.display = &quot;none&quot;; }
}

function increment() { 
  totalCount++; 
  roundCount = totalCount % 100;
  
  // Update Daily Total
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0, date: new Date().toLocaleDateString() };
  dailyData.count++;
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));

  if (roundCount === 0) { roundsCompleted++; vibrate(300, 100, 300); }
  else { vibrate(40); }
  
  saveCurrent(); updateUI(); playSound(&quot;clickSound&quot;); 
}
function saveCurrent() {
  const today = new Date().toLocaleDateString(); // Get today&#39;s date string
  
  // Save total count (Existing)
  localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount }));

  // Save daily count (New)
  let dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || {};
  
  // If the date in storage isn&#39;t today, reset the daily total
  if (dailyData.date !== today) {
    dailyData = { date: today, count: 0 };
  }
  
  // We increment this in the increment() function below
  localStorage.setItem(&#39;dailyZikr&#39;, JSON.stringify(dailyData));
}


function playSound(id) { if(soundEnabled) { const s = document.getElementById(id); s.currentTime = 0; s.play().catch(()=&gt;{}); } }
function decrement() { if(totalCount &gt; 0) { totalCount--; roundCount = totalCount % 100; roundsCompleted = Math.floor(totalCount / 100); saveCurrent(); updateUI(); playSound(&quot;decrementSound&quot;); vibrate(20); } }
function saveCurrent() { localStorage.setItem(`zikrCount_${currentIdx}`, JSON.stringify({ total: totalCount })); }
function resetCount() { if (confirm(`Reset counts for this Dhikr?`)) { totalCount = roundCount = roundsCompleted = 0; saveCurrent(); updateUI(); } }
function loadDhikr(i) { currentIdx = parseInt(i); loadCurrent(); }
function toggleSound() { soundEnabled = !soundEnabled; document.getElementById(&quot;soundToggle&quot;).textContent = soundEnabled ? &quot;🔊&quot; : &quot;🔇&quot;; }
function vibrate(...pattern) { if (typeof navigator !== &quot;undefined&quot; &amp;&amp; navigator.vibrate) navigator.vibrate(pattern); }
function updateGoal(v) { localStorage.setItem(&#39;dailyGoal&#39;, v); updateUI(); }
function shareToWhatsApp() {
  const dailyData = JSON.parse(localStorage.getItem(&#39;dailyZikr&#39;)) || { count: 0 };
  const zikrToday = dailyData.count;
  const dhikrName = dhikrData[currentIdx].name;
  const streak = document.getElementById(&quot;streakCount&quot;).textContent;

  // 1. Build your text message exactly as you want it to appear
  const message = `*My Dhikr Journey Today*
_Join me in earning rewards!_

*Current Status:*
*My Streak:* ${streak} Days
*Dhikr:* ${dhikrName}
*Total:* ${totalCount}
- - - - - - - - - - - - - - - - - - - - - - -
*All Zikr Done Today:* ${zikrToday}
*Grand Total of All Zikr:* ${els.grandTotal.textContent}
- - - - - - - - - - - - - - - - - - - - - - -
*Start your Dhikr now:*
https://islamizikr.blogspot.com
_Alhamdulillah! Keep going..._`;

  // 2. Use encodeURIComponent to make the message URL-safe
  const encodedMessage = encodeURIComponent(message);

  // 3. Use the correct Universal Link format
  // Format: https://wa.me[YOUR_ENCODED_TEXT]
  const whatsappUrl = `https://wa.me/?text=${encodedMessage}`;

  // 4. Open the link
  window.open(whatsappUrl, &#39;_blank&#39;);
}




function exportCounts() {
    let t = &quot;Dhikr Counts:\n\n&quot;;
    dhikrData.forEach((d, i) =&gt; {
        const c = JSON.parse(localStorage.getItem(`zikrCount_${i}`) || &#39;{&quot;total&quot;:0}&#39;).total;
        if (c &gt; 0) t += `${d.name}: ${c}\n`;
    });

    // Fallback for Android/WebViews
    const textArea = document.createElement(&quot;textarea&quot;);
    textArea.value = t;
    // Ensure it&#39;s not visible but exists in the DOM
    textArea.style.position = &quot;fixed&quot;;
    textArea.style.left = &quot;-9999px&quot;;
    textArea.style.top = &quot;0&quot;;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
        const successful = document.execCommand(&#39;copy&#39;);
        if (successful) {
            alert(&quot;All counts copied to clipboard!&quot;);
        } else {
            alert(&quot;Unable to copy. Please try manually.&quot;);
        }
    } catch (err) {
        alert(&quot;Copying not supported on this device.&quot;);
    }

    document.body.removeChild(textArea);
}

loadCurrent();
&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/5733247027684757422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/02-june-evening-zikr-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5733247027684757422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5733247027684757422'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/02-june-evening-zikr-2026.html' title='02 June Evening Zikr 2026'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/${videoId}/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>