<?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-30T16:30:00.191+05:30</updated><category term="Hadees"/><category term="June"/><category term="Ilm and Dhikr"/><category term="IslamicKnowledge"/><category term="zikr"/><category term="Morning Zikr"/><category term="Quran"/><category term="April"/><category term="March"/><category term="February"/><category term="Evening Zikr"/><category term="May"/><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="Muslim"/><category term="October"/><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="July"/><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>325</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-5357954928003928960</id><published>2026-06-30T16:30:00.000+05:30</published><updated>2026-06-30T16:30:00.186+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'>30 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/5357954928003928960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/30-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/5357954928003928960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5357954928003928960'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/30-june-evening-zikr-2026.html' title='30 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-7309458355677043344</id><published>2026-06-30T16:30:00.000+05:30</published><updated>2026-06-30T16:30:00.186+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'>30 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/7309458355677043344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/30-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/7309458355677043344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7309458355677043344'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/30-june-morning-zikr-2026.html' title='30 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-4883164224729572626</id><published>2026-06-30T05:00:00.009+05:30</published><updated>2026-06-30T05:00:00.122+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 - 30</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;Khairukum man ta&#39;allamal Qur&#39;aana wa &#39;allamah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Tum mein sab se behtar woh hai jo Qur&#39;aan ko seekhe aur sikhaaye.&lt;br /&gt;
&lt;br /&gt;
(Bukhaari: 5027)&lt;br /&gt;
&lt;br /&gt;
Qur&#39;an-e-Kareem
 duniya ki sab se achchhi kitaab hai, is mein achchi achchi baatein aur 
qisse hain. Jin ko padh kar insaan ko sukoon milta hai, aur us par amal 
karne se duniya-o-aakhirat mein kaamyaabi milti hai, jo aadmi Qur&#39;aan 
padhta aur padhaata hai, woh sab se achchha aadmi 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%2030&amp;amp;body=%D8%AE%D9%8E%D9%8A%D9%92%D8%B1%D9%8F%D9%83%D9%8F%D9%85%D9%92%20%D9%85%D9%8E%D9%86%D9%92%20%D8%AA%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%8F%D8%B1%D9%92%D8%A2%D9%86%D9%8E%20%D9%88%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%D9%87%D9%8F%0D%0A%0D%0A%E2%9C%BA%20*Khairukum%20man%20ta&#39;allamal%20Qur&#39;aana%20wa%20&#39;allamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tum%20mein%20sab%20se%20behtar%20woh%20hai%20jo%20Qur&#39;aan%20ko%20seekhe%20aur%20sikhaaye.%0D%0A%0D%0A%E2%9C%BA%20(Bukhaari:%205027)%0D%0A%0D%0A%E2%9C%BA%20Qur&#39;an-e-Kareem%20duniya%20ki%20sab%20se%20achchhi%20kitaab%20hai,%20is%20mein%20achchi%20achchi%20baatein%20aur%20qisse%20hain.%20Jin%20ko%20padh%20kar%20insaan%20ko%20sukoon%20milta%20hai,%20aur%20us%20par%20amal%20karne%20se%20duniya-o-aakhirat%20mein%20kaamyaabi%20milti%20hai,%20jo%20aadmi%20Qur&#39;aan%20padhta%20aur%20padhaata%20hai,%20woh%20sab%20se%20achchha%20aadmi%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 – 30 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%AE%D9%8E%D9%8A%D9%92%D8%B1%D9%8F%D9%83%D9%8F%D9%85%D9%92%20%D9%85%D9%8E%D9%86%D9%92%20%D8%AA%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%8F%D8%B1%D9%92%D8%A2%D9%86%D9%8E%20%D9%88%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%D9%87%D9%8F%0D%0A%0D%0A%E2%9C%BA%20*Khairukum%20man%20ta%27allamal%20Qur%27aana%20wa%20%27allamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tum%20mein%20sab%20se%20behtar%20woh%20hai%20jo%20Qur%27aan%20ko%20seekhe%20aur%20sikhaaye.%0D%0A%0D%0A%E2%9C%BA%20%28Bukhaari:%205027%29%0D%0A%0D%0A%E2%9C%BA%20Qur%27an-e-Kareem%20duniya%20ki%20sab%20se%20achchhi%20kitaab%20hai,%20is%20mein%20achchi%20achchi%20baatein%20aur%20qisse%20hain.%20Jin%20ko%20padh%20kar%20insaan%20ko%20sukoon%20milta%20hai,%20aur%20us%20par%20amal%20karne%20se%20duniya-o-aakhirat%20mein%20kaamyaabi%20milti%20hai,%20jo%20aadmi%20Qur%27aan%20padhta%20aur%20padhaata%20hai,%20woh%20sab%20se%20achchha%20aadmi%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%D8%AE%D9%8E%D9%8A%D9%92%D8%B1%D9%8F%D9%83%D9%8F%D9%85%D9%92%20%D9%85%D9%8E%D9%86%D9%92%20%D8%AA%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%8F%D8%B1%D9%92%D8%A2%D9%86%D9%8E%20%D9%88%D9%8E%D8%B9%D9%8E%D9%84%D9%91%D9%8E%D9%85%D9%8E%D9%87%D9%8F%0D%0A%0D%0A%E2%9C%BA%20*Khairukum%20man%20ta&#39;allamal%20Qur&#39;aana%20wa%20&#39;allamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Tum%20mein%20sab%20se%20behtar%20woh%20hai%20jo%20Qur&#39;aan%20ko%20seekhe%20aur%20sikhaaye.%0D%0A%0D%0A%E2%9C%BA%20(Bukhaari:%205027)%0D%0A%0D%0A%E2%9C%BA%20Qur&#39;an-e-Kareem%20duniya%20ki%20sab%20se%20achchhi%20kitaab%20hai,%20is%20mein%20achchi%20achchi%20baatein%20aur%20qisse%20hain.%20Jin%20ko%20padh%20kar%20insaan%20ko%20sukoon%20milta%20hai,%20aur%20us%20par%20amal%20karne%20se%20duniya-o-aakhirat%20mein%20kaamyaabi%20milti%20hai,%20jo%20aadmi%20Qur&#39;aan%20padhta%20aur%20padhaata%20hai,%20woh%20sab%20se%20achchha%20aadmi%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;/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/4883164224729572626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4883164224729572626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4883164224729572626'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-30.html' title='June - 30'/><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-1751963461579081865</id><published>2026-06-29T16:30:00.000+05:30</published><updated>2026-06-29T16:30:00.210+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'>29 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/1751963461579081865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/29-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/1751963461579081865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1751963461579081865'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/29-june-evening-zikr-2026.html' title='29 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-7995160982113624254</id><published>2026-06-29T05:00:00.000+05:30</published><updated>2026-06-29T05:00:00.206+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'>29 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/7995160982113624254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/29-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/7995160982113624254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7995160982113624254'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/29-june-morning-zikr-2026.html' title='29 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-9199707909514168249</id><published>2026-06-29T05:00:00.000+05:30</published><updated>2026-06-29T05:00:00.206+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 - 29</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 satara musliman satarahullaahu yaumal qiyaamah&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: 
Rasulullah ﷺ ne irshaad farmaaya: Jo shakhs kisi musalmaan ke aib ko 
chupaata hai Allah Ta&#39;ala Qayaamat ke din us ke aib ko chupaayega.&lt;br /&gt;
&lt;br /&gt;
(Bukhari: 2442)&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%2029&amp;amp;body=%D9%85%D9%8E%D9%86%D9%92%20%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%20%D9%85%D9%8F%D8%B3%D9%92%D9%84%D9%90%D9%85%D9%8B%D8%A7%20%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%D9%87%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D9%8A%D9%8E%D9%88%D9%92%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%90%D9%8A%D9%8E%D8%A7%D9%85%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Man%20satara%20musliman%20satarahullaahu%20yaumal%20qiyaamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasulullah%20%EF%B7%BA%20ne%20irshaad%20farmaaya:%20Jo%20shakhs%20kisi%20musalmaan%20ke%20aib%20ko%20chupaata%20hai%20Allah%20Ta&#39;ala%20Qayaamat%20ke%20din%20us%20ke%20aib%20ko%20chupaayega.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%202442)%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 – 29 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%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%20%D9%85%D9%8F%D8%B3%D9%92%D9%84%D9%90%D9%85%D9%8B%D8%A7%20%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%D9%87%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D9%8A%D9%8E%D9%88%D9%92%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%90%D9%8A%D9%8E%D8%A7%D9%85%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Man%20satara%20musliman%20satarahullaahu%20yaumal%20qiyaamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasulullah%20%EF%B7%BA%20ne%20irshaad%20farmaaya:%20Jo%20shakhs%20kisi%20musalmaan%20ke%20aib%20ko%20chupaata%20hai%20Allah%20Ta%27ala%20Qayaamat%20ke%20din%20us%20ke%20aib%20ko%20chupaayega.%0D%0A%0D%0A%E2%9C%BA%20%28Bukhari:%202442%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%85%D9%8E%D9%86%D9%92%20%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%20%D9%85%D9%8F%D8%B3%D9%92%D9%84%D9%90%D9%85%D9%8B%D8%A7%20%D8%B3%D9%8E%D8%AA%D9%8E%D8%B1%D9%8E%D9%87%D9%8F%20%D8%A7%D9%84%D9%84%D9%87%D9%8F%20%D9%8A%D9%8E%D9%88%D9%92%D9%85%D9%8E%20%D8%A7%D9%84%D9%92%D9%82%D9%90%D9%8A%D9%8E%D8%A7%D9%85%D9%8E%D8%A9%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Man%20satara%20musliman%20satarahullaahu%20yaumal%20qiyaamah*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Rasulullah%20%EF%B7%BA%20ne%20irshaad%20farmaaya:%20Jo%20shakhs%20kisi%20musalmaan%20ke%20aib%20ko%20chupaata%20hai%20Allah%20Ta&#39;ala%20Qayaamat%20ke%20din%20us%20ke%20aib%20ko%20chupaayega.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%202442)%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/9199707909514168249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-29_01840677123.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/9199707909514168249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/9199707909514168249'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-29_01840677123.html' title='June - 29'/><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-5701883634183713141</id><published>2026-06-28T16:30:00.000+05:30</published><updated>2026-06-28T16:30:00.120+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'>28 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/5701883634183713141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/28-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/5701883634183713141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5701883634183713141'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/28-june-evening-zikr-2026.html' title='28 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-8174039808596785874</id><published>2026-06-28T05:00:00.009+05:30</published><updated>2026-06-28T05:00:00.233+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'>28 June (Hadees) - Haya Imaan Ki Ek Ahem Shaakh Hai</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;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;Al Hayaau shu&#39;abatum minal imaan&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Haya Imaan ki ek ahem shaakh hai.&lt;br /&gt;
&lt;br /&gt;
(Bukhari: 9)&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%2028&amp;amp;body=%D8%A3%D9%8E%D9%84%D9%92%D8%AD%D9%8E%D9%8A%D9%8E%D8%A7%D8%A1%D9%8F%20%D8%B4%D9%8F%D8%B9%D9%92%D8%A8%D9%8E%D8%A9%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Al%20Hayaau%20shu&#39;abatum%20minal%20imaan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Haya%20Imaan%20ki%20ek%20ahem%20shaakh%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%209)%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 – 28 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%A3%D9%8E%D9%84%D9%92%D8%AD%D9%8E%D9%8A%D9%8E%D8%A7%D8%A1%D9%8F%20%D8%B4%D9%8F%D8%B9%D9%92%D8%A8%D9%8E%D8%A9%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Al%20Hayaau%20shu%27abatum%20minal%20imaan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Haya%20Imaan%20ki%20ek%20ahem%20shaakh%20hai.%0D%0A%0D%0A%E2%9C%BA%20%28Bukhari:%209%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%A3%D9%8E%D9%84%D9%92%D8%AD%D9%8E%D9%8A%D9%8E%D8%A7%D8%A1%D9%8F%20%D8%B4%D9%8F%D8%B9%D9%92%D8%A8%D9%8E%D8%A9%D9%8C%20%D9%85%D9%90%D9%91%D9%86%D9%8E%20%D8%A7%D9%84%D9%92%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Al%20Hayaau%20shu&#39;abatum%20minal%20imaan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Haya%20Imaan%20ki%20ek%20ahem%20shaakh%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%209)%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%0Ahttps://youtu.be/dzhYRyBfmF8&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/dzhYRyBfmF8/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/dzhYRyBfmF8?rel=0&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;tr&gt;  &lt;td style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;

&lt;span style=&quot;color: #660000;&quot;&gt;Share Youtube Link on: &lt;/span&gt;&lt;a href=&quot;whatsapp://send?text=https://youtu.be/dzhYRyBfmF8&quot;&gt;&lt;span style=&quot;color: #339966;&quot;&gt;&lt;u&gt;WhatsApp&lt;/u&gt;&lt;/span&gt;&lt;/a&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/8174039808596785874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/28-june-hadees-haya-imaan-ki-ek-ahem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8174039808596785874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8174039808596785874'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/28-june-hadees-haya-imaan-ki-ek-ahem.html' title='28 June (Hadees) - Haya Imaan Ki Ek Ahem Shaakh Hai'/><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/dzhYRyBfmF8/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-8558315659046858823</id><published>2026-06-28T05:00:00.000+05:30</published><updated>2026-06-28T05:00:00.368+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'>28 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/8558315659046858823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/28-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/8558315659046858823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8558315659046858823'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/28-june-morning-zikr-2026.html' title='28 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-3089331930046696315</id><published>2026-06-27T16:30:00.000+05:30</published><updated>2026-06-27T16: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'>27 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/3089331930046696315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/27-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/3089331930046696315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3089331930046696315'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/27-june-evening-zikr-2026.html' title='27 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-6214470515902510624</id><published>2026-06-27T05:00:00.009+05:30</published><updated>2026-06-27T05:00:00.206+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 - 27</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;Innamal a&#39;amaalu binniyyaat&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Aamaal ka daar-o-madaar niyyaton par hai.&lt;br /&gt;
&lt;br /&gt;
(Bukhari: 1)&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%2027&amp;amp;body=%D8%A5%D9%90%D9%86%D9%8E%D9%91%D9%85%D9%8E%D8%A7%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D8%B9%D9%92%D9%85%D9%8E%D8%A7%D9%84%D9%8F%20%D8%A8%D9%90%D8%A7%D9%84%D9%86%D9%90%D9%91%D9%8A%D9%8E%D9%91%D8%A7%D8%AA%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Innamal%20a&#39;amaalu%20binniyyaat*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Aamaal%20ka%20daar-o-madaar%20niyyaton%20par%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%201)%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 – 27 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%D9%86%D9%8E%D9%91%D9%85%D9%8E%D8%A7%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D8%B9%D9%92%D9%85%D9%8E%D8%A7%D9%84%D9%8F%20%D8%A8%D9%90%D8%A7%D9%84%D9%86%D9%90%D9%91%D9%8A%D9%8E%D9%91%D8%A7%D8%AA%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Innamal%20a%27amaalu%20binniyyaat*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Aamaal%20ka%20daar-o-madaar%20niyyaton%20par%20hai.%0D%0A%0D%0A%E2%9C%BA%20%28Bukhari:%201%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%D9%86%D9%8E%D9%91%D9%85%D9%8E%D8%A7%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D8%B9%D9%92%D9%85%D9%8E%D8%A7%D9%84%D9%8F%20%D8%A8%D9%90%D8%A7%D9%84%D9%86%D9%90%D9%91%D9%8A%D9%8E%D9%91%D8%A7%D8%AA%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Innamal%20a&#39;amaalu%20binniyyaat*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Aamaal%20ka%20daar-o-madaar%20niyyaton%20par%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Bukhari:%201)%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/6214470515902510624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/june-27_7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6214470515902510624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6214470515902510624'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/june-27_7.html' title='June - 27'/><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-1955862265312507258</id><published>2026-06-27T05:00:00.000+05:30</published><updated>2026-06-27T05:00:00.206+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'>27 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/1955862265312507258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/27-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/1955862265312507258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1955862265312507258'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/27-june-morning-zikr-2026.html' title='27 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-5515365387632464149</id><published>2026-06-26T16:30:00.000+05:30</published><updated>2026-06-26T16:30:00.228+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'>26 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/5515365387632464149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/26-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/5515365387632464149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5515365387632464149'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/26-june-evening-zikr-2026.html' title='26 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-5733319508423229038</id><published>2026-06-26T16:30:00.000+05:30</published><updated>2026-06-26T16:30:00.228+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'>26 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/5733319508423229038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/26-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/5733319508423229038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5733319508423229038'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/26-june-morning-zikr-2026.html' title='26 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-11354065974278738</id><published>2026-06-26T05:00:00.009+05:30</published><updated>2026-06-26T05: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 - 26</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;Rizar rabbi fee rizal waalid&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Allah Ta&#39;ala ki khushi waalid ki khushi mein hai.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 1899)&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%2026&amp;amp;body=%D8%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A8%D9%91%D9%90%20%D9%81%D9%90%D9%8A%D9%92%20%D8%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D9%92%D9%88%D9%8E%D8%A7%D9%84%D9%90%D8%AF%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Rizar%20rabbi%20fee%20rizal%20waalid*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Allah%20Ta&#39;ala%20ki%20khushi%20waalid%20ki%20khushi%20mein%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201899)%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 – 26 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%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A8%D9%91%D9%90%20%D9%81%D9%90%D9%8A%D9%92%20%D8%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D9%92%D9%88%D9%8E%D8%A7%D9%84%D9%90%D8%AF%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Rizar%20rabbi%20fee%20rizal%20waalid*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Allah%20Ta%27ala%20ki%20khushi%20waalid%20ki%20khushi%20mein%20hai.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%201899%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%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D8%B1%D9%91%D9%8E%D8%A8%D9%91%D9%90%20%D9%81%D9%90%D9%8A%D9%92%20%D8%B1%D9%90%D8%B6%D9%8E%D9%89%20%D8%A7%D9%84%D9%92%D9%88%D9%8E%D8%A7%D9%84%D9%90%D8%AF%D9%90%0D%0A%0D%0A%E2%9C%BA%20*Rizar%20rabbi%20fee%20rizal%20waalid*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Allah%20Ta&#39;ala%20ki%20khushi%20waalid%20ki%20khushi%20mein%20hai.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201899)%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/11354065974278738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2024/06/june-26_62.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/11354065974278738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/11354065974278738'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2024/06/june-26_62.html' title='June - 26'/><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-6372602115035000997</id><published>2026-06-25T16:30:00.000+05:30</published><updated>2026-06-25T16:30:00.124+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'>25 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/6372602115035000997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/25-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/6372602115035000997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6372602115035000997'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/25-june-evening-zikr-2026.html' title='25 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-7329861071963725062</id><published>2026-06-25T16:30:00.000+05:30</published><updated>2026-06-25T16:30:00.124+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'>25 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/7329861071963725062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/25-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/7329861071963725062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7329861071963725062'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/25-june-morning-zikr-2026.html' title='25 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-3496680328482728732</id><published>2026-06-25T05:00:00.009+05:30</published><updated>2026-06-25T05:00:00.207+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 - 25</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;Attaajirus sadooqul ameenu ma&#39;annabiyyeena wassiddeeqeena wash-shuhadaa&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Sachcha amaanatdaar taajir ambiya, Siddeeqeen aur Shuhada ke saath hoga.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 1209)&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%2025&amp;amp;body=%D8%A7%D9%8E%D9%84%D8%AA%D9%91%D9%8E%D8%A7%D8%AC%D9%90%D8%B1%D9%8F%20%D8%A7%D9%84%D8%B5%D9%91%D9%8E%D8%AF%D9%8F%D9%88%D9%92%D9%82%D9%8F%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D9%85%D9%90%D9%8A%D9%92%D9%86%D9%8F%20%D9%85%D9%8E%D8%B9%D9%8E%20%D8%A7%D9%84%D9%86%D9%91%D9%8E%D8%A8%D9%90%D9%8A%D9%91%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B5%D9%91%D9%90%D8%AF%D9%91%D9%90%D9%8A%D9%92%D9%82%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B4%D9%91%D9%8F%D9%87%D9%8E%D8%AF%D9%8E%D8%A7%D8%A1%D9%90%0D%0A%0D%0A%E2%9C%BA%20Attaajirus%20sadooqul%20ameenu%20ma&#39;annabiyyeena%20wassiddeeqeena%20wash-shuhadaa%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sachcha%20amaanatdaar%20taajir%20ambiya,%20Siddeeqeen%20aur%20Shuhada%20ke%20saath%20hoga.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201209)%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 – 25 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%AA%D9%91%D9%8E%D8%A7%D8%AC%D9%90%D8%B1%D9%8F%20%D8%A7%D9%84%D8%B5%D9%91%D9%8E%D8%AF%D9%8F%D9%88%D9%92%D9%82%D9%8F%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D9%85%D9%90%D9%8A%D9%92%D9%86%D9%8F%20%D9%85%D9%8E%D8%B9%D9%8E%20%D8%A7%D9%84%D9%86%D9%91%D9%8E%D8%A8%D9%90%D9%8A%D9%91%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B5%D9%91%D9%90%D8%AF%D9%91%D9%90%D9%8A%D9%92%D9%82%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B4%D9%91%D9%8F%D9%87%D9%8E%D8%AF%D9%8E%D8%A7%D8%A1%D9%90%0D%0A%0D%0A%E2%9C%BA%20Attaajirus%20sadooqul%20ameenu%20ma%27annabiyyeena%20wassiddeeqeena%20wash-shuhadaa%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sachcha%20amaanatdaar%20taajir%20ambiya,%20Siddeeqeen%20aur%20Shuhada%20ke%20saath%20hoga.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%201209%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%AA%D9%91%D9%8E%D8%A7%D8%AC%D9%90%D8%B1%D9%8F%20%D8%A7%D9%84%D8%B5%D9%91%D9%8E%D8%AF%D9%8F%D9%88%D9%92%D9%82%D9%8F%20%D8%A7%D9%84%D9%92%D8%A3%D9%8E%D9%85%D9%90%D9%8A%D9%92%D9%86%D9%8F%20%D9%85%D9%8E%D8%B9%D9%8E%20%D8%A7%D9%84%D9%86%D9%91%D9%8E%D8%A8%D9%90%D9%8A%D9%91%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B5%D9%91%D9%90%D8%AF%D9%91%D9%90%D9%8A%D9%92%D9%82%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D9%88%D9%8E%D8%A7%D9%84%D8%B4%D9%91%D9%8F%D9%87%D9%8E%D8%AF%D9%8E%D8%A7%D8%A1%D9%90%0D%0A%0D%0A%E2%9C%BA%20Attaajirus%20sadooqul%20ameenu%20ma&#39;annabiyyeena%20wassiddeeqeena%20wash-shuhadaa%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Sachcha%20amaanatdaar%20taajir%20ambiya,%20Siddeeqeen%20aur%20Shuhada%20ke%20saath%20hoga.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201209)%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/3496680328482728732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2024/06/june-25_90.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3496680328482728732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3496680328482728732'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2024/06/june-25_90.html' title='June - 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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-9091637970328689865</id><published>2026-06-24T16:30:00.000+05:30</published><updated>2026-06-24T16:30:00.115+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'>24 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/9091637970328689865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/24-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/9091637970328689865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/9091637970328689865'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/24-june-evening-zikr-2026.html' title='24 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-2927109954155935581</id><published>2026-06-24T05:00:00.009+05:30</published><updated>2026-06-24T08:15:45.898+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 - 24</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;Akmalul mu&#39;mineena imaanan ahsanuhum khuluqan&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tarjama: Imaan waalon mein sab se kaamil Imaan waala woh shakhs hai jis ke akhlaaq sab se achchhe hon.&lt;br /&gt;
&lt;br /&gt;
(Tirmizi: 1162)&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%2024&amp;amp;body=%D8%A3%D9%8E%D9%83%D9%92%D9%85%D9%8E%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%A4%D9%92%D9%85%D9%90%D9%86%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%8B%D8%A7%20%D8%A3%D9%8E%D8%AD%D9%92%D8%B3%D9%8E%D9%86%D9%8F%D9%87%D9%8F%D9%85%D9%92%20%D8%AE%D9%8F%D9%84%D9%8F%D9%82%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Akmalul%20mu&#39;mineena%20imaanan%20ahsanuhum%20khuluqan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Imaan%20waalon%20mein%20sab%20se%20kaamil%20Imaan%20waala%20woh%20shakhs%20hai%20jis%20ke%20akhlaaq%20sab%20se%20achchhe%20hon.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201162)%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 – 24 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%A3%D9%8E%D9%83%D9%92%D9%85%D9%8E%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%A4%D9%92%D9%85%D9%90%D9%86%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%8B%D8%A7%20%D8%A3%D9%8E%D8%AD%D9%92%D8%B3%D9%8E%D9%86%D9%8F%D9%87%D9%8F%D9%85%D9%92%20%D8%AE%D9%8F%D9%84%D9%8F%D9%82%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Akmalul%20mu%27mineena%20imaanan%20ahsanuhum%20khuluqan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Imaan%20waalon%20mein%20sab%20se%20kaamil%20Imaan%20waala%20woh%20shakhs%20hai%20jis%20ke%20akhlaaq%20sab%20se%20achchhe%20hon.%0D%0A%0D%0A%E2%9C%BA%20%28Tirmizi:%201162%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%A3%D9%8E%D9%83%D9%92%D9%85%D9%8E%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D9%85%D9%8F%D8%A4%D9%92%D9%85%D9%90%D9%86%D9%90%D9%8A%D9%92%D9%86%D9%8E%20%D8%A5%D9%90%D9%8A%D9%92%D9%85%D9%8E%D8%A7%D9%86%D9%8B%D8%A7%20%D8%A3%D9%8E%D8%AD%D9%92%D8%B3%D9%8E%D9%86%D9%8F%D9%87%D9%8F%D9%85%D9%92%20%D8%AE%D9%8F%D9%84%D9%8F%D9%82%D9%8B%D8%A7%0D%0A%0D%0A%E2%9C%BA%20*Akmalul%20mu&#39;mineena%20imaanan%20ahsanuhum%20khuluqan*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Imaan%20waalon%20mein%20sab%20se%20kaamil%20Imaan%20waala%20woh%20shakhs%20hai%20jis%20ke%20akhlaaq%20sab%20se%20achchhe%20hon.%0D%0A%0D%0A%E2%9C%BA%20(Tirmizi:%201162)%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/2927109954155935581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2024/06/june-24_1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2927109954155935581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2927109954155935581'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2024/06/june-24_1.html' title='June - 24'/><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-8745307350253774852</id><published>2026-06-24T05:00:00.000+05:30</published><updated>2026-06-24T05:00:08.103+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'>24 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/8745307350253774852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/24-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/8745307350253774852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8745307350253774852'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/24-june-morning-zikr-2026.html' title='24 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-8950874706593786921</id><published>2026-06-23T16:30:00.000+05:30</published><updated>2026-06-23T16:30:00.127+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'>23 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/8950874706593786921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/23-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/8950874706593786921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8950874706593786921'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/23-june-evening-zikr-2026.html' title='23 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-6025728009748366485</id><published>2026-06-23T05:00:00.009+05:30</published><updated>2026-06-23T05:00:00.626+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 - 23</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 yadkhulul jannata khabbunw walaa mannaanuw walaa bakheel&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tarjama: Dhoke baaz, ehsaan jatlaane waala aur kanjoos, Jannat mein daakhil nahin hoga.&lt;br /&gt;(Trimizi: 1963)&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%2023&amp;amp;body=%D9%84%D8%A7%D9%8E%20%D9%8A%D9%8E%D8%AF%D9%92%D8%AE%D9%8F%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%8E%20%D8%AE%D9%90%D8%A8%D9%91%D9%8C%20%D9%88%D9%8E%D9%8C%D9%84%D8%A7%D9%8E%20%D9%85%D9%8E%D9%86%D9%91%D9%8E%D8%A7%D9%86%D9%8C%20%D9%88%D9%8C%D9%8E%D9%84%D8%A7%D9%8E%20%D8%A8%D9%8E%D8%AE%D9%90%D9%8A%D9%92%D9%84%D9%8C%0D%0A%0D%0A%E2%9C%BA%20*Laa%20yadkhulul%20jannata%20khabbunw%20walaa%20mannaanuw%20walaa%20bakheel.*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Dhoke%20baaz,%20ehsaan%20jatlaane%20waala%20aur%20kanjoos,%20Jannat%20mein%20daakhil%20nahin%20hoga.%0D%0A%0D%0A%E2%9C%BA%20(Trimizi:%201963)%0D%0A%0D%0A%F0%9F%93%B2%20Shared Via DailyIslamicMessage.blogspot.com&quot; target=&quot;_blank&quot; title=&quot;Send June – 23 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%D9%8A%D9%8E%D8%AF%D9%92%D8%AE%D9%8F%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%8E%20%D8%AE%D9%90%D8%A8%D9%91%D9%8C%20%D9%88%D9%8E%D9%8C%D9%84%D8%A7%D9%8E%20%D9%85%D9%8E%D9%86%D9%91%D9%8E%D8%A7%D9%86%D9%8C%20%D9%88%D9%8C%D9%8E%D9%84%D8%A7%D9%8E%20%D8%A8%D9%8E%D8%AE%D9%90%D9%8A%D9%92%D9%84%D9%8C%0D%0A%0D%0A%E2%9C%BA%20*Laa%20yadkhulul%20jannata%20khabbunw%20walaa%20mannaanuw%20walaa%20bakheel.*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Dhoke%20baaz,%20ehsaan%20jatlaane%20waala%20aur%20kanjoos,%20Jannat%20mein%20daakhil%20nahin%20hoga.%0D%0A%0D%0A%E2%9C%BA%20%28Trimizi:%201963%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%D8%A7%D9%8E%20%D9%8A%D9%8E%D8%AF%D9%92%D8%AE%D9%8F%D9%84%D9%8F%20%D8%A7%D9%84%D9%92%D8%AC%D9%8E%D9%86%D9%91%D9%8E%D8%A9%D9%8E%20%D8%AE%D9%90%D8%A8%D9%91%D9%8C%20%D9%88%D9%8E%D9%8C%D9%84%D8%A7%D9%8E%20%D9%85%D9%8E%D9%86%D9%91%D9%8E%D8%A7%D9%86%D9%8C%20%D9%88%D9%8C%D9%8E%D9%84%D8%A7%D9%8E%20%D8%A8%D9%8E%D8%AE%D9%90%D9%8A%D9%92%D9%84%D9%8C%0D%0A%0D%0A%E2%9C%BA%20*Laa%20yadkhulul%20jannata%20khabbunw%20walaa%20mannaanuw%20walaa%20bakheel.*%0D%0A%0D%0A%E2%9C%BA%20Tarjama:%20Dhoke%20baaz,%20ehsaan%20jatlaane%20waala%20aur%20kanjoos,%20Jannat%20mein%20daakhil%20nahin%20hoga.%0D%0A%0D%0A%E2%9C%BA%20(Trimizi:%201963)%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;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/6025728009748366485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2024/06/june-23_65.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6025728009748366485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6025728009748366485'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2024/06/june-23_65.html' title='June - 23'/><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-560717845300338637</id><published>2026-06-23T05:00:00.000+05:30</published><updated>2026-06-23T05:00:00.217+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'>23 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/560717845300338637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/23-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/560717845300338637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/560717845300338637'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/23-june-morning-zikr-2026.html' title='23 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-1587031182776468030</id><published>2026-06-22T16:30:00.000+05:30</published><updated>2026-06-22T16:30:00.120+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'>22 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/1587031182776468030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/06/22-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/1587031182776468030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1587031182776468030'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/06/22-june-evening-zikr-2026.html' title='22 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>