<?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-04-09T05:00:00.119+05:30</updated><category term="Hadees"/><category term="March"/><category term="Quran"/><category term="February"/><category term="April"/><category term="Ilm and Dhikr"/><category term="IslamicKnowledge"/><category term="Morning Zikr"/><category term="zikr"/><category term="Qur&#39;an"/><category term="Bukhari"/><category term="Imaan"/><category term="Tirmizi"/><category term="Aasmaan"/><category term="Iman"/><category term="Kharch"/><category term="Namaaz"/><category term="Qur&#39;aan"/><category term="dozakh"/><category term="insaan"/><category term="kaafir"/><category term="maaf"/><category term="muhabbat"/><category term="namaz"/><category term="rahem"/><category term="shaitaan"/><category term="Abu Dawud"/><category term="Al Nisa"/><category term="Al-Baqarah"/><category term="Al-Mu&#39;min"/><category term="Aurton"/><category term="Deen"/><category term="Farz"/><category term="Ghaafil"/><category term="Ibne Maajah"/><category term="Ilm"/><category term="Islam"/><category term="Jannat"/><category term="Khoon"/><category term="Mard"/><category term="Mohabbat"/><category term="Momineen"/><category term="Naseehat"/><category term="Nek"/><category term="Nishaaniyaan"/><category term="Qayaamat"/><category term="Sura-e-Aaraaf"/><category term="Sura-e-Bani Israail"/><category term="Sura-e-Nisa"/><category term="Suwar"/><category term="Tirimizi"/><category term="azaab"/><category term="bakhsh"/><category term="bakhshish"/><category term="be-hayaai"/><category term="behayayi"/><category term="bhai"/><category term="bharosa"/><category term="duniya"/><category term="dushmani"/><category term="ehsanat"/><category term="fasaad"/><category term="fazeelat"/><category term="fazl-o-karam"/><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="jaanne waale"/><category term="khajoor"/><category term="khazane"/><category term="khushnoodi"/><category term="kufr"/><category term="libaas"/><category term="maherbaan"/><category term="mardon"/><category term="mazboot"/><category term="meharbaan"/><category term="miqdar"/><category term="mu&#39;af"/><category term="musalmaan"/><category term="naam"/><category term="nafarmani"/><category term="paakeezah"/><category term="rehmat"/><category term="rizq"/><category term="saath"/><category term="sadaabahaar"/><category term="sarkashi"/><category term="saza"/><category term="tahajjud"/><category term="tangi"/><category term="tareeqa"/><category term="touba"/><category term="wiraasat"/><category term="wus&#39;at"/><category term="zaat"/><category term="zameen"/><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>137</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-5846786027943702268</id><published>2026-04-09T05:00:00.011+05:30</published><updated>2026-04-09T05:00:00.114+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>09 April 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;div style=&quot;padding: 20px; text-align: center; background: #fff; border-top: 1px solid #f1f5f9;&quot;&gt;
    &lt;a href=&quot;whatsapp://channel/0029Va9QdRV8kyyFKM2qvI2t&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none; display: inline-block; transition: transform 0.2s;&quot; onmouseover=&quot;this.style.transform=&#39;translateY(-1px)&#39;&quot; onmouseout=&quot;this.style.transform=&#39;translateY(0)&#39;&quot;&gt;
      &lt;p style=&quot;margin: 0; font-size: 0.55rem; color: #64748b; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;&quot;&gt;
        📲 Join: &lt;span style=&quot;color: #064e3b; border-bottom: 2px solid #f59e0b;&quot;&gt;Daily Islamic Messages WhatsApp Channel&lt;/span&gt;
      &lt;/p&gt;
    &lt;/a&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/5846786027943702268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/09-april-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/5846786027943702268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5846786027943702268'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/09-april-morning-zikr-2026.html' title='09 April 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-1927215113731011539</id><published>2026-04-09T05:00:00.010+05:30</published><updated>2026-04-09T05:00:00.114+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Tirmizi"/><title type='text'>09 APRIL (Hadees) - Jis Ne Meri Sunnat Zinda Ki Us Ne Mujh Se Muhabbat Ki</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;Rasoolullah (Sallallahu-Alaihi-Wa-Sallam) ne irshaad farmaaya ke jis ne meri sunnat zinda ki us ne mujh se muhabbat ki aur jis ne mujh se muhabbat ki woh Jannat mein mere saath hoga. (Tirmizi: 2678)&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/center&gt;
&lt;center&gt;Faida: Allah Ta&#39;ala ke yahaan wahi amal maqbool hota hai jo Huzoor 
(Sallallahu-Alaihi-Wa-Sallam) ke tareeqon ke mutaabiq ho. Lihaaza Huzoor
 (Sallallahu-Alaihi-Wa-Sallam) ke tareeqon ko jaanna aur Aap 
(Sallallahu-Alaihi-Wa-Sallam) ki batlaai hui duaaon, sunnaton aur aadaab
 ko seekhna aur un par amal karna ummat ke har fard ke liye zaroori hai.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Rasoolullah%20%28Sallallahu-Alaihi-Wa-Sallam%29%20ne%20irshaad%20farmaaya%20ke%20jis%20ne%20meri%20sunnat%20zinda%20ki%20us%20ne%20mujh%20se%20muhabbat%20ki%20aur%20jis%20ne%20mujh%20se%20muhabbat%20ki%20woh%20Jannat%20mein%20mere%20saath%20hoga.%20%28Tirmizi:%202678%29%0D%0A%0D%0A%E2%9C%BA%20Allah%20Ta%27ala%20ke%20yahaan%20wahi%20amal%20maqbool%20hota%20hai%20jo%20Huzoor%20%28Sallallahu-Alaihi-Wa-Sallam%29%20ke%20tareeqon%20ke%20mutaabiq%20ho.%20Lihaaza%20Huzoor%20%28Sallallahu-Alaihi-Wa-Sallam%29%20ke%20tareeqon%20ko%20jaanna%20aur%20Aap%20%28Sallallahu-Alaihi-Wa-Sallam%29%20ki%20batlaai%20hui%20duaaon,%20sunnaton%20aur%20aadaab%20ko%20seekhna%20aur%20un%20par%20amal%20karna%20ummat%20ke%20har%20fard%20ke%20liye%20zaroori%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%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Rasoolullah%20(Sallallahu-Alaihi-Wa-Sallam)%20ne%20irshaad%20farmaaya%20ke%20jis%20ne%20meri%20sunnat%20zinda%20ki%20us%20ne%20mujh%20se%20muhabbat%20ki%20aur%20jis%20ne%20mujh%20se%20muhabbat%20ki%20woh%20Jannat%20mein%20mere%20saath%20hoga.%20(Tirmizi:%202678)%0D%0A%0D%0A%E2%9C%BA%20Allah%20Ta&#39;ala%20ke%20yahaan%20wahi%20amal%20maqbool%20hota%20hai%20jo%20Huzoor%20(Sallallahu-Alaihi-Wa-Sallam)%20ke%20tareeqon%20ke%20mutaabiq%20ho.%20Lihaaza%20Huzoor%20(Sallallahu-Alaihi-Wa-Sallam)%20ke%20tareeqon%20ko%20jaanna%20aur%20Aap%20(Sallallahu-Alaihi-Wa-Sallam)%20ki%20batlaai%20hui%20duaaon,%20sunnaton%20aur%20aadaab%20ko%20seekhna%20aur%20un%20par%20amal%20karna%20ummat%20ke%20har%20fard%20ke%20liye%20zaroori%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;/div&gt;
&lt;b&gt;&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;  &lt;td style=&quot;text-align: center;&quot;&gt;&lt;div style=&quot;height: 270px; overflow: hidden; position: relative; width: 320px;&quot;&gt;

&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/eV3KZ_7r3_4/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/eV3KZ_7r3_4?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/eV3KZ_7r3_4&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;div style=&quot;padding: 20px; text-align: center; background: #fff; border-top: 1px solid #f1f5f9;&quot;&gt;
    &lt;a href=&quot;whatsapp://channel/0029Va9QdRV8kyyFKM2qvI2t&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none; display: inline-block; transition: transform 0.2s;&quot; onmouseover=&quot;this.style.transform=&#39;translateY(-1px)&#39;&quot; onmouseout=&quot;this.style.transform=&#39;translateY(0)&#39;&quot;&gt;
      &lt;p style=&quot;margin: 0; font-size: 0.55rem; color: #64748b; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;&quot;&gt;
        📲 Join: &lt;span style=&quot;color: #064e3b; border-bottom: 2px solid #f59e0b;&quot;&gt;Daily Islamic Messages WhatsApp Channel&lt;/span&gt;
      &lt;/p&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/1927215113731011539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1927215113731011539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1927215113731011539'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-09.html' title='09 APRIL (Hadees) - Jis Ne Meri Sunnat Zinda Ki Us Ne Mujh Se Muhabbat Ki'/><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/eV3KZ_7r3_4/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-7899447785573443765</id><published>2026-04-09T05:00:00.007+05:30</published><updated>2026-04-09T05:00:00.114+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="azaab"/><category scheme="http://www.blogger.com/atom/ns#" term="dozakh"/><category scheme="http://www.blogger.com/atom/ns#" term="kaafir"/><category scheme="http://www.blogger.com/atom/ns#" term="kufr"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><category scheme="http://www.blogger.com/atom/ns#" term="saza"/><title type='text'>April - 09 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Qur&#39;an main Allah Ta&#39;ala farmaata hai (Tarjuma): Aur jin logon ne kufr ki rawish apnaali hai, un ke liye dozakh ki aag hai, na to un ka kaam tamaam kiya jaayega ke woh mar hi jaaein aur na un se dozakh ka azaab halka kiya jaayega. Har naashukre kaafir ko ham aisi hi saza dete hain. (Sura-e-Faatir: 36)&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Har%20naashukre%20kaafir%20ko%20ham%20aisi%20hi%20saza%20dete%20hain&amp;amp;body=Qur&#39;an%20main%20Allah%20Ta&#39;ala%20farmaata%20hai%20(Tarjuma):%20Aur%20jin%20logon%20ne%20kufr%20ki%20rawish%20apnaali%20hai,%20un%20ke%20liye%20dozakh%20ki%20aag%20hai,%20na%20to%20un%20ka%20kaam%20tamaam%20kiya%20jaayega%20ke%20woh%20mar%20hi%20jaaein%20aur%20na%20un%20se%20dozakh%20ka%20azaab%20halka%20kiya%20jaayega.%20Har%20naashukre%20kaafir%20ko%20ham%20aisi%20hi%20saza%20dete%20hain.%20(Sura-e-Faatir:%2036)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Har naashukre kaafir ko ham aisi hi saza dete hain 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Qur%27an%20main%20Allah%20Ta%27ala%20farmaata%20hai%20(Tarjuma):%20Aur%20jin%20logon%20ne%20kufr%20ki%20rawish%20apnaali%20hai,%20un%20ke%20liye%20dozakh%20ki%20aag%20hai,%20na%20to%20un%20ka%20kaam%20tamaam%20kiya%20jaayega%20ke%20woh%20mar%20hi%20jaaein%20aur%20na%20un%20se%20dozakh%20ka%20azaab%20halka%20kiya%20jaayega.%20Har%20naashukre%20kaafir%20ko%20ham%20aisi%20hi%20saza%20dete%20hain.%20(Sura-e-Faatir:%2036)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Qur&#39;an%20main%20Allah%20Ta&#39;ala%20farmaata%20hai%20(Tarjuma):%20Aur%20jin%20logon%20ne%20kufr%20ki%20rawish%20apnaali%20hai,%20un%20ke%20liye%20dozakh%20ki%20aag%20hai,%20na%20to%20un%20ka%20kaam%20tamaam%20kiya%20jaayega%20ke%20woh%20mar%20hi%20jaaein%20aur%20na%20un%20se%20dozakh%20ka%20azaab%20halka%20kiya%20jaayega.%20Har%20naashukre%20kaafir%20ko%20ham%20aisi%20hi%20saza%20dete%20hain.%20(Sura-e-Faatir:%2036)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/7899447785573443765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2017/03/har-naashukre-kaafir-ko-ham-aisi-hi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7899447785573443765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7899447785573443765'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2017/03/har-naashukre-kaafir-ko-ham-aisi-hi.html' title='April - 09 (Quran)'/><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-1692901438394146917</id><published>2026-04-08T16:30:00.002+05:30</published><updated>2026-04-08T16:30:00.131+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>08 April Evening Zikr</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;div style=&quot;padding: 20px; text-align: center; background: #fff; border-top: 1px solid #f1f5f9;&quot;&gt;
    &lt;a href=&quot;whatsapp://channel/0029Va9QdRV8kyyFKM2qvI2t&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none; display: inline-block; transition: transform 0.2s;&quot; onmouseover=&quot;this.style.transform=&#39;translateY(-1px)&#39;&quot; onmouseout=&quot;this.style.transform=&#39;translateY(0)&#39;&quot;&gt;
      &lt;p style=&quot;margin: 0; font-size: 0.55rem; color: #64748b; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;&quot;&gt;
        📲 Join: &lt;span style=&quot;color: #064e3b; border-bottom: 2px solid #f59e0b;&quot;&gt;Daily Islamic Messages WhatsApp Channel&lt;/span&gt;
      &lt;/p&gt;
    &lt;/a&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/1692901438394146917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/08-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1692901438394146917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1692901438394146917'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/08-april-evening-zikr.html' title='08 April Evening Zikr'/><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-5744579274436368437</id><published>2026-04-08T05:00:00.009+05:30</published><updated>2026-04-08T08:14:31.785+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>08 April 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;div style=&quot;padding: 20px; text-align: center; background: #fff; border-top: 1px solid #f1f5f9;&quot;&gt;
    &lt;a href=&quot;whatsapp://channel/0029Va9QdRV8kyyFKM2qvI2t&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none; display: inline-block; transition: transform 0.2s;&quot; onmouseover=&quot;this.style.transform=&#39;translateY(-1px)&#39;&quot; onmouseout=&quot;this.style.transform=&#39;translateY(0)&#39;&quot;&gt;
      &lt;p style=&quot;margin: 0; font-size: 0.55rem; color: #64748b; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;&quot;&gt;
        📲 Join: &lt;span style=&quot;color: #064e3b; border-bottom: 2px solid #f59e0b;&quot;&gt;Daily Islamic Messages WhatsApp Channel&lt;/span&gt;
      &lt;/p&gt;
    &lt;/a&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/5744579274436368437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/08-april-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/5744579274436368437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5744579274436368437'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/08-april-morning-zikr-2026.html' title='08 April 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-8263360556162547326</id><published>2026-04-08T05:00:00.008+05:30</published><updated>2026-04-08T08:12:39.380+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Bukhari"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><title type='text'>08 APRIL (Hadees) - Jo Shakhs Apna Kapda Fakhr Ke Taur Par Ghaseet Kar Chalega</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;Hadees: Huzoor ﷺ ne irshaad farmaaya: Jo Shakhs apna kapda fakhr ke taur par ghaseet kar chalega, to Qayaamat ke din Allah Ta&#39;ala us ki taraf (rahmat ki) nazar nahin farmaayeinge. (Bukhari: 3665)&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzoor%20%EF%B7%BA%20ne%20irshaad%20farmaaya:%20Jo%20Shakhs%20apna%20kapda%20fakhr%20ke%20taur%20par%20ghaseet%20kar%20chalega,%20to%20Qayaamat%20ke%20din%20Allah%20Ta%27ala%20us%20ki%20taraf%20(rahmat%20ki)%20nazar%20nahin%20farmaayeinge.%20(Bukhari:%203665)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzoor%20%EF%B7%BA%20ne%20irshaad%20farmaaya:%20Jo%20Shakhs%20apna%20kapda%20fakhr%20ke%20taur%20par%20ghaseet%20kar%20chalega,%20to%20Qayaamat%20ke%20din%20Allah%20Ta&#39;ala%20us%20ki%20taraf%20(rahmat%20ki)%20nazar%20nahin%20farmaayeinge.%20(Bukhari:%203665)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/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/kttFhOvQTTQ/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/kttFhOvQTTQ?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/kttFhOvQTTQ&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;div style=&quot;padding: 20px; text-align: center; background: #fff; border-top: 1px solid #f1f5f9;&quot;&gt;
    &lt;a href=&quot;whatsapp://channel/0029Va9QdRV8kyyFKM2qvI2t&quot; target=&quot;_blank&quot; style=&quot;text-decoration: none; display: inline-block; transition: transform 0.2s;&quot; onmouseover=&quot;this.style.transform=&#39;translateY(-1px)&#39;&quot; onmouseout=&quot;this.style.transform=&#39;translateY(0)&#39;&quot;&gt;
      &lt;p style=&quot;margin: 0; font-size: 0.55rem; color: #64748b; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase;&quot;&gt;
        📲 Join: &lt;span style=&quot;color: #064e3b; border-bottom: 2px solid #f59e0b;&quot;&gt;Daily Islamic Messages WhatsApp Channel&lt;/span&gt;
      &lt;/p&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/8263360556162547326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-08.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8263360556162547326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/8263360556162547326'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-08.html' title='08 APRIL (Hadees) - Jo Shakhs Apna Kapda Fakhr Ke Taur Par Ghaseet Kar Chalega'/><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/kttFhOvQTTQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-718665118091418728</id><published>2026-04-08T05:00:00.005+05:30</published><updated>2026-04-08T05:00:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Imaan"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><title type='text'>April - 08 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Allah Ta&#39;ala ka irshaad hai (Tarjuma): Imaan waalo! Tum Allah Ta&#39;ala ke saamne sachche dil se tauba karo (ke dil mein is gunah ka khayal bhi na rahe). (Surah At-Tahrim 66: 8)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Sachche%20dil%20se%20tauba%20karo&amp;amp;body=Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjuma):%20Imaan%20waalo!%20Tum%20Allah%20Ta&#39;ala%20ke%20saamne%20sachche%20dil%20se%20tauba%20karo%20(ke%20dil%20mein%20is%20gunah%20ka%20khayal%20bhi%20na%20rahe).%20(Surah%20At-Tahrim%2066:%208)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Sachche dil se tauba karo 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta%27ala%20ka%20irshaad%20hai%20(Tarjuma):%20Imaan%20waalo!%20Tum%20Allah%20Ta%27ala%20ke%20saamne%20sachche%20dil%20se%20tauba%20karo%20(ke%20dil%20mein%20is%20gunah%20ka%20khayal%20bhi%20na%20rahe).%20(Surah%20At-Tahrim%2066:%208)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjuma):%20Imaan%20waalo!%20Tum%20Allah%20Ta&#39;ala%20ke%20saamne%20sachche%20dil%20se%20tauba%20karo%20(ke%20dil%20mein%20is%20gunah%20ka%20khayal%20bhi%20na%20rahe).%20(Surah%20At-Tahrim%2066:%208)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/718665118091418728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/01/sachche-dil-se-tauba-karo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/718665118091418728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/718665118091418728'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/01/sachche-dil-se-tauba-karo.html' title='April - 08 (Quran)'/><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-4988502610418639380</id><published>2026-04-07T16:30:00.003+05:30</published><updated>2026-04-07T16:30:00.122+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>07 April Evening Zikr</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/4988502610418639380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/07-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4988502610418639380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4988502610418639380'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/07-april-evening-zikr.html' title='07 April Evening Zikr'/><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-6703016507235845630</id><published>2026-04-07T05:00:00.007+05:30</published><updated>2026-04-07T08:24:05.190+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>07 April 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/6703016507235845630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/07-april-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/6703016507235845630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6703016507235845630'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/07-april-morning-zikr-2026.html' title='07 April 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-1852192188131086481</id><published>2026-04-07T05:00:00.005+05:30</published><updated>2026-04-07T05:00:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Qur&#39;an"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><title type='text'>April - 07 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Allah Ta&#39;ala ka Irshaad hai (Tarjama): Jo shakhs mehnat karta hai wo apne nafa ke liye mehnat karta hai (warna) Allah Ta&#39;ala ko to tamaam jahaan waalon mein se kisi ki hajat nahin. (Surah Al-Ankabut: 6)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Jo%20shakhs%20mehnat%20karta%20hai%20wo%20apne%20nafa%20ke%20liye%20mehnat%20karta%20hai&amp;amp;body=Allah%20Ta&#39;ala%20ka%20Irshaad%20hai%20(Tarjama):%20Jo%20shakhs%20mehnat%20karta%20hai%20wo%20apne%20nafa%20ke%20liye%20mehnat%20karta%20hai%20(warna)%20Allah%20Ta&#39;ala%20ko%20to%20tamaam%20jahaan%20waalon%20mein%20se%20kisi%20ki%20hajat%20nahin.%20(Surah%20Al-Ankabut:%206)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Jo shakhs mehnat karta hai wo apne nafa ke liye mehnat karta hai 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta%27ala%20ka%20Irshaad%20hai%20(Tarjama):%20Jo%20shakhs%20mehnat%20karta%20hai%20wo%20apne%20nafa%20ke%20liye%20mehnat%20karta%20hai%20(warna)%20Allah%20Ta%27ala%20ko%20to%20tamaam%20jahaan%20waalon%20mein%20se%20kisi%20ki%20hajat%20nahin.%20(Surah%20Al-Ankabut:%206)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta&#39;ala%20ka%20Irshaad%20hai%20(Tarjama):%20Jo%20shakhs%20mehnat%20karta%20hai%20wo%20apne%20nafa%20ke%20liye%20mehnat%20karta%20hai%20(warna)%20Allah%20Ta&#39;ala%20ko%20to%20tamaam%20jahaan%20waalon%20mein%20se%20kisi%20ki%20hajat%20nahin.%20(Surah%20Al-Ankabut:%206)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/1852192188131086481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/01/jo-shakhs-mehnat-karta-hai-wo-apne-nafa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1852192188131086481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1852192188131086481'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/01/jo-shakhs-mehnat-karta-hai-wo-apne-nafa.html' title='April - 07 (Quran)'/><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-591422566455390925</id><published>2026-04-07T05:00:00.004+05:30</published><updated>2026-04-07T05:00:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Tirmizi"/><title type='text'>07 APRIL (Hadees) - Jis Shakhs Ne Ilm Allah Ta&#39;ala Ki Raza Ke Alawa Kisi Aur Maqsad Keliye Sikha</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;Hazrat Abdullah Bin Umar (Raziyallahu Anhu) se riwayat hai ke Rasool Allah (Sallallahu-Alaihi-Wa-Sallam) ne irshaad farmaaya: Jis shakhs ne ilm Allah Ta&#39;ala ki raza ke alawa kisi aur maqsad (masalan izzat, shauhrat, maal waghaira hasil karne) keliye sikha to woh apna thikana Jahannum mein banale. (Tirmizi: 2655)&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Hazrat%20Abdullah%20Bin%20Umar%20(Raziyallahu%20Anhu)%20se%20riwayat%20hai%20ke%20Rasool%20Allah%20(Sallallahu-Alaihi-Wa-Sallam)%20ne%20irshaad%20farmaaya:%20Jis%20shakhs%20ne%20ilm%20Allah%20Ta%27ala%20ki%20raza%20ke%20alawa%20kisi%20aur%20maqsad%20(masalan%20izzat,%20shauhrat,%20maal%20waghaira%20hasil%20karne)%20keliye%20sikha%20to%20woh%20apna%20thikana%20Jahannum%20mein%20banale.%20(Tirmizi:%202655)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Hazrat%20Abdullah%20Bin%20Umar%20(Raziyallahu%20Anhu)%20se%20riwayat%20hai%20ke%20Rasool%20Allah%20(Sallallahu-Alaihi-Wa-Sallam)%20ne%20irshaad%20farmaaya:%20Jis%20shakhs%20ne%20ilm%20Allah%20Ta&#39;ala%20ki%20raza%20ke%20alawa%20kisi%20aur%20maqsad%20(masalan%20izzat,%20shauhrat,%20maal%20waghaira%20hasil%20karne)%20keliye%20sikha%20to%20woh%20apna%20thikana%20Jahannum%20mein%20banale.%20(Tirmizi:%202655)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/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/zYyK7i4B5O0/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/zYyK7i4B5O0?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/zYyK7i4B5O0&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;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/591422566455390925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/591422566455390925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/591422566455390925'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-07.html' title='07 APRIL (Hadees) - Jis Shakhs Ne Ilm Allah Ta&#39;ala Ki Raza Ke Alawa Kisi Aur Maqsad Keliye Sikha'/><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/zYyK7i4B5O0/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-7598694752574897519</id><published>2026-04-06T16:30:00.001+05:30</published><updated>2026-04-06T19:17:57.225+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>06 April Evening Zikr</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/7598694752574897519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/06-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7598694752574897519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7598694752574897519'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/06-april-evening-zikr.html' title='06 April Evening Zikr'/><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-5306396415899143460</id><published>2026-04-06T05:00:00.006+05:30</published><updated>2026-04-06T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ilm and Dhikr"/><category scheme="http://www.blogger.com/atom/ns#" term="IslamicKnowledge"/><category scheme="http://www.blogger.com/atom/ns#" term="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>06 April 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 50 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, 50);

        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/5306396415899143460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/06-april-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/5306396415899143460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5306396415899143460'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/06-april-morning-zikr-2026.html' title='06 April 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-2572453445033867685</id><published>2026-04-06T05:00:00.005+05:30</published><updated>2026-04-06T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Kharch"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><title type='text'>April - 06 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Allah Ta&#39;ala ka irshaad hai (Tarjama): Aur Allah Ta&#39;ala ki razamandi hi keliye kharch kiya karo. (Al-Baqarah 2: 272)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Allah%20Ta&#39;ala%20ki%20razamandi%20hi%20keliye%20kharch%20kiya%20karo&amp;amp;body=Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20Allah%20Ta&#39;ala%20ki%20razamandi%20hi%20keliye%20kharch%20kiya%20karo.%20(Al-Baqarah%202:%20272)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Allah Ta&#39;ala ki razamandi hi keliye kharch kiya karo 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta%27ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20Allah%20Ta%27ala%20ki%20razamandi%20hi%20keliye%20kharch%20kiya%20karo.%20(Al-Baqarah%202:%20272)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20Allah%20Ta&#39;ala%20ki%20razamandi%20hi%20keliye%20kharch%20kiya%20karo.%20(Al-Baqarah%202:%20272)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2572453445033867685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/01/allah-taala-ki-razamandi-hi-keliye.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2572453445033867685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2572453445033867685'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/01/allah-taala-ki-razamandi-hi-keliye.html' title='April - 06 (Quran)'/><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-9122610981250075910</id><published>2026-04-06T05:00:00.003+05:30</published><updated>2026-04-06T05:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Abu Dawud"/><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><title type='text'>06 APRIL (Hadees) - Chor Imaan Ki Haalat Mein Chori Nahin Karta</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;Rasullullah ﷺ ne farmaaya: Chor Imaan ki haalat mein chori nahin karta (Yaani chori ke waqt chor ka imaan nikal jaata hai, phir baad mein Imaan laut aata hai). (Abu Dawud: 4689)&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Rasullullah%20%EF%B7%BA%20ne%20farmaaya:%20Chor%20Imaan%20ki%20haalat%20mein%20chori%20nahin%20karta%20(Yaani%20chori%20ke%20waqt%20chor%20ka%20imaan%20nikal%20jaata%20hai,%20phir%20baad%20mein%20Imaan%20laut%20aata%20hai).%20(Abu%20Dawud:%204689)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Rasullullah%20%EF%B7%BA%20ne%20farmaaya:%20Chor%20Imaan%20ki%20haalat%20mein%20chori%20nahin%20karta%20(Yaani%20chori%20ke%20waqt%20chor%20ka%20imaan%20nikal%20jaata%20hai,%20phir%20baad%20mein%20Imaan%20laut%20aata%20hai).%20(Abu%20Dawud:%204689)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/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/NRM0jrur1IA/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/NRM0jrur1IA?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/NRM0jrur1IA&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;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/9122610981250075910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-06.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/9122610981250075910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/9122610981250075910'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-06.html' title='06 APRIL (Hadees) - Chor Imaan Ki Haalat Mein Chori Nahin Karta'/><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/NRM0jrur1IA/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-5306662710742400233</id><published>2026-04-05T16:30:00.000+05:30</published><updated>2026-04-05T16:30:00.125+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>05 April Evening Zikr</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 50 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, 50);

        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/5306662710742400233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/05-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5306662710742400233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/5306662710742400233'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/05-april-evening-zikr.html' title='05 April Evening Zikr'/><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-4216201075401732658</id><published>2026-04-05T05:00:00.006+05:30</published><updated>2026-04-05T05:00:00.117+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>05 April 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 50 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, 50);

        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/4216201075401732658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/05-april-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/4216201075401732658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/4216201075401732658'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/05-april-morning-zikr-2026.html' title='05 April 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-2486137391093489074</id><published>2026-04-05T05:00:00.005+05:30</published><updated>2026-04-05T05:00:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Al-Baqarah"/><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Mard"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><title type='text'>April - 05 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Allah Ta&#39;ala ka irshaad hai (Tarjama): Aur ek musalman ghulam mushrik azaad mard se kahin behtar hai khuwah woh mushrik mard tumko kitna hi bhala kyun na maloom hota ho. (Al-Baqarah 2: 221)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Ek%20musalman%20ghulam%20mushrik%20azaad%20mard%20se%20kahin%20behtar%20hai&amp;amp;body=Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20ek%20musalman%20ghulam%20mushrik%20azaad%20mard%20se%20kahin%20behtar%20hai%20khuwah%20woh%20mushrik%20mard%20tumko%20kitna%20hi%20bhala%20kyun%20na%20maloom%20hota%20ho.%20(Al-Baqarah%202:%20221)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Ek musalman ghulam mushrik azaad mard se kahin behtar hai 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta%27ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20ek%20musalman%20ghulam%20mushrik%20azaad%20mard%20se%20kahin%20behtar%20hai%20khuwah%20woh%20mushrik%20mard%20tumko%20kitna%20hi%20bhala%20kyun%20na%20maloom%20hota%20ho.%20(Al-Baqarah%202:%20221)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aur%20ek%20musalman%20ghulam%20mushrik%20azaad%20mard%20se%20kahin%20behtar%20hai%20khuwah%20woh%20mushrik%20mard%20tumko%20kitna%20hi%20bhala%20kyun%20na%20maloom%20hota%20ho.%20(Al-Baqarah%202:%20221)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/2486137391093489074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/01/ek-musalman-ghulam-mushrik-azaad-mard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2486137391093489074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/2486137391093489074'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/01/ek-musalman-ghulam-mushrik-azaad-mard.html' title='April - 05 (Quran)'/><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-3505362463435502014</id><published>2026-04-05T05:00:00.004+05:30</published><updated>2026-04-05T05:00:00.117+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><category scheme="http://www.blogger.com/atom/ns#" term="Ibne Maajah"/><title type='text'>05 APRIL (Hadees) - Huzur ﷺ Ne Farmaaya: Haya Imaan Ka Ek Shoba 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;Huzur ﷺ ne farmaaya: Haya Imaan ka ek shoba hai. (Ibne Maajah: 58)&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzur%20%EF%B7%BA%20ne%20farmaaya:%20Haya%20Imaan%20ka%20ek%20shoba%20hai.%20(Ibne%20Maajah:%2058)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzur%20%EF%B7%BA%20ne%20farmaaya:%20Haya%20Imaan%20ka%20ek%20shoba%20hai.%20(Ibne%20Maajah:%2058)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/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/LalByPvNy0I/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/LalByPvNy0I?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/LalByPvNy0I&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;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/3505362463435502014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-05.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3505362463435502014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3505362463435502014'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-05.html' title='05 APRIL (Hadees) - Huzur ﷺ Ne Farmaaya: Haya Imaan Ka Ek Shoba 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/LalByPvNy0I/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-1137206968285582977</id><published>2026-04-04T16:30:00.001+05:30</published><updated>2026-04-04T16: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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>04 April Evening Zikr</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 50 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, 50);

        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/1137206968285582977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/04-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1137206968285582977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/1137206968285582977'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/04-april-evening-zikr.html' title='04 April Evening Zikr'/><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-6937727194028237611</id><published>2026-04-04T05:00:00.015+05:30</published><updated>2026-04-04T05:00:00.116+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>04 April 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 50 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, 50);

        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/6937727194028237611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/04-april-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/6937727194028237611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6937727194028237611'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/04-april-morning-zikr-2026.html' title='04 April 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-3306771065147504335</id><published>2026-04-04T05:00:00.014+05:30</published><updated>2026-04-04T05:00:00.116+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><title type='text'>Hadees: Har Ek Ki Du&#39;aa Qabool Hoti 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 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/74JYBRgiRAY/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/74JYBRgiRAY?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=📲  Join:  Islam316.blogspot.com&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;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/3306771065147504335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2025/04/hadees-har-ek-ki-duaa-qabool-hoti-hai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3306771065147504335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3306771065147504335'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2025/04/hadees-har-ek-ki-duaa-qabool-hoti-hai.html' title='Hadees: Har Ek Ki Du&#39;aa Qabool Hoti 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/74JYBRgiRAY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-6646620729617815780</id><published>2026-04-04T05:00:00.012+05:30</published><updated>2026-04-04T05:00:00.116+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Islam"/><category scheme="http://www.blogger.com/atom/ns#" term="Quran"/><title type='text'>April - 04 (Quran)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Allah Ta&#39;ala ka irshaad hai (Tarjama): Aye Imaan WaaIon! Islam mein poore ke poore daakhil hojaao. (Sura-e-Baqarah 2: 208)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;mailto:?subject=Islam%20mein%20poore%20ke%20poore%20daakhil%20hojaao&amp;amp;body=Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aye%20Imaan%20WaaIon!%20Islam%20mein%20poore%20ke%20poore%20daakhil%20hojaao.%20(Sura-e-Baqarah%202:%20208)%0D%0A%0D%0A%F0%9F%93%B2%20Aur%20Messages%20keliye%20Daily%20Islamic%20Messages%20Android%20app%20download%20karlein%20islinkse%20play.google.com/store/apps/details?id=com.dism&quot; target=&quot;_blank&quot; title=&quot;Send Islam mein poore ke poore daakhil hojaao 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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta%27ala%20ka%20irshaad%20hai%20(Tarjama):%20Aye%20Imaan%20WaaIon!%20Islam%20mein%20poore%20ke%20poore%20daakhil%20hojaao.%20(Sura-e-Baqarah%202:%20208)%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%20Islamic%20Messages%20Android%20App%20-%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*%D8%A8%D9%90%D8%B3%D9%92%D9%85%D9%90%20%D9%B1%D9%84%D9%84%D9%87%D9%90%20%D9%B1%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%92%D9%85%D9%B0%D9%86%D9%90%20%D8%A7%D9%84%D8%B1%D9%8E%D9%91%D8%AD%D9%90%D9%8A%D9%92%D9%85%D9%90*%20%E2%96%AB%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%20Allah%20Ta&#39;ala%20ka%20irshaad%20hai%20(Tarjama):%20Aye%20Imaan%20WaaIon!%20Islam%20mein%20poore%20ke%20poore%20daakhil%20hojaao.%20(Sura-e-Baqarah%202:%20208)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/6646620729617815780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/01/islam-mein-poore-ke-poore-daakhil-hojaao.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6646620729617815780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/6646620729617815780'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/01/islam-mein-poore-ke-poore-daakhil-hojaao.html' title='April - 04 (Quran)'/><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-7211876010804360598</id><published>2026-04-04T05:00:00.011+05:30</published><updated>2026-04-04T05:00:00.116+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="April"/><category scheme="http://www.blogger.com/atom/ns#" term="Bukhari"/><category scheme="http://www.blogger.com/atom/ns#" term="Hadees"/><title type='text'>04 APRIL (Hadees) - Huzur ﷺ Ne Farmaaya: Sharm Wa Haya Bhalaai Laati 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;Huzur ﷺ ne farmaaya: Sharm wa haya bhalaai laati hai. (Bukhari: 6117)&lt;/b&gt;&lt;/center&gt;
&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;  &lt;td&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Share on:&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;https://telegram.me/share/url?url=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzur%20%EF%B7%BA%20ne%20farmaaya:%20Sharm%20wa%20haya%20bhalaai%20laati%20hai.%20(Bukhari:%206117)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%93%B2%20*Download%20Qur%27an%20and%20Hadith%20Android%20App*%20-%20Goo.gl/ggEr5O&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Telegram&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href=&quot;whatsapp://send?text=%F0%9F%8C%B7%20%20%E2%96%AB%20%20*Aaj%20Ki%20Hadees*%20%20%E2%96%AB%20%20%F0%9F%8C%B7%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A%F0%9F%8D%81%20Hadees:%20Huzur%20%EF%B7%BA%20ne%20farmaaya:%20Sharm%20wa%20haya%20bhalaai%20laati%20hai.%20(Bukhari:%206117)%0D%0A%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%E3%80%B0%0D%0A📲  Join:  Islam316.blogspot.com&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;WhatsApp&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/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/HytIDUEaN_4/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/HytIDUEaN_4?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/HytIDUEaN_4&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;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dism1.blogspot.com/feeds/7211876010804360598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2020/04/april-04.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7211876010804360598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/7211876010804360598'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2020/04/april-04.html' title='04 APRIL (Hadees) - Huzur ﷺ Ne Farmaaya: Sharm Wa Haya Bhalaai Laati 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/HytIDUEaN_4/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2619536654761151932.post-3546961415913522997</id><published>2026-04-03T16:30:00.000+05:30</published><updated>2026-04-03T16:30:00.130+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="Morning Zikr"/><category scheme="http://www.blogger.com/atom/ns#" term="zikr"/><title type='text'>03 April Evening Zikr</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 50 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, 50);

        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/3546961415913522997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dism1.blogspot.com/2026/04/03-april-evening-zikr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3546961415913522997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2619536654761151932/posts/default/3546961415913522997'/><link rel='alternate' type='text/html' href='http://dism1.blogspot.com/2026/04/03-april-evening-zikr.html' title='03 April Evening Zikr'/><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>