Home প্রিমিয়াম পোস্ট APPS STORE NEW WEBSITE TO APP কোর্স

প্রম্পট এবং কোড দেখুন

AI Test Lab

Test your prompts directly on official platforms.

Photo Gallery Update! ওয়েবসাইটের সম্পুর্ন ব্লগার রেডি কোড।

DownloadLockPinnedpopularprice-499
DownloadLockPinnedpopularprice-499
✦Tanbin Premium
🔐

এটি একটি Premium কন্টেন্ট

মাত্র ৫০ টাকা

bKash/Nagad অ্যাপে Send Money করে (Payment নয়) ৫০ টাকা পাঠান ও ফর্ম জমা দিন — অ্যাডমিন অ্যাপ্রুভ করলেই কন্টেন্ট আনলক হবে।

💰 পেমেন্ট মাধ্যম

যেকোনো একটি মাধ্যমে ৫০ টাকা পাঠান। bKash / Nagad / Rocket অ্যাপে অবশ্যই “Send Money” অপশন ব্যবহার করুন — “Payment” নয়।

💳 কীভাবে আনলক করবেন

  1. 1পছন্দের মাধ্যম (bKash/Nagad/Binance) বেছে নিন।
  2. 2
    ৫০ টাকা Send Money করুন (Payment নয়)।
  3. 3Transaction ID সংরক্ষণ করুন।
  4. 4ফর্ম পূরণ করে জমা দিন — রিকোয়েস্ট শুধু একবারই দেবেন।
  5. 5স্ট্যাটাসে “Pending” দেখাবে, অ্যাডমিন যাচাই করছেন।
  6. 6অ্যাপ্রুভ হলেই এই পেজে কন্টেন্ট নিজে থেকে আনলক হবে।


 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' b:responsive='true' b:templateUrl='gallery.xml' b:templateVersion='1.0.0' expr:dir='data:blog.languageDirection' expr:lang='data:blog.locale' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
<head>
<!--
 এড&#2495;ট জ&#2507;ন: শ&#2497;ধ&#2497; ন&#2495;চ&#2503;র GCFG অ&#2434;শট&#2497;ক&#2497; বদল&#2494;ল&#2503;ই চলব&#2503;

 প&#2507;স&#2509;ট ক&#2496;ভ&#2494;ব&#2503; দ&#2503;ব&#2503;ন:
  ১) প&#2507;স&#2509;ট&#2503;র ল&#2503;খ&#2494;য&#2492; ছব&#2495; দ&#2495;ন, ত&#2494;রপর ল&#2495;খ&#2497;ন:
        ন&#2494;ম: র&#2494;হ&#2495;ম
        ঠ&#2495;ক&#2494;ন&#2494;: ঢ&#2494;ক&#2494;
        WhatsApp: 017XXXXXXXX   (ঐচ&#2509;ছ&#2495;ক)
        Telegram: @rahim        (ঐচ&#2509;ছ&#2495;ক)
        বর&#2509;ণন&#2494;: ছব&#2495;র ছ&#2507;ট বর&#2509;ণন&#2494; (ঐচ&#2509;ছ&#2495;ক, SEO ও ভ&#2507;ট&#2503; স&#2494;হ&#2494;য&#2509;য কর&#2503;)
        গল&#2509;প: ছব&#2495;র প&#2503;ছন&#2503;র জ&#2496;বন&#2503;র গল&#2509;প... (গল&#2509;প সবসময&#2492; সব&#2494;র শ&#2503;ষ&#2503; ল&#2495;খব&#2503;ন, এক&#2494;ধ&#2495;ক ল&#2494;ইন চলব&#2503;)
  ২) ল&#2503;ব&#2503;ল (Labels):
        paid / free
        price:10   views:12000   downloads:40   cat:Viral
        withdrawn:100          এই ছব&#2495;র যত পয&#2492;&#2503;ন&#2509;ট প&#2503;ম&#2503;ন&#2509;ট হয&#2492;&#2503; গ&#2503;ছ&#2503;
        bonuswd:200            ব&#2507;ন&#2494;স পয&#2492;&#2503;ন&#2509;ট (র&#2503;ফ&#2494;র&#2503;ল, গল&#2509;প, র&#2494;ন&#2494;র-আপ) যত প&#2503;ম&#2503;ন&#2509;ট হয&#2492;&#2503;ছ&#2503; (শ&#2495;ল&#2509;প&#2496;র য&#2503;ক&#2507;ন&#2507; একট&#2495; প&#2507;স&#2509;ট&#2503; দ&#2495;ন, এক&#2494;ধ&#2495;ক প&#2507;স&#2509;ট&#2503; দ&#2495;ল&#2503; য&#2507;গ হব&#2503;)
        Monetization / noads
        482913  অথব&#2494;  u-xxxxxxxxxx   গ&#2507;পন প&#2495;ন ব&#2494; ন&#2495;র&#2494;পদ প&#2495;ন-ক&#2507;ড (/?pintool=1)
        24 CONTEST             ২৪ ঘণ&#2509;ট&#2494;র কনট&#2503;স&#2509;ট
        7 DAYS CONTEST         ৭ দ&#2495;ন&#2503;র কনট&#2503;স&#2509;ট
        30 DAYS CONTEST        ৩০ দ&#2495;ন&#2503;র কনট&#2503;স&#2509;ট
        theme:শ&#2496;ত&#2503;র ছব&#2495;        কনট&#2503;স&#2509;ট&#2503;র থ&#2495;ম
        Vote 40                ছব&#2495;ত&#2503; আগ&#2503; থ&#2503;ক&#2503; ৪০ ভ&#2507;ট দ&#2503;খ&#2494;ব&#2503;
        WINNER                 হ&#2494;ত&#2503; ব&#2495;জয&#2492;&#2496; ঠ&#2495;ক করত&#2503; (ন&#2494; দ&#2495;ল&#2503; ভ&#2507;ট দ&#2503;খ&#2503; ন&#2495;জ&#2503;ই র&#8205;&#2509;য&#2494;ঙ&#2509;ক হব&#2503;, Firebase ল&#2494;গব&#2503;)
        prizepaid              ব&#2495;জয&#2492;&#2496;র ক&#2509;য&#2494;শ প&#2509;র&#2494;ইজ দ&#2503;ওয&#2492;&#2494; হয&#2492;&#2503; গ&#2503;ছ&#2503;
        wallpaper              Wallpaper প&#2507;স&#2509;ট (৯:১৬, AI ছব&#2495;ও চলব&#2503;, শ&#2497;ধ&#2497; হ&#2507;ম প&#2503;জ&#2503; দ&#2503;খ&#2494;ব&#2503;, কনট&#2503;স&#2509;ট&#2503; ধর&#2494; হব&#2503; ন&#2494;)
        (ছব&#2495;র গল&#2509;প&#2503;র জন&#2509;য ক&#2507;ন&#2507; ল&#2503;ব&#2503;ল ল&#2494;গ&#2503; ন&#2494;, শ&#2497;ধ&#2497; প&#2507;স&#2509;ট&#2503;র শ&#2503;ষ&#2503; গল&#2509;প: ল&#2494;ইন ল&#2495;খ&#2497;ন)
  ৩) ব&#2495;জ&#2509;ঞ&#2494;পন দ&#2503;খত&#2503;: য&#2503;ক&#2507;ন&#2507; প&#2503;জ&#2503;র শ&#2503;ষ&#2503; ?adpreview=1 | ব&#2495;জ&#2509;ঞ&#2494;পন ক&#2507;ড কনভ&#2494;র&#2509;ট&#2494;র: /?adtool=1 | প&#2495;ন ট&#2497;ল: /?pintool=1
  ৪) নত&#2497;ন প&#2503;জ: /?view=lb (ল&#2495;ড&#2494;রব&#2507;র&#2509;ড), /?view=hof (হল অফ ফ&#2503;ম), /?view=theme (থ&#2495;ম ভ&#2507;ট), /?view=story (ছব&#2495;র গল&#2509;প)
-->
<script type='text/javascript'>//<![CDATA[
window.GCFG={
  /* ===== যোগাযোগ ও পেমেন্ট ===== */
  mail:'submit@gallerybd.online',
  supportWhatsApp:'8801927661298',
  bkash:'01927661298',
  nagad:'01927661298',
  rocket:'',
  currency:'৳',

  /* ===== কনটেস্ট ক্যাশ প্রাইজ ($) — তালিকার প্রতিটি সংখ্যা এক একটি স্থানের জন্য ===== */
  prize24:[1],                    /* ২৪ ঘণ্টা: ১ম */
  prize7:[2.5,0.5],               /* ৭ দিন: ১ম $2.5, ২য় $0.50 */
  prize30:[100,60,30],            /* ৩০ দিন: ১ম, ২য়, ৩য় */

  /* ===== রানার-আপ বোনাস পয়েন্ট (ক্যাশ প্রাইজের পরের স্থানগুলো) ===== */
  bonus24:[50,40,30,20],                       /* ২৪ ঘণ্টা: ২য়-৫ম */
  bonus7:[200,150,100],                        /* ৭ দিন: ৩য় ২০০, ৪র্থ ১৫০, ৫ম ১০০ (মোট ৫ জন) */
  bonus30:[500,400,300,250,200,150,100],       /* ৩০ দিন: ৪র্থ-১০ম */

  /* ===== কনটেস্ট থিম ও থিম ভোটিং ===== */
  contestThemes:['শীতের ছবি','পাখির ছবি'],
  themePoll:['শীতের সকাল','সূর্যাস্ত','পাখির ছবি','বৃষ্টির দিন','গ্রামের দৃশ্য','ফুলের ছবি','নদী ও নৌকা','রাতের আকাশ'],  /* ক্রম বদলাবেন না, শেষে নতুন যোগ করা যাবে */
  themeDays:7,                    /* শেষ কত দিনের ভোট গোনা হবে; একই ডিভাইস প্রতিটি থিমে এই সময়ে একবার ভোট দিতে পারবে (সব থিমেই ভোট দেওয়া যাবে) */

  /* ===== ভেরিফাইড ব্যাজ ===== */
  verifyVotes:50,                 /* শিল্পীর কনটেস্ট ছবিগুলোতে মোট এত ভোট হলে ব্লু টিক */
  fireVotes:100,                  /* এত ভোট হলে ব্লু টিকে আগুন জ্বলবে */

  /* ===== রেফারেল বোনাস ===== */
  refVisitorsPerStep:10,          /* শিল্পীর লিংকে এত জন নতুন ভিজিটর এলে */
  refPointsPerStep:5,             /* এত বোনাস পয়েন্ট */

  /* ===== ছবির গল্প বোনাস (প্রতি মাস) ===== */
  storyReadsPerStep:1000,         /* প্রতি এত পাঠকে */
  storyPointsPerStep:300,         /* এত পয়েন্ট */

  verifyAd1:'https://uplcm.com/4/12003305',
  verifyAd2:'https://asiafilm.org/4/d67ad64222f27878af4b3d5dd1ae8222',
  voteWaitSeconds:5,
  judges:['Tanbin','Miraz'],
  pwaDelaySeconds:60,
  pwaHideDays:7,
  /* Firebase Realtime Database: ভোট, ভিউ, রেফারেল, গল্প পড়া ও থিম ভোট সবার জন্য এখানে জমা হয়।
     Rules এ read/write true দিতে হবে (votes, views, refc, sr, tv এই পাঁচটি জায়গা)। */
  firebaseUrl:'https://earn-gallery-default-rtdb.firebaseio.com',

  /* ===== ডাউনলোড আনলক (স্পনসর পেজ) ===== */
  sponsorUrl:'https://femalesfellowship.com/me7xy2yp?key=d67ad64222f27878af4b3d5dd1ae8222',
  waitSeconds:5,
  unlockMinutes:5,
  sdSize:1280,

  /* ===== পয়েন্ট ও উইথড্র ===== */
  viewsPerStep:1000,
  pointsPerStep:100,
  takaPerPoint:0.1,
  minWithdraw:100,
  banHours:24,
  strikesToPermanent:2,
  salt:'change-this-salt-123',

  /* ===== বিজ্ঞাপন (শুধু ছবি খুললে) ===== */
  adsOn:true,
  adsMode:'all',
  monetizeViews:500,
  adsOnPaid:true,
  adClient:'',
  adSlot:'',
  adSlotTop:'',
  adSlotMid:'',
  adSlotBottom:'',
  adSlotSticky:'',
  adCodeTop:'',
  adCodeMid:'',
  adCodeBottom:'',
  adCodeSticky:'',
  adCodeIframe:false,
  adBannerImg:'',
  adBannerUrl:'',
  adBannerAlt:'স্পনসর',
  adShowTop:true,
  adShowMid:true,
  adShowBottom:true,
  adShowSticky:true,
  adStickyMobileOnly:true,
  adStickyHideMin:30,
  adLazy:true,
  adLabel:'বিজ্ঞাপন',
  adPlaceholder:false,
  adblockNotice:false,

  /* ===== অন্যান্য ===== */
  reportEmail:'',
  maxPosts:500,
  bn:true
};
//]]></script>
<meta content='width=device-width, initial-scale=1' name='viewport'/>
<meta content='#6c5ce7' name='theme-color'/>
<meta content='ছবি গ্যালারি, ফটো কন্টেস্ট, ফ্রি ছবি ডাউনলোড, ভোট দিন ও জিতুন প্রাইজ মানি' name='keywords'/>
<link href='data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 100 100&apos;%3E%3Cdefs%3E%3ClinearGradient id=&apos;g&apos; x1=&apos;0&apos; y1=&apos;0&apos; x2=&apos;1&apos; y2=&apos;1&apos;%3E%3Cstop offset=&apos;0&apos; stop-color=&apos;%236c5ce7&apos;/%3E%3Cstop offset=&apos;1&apos; stop-color=&apos;%23e84393&apos;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&apos;100&apos; height=&apos;100&apos; rx=&apos;24&apos; fill=&apos;url(%23g)&apos;/%3E%3Ctext x=&apos;50&apos; y=&apos;68&apos; font-size=&apos;56&apos; text-anchor=&apos;middle&apos;%3E%F0%9F%93%B8%3C/text%3E%3C/svg%3E' rel='icon' type='image/svg+xml'/>
<link href='data:image/svg+xml,%3Csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 100 100&apos;%3E%3Crect width=&apos;100&apos; height=&apos;100&apos; rx=&apos;24&apos; fill=&apos;%236c5ce7&apos;/%3E%3Ctext x=&apos;50&apos; y=&apos;68&apos; font-size=&apos;56&apos; text-anchor=&apos;middle&apos;%3E%F0%9F%93%B8%3C/text%3E%3C/svg%3E' rel='apple-touch-icon'/>
<title><data:blog.pageTitle/></title>
<b:include data='blog' name='all-head-content'/>
<script type='text/javascript'>//<![CDATA[
(function(){try{
var c=document.createElement('canvas');c.width=c.height=128;var x=c.getContext('2d');
var g=x.createLinearGradient(0,0,128,128);g.addColorStop(0,'#6c5ce7');g.addColorStop(1,'#e84393');
function rr(a,b,w,h,r){x.beginPath();x.moveTo(a+r,b);x.arcTo(a+w,b,a+w,b+h,r);x.arcTo(a+w,b+h,a,b+h,r);x.arcTo(a,b+h,a,b,r);x.arcTo(a,b,a+w,b,r);x.closePath()}
x.fillStyle=g;rr(0,0,128,128,30);x.fill();
x.fillStyle='#fff';rr(25,44,78,54,11);x.fill();rr(46,32,36,16,6);x.fill();
x.fillStyle='#6c5ce7';x.beginPath();x.arc(64,71,18,0,7);x.fill();
x.fillStyle='rgba(255,255,255,.88)';x.beginPath();x.arc(64,71,9,0,7);x.fill();x.fillStyle='#ffd200';x.beginPath();x.arc(98,98,24,0,7);x.fill();x.lineWidth=5;x.strokeStyle='#fff';x.stroke();x.fillStyle='#5a3b00';x.font='bold 32px Arial';x.textAlign='center';x.fillText('$',98,110);
var href=c.toDataURL('image/png');
function set(){
  var o=document.querySelectorAll('link[rel~="icon"],link[rel="apple-touch-icon"]');
  for(var i=0;i<o.length;i++)o[i].parentNode.removeChild(o[i]);
  [['icon','32x32'],['shortcut icon',''],['apple-touch-icon','128x128']].forEach(function(a){
    var l=document.createElement('link');l.rel=a[0];l.type='image/png';if(a[1])l.sizes=a[1];l.href=href;document.head.appendChild(l)})}
set();document.addEventListener('DOMContentLoaded',set);window.addEventListener('load',set)
}catch(e){}})();
//]]></script>
<meta content='yes' name='mobile-web-app-capable'/>
<meta content='yes' name='apple-mobile-web-app-capable'/>
<meta content='Photo Earn' name='apple-mobile-web-app-title'/>
<meta content='black-translucent' name='apple-mobile-web-app-status-bar-style'/>
<script type='text/javascript'>//<![CDATA[
(function(){
window.__ip=null;
window.addEventListener('beforeinstallprompt',function(e){e.preventDefault();window.__ip=e});
window.addEventListener('appinstalled',function(){window.__ip=null;try{localStorage.setItem('pwaDone','1')}catch(x){}});
try{
function rr(x,a,b,w,h,r){x.beginPath();x.moveTo(a+r,b);x.arcTo(a+w,b,a+w,b+h,r);x.arcTo(a+w,b+h,a,b+h,r);x.arcTo(a,b+h,a,b,r);x.arcTo(a,b,a+w,b,r);x.closePath()}
function icon(size,round,sc){
  var c=document.createElement('canvas');c.width=c.height=size;var x=c.getContext('2d');x.scale(size/128,size/128);
  var g=x.createLinearGradient(0,0,128,128);g.addColorStop(0,'#6c5ce7');g.addColorStop(1,'#e84393');
  x.fillStyle=g;if(round){rr(x,0,0,128,128,30)}else{x.beginPath();x.rect(0,0,128,128)}x.fill();
  x.translate(64,64);x.scale(sc,sc);x.translate(-64,-64);
  x.fillStyle='#fff';rr(x,25,44,78,54,11);x.fill();rr(x,46,32,36,16,6);x.fill();
  x.fillStyle='#6c5ce7';x.beginPath();x.arc(64,71,18,0,7);x.fill();
  x.fillStyle='rgba(255,255,255,.9)';x.beginPath();x.arc(64,71,9,0,7);x.fill();
  x.fillStyle='#ffd200';x.beginPath();x.arc(98,98,24,0,7);x.fill();x.lineWidth=5;x.strokeStyle='#fff';x.stroke();
  x.fillStyle='#5a3b00';x.font='bold 32px Arial';x.textAlign='center';x.fillText('$',98,110);
  return c.toDataURL('image/png')}
var m={name:'Photo Earn Gallery',short_name:'Photo Earn',description:'ছবি গ্যালারি, ফটো কনটেস্ট ও আর্ন',start_url:location.origin+'/',scope:location.origin+'/',display:'standalone',orientation:'portrait',background_color:'#0d0f16',theme_color:'#6c5ce7',lang:'bn',
  icons:[{src:icon(192,true,1),sizes:'192x192',type:'image/png',purpose:'any'},{src:icon(512,true,1),sizes:'512x512',type:'image/png',purpose:'any'},{src:icon(512,false,.72),sizes:'512x512',type:'image/png',purpose:'maskable'}]};
var u=URL.createObjectURL(new Blob([JSON.stringify(m)],{type:'application/manifest+json'}));
var o=document.querySelectorAll('link[rel="manifest"]');for(var i=0;i<o.length;i++)o[i].parentNode.removeChild(o[i]);
var l=document.createElement('link');l.rel='manifest';l.href=u;document.head.appendChild(l)
}catch(e){}})();
//]]></script>
<link href='https://fonts.googleapis.com' rel='preconnect'/>
<link href='https://fonts.googleapis.com/css2?family=Hind+Siliguri:wght@400;500;600;700&amp;display=swap' rel='stylesheet'/>
<script type='text/javascript'>//<![CDATA[
try{var t=localStorage.getItem('th')||(window.matchMedia&&matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light');document.documentElement.setAttribute('data-t',t)}catch(e){}
//]]></script>
<b:skin><![CDATA[
/* ===== Modern Photo Gallery Theme v7 (Contest) ===== */
:root{--bg:#f4f5fb;--card:#fff;--tx:#14161f;--mu:#6b7080;--ac:#6c5ce7;--ac2:#00b894;--pk:#e84393;--bd:#e6e8f0;--sh:0 6px 24px rgba(20,22,40,.08);--sh2:0 16px 40px rgba(108,92,231,.25);--r:16px}
html[data-t=dark]{--bg:#0d0f16;--card:#171a25;--tx:#eceef6;--mu:#99a0b5;--bd:#262a3a;--sh:0 6px 24px rgba(0,0,0,.45);--sh2:0 16px 40px rgba(0,0,0,.6)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--tx);font-family:'Hind Siliguri',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.55}
body.lock{overflow:hidden}
a{color:inherit;text-decoration:none}
img{max-width:100%}
button{font-family:inherit}
.wrap{max-width:1280px;margin:0 auto;padding:0 16px}

/* ---------- হেডার ---------- */
.top{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--bd)}
.bar{display:flex;align-items:center;gap:10px;height:66px}
.logo{font-weight:700;font-size:21px;white-space:nowrap}
.logo span{background:linear-gradient(90deg,var(--ac),var(--pk));-webkit-background-clip:text;background-clip:text;color:transparent}
.search{flex:1;max-width:400px;margin-left:auto;position:relative}
.search input{width:100%;padding:11px 16px 11px 40px;border-radius:99px;border:1px solid var(--bd);background:var(--card);color:var(--tx);font:inherit;outline:none;transition:border-color .2s,box-shadow .2s}
.search:before{content:"\1F50D";position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:14px;opacity:.6}
.search input:focus{border-color:var(--ac);box-shadow:0 0 0 4px rgba(108,92,231,.14)}
.ic{border:1px solid var(--bd);background:var(--card);color:var(--tx);width:40px;height:40px;border-radius:50%;cursor:pointer;font-size:17px;transition:transform .2s}
.ic:hover{transform:rotate(25deg)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:99px;border:0;background:linear-gradient(135deg,var(--ac),#a29bfe);color:#fff;font:inherit;font-weight:600;cursor:pointer;white-space:nowrap;transition:transform .15s,filter .15s,box-shadow .15s;box-shadow:0 4px 14px rgba(108,92,231,.25)}
.btn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.98)}
.btn[disabled]{opacity:.6;cursor:default;transform:none}
.btn.ghost{background:transparent;color:var(--tx);border:1px solid var(--bd);box-shadow:none}
.btn.wa{background:#25d366;box-shadow:0 4px 14px rgba(37,211,102,.25)}
.btn.tg{background:#229ed9;box-shadow:0 4px 14px rgba(34,158,217,.25)}
.btn.hd{background:linear-gradient(135deg,#e17055,#fdcb6e);color:#2d1500;box-shadow:0 4px 14px rgba(225,112,85,.25)}
.btn.buy{background:linear-gradient(135deg,#00b894,#55efc4);color:#00281f;box-shadow:0 4px 14px rgba(0,184,148,.25)}
.btn.mail{background:linear-gradient(135deg,#ea4335,#fb8c00);box-shadow:0 4px 14px rgba(234,67,53,.25)}
.btn.hotb{background:linear-gradient(135deg,#ff416c,#ff4b2b);box-shadow:0 4px 16px rgba(255,65,108,.4)}
.btn.gold{background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;box-shadow:0 4px 16px rgba(247,151,30,.4)}

/* ---------- কনটেস্ট নেভ ---------- */
.cnav{display:flex;gap:10px;padding:0 16px 12px;overflow-x:auto;scrollbar-width:none}
.cnav::-webkit-scrollbar{display:none}
.cn{flex:none;padding:8px 18px;border-radius:99px;border:1px solid var(--bd);background:var(--card);font-weight:600;display:inline-flex;align-items:center;gap:7px;transition:transform .2s}
.cn:hover{transform:translateY(-2px)}
.cn.on{outline:2px solid var(--ac);outline-offset:1px}
.cn.hot{background:linear-gradient(135deg,#ff416c,#ff4b2b);color:#fff;border:0;box-shadow:0 4px 16px rgba(255,65,108,.4);animation:glow 1.8s infinite}
.cn.gold{background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;border:0;box-shadow:0 4px 16px rgba(247,151,30,.4)}
.cn.lbn{background:linear-gradient(135deg,#11998e,#38ef7d);color:#04281f;border:0}
.cn.hofn{background:linear-gradient(135deg,#8e2de2,#4a00e0);color:#fff;border:0}
.cn.thn{background:linear-gradient(135deg,#f953c6,#b91d73);color:#fff;border:0}
.cn.stn{background:linear-gradient(135deg,#f6d365,#fda085);color:#3b2400;border:0}
@keyframes glow{50%{box-shadow:0 0 0 6px rgba(255,65,108,.18),0 4px 22px rgba(255,65,108,.6)}}
.dot{width:8px;height:8px;border-radius:50%;background:#fff;animation:bl 1s infinite}
@keyframes bl{50%{opacity:.2}}

/* ---------- হিরো ---------- */
.hero{position:relative;margin:22px 0 10px;padding:34px 28px;border-radius:26px;background:linear-gradient(135deg,#6c5ce7 0%,#a855f7 50%,#e84393 100%);color:#fff;overflow:hidden;box-shadow:var(--sh2)}
.hero:before,.hero:after{content:"";position:absolute;border-radius:50%;background:rgba(255,255,255,.12)}
.hero:before{width:260px;height:260px;right:-60px;top:-90px}
.hero:after{width:180px;height:180px;right:140px;bottom:-110px}
.hero h1{position:relative;margin:0 0 8px;font-size:clamp(26px,4.4vw,42px);line-height:1.2}
.hero p{position:relative;margin:0;max-width:640px;opacity:.92}
.hst{position:relative;display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
.hst span{background:rgba(255,255,255,.18);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding:6px 14px;border-radius:99px;font-size:14px;font-weight:600}
.hero.cx2{background:linear-gradient(135deg,#ff416c,#ff4b2b 55%,#f7971e)}
.hero.cx7{background:linear-gradient(135deg,#7f00ff,#e100ff 55%,#f7971e)}
.hero.cx30{background:linear-gradient(135deg,#0f2027,#2c5364 50%,#00c6ff)}
.hero.cxg{background:linear-gradient(135deg,#11998e,#38ef7d 90%)}
.cn.mega{background:linear-gradient(135deg,#00c6ff,#0072ff);color:#fff;border:0;box-shadow:0 4px 16px rgba(0,114,255,.4)}
.rules{margin:12px 0 4px;padding:12px 14px;border-radius:14px;border:1px dashed var(--bd);background:var(--card);font-size:14px;line-height:1.7;color:var(--tx)}
.hero .rules{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.45);color:#fff;position:relative;max-width:680px}
.cban{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;margin:22px 0 0;padding:20px 24px;border-radius:22px;background:linear-gradient(120deg,#ff416c,#ff4b2b,#f7971e,#ff416c);background-size:300% 100%;animation:mv 6s linear infinite;color:#fff;box-shadow:0 10px 30px rgba(255,65,108,.35)}
@keyframes mv{to{background-position:300% 0}}
.cban h2{margin:0;font-size:24px}
.cban p{margin:2px 0 0;opacity:.95}
.cban .btn{background:#fff;color:#c0143c;box-shadow:none}
.cban .btn.gold{background:#ffe082;color:#3b2400}

/* ---------- ফিল্টার ---------- */
.tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:14px 0}
.chip{padding:7px 16px;border-radius:99px;border:1px solid var(--bd);background:var(--card);color:var(--tx);cursor:pointer;font:inherit;transition:all .15s}
.chip:hover{border-color:var(--ac)}
.chip.on{background:var(--ac);border-color:var(--ac);color:#fff;box-shadow:0 4px 12px rgba(108,92,231,.3)}
.tools select{margin-left:auto;padding:8px 12px;border-radius:12px;border:1px solid var(--bd);background:var(--card);color:var(--tx);font:inherit}

/* ---------- গ্রিড ও কার্ড ---------- */
.grid{column-width:250px;column-gap:16px}
.card{break-inside:avoid;margin:0 0 16px;background:var(--card);border-radius:var(--r);overflow:hidden;box-shadow:var(--sh);cursor:pointer;transition:transform .25s,box-shadow .25s;border:1px solid var(--bd);animation:pop .4s both}
.card:hover{transform:translateY(-4px);box-shadow:var(--sh2)}
.card.win{border:2px solid #f7b500;box-shadow:0 8px 28px rgba(247,181,0,.35)}
@keyframes pop{from{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}
.ph{position:relative;background:var(--bd);overflow:hidden}
.ph img{display:block;width:100%;height:auto;aspect-ratio:var(--ar,16/9);object-fit:cover;transition:transform .5s}
.card:hover .ph img{transform:scale(1.05)}
.ph:after{content:"";position:absolute;inset:auto 0 0 0;height:50%;background:linear-gradient(transparent,rgba(0,0,0,.45));opacity:0;transition:opacity .25s;pointer-events:none}
.card:hover .ph:after{opacity:1}
.tag{position:absolute;top:10px;left:10px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:99px;background:rgba(0,0,0,.55);color:#fff;z-index:2}
.pb{position:absolute;top:10px;right:10px;font-size:11px;font-weight:700;padding:3px 10px;border-radius:99px;background:#00b894;color:#00281f;z-index:2}
.pb.paid{background:#fdcb6e;color:#2d2400}
.shi{position:absolute;top:40px;right:10px;width:30px;height:30px;border-radius:50%;border:0;background:rgba(0,0,0,.55);color:#fff;font-size:14px;cursor:pointer;z-index:3}
.shi:hover{background:var(--ac)}
.mb{position:absolute;bottom:10px;right:10px;display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;letter-spacing:.3px;padding:3px 10px 3px 4px;border-radius:99px;background:rgba(2,24,14,.82);color:#7dffb3;border:1px solid #00ff88;z-index:2;font-family:system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;animation:neon 1.8s ease-in-out infinite}
.mb i,.monb i{font-style:normal;flex:none;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#b6ffd6,#00e676 55%,#00a85a);color:#003d1f;font:800 12px/1 Arial,sans-serif;box-shadow:0 0 6px #00ff88,0 0 14px rgba(0,255,136,.8)}
.monb{display:inline-flex;align-items:center;gap:6px;padding:4px 14px 4px 5px;border-radius:99px;background:linear-gradient(135deg,#052e1a,#0a4d2b);color:#7dffb3;border:1px solid #00ff88;font-weight:700;font-size:13px;letter-spacing:.4px;font-family:system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;animation:neon 1.8s ease-in-out infinite}
@keyframes neon{0%,100%{box-shadow:0 0 5px rgba(0,255,136,.55),0 0 12px rgba(0,255,136,.35)}50%{box-shadow:0 0 10px #00ff88,0 0 24px rgba(0,255,136,.75),0 0 38px rgba(0,255,136,.35)}}
.ct{position:absolute;bottom:10px;left:10px;font-size:11px;padding:3px 9px;border-radius:99px;background:rgba(108,92,231,.92);color:#fff;z-index:2}
.lvb{position:absolute;bottom:10px;left:10px;font-size:11px;font-weight:700;padding:3px 10px;border-radius:99px;background:#ff416c;color:#fff;z-index:2;animation:bl 1.2s infinite}
.wnb{position:absolute;bottom:10px;left:10px;font-size:12px;font-weight:700;padding:3px 10px;border-radius:99px;background:#ffd200;color:#3b2400;z-index:2}
.meta{padding:10px 14px 12px}
.meta b{display:block;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.meta small{display:block;color:var(--mu);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st{display:flex;flex-wrap:wrap;gap:12px;margin-top:6px;font-size:12px;color:var(--mu)}
.sty-ex{margin-top:6px;font-size:12.5px;color:var(--mu);line-height:1.5}
.cx{display:flex;justify-content:space-between;gap:8px;margin-top:8px;font-size:13px;font-weight:600}
.cx b{color:var(--pk)}
.btn.vt{width:100%;margin-top:8px;padding:8px 12px;background:linear-gradient(135deg,#ff416c,#ff4b2b)}
.empty,.load{padding:60px 0;text-align:center;color:var(--mu)}
h3.sec{margin:34px 0 14px;font-size:20px}
.skg{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px;margin-top:20px}
.sk{height:220px;border-radius:var(--r);background:linear-gradient(90deg,var(--bd) 25%,color-mix(in srgb,var(--bd) 50%,var(--card)) 50%,var(--bd) 75%);background-size:200% 100%;animation:sh 1.3s infinite}
.sk:nth-child(3n){height:290px}.sk:nth-child(3n+1){height:180px}
@keyframes sh{to{background-position:-200% 0}}
.soon{margin:18px 0;padding:44px 20px;text-align:center;border-radius:22px;border:2px dashed var(--bd);background:var(--card)}
.soon h2{margin:0 0 6px;font-size:26px}
.soon p{margin:0;color:var(--mu)}

/* ---------- লিডারবোর্ড ও থিম ও গল্প ---------- */
.lbrow{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--bd);border-radius:16px;background:var(--card);margin:8px 0;cursor:pointer;transition:transform .2s,box-shadow .2s}
.lbrow:hover{transform:translateY(-2px);box-shadow:var(--sh)}
.lbrow.top1{border:2px solid #f7b500;background:linear-gradient(135deg,rgba(247,181,0,.14),transparent)}
.lbrow img{width:64px;height:64px;object-fit:cover;border-radius:12px;flex:none}
.lbrow .rk{width:40px;flex:none;text-align:center;font-weight:700;font-size:21px}
.lbm{flex:1;min-width:0}
.lbs{font-size:13px;color:var(--mu);margin-top:2px}
.lbs b{color:var(--pk)}
.lbs .rw{color:#d35400}
.bar2{height:8px;border-radius:99px;background:var(--bd);overflow:hidden;margin-top:6px}
.bar2 i{display:block;height:100%;background:linear-gradient(90deg,var(--ac),var(--pk));transition:width .6s}
.lbrow .btn{padding:8px 14px;font-size:13px}
.tgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin:14px 0}
.tcard{padding:14px;border-radius:16px;border:1px solid var(--bd);background:var(--card)}
.tcard.lead{border:2px solid #f7b500;box-shadow:0 8px 24px rgba(247,181,0,.3)}
.tcard b{font-size:17px}
.tb{height:10px;border-radius:99px;background:var(--bd);overflow:hidden;margin:8px 0}
.tb i{display:block;height:100%;background:linear-gradient(90deg,var(--ac),var(--pk))}
.tcard .btn{width:100%}
.story{margin:14px 0;padding:16px;border-radius:16px;background:linear-gradient(135deg,rgba(246,211,101,.22),rgba(253,160,133,.16));border:1px solid var(--bd)}
.story h3{margin:0 0 8px;font-size:18px}
.story p{margin:0;white-space:pre-wrap;line-height:1.8}
.desc{margin:0 0 12px;color:var(--tx);opacity:.9}

/* ---------- ছবির বিস্তারিত ---------- */
.pw{margin:20px 0}
#mbox .pw{margin:0}
.pv{background:var(--card);border:1px solid var(--bd);border-radius:22px;overflow:hidden;box-shadow:var(--sh)}
.pv.port{display:grid;grid-template-columns:minmax(0,440px) 1fr}
.pimg{position:relative;background:#000}
.pimg img{display:block;width:100%;height:auto;max-height:80vh;object-fit:contain;background:#000;cursor:zoom-in}
.zm{position:absolute;right:12px;bottom:12px;width:38px;height:38px;border-radius:50%;border:0;background:rgba(0,0,0,.55);color:#fff;font-size:17px;cursor:pointer}
.pinfo{padding:22px}
.pinfo h2{margin:0 0 4px;font-size:25px;line-height:1.25}
.addr{margin:0 0 12px;color:var(--mu)}
.stats{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 16px;font-size:13px;color:var(--mu)}
.stats>span{background:var(--bg);border:1px solid var(--bd);padding:4px 12px;border-radius:99px}
.stats b{color:var(--tx)}
.stats .mon{background:#fdcb6e;color:#2d2400;border-color:#fdcb6e;font-weight:600}
.stats>span.monb{background:linear-gradient(135deg,#052e1a,#0a4d2b);color:#7dffb3;border-color:#00ff88;padding:4px 14px 4px 5px}
.btns{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.dla{margin:6px 0 14px;padding:14px;border-radius:16px;background:var(--bg);border:1px dashed var(--bd)}
.dla .btns{margin-bottom:0}
.dla small{display:block;color:var(--mu);margin-top:8px}
.vbox{display:flex;flex-wrap:wrap;align-items:center;gap:12px;justify-content:space-between;margin:6px 0 14px;padding:14px 16px;border-radius:16px;background:linear-gradient(135deg,rgba(255,65,108,.12),rgba(247,151,30,.14));border:1px solid rgba(255,65,108,.35)}
.vbox .vn{font-size:22px;font-weight:700}
.vbox .vn b{color:var(--pk);font-size:30px}
.vbox .vt2{color:var(--mu);font-size:14px}
.vbox.won{background:linear-gradient(135deg,rgba(255,210,0,.25),rgba(247,151,30,.2));border-color:#f7b500}
.more{display:inline-block;color:var(--ac);font-weight:600;margin:6px 0 14px}
#lb{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.92);display:none;align-items:center;justify-content:center;cursor:zoom-out;padding:10px}
#lb.on{display:flex}
#lb img{max-width:100%;max-height:100%;object-fit:contain}

/* ---------- শেয়ার ---------- */
.shc{display:flex;gap:14px;align-items:center;padding:12px;border-radius:18px;background:linear-gradient(135deg,rgba(108,92,231,.12),rgba(232,67,147,.12));border:1px solid var(--bd);margin-bottom:14px}
.shc img{width:92px;height:92px;object-fit:cover;border-radius:14px;flex:none}
.shc b{display:block;font-size:17px}
.shc small{color:var(--mu)}
.shl{display:flex;gap:8px;margin-bottom:14px}
.shl input{flex:1;min-width:0;padding:11px 14px;border-radius:12px;border:1px solid var(--bd);background:var(--bg);color:var(--tx);font:inherit}
.shg{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.shb{display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 6px;border-radius:16px;color:#fff;font-weight:600;font-size:13px;border:0;cursor:pointer;transition:transform .15s}
.shb:hover{transform:translateY(-3px)}
.shb i{font-style:normal;font-size:22px}
.shb.s1{background:#25d366}.shb.s2{background:#1877f2}.shb.s3{background:#229ed9}.shb.s4{background:#111}.shb.s5{background:#ea4335}.shb.s6{background:linear-gradient(135deg,var(--ac),var(--pk))}

/* ---------- ভোট ভেরিফাই ---------- */
.vst{display:grid;gap:10px;margin:14px 0}
.vstep{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-radius:14px;border:1px solid var(--bd);background:var(--bg)}
.vstep.done{border-color:#00b894;background:rgba(0,184,148,.12)}
.prog{height:12px;border-radius:99px;background:var(--bd);overflow:hidden;margin:12px 0 6px}
.prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,#ff416c,#f7971e);transition:width 1s linear}

/* ---------- বিজ্ঞাপন ---------- */
.adbox{margin:14px 0;text-align:center}
.adbox.top{margin:0 0 14px}
.adbox.bottom{margin:14px 0 0}
.adbox .al{display:block;font-size:10px;letter-spacing:1px;color:var(--mu);margin-bottom:4px;text-transform:uppercase}
.adin{min-height:var(--ah,90px);display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:14px;background:var(--card);border:1px solid var(--bd);max-width:100%}
.adbox.top{--ah:90px}.adbox.mid{--ah:250px}.adbox.bottom{--ah:250px}
.adin ins{width:100%}
.adin img{display:block;max-width:100%;height:auto;border-radius:10px}
.adin iframe{border:0;width:100%;display:block}
.adin .ph0{color:var(--mu);font-size:12px;padding:10px}
.adin .abn{color:var(--mu);font-size:13px;padding:12px}
#stk{position:fixed;left:0;right:0;bottom:0;z-index:150;background:var(--card);border-top:1px solid var(--bd);box-shadow:0 -6px 22px rgba(0,0,0,.2);padding:8px 10px;display:none}
#stk.on{display:block}
#stk .adin{--ah:50px;min-height:50px;border:0;background:transparent}
#stk .sx{position:absolute;top:-13px;right:10px;width:26px;height:26px;border-radius:50%;border:1px solid var(--bd);background:var(--card);color:var(--tx);cursor:pointer;font-size:12px;line-height:1}
body.has-stk{padding-bottom:76px}
body.has-stk #mbox{padding-bottom:80px}
body.has-stk #up{bottom:90px}

/* ---------- অ্যাপ ইনস্টল পপআপ ---------- */
#pwa{position:fixed;left:50%;bottom:16px;transform:translate(-50%,30px);width:min(440px,calc(100% - 24px));z-index:2147483200;padding:16px;border-radius:22px;background:var(--card);border:1px solid var(--bd);box-shadow:0 18px 50px rgba(0,0,0,.45);opacity:0;pointer-events:none;transition:all .35s}
#pwa.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
#pwa .ph1{display:flex;gap:12px;align-items:center}
#pwa .ph1 svg{width:54px;height:54px;flex:none;filter:drop-shadow(0 4px 10px rgba(108,92,231,.45))}
#pwa b{display:block;font-size:17px}
#pwa small{color:var(--mu);font-size:13px;line-height:1.4;display:block}
#pwa .btns{margin:12px 0 0}
#pwa .btns .btn{flex:1}
body.has-stk #pwa{bottom:92px}

/* ---------- লোগো ---------- */
.logo{display:flex;align-items:center;gap:10px}
.logo svg{width:44px;height:44px;flex:none;filter:drop-shadow(0 4px 10px rgba(108,92,231,.45));transition:transform .3s}
.logo:hover svg{transform:rotate(-8deg) scale(1.06)}
.logo .lt{display:inline-block;background:none;color:var(--tx);font-size:23px;font-weight:700;letter-spacing:.3px;line-height:1}
.logo .lt b{font-weight:700;background:linear-gradient(90deg,#6c5ce7,#e84393);-webkit-background-clip:text;background-clip:text;color:transparent}
.logo .lt em{font-style:normal;font-weight:700;background:linear-gradient(90deg,#f7971e,#ffd200 60%,#f7971e);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shn 3s linear infinite}
@keyframes shn{to{background-position:-200% 0}}
@media(max-width:720px){.logo svg{width:36px;height:36px}.logo .lt{font-size:18px}}

/* ---------- Human Verification কার্ড ---------- */
.vhd{display:flex;justify-content:space-between;align-items:center;gap:10px}
.vhd h2{margin:0}
.vcnt{font-weight:700;color:var(--ac);font-size:18px}
.vcard{padding:14px;border-radius:20px;border:1px solid var(--bd);background:var(--bg);margin:12px 0;opacity:.55;transition:all .25s}
.vcard.on,.vcard.load{opacity:1;border-color:var(--ac);background:linear-gradient(135deg,rgba(108,92,231,.14),rgba(108,92,231,.04));box-shadow:0 0 0 1px rgba(108,92,231,.4),0 8px 24px rgba(108,92,231,.25)}
.vcard.ok{opacity:1;border-color:#00b894;background:rgba(0,184,148,.1)}
.vct{display:flex;align-items:center;gap:12px}
.vct b{display:block;font-size:17px}
.vct small{color:var(--mu);font-size:13px}
.vnum{flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:rgba(108,92,231,.22);color:var(--ac);font-weight:700}
.vrow{display:flex;align-items:center;gap:14px;width:100%;margin-top:12px;padding:14px;border-radius:16px;border:2px solid var(--bd);background:var(--card);color:var(--tx);font:700 18px 'Hind Siliguri',sans-serif;cursor:not-allowed;text-align:left}
.vcard.on .vrow{border-color:var(--ac);cursor:pointer;box-shadow:0 0 0 4px rgba(108,92,231,.15)}
.vcard.load .vrow{border-color:var(--ac);cursor:default}
.vcard.ok .vrow{border-color:#00b894;cursor:default}
.vbx{flex:none;width:32px;height:32px;border-radius:9px;border:2px solid var(--bd);display:grid;place-items:center;font-size:16px;color:var(--mu)}
.vcard.on .vbx,.vcard.load .vbx{border-color:var(--ac)}
.vcard.ok .vbx{border-color:#00b894;background:#00b894;color:#fff}
.spn{width:16px;height:16px;border-radius:50%;border:3px solid var(--bd);border-top-color:var(--ac);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.vsec{margin-left:auto;display:flex;flex-direction:column;align-items:center;font-size:20px;line-height:1;color:var(--ac)}
.vsec small{font-size:9px;letter-spacing:1px;font-weight:700;margin-top:2px}

/* ---------- প্রাইজ বড় করে ---------- */
.prizebig{position:relative;display:inline-flex;flex-direction:column;align-items:center;margin-bottom:14px;padding:10px 30px;border-radius:22px;background:rgba(255,255,255,.2);border:2px solid rgba(255,255,255,.6);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.prizebig small{font-size:13px;font-weight:700;letter-spacing:2px}
.prizebig b{font-size:clamp(46px,10vw,78px);line-height:1.05;color:#fff36b;text-shadow:0 4px 18px rgba(0,0,0,.35)}
.pz{display:flex;flex-direction:column;align-items:center;padding:8px 22px;border-radius:16px;background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;font-size:32px;font-weight:700;line-height:1.1;box-shadow:0 6px 18px rgba(247,151,30,.45)}
.pz small{font-size:10px;letter-spacing:2px}
.pzb{position:absolute;left:10px;bottom:38px;z-index:2;padding:3px 12px;border-radius:99px;background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;font-weight:700;font-size:14px;box-shadow:0 3px 10px rgba(247,151,30,.5)}

/* ---------- প্রিমিয়াম নাম ও ঠিকানা ---------- */
.pn{display:flex;align-items:center;gap:6px;font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden}
.pn span{overflow:hidden;text-overflow:ellipsis;background:linear-gradient(90deg,#6c5ce7,#e84393,#f7971e);-webkit-background-clip:text;background-clip:text;color:transparent}
.pn i{flex:none;font-style:normal;width:17px;height:17px;border-radius:50%;background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;font-size:10px;display:grid;place-items:center;box-shadow:0 2px 6px rgba(247,151,30,.5)}
.pn i.vf,.pname i.vf,.chead i.vf{position:relative;background:#1d9bf0;color:#fff;font-weight:700;box-shadow:0 0 8px rgba(29,155,240,.85);animation:vglow 1.6s ease-in-out infinite}
@keyframes vglow{0%,100%{box-shadow:0 0 5px rgba(29,155,240,.7)}50%{box-shadow:0 0 14px 2px rgba(80,190,255,.95)}}
/* চারপাশে ঘোরা রিং (টিক স্থির থাকে) */
.pn i.vf:after,.pname i.vf:after,.chead i.vf:after{content:"";position:absolute;inset:-4px;border-radius:50%;background:conic-gradient(from 0deg,rgba(29,155,240,0) 0deg,rgba(29,155,240,0) 90deg,#7fd0ff 300deg,#1d9bf0 360deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));animation:vring 1.4s linear infinite;pointer-events:none}
@keyframes vring{to{transform:rotate(360deg)}}
/* উপরে উঠে যাওয়া নীল আলো */
.pn i.vf:before,.pname i.vf:before,.chead i.vf:before{content:"";position:absolute;left:50%;top:0;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:#9be0ff;box-shadow:0 0 6px 2px #1d9bf0;opacity:0;animation:vrise 1.8s ease-out infinite;pointer-events:none}
@keyframes vrise{0%{transform:translateY(4px) scale(1);opacity:0}25%{opacity:1}100%{transform:translateY(-20px) scale(.2);opacity:0}}
/* ১০০+ ভোট: আগুন */
.pn i.vf.hot,.pname i.vf.hot,.chead i.vf.hot{background:linear-gradient(135deg,#ff3d00,#ff9100);animation:flame 1s ease-in-out infinite;box-shadow:0 0 8px #ff6d00,0 0 16px rgba(255,109,0,.8)}
.pn i.vf.hot:after,.pname i.vf.hot:after,.chead i.vf.hot:after{background:conic-gradient(from 0deg,rgba(255,109,0,0) 0deg,rgba(255,109,0,0) 90deg,#ffd000 300deg,#ff3d00 360deg)}
@keyframes flame{0%,100%{filter:drop-shadow(0 -2px 3px rgba(255,160,0,.9)) drop-shadow(0 -5px 6px rgba(255,60,0,.7))}50%{filter:drop-shadow(0 -4px 5px rgba(255,200,0,1)) drop-shadow(0 -9px 9px rgba(255,80,0,.85))}}
.pn i.vf.hot:before,.pname i.vf.hot:before,.chead i.vf.hot:before{content:"\1F525";top:-13px;width:auto;height:auto;margin-left:-7px;font-size:13px;line-height:1;background:none;box-shadow:none;border-radius:0;opacity:1;animation:flick .7s ease-in-out infinite alternate}
.pname i.vf.hot:before,.chead i.vf.hot:before{top:-17px;font-size:17px;margin-left:-9px}
@keyframes flick{from{transform:translateY(0) scale(1) rotate(-8deg)}to{transform:translateY(-2px) scale(1.2) rotate(8deg)}}
.pn,.pname{overflow:visible}
.pn span{padding-top:2px}
.vfwrap{display:inline-flex}
#vpop{position:fixed;left:50%;top:78px;transform:translate(-50%,-30px);width:min(420px,calc(100% - 24px));z-index:2147483300;padding:14px 16px;border-radius:18px;background:var(--card);border:2px solid #1d9bf0;box-shadow:0 14px 40px rgba(29,155,240,.45);display:flex;gap:12px;align-items:center;opacity:0;pointer-events:none;transition:all .4s}
#vpop.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
#vpop.fire{border-color:#ff6d00;box-shadow:0 14px 40px rgba(255,109,0,.5)}
#vpop .vpi{position:relative;flex:none;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;font-size:24px;font-weight:700;color:#fff;background:#1d9bf0;box-shadow:0 0 14px rgba(29,155,240,.8)}
#vpop .vpi:after{content:"";position:absolute;inset:-5px;border-radius:50%;background:conic-gradient(from 0deg,rgba(29,155,240,0) 0deg,rgba(29,155,240,0) 90deg,#7fd0ff 300deg,#1d9bf0 360deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2px));animation:vring 1.4s linear infinite}
#vpop.fire .vpi{background:linear-gradient(135deg,#ff3d00,#ff9100);box-shadow:0 0 16px rgba(255,109,0,.9);animation:flame 1s ease-in-out infinite}
#vpop.fire .vpi:after{background:conic-gradient(from 0deg,rgba(255,109,0,0) 0deg,rgba(255,109,0,0) 90deg,#ffd000 300deg,#ff3d00 360deg)}
#vpop b{display:block;font-size:16px}
#vpop small{color:var(--mu);font-size:13px;line-height:1.4;display:block}
#vpop .vpx{margin-left:auto;flex:none;width:28px;height:28px;border-radius:50%;border:1px solid var(--bd);background:var(--bg);color:var(--tx);cursor:pointer}
.chead h1{display:flex;align-items:center;gap:8px}
.chead i.vf{font-style:normal;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:14px}
.pa{display:inline-flex;max-width:100%;align-items:center;gap:4px;margin-top:5px;padding:2px 10px;border-radius:99px;background:linear-gradient(135deg,rgba(108,92,231,.12),rgba(232,67,147,.12));border:1px solid var(--bd);font-size:12px;color:var(--mu);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pname{display:flex;align-items:center;gap:10px;margin:0 0 8px;font-size:30px;line-height:1.2;font-weight:700}
.pname span{background:linear-gradient(90deg,#6c5ce7,#e84393,#f7971e);-webkit-background-clip:text;background-clip:text;color:transparent}
.pname i{flex:none;font-style:normal;width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#f7971e,#ffd200);color:#3b2400;font-size:15px;display:grid;place-items:center;box-shadow:0 3px 10px rgba(247,151,30,.55)}
.paddr{display:inline-flex;align-items:center;gap:6px;margin:0 0 12px;padding:6px 16px;border-radius:99px;background:linear-gradient(135deg,rgba(108,92,231,.14),rgba(232,67,147,.14));border:1px solid var(--bd);font-size:14px;font-weight:600}
@media(max-width:720px){.pname{font-size:23px}}

/* ---------- ক্রিয়েটর ---------- */
.chead{display:flex;gap:18px;align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--bd);border-radius:22px;padding:22px;margin:22px 0;box-shadow:var(--sh)}
.av{width:76px;height:76px;border-radius:50%;background:linear-gradient(135deg,var(--ac),var(--pk));color:#fff;display:grid;place-items:center;font-size:32px;font-weight:700;box-shadow:0 6px 18px rgba(232,67,147,.3)}
.chead h1{margin:0;font-size:24px}

/* ---------- মডাল ---------- */
#modal{position:fixed;inset:0;z-index:2147482000;background:rgba(5,6,12,.74);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);display:none;overflow:auto;padding:24px 12px}
#modal.on{display:block}
#mbox{position:relative;max-width:980px;margin:0 auto;animation:mi .28s backwards}
@keyframes mi{from{opacity:0;transform:translateY(24px) scale(.98)}to{opacity:1;transform:none}}
.fbox{background:var(--card);border-radius:22px;padding:24px;max-width:520px;margin:0 auto;border:1px solid var(--bd)}
.fbox.wide{max-width:760px}
.fbox h2{margin-top:0}
.x{position:sticky;display:block;top:12px;z-index:2147483000;width:44px;height:44px;margin:0 12px -56px auto;padding:0;border-radius:50%;border:2px solid #fff;background:#e84393;color:#fff;font:700 20px/40px Arial,sans-serif;text-align:center;cursor:pointer;pointer-events:auto;touch-action:manipulation;box-shadow:0 4px 14px rgba(0,0,0,.5)}
.x:hover{filter:brightness(1.15)}
.nv{position:fixed;top:50%;z-index:2147483000;width:44px;height:44px;margin-top:-22px;border-radius:50%;border:0;background:rgba(0,0,0,.55);color:#fff;font-size:26px;line-height:1;cursor:pointer;transition:background .2s}
.nv:hover{background:var(--ac)}
.nv.prev{left:12px}.nv.next{right:12px}
.form{display:grid;gap:10px}
.form input:not([type=checkbox]):not([type=file]),.form select,.form textarea{padding:12px 14px;border-radius:12px;border:1px solid var(--bd);background:var(--bg);color:var(--tx);font:inherit;width:100%}
.form input:focus,.form select:focus,.form textarea:focus{outline:none;border-color:var(--ac)}
.drop{display:block;border:2px dashed var(--bd);border-radius:14px;padding:18px;text-align:center;color:var(--mu);cursor:pointer}
.drop input{display:none}
.drop.big{border:3px dashed var(--ac);background:rgba(108,92,231,.1);color:var(--tx);font-weight:700;padding:24px 14px;animation:pulse 1.6s infinite}
.drop.big .dic{display:block;font-size:46px;line-height:1.1;margin-bottom:6px}
@keyframes pulse{50%{box-shadow:0 0 0 7px rgba(108,92,231,.2)}}
.dropw .dh{font-weight:700;font-size:16px;margin:4px 0 8px}
.dropw .dh b{color:#e53935}
.dropw.shake{animation:shk .45s}
@keyframes shk{20%,60%{transform:translateX(-7px)}40%,80%{transform:translateX(7px)}}
#sprev{width:100%;max-height:240px;object-fit:contain;border-radius:12px;background:#000;margin-top:8px}
.hp{position:absolute;left:-9999px;opacity:0}
.ck{font-size:13px;color:var(--mu);display:flex;gap:8px;align-items:flex-start}
.note{padding:12px 14px;border-radius:12px;background:#ffeaa7;color:#2d2400;font-size:14px;margin:8px 0}
.note.err{background:#fab1a0;color:#3d0c02}
.note.ok{background:#b8f2d9;color:#00281f}
.pay{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;border:1px solid var(--bd);border-radius:12px;margin:6px 0}
.pay b{font-size:17px;letter-spacing:.5px}
.tbl{width:100%;border-collapse:collapse;font-size:14px;margin:8px 0}
.tbl td,.tbl th{padding:6px 4px;border-bottom:1px solid var(--bd);text-align:left}
.cert{width:100%;height:auto;border-radius:12px;border:1px solid var(--bd);display:block;margin:10px 0}

/* ---------- টোস্ট ও টপ বাটন ---------- */
#toast{position:fixed;left:50%;bottom:90px;transform:translate(-50%,20px);background:#14161f;color:#fff;padding:10px 18px;border-radius:99px;font-size:14px;opacity:0;pointer-events:none;transition:all .25s;z-index:2147483100}
#toast.on{opacity:1;transform:translate(-50%,0)}
#up{position:fixed;right:16px;bottom:20px;width:44px;height:44px;border-radius:50%;border:0;background:linear-gradient(135deg,var(--ac),var(--pk));color:#fff;font-size:20px;cursor:pointer;box-shadow:var(--sh2);opacity:0;pointer-events:none;transition:opacity .25s;z-index:60}
#up.on{opacity:1;pointer-events:auto}
footer{margin:50px 0 30px;text-align:center;color:var(--mu);font-size:13px}
body.app-on #Blog1{display:none}
.adhid{display:none!important}
.adlay{margin:20px auto;max-width:900px}
.dev{display:inline-flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-top:12px;padding:7px 16px;border-radius:99px;border:1px solid var(--bd);background:var(--card);font-size:13px}
.dev b{background:linear-gradient(90deg,var(--ac),var(--pk));-webkit-background-clip:text;background-clip:text;color:transparent}
.dev a{color:#e53935;font-weight:600}
.dev a:hover{text-decoration:underline}

@media(max-width:720px){
.bar{height:auto;flex-wrap:wrap;padding:8px 0;gap:8px}
.logo{font-size:17px;flex:1}
.search{order:5;flex-basis:100%;max-width:none;margin:0}
.btn{padding:8px 12px;font-size:14px}
.grid{column-width:150px;column-gap:10px}
.card{margin-bottom:10px;border-radius:12px}
.meta{padding:8px 10px 10px}
.meta b{font-size:13px}
.pv.port{grid-template-columns:1fr}
.pinfo{padding:16px}
.pinfo h2{font-size:20px}
#modal{padding:0}
.pv,.fbox{border-radius:0}
.pv{border-left:0;border-right:0}
.adbox{margin-left:8px;margin-right:8px}
.chead{padding:16px}
.tools{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:4px}
.tools::-webkit-scrollbar{display:none}
.tools select{margin-left:0;flex:none}
.chip{flex:none}
.hero{padding:22px 18px;border-radius:20px;margin-top:14px}
.nv{width:38px;height:38px;font-size:22px;margin-top:-19px;background:rgba(0,0,0,.4)}
.nv.prev{left:6px}.nv.next{right:6px}
.cban{padding:16px}
.cban h2{font-size:19px}
.btn.vt{font-size:13px}
.lbrow img{width:52px;height:52px}
.lbrow .rk{width:30px;font-size:17px}
}
@media(min-width:900px){#stk{display:none!important}}
]]></b:skin>
</head>
<body>
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div data-type='item' expr:data-pid='data:blog.postId' id='bi' style='display:none'/>
<b:elseif cond='data:blog.pageType == &quot;static_page&quot;'/>
<div data-type='static' id='bi' style='display:none'/>
<b:else/>
<div data-type='index' id='bi' style='display:none'/>
</b:if>

<header class='top'>
<div class='wrap bar'>
<a class='logo' expr:href='data:blog.homepageUrl' title='Photo Earn Gallery'>
<svg aria-hidden='true' viewBox='0 0 64 64' xmlns='http://www.w3.org/2000/svg'><defs><linearGradient id='lgA' x1='0' x2='1' y1='0' y2='1'><stop offset='0' stop-color='#6c5ce7'/><stop offset='1' stop-color='#e84393'/></linearGradient><linearGradient id='lgB' x1='0' x2='1' y1='0' y2='1'><stop offset='0' stop-color='#ffe259'/><stop offset='1' stop-color='#f7971e'/></linearGradient></defs><rect fill='url(#lgA)' height='64' rx='16' width='64'/><rect fill='#fff' height='26' rx='6' width='36' x='9' y='21'/><rect fill='#fff' height='9' rx='3' width='14' x='19' y='15'/><circle cx='27' cy='34' fill='#6c5ce7' r='8'/><circle cx='27' cy='34' fill='#fff' opacity='.9' r='3.6'/><circle cx='47' cy='45' fill='url(#lgB)' r='13' stroke='#fff' stroke-width='2.5'/><circle cx='47' cy='45' fill='none' r='9' stroke='#fff' stroke-opacity='.6' stroke-width='1.2'/><text fill='#5a3b00' font-family='Arial,sans-serif' font-size='16' font-weight='700' text-anchor='middle' x='47' y='51'>$</text><path d='M54 9l1.6 3.8 3.8 1.6-3.8 1.6L54 19.8l-1.6-3.8-3.8-1.6 3.8-1.6z' fill='#ffe259'/></svg>
<span class='lt'><b>Photo</b> <em>Earn</em> Gallery</span></a>
<div class='search'><input id='q' placeholder='নাম, ঠিকানা বা ট্যাগ দিয়ে খুঁজুন…' type='search'/></div>
<button class='ic' id='thm' title='থিম বদলান'>&#9680;</button>
<button class='btn ghost' id='wdb'>💸 উইথড&#2509;র</button>
<button class='btn' id='sub'>&#65291; ছব&#2495; জম&#2494; দ&#2495;ন</button>
</div>
<nav class='cnav' id='cnav'>
<a class='cn' data-v='' href='/'>🏠 হ&#2507;ম</a>
<a class='cn hot' data-v='c24' href='/?view=c24'><i class='dot'/>🔥 ২৪ ঘণ&#2509;ট&#2494;র CONTEST</a>
<a class='cn gold' data-v='c7' href='/?view=c7'>👑 ৭ দ&#2495;ন&#2503;র CONTEST</a>
<a class='cn mega' data-v='c30' href='/?view=c30'>💎 ৩০ দ&#2495;ন&#2503;র CONTEST</a>
<a class='cn lbn' data-v='lb' href='/?view=lb'>📊 ল&#2495;ড&#2494;রব&#2507;র&#2509;ড</a>
<a class='cn hofn' data-v='hof' href='/?view=hof'>🏅 হল অফ ফ&#2503;ম</a>
<a class='cn thn' data-v='theme' href='/?view=theme'>🗳 থ&#2495;ম ভ&#2507;ট</a>
<a class='cn stn' data-v='story' href='/?view=story'>📖 ছব&#2495;র গল&#2509;প</a>
</nav>
</header>

<main class='wrap'>
<div id='app'><div class='skg'><div class='sk'/><div class='sk'/><div class='sk'/><div class='sk'/><div class='sk'/><div class='sk'/><div class='sk'/><div class='sk'/></div></div>
<b:section class='main' id='main' showaddelement='yes'>
  <b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='showDateHeader'>false</b:widget-setting>
      <b:widget-setting name='style.textcolor'>#ffffff</b:widget-setting>
      <b:widget-setting name='showShareButtons'>false</b:widget-setting>
      <b:widget-setting name='showCommentLink'>false</b:widget-setting>
      <b:widget-setting name='style.urlcolor'>#ffffff</b:widget-setting>
      <b:widget-setting name='showAuthor'>false</b:widget-setting>
      <b:widget-setting name='style.linkcolor'>#ffffff</b:widget-setting>
      <b:widget-setting name='style.unittype'>TextAndImage</b:widget-setting>
      <b:widget-setting name='style.bgcolor'>#ffffff</b:widget-setting>
      <b:widget-setting name='timestampLabel'/>
      <b:widget-setting name='reactionsLabel'/>
      <b:widget-setting name='showAuthorProfile'>false</b:widget-setting>
      <b:widget-setting name='style.layout'>1x1</b:widget-setting>
      <b:widget-setting name='showLabels'>false</b:widget-setting>
      <b:widget-setting name='showLocation'>false</b:widget-setting>
      <b:widget-setting name='postLabelsLabel'/>
      <b:widget-setting name='showTimestamp'>true</b:widget-setting>
      <b:widget-setting name='postsPerAd'>1</b:widget-setting>
      <b:widget-setting name='showBacklinks'>false</b:widget-setting>
      <b:widget-setting name='style.bordercolor'>#ffffff</b:widget-setting>
      <b:widget-setting name='showInlineAds'>false</b:widget-setting>
      <b:widget-setting name='showReactions'>false</b:widget-setting>
    </b:widget-settings>
    <b:includable id='main' var='top'>
<b:loop values='data:posts' var='post'>
<article class='fb'><h2><a expr:href='data:post.url'><data:post.title/></a></h2><div><data:post.body/></div></article>
</b:loop>
</b:includable>
    <b:includable id='aboutPostAuthor'>
  <div class='author-name'>
    <a class='g-profile' expr:href='data:post.author.profileUrl' rel='author' title='author profile'>
      <span>
        <data:post.author.name/>
      </span>
    </a>
  </div>
  <div>
    <span class='author-desc'>
      <data:post.author.aboutMe/>
    </span>
  </div>
</b:includable>
    <b:includable id='addComments'>
  <a expr:href='data:post.commentsUrl' expr:onclick='data:post.commentsUrlOnclick'>
    <b:message name='messages.postAComment'/>
  </a>
</b:includable>
    <b:includable id='commentAuthorAvatar'>
  <div class='avatar-image-container'>
    <img class='author-avatar' expr:src='data:comment.authorAvatarSrc' height='35' width='35'/>
  </div>
</b:includable>
    <b:includable id='commentDeleteIcon' var='comment'>
  <span expr:class='&quot;item-control &quot; + data:comment.adminClass'>
    <b:if cond='data:showCmtPopup'>
      <div class='goog-toggle-button'>
        <div class='goog-inline-block comment-action-icon'/>
      </div>
    <b:else/>
      <a class='comment-delete' expr:href='data:comment.deleteUrl' expr:title='data:messages.deleteComment'>
        <img src='https://resources.blogblog.com/img/icon_delete13.gif'/>
      </a>
    </b:if>
  </span>
</b:includable>
    <b:includable id='commentForm' var='post'>
  <div class='comment-form'>
    <a name='comment-form'/>
    <h4 id='comment-post-message'><data:messages.postAComment/></h4>
    <b:if cond='data:this.messages.blogComment != &quot;&quot;'>
      <p><data:this.messages.blogComment/></p>
    </b:if>
    <b:include data='post' name='commentFormIframeSrc'/>
    <iframe allowtransparency='allowtransparency' class='blogger-iframe-colorize blogger-comment-from-post' expr:height='data:cmtIframeInitialHeight ?: &quot;90px&quot;' frameborder='0' id='comment-editor' name='comment-editor' src='' width='100%'/>
    <data:post.cmtfpIframe/>
    <script type='text/javascript'>
      BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;);
    </script>
  </div>
</b:includable>
    <b:includable id='commentFormIframeSrc' var='post'>
  <a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
</b:includable>
    <b:includable id='commentItem' var='comment'>
  <div class='comment' expr:id='&quot;c&quot; + data:comment.id'>
    <b:include cond='data:blog.enabledCommentProfileImages' name='commentAuthorAvatar'/>

    <div class='comment-block'>
      <div class='comment-author'>
        <b:if cond='data:comment.authorUrl'>
          <b:message name='messages.authorSaidWithLink'>
            <b:param expr:value='data:comment.author' name='authorName'/>
            <b:param expr:value='data:comment.authorUrl' name='authorUrl'/>
          </b:message>
        <b:else/>
          <b:message name='messages.authorSaid'>
            <b:param expr:value='data:comment.author' name='authorName'/>
          </b:message>
        </b:if>
      </div>
      <div expr:class='&quot;comment-body&quot; + (data:comment.isDeleted ? &quot; deleted&quot; : &quot;&quot;)'>
        <data:comment.body/>
      </div>
      <div class='comment-footer'>
        <span class='comment-timestamp'>
          <a expr:href='data:comment.url' title='comment permalink'>
            <data:comment.timestamp/>
          </a>
          <b:include data='comment' name='commentDeleteIcon'/>
        </span>
      </div>
    </div>
  </div>
</b:includable>
    <b:includable id='commentList' var='comments'>
  <div id='comments-block'>
    <b:loop values='data:comments' var='comment'>
      <b:include data='comment' name='commentItem'/>
    </b:loop>
  </div>
</b:includable>
    <b:includable id='commentPicker' var='post'>
  <b:if cond='data:post.showThreadedComments'>
    <b:include data='post' name='threadedComments'/>
  <b:else/>
    <b:include data='post' name='comments'/>
  </b:if>
</b:includable>
    <b:includable id='comments' var='post'>
  <section expr:class='&quot;comments&quot; + (data:post.embedCommentForm ? &quot; embed&quot; : &quot;&quot;)' expr:data-num-comments='data:post.numberOfComments' id='comments'>
    <a name='comments'/>
    <b:if cond='data:post.allowComments'>

      <b:include name='commentsTitle'/>

      <div expr:id='data:widget.instanceId + &quot;_comments-block-wrapper&quot;'>
        <b:include cond='data:post.comments' data='post.comments' name='commentList'/>
      </div>

      <b:if cond='data:post.commentPagingRequired'>
        <div class='paging-control-container'>
          <b:if cond='data:post.hasOlderLinks'>
            <a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'>
              <data:messages.oldest/>
            </a>
            <a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'>
              <data:messages.older/>
            </a>
          </b:if>

          <span class='comment-range-text'>
            <data:post.commentRangeText/>
          </span>

          <b:if cond='data:post.hasNewerLinks'>
            <a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'>
              <data:messages.newer/>
            </a>
            <a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'>
              <data:messages.newest/>
            </a>
          </b:if>
        </div>
      </b:if>

      <div class='footer'>
        <b:if cond='data:post.embedCommentForm'>
          <b:if cond='data:post.allowNewComments'>
            <b:include data='post' name='commentForm'/>
          <b:else/>
            <data:post.noNewCommentsText/>
          </b:if>
        <b:else/>
          <b:if cond='data:post.allowComments'>
            <b:include data='post' name='addComments'/>
          </b:if>
        </b:if>
      </div>
    </b:if>
    <b:if cond='data:showCmtPopup'>
      <div id='comment-popup'>
        <iframe allowtransparency='allowtransparency' frameborder='0' id='comment-actions' name='comment-actions' scrolling='no'>
        </iframe>
      </div>
    </b:if>
  </section>
</b:includable>
    <b:includable id='commentsTitle'>
  <h3 class='title'><data:messages.comments/></h3>
</b:includable>
    <b:includable id='feedLinks'>
  <b:if cond='!data:view.isPost'> <!-- Blog feed links -->
    <b:if cond='data:feedLinks'>
      <div class='blog-feeds'>
        <b:include data='feedLinks' name='feedLinksBody'/>
      </div>
    </b:if>
  <b:else/> <!--Post feed links -->
    <div class='post-feeds'>
      <b:loop values='data:posts' var='post'>
        <b:if cond='data:post.allowComments and data:post.feedLinks'>
          <b:include data='post.feedLinks' name='feedLinksBody'/>
        </b:if>
      </b:loop>
    </div>
  </b:if>
</b:includable>
    <b:includable id='feedLinksBody' var='links'>
  <div class='feed-links'>
  <data:messages.subscribeTo/>
  <b:loop values='data:links' var='f'>
     <a class='feed-link' expr:href='data:f.url' expr:type='data:f.mimeType' target='_blank'><data:f.name/> (<data:f.feedType/>)</a>
  </b:loop>
  </div>
</b:includable>
    <b:includable id='homePageLink'>
  <a class='home-link' expr:href='data:blog.homepageUrl'>
    <data:messages.home/>
  </a>
</b:includable>
    <b:includable id='iframeComments' var='post'>
  <!-- G+ comments, no longer available. The includable is retained for backwards-compatibility. -->
</b:includable>
    <b:includable id='inlineAd' var='post'>
  <b:if cond='!data:view.isPreview'>
    <b:if cond='data:this.adCode or data:this.adClientId or data:blog.adsenseClientId'>
      <!-- Ad -->
      <div class='inline-ad'>
        <b:if cond='data:this.adCode != &quot;&quot;'>
          <data:this.adCode/>
        <b:else/>
          <b:include cond='data:this.adClientId or data:blog.adsenseClientId' name='defaultAdUnit'/>
        </b:if>
      </div>
    </b:if>
  <b:else/>
    <div class='inline-ad'>
      <div class='inline-ad-placeholder'>
        <span><b:message name='messages.adsGoHere'/></span>
      </div>
    </div>
  </b:if>
</b:includable>
    <b:includable id='nextPageLink'>
  <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-older-link&quot;' expr:title='data:messages.olderPosts'>
    <data:messages.olderPosts/>
  </a>
</b:includable>
    <b:includable id='post' var='post'>
  <div class='post'>
    <b:include data='post' name='postMeta'/>
    <b:include data='post' name='postTitle'/>
    <b:include name='headerByline'/>
    <b:if cond='data:view.isSingleItem'>
      <b:include data='post' name='postBody'/>
    <b:else/>
      <b:include data='post' name='postBodySnippet'/>
      <b:include data='post' name='postJumpLink'/>
    </b:if>
    <b:include data='post' name='postFooter'/>
  </div>
</b:includable>
    <b:includable id='postBody' var='post'>
  <!-- If metaDescription is empty, use the post body as the schema.org description too, for G+/FB snippeting. -->
  <div class='post-body entry-content float-container' expr:id='&quot;post-body-&quot; + data:post.id'>
    <data:post.body/>
  </div>
</b:includable>
    <b:includable id='postBodySnippet' var='post'>
  <b:include data='post' name='postBody'/>
</b:includable>
    <b:includable id='postCommentsAndAd' var='post'>
  <article class='post-outer-container'>
    <!-- Post title and body -->
    <div class='post-outer'>
      <b:include data='post' name='post'/>
    </div>

    <!-- Comments -->
    <b:include cond='data:view.isSingleItem' data='post' name='commentPicker'/>

    <!-- Show ad inside post container, after comments, if single item. -->
    <b:include cond='data:view.isSingleItem and data:post.includeAd' data='post' name='inlineAd'/>
  </article>

  <!-- Show ad outside post container (between posts) for feed pages. -->
  <b:include cond='data:view.isMultipleItems and data:post.includeAd' data='post' name='inlineAd'/>
</b:includable>
    <b:includable id='postCommentsLink'>
  <b:if cond='data:view.isMultipleItems'>
    <span class='byline post-comment-link container'>
      <b:include cond='data:post.commentSource != 1' name='commentsLink'/>
    </span>
  </b:if>
</b:includable>
    <b:includable id='postFooter' var='post'>
  <div class='post-footer'>
    <b:include name='footerBylines'/>
    <b:include data='post' name='postFooterAuthorProfile'/>
  </div>
</b:includable>
    <b:includable id='postFooterAuthorProfile' var='post'>
  <b:if cond='data:post.author.aboutMe and data:view.isPost'>
    <div class='author-profile'>
      <b:if cond='data:post.author.authorPhoto.url'>
        <img class='author-image' expr:src='data:post.author.authorPhoto.url' width='50px'/>
        <div class='author-about'>
          <b:include data='post' name='aboutPostAuthor'/>
        </div>
      <b:else/>
        <b:include data='post' name='aboutPostAuthor'/>
      </b:if>
    </div>
  </b:if>
</b:includable>
    <b:includable id='postHeader' var='post'>
  <b:include name='headerByline'/>
</b:includable>
    <b:includable id='postMeta' var='post'>
  <b:include data='post' name='postMetadataJSON'/>
</b:includable>
    <b:includable id='postPagination'>
  <div class='blog-pager container' id='blog-pager'>
    <b:include cond='data:newerPageUrl' name='previousPageLink'/>
    <b:include cond='data:olderPageUrl' name='nextPageLink'/>
    <b:include cond='data:view.url != data:blog.homepageUrl' name='homePageLink'/>
  </div>
</b:includable>
    <b:includable id='postTitle' var='post'>
  <a expr:name='data:post.id'/>
  <b:if cond='data:post.title != &quot;&quot;'>
    <h3 class='post-title entry-title'>
      <b:if cond='data:post.link or (data:post.url and data:view.url != data:post.url)'>
        <a expr:href='data:post.link ?: data:post.url'><data:post.title/></a>
      <b:else/>
        <data:post.title/>
      </b:if>
    </h3>
  </b:if>
</b:includable>
    <b:includable id='previousPageLink'>
  <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + &quot;_blog-pager-newer-link&quot;' expr:title='data:messages.newerPosts'>
    <data:messages.newerPosts/>
  </a>
</b:includable>
    <b:includable id='threadedCommentForm' var='post'>
  <div class='comment-form'>
    <a name='comment-form'/>
    <h4 id='comment-post-message'><data:messages.postAComment/></h4>
    <b:if cond='data:this.messages.blogComment != &quot;&quot;'>
      <p><data:this.messages.blogComment/></p>
    </b:if>
    <b:include data='post' name='commentFormIframeSrc'/>
    <iframe allowtransparency='allowtransparency' class='blogger-iframe-colorize blogger-comment-from-post' expr:height='data:cmtIframeInitialHeight ?: &quot;90px&quot;' frameborder='0' id='comment-editor' name='comment-editor' src='' width='100%'/>
    <data:post.cmtfpIframe/>
    <script type='text/javascript'>
      BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;);
    </script>
  </div>
</b:includable>
    <b:includable id='threadedCommentJs' var='post'>
  <script async='async' expr:src='data:post.commentSrc' type='text/javascript'/>
  <b:template-script inline='true' name='threaded_comments'/>
  <script type='text/javascript'>
    blogger.widgets.blog.initThreadedComments(
        <data:post.commentJso/>,
        <data:post.commentMsgs/>,
        <data:post.commentConfig/>);
  </script>
</b:includable>
    <b:includable id='threadedComments' var='post'>
  <section class='comments threaded' expr:data-embed='data:post.embedCommentForm' expr:data-num-comments='data:post.numberOfComments' id='comments'>
    <a name='comments'/>

    <b:include name='commentsTitle'/>

    <div class='comments-content'>
      <b:if cond='data:post.embedCommentForm'>
        <b:include data='post' name='threadedCommentJs'/>
      </b:if>
      <div id='comment-holder'>
         <data:post.commentHtml/>
      </div>
    </div>

    <p class='comment-footer'>
      <b:if cond='data:post.allowNewComments'>
        <b:include data='post' name='threadedCommentForm'/>
      <b:else/>
        <data:post.noNewCommentsText/>
      </b:if>
      <b:if cond='data:post.showManageComments'>
        <b:include data='post' name='manageComments'/>
      </b:if>
    </p>

    <b:if cond='data:showCmtPopup'>
      <div id='comment-popup'>
        <iframe allowtransparency='allowtransparency' frameborder='0' id='comment-actions' name='comment-actions' scrolling='no'>
        </iframe>
      </div>
    </b:if>
  </section>
</b:includable>
    <b:includable id='tooltipCss'>
  <!-- LINT.IfChange -->
  <style>
    .post-body a.b-tooltip-container {
      position: relative;
      display: inline-block;
    }

    .post-body a.b-tooltip-container .b-tooltip {
      display: block !important;
      position: absolute;
      top: 100%;
      left: 50%;
      transform: translate(-20%, 1px);
      visibility: hidden;
      opacity: 0;
      z-index: 1;
      transition: opacity 0.2s ease-in-out;
    }

    .post-body a.b-tooltip-container .b-tooltip iframe {
      width: 200px;
      height: 198px;
      max-width: none;
      border: none;
      border-radius: 20px;
      box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.2);
    }

    @media (hover: hover) {
      .post-body a.b-tooltip-container:hover .b-tooltip {
        visibility: visible;
        opacity: 1;
      }
    }
  </style>
  <!-- LINT.ThenChange(//depot/google3/java/com/google/blogger/b2/layouts/widgets/v2-style.css) -->
</b:includable>
  </b:widget>
  <b:widget id='HTML92' locked='false' title='Ad Mid' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'/>
    </b:widget-settings>
    <b:includable id='main'>
<div class='widget-content'><data:content/></div>
<b:include name='quickedit'/>
</b:includable>
  </b:widget>
  <b:widget id='HTML93' locked='false' title='Ad Bottom' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'/>
    </b:widget-settings>
    <b:includable id='main'>
<div class='widget-content'><data:content/></div>
<b:include name='quickedit'/>
</b:includable>
  </b:widget>
  <b:widget id='HTML94' locked='false' title='Ad Sticky' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'/>
    </b:widget-settings>
    <b:includable id='main'>
<div class='widget-content'><data:content/></div>
<b:include name='quickedit'/>
</b:includable>
  </b:widget>
</b:section>
</main>

<footer class='wrap'>&#169; <data:blog.title/> &#8212; ছব&#2495;র স&#2509;বত&#2509;ব স&#2434;শ&#2509;ল&#2495;ষ&#2509;ট শ&#2495;ল&#2509;প&#2496;র&#2404; আপত&#2509;ত&#2495; থ&#2494;কল&#2503; &quot;র&#2495;প&#2507;র&#2509;ট&quot; ব&#2494;টন ব&#2509;যবহ&#2494;র কর&#2497;ন&#2404;
<div style='margin-top:8px'><a href='#' id='supl' style='color:var(--ac);font-weight:600'>💬 স&#2494;প&#2507;র&#2509;ট (WhatsApp)</a> &#183; <a href='#' id='pwal' style='color:var(--ac);font-weight:600'>📲 অ&#2509;য&#2494;প ইনস&#2509;টল কর&#2497;ন</a></div>
<div style='opacity:.5;font-size:11px'>theme v8</div><div class='dev'>Development by <b>Tanbin Farazi</b> &#183; <a href='https://youtube.com/@tanbintechzone?si=87yRAD3ZbGZms4dY' rel='noopener' target='_blank'>&#9654; YouTube: Tanbin Tech</a></div>
</footer>

<div id='modal'><div id='mbox'/></div>
<div id='stk'/>
<div id='lb'><img alt=''/></div>
<div id='toast'/>

<!-- ===== ব&#2495;জ&#2509;ঞ&#2494;পন গ&#2509;য&#2494;জ&#2503;ট এল&#2494;ক&#2494; (Layout থ&#2503;ক&#2503; HTML/JavaScript গ&#2509;য&#2494;জ&#2503;ট য&#2507;গ কর&#2497;ন) ===== -->
<div id='adstore' style='display:none'>
<b:section class='adsec' id='ad-top' maxwidgets='1' showaddelement='yes'/>
<b:section class='adsec' id='ad-mid' maxwidgets='1' showaddelement='yes'/>
<b:section class='adsec' id='ad-bottom' maxwidgets='1' showaddelement='yes'/>
<b:section class='adsec' id='ad-sticky' maxwidgets='1' showaddelement='yes'/>
</div>
<button aria-label='উপরে যান' id='up'>&#8593;</button>

<script type='text/javascript'>//<![CDATA[
(function(){
var CFG=window.GCFG||{};
var ADSRC=document.getElementById('adstore');
['Top','Mid','Bottom','Sticky'].forEach(function(P){
  var w=ADSRC&&ADSRC.querySelector('#ad-'+P.toLowerCase()+' .widget-content');
  if(!w)return;
  var raw=(w.innerHTML||'').trim();if(!raw)return;
  var d=document.createElement('div');d.innerHTML=raw;
  var tt=d.querySelector('template');
  if(tt){raw=(tt.innerHTML||'').trim();if(tt.hasAttribute('data-frame'))CFG['adFrame'+P]=true}
  if(raw){CFG['adCode'+P]=raw;if(/atOptions|invoke\.js|document\.write/.test(raw))CFG['adFrame'+P]=true}
});
var BI=document.getElementById('bi'),TYPE=BI?BI.getAttribute('data-type'):'index',PID=BI?BI.getAttribute('data-pid'):'';
var app=document.getElementById('app'),MD=document.getElementById('modal'),MB=document.getElementById('mbox');
var POSTS=[],F={ratio:'all',st:'all',cat:'',sort:'new',q:''};
var PREV=/[?&]adpreview=1/.test(location.search);
var DAY=864e5;
var REFC={},FBV={},SR={},TV={},BON={},VER={},VT={};

function el(t,c,h){var e=document.createElement(t);if(c)e.className=c;if(h!=null)e.innerHTML=h;return e}
function esc(s){return String(s==null?'':s).replace(/[&<>"']/g,function(m){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[m]})}
function bn2en(s){return String(s==null?'':s).replace(/[০-৯]/g,function(d){return '০১২৩৪৫৬৭৮৯'.indexOf(d)})}
function toBn(s){return CFG.bn?String(s).replace(/\d/g,function(d){return '০১২৩৪৫৬৭৮৯'.charAt(d)}):String(s)}
function num(n){n=+n||0;return toBn(n>=1e6?(Math.round(n/1e5)/10)+'M':n>=1000?(Math.round(n/100)/10)+'K':n)}
function slug(s){return String(s).toLowerCase().replace(/[^a-z0-9ঀ-৿]+/g,'-').replace(/^-|-$/g,'')}
function ls(k,v){try{if(v===undefined)return localStorage.getItem(k);localStorage.setItem(k,v)}catch(e){}return null}
function waUrl(text){return 'https://wa.me/'+String(CFG.supportWhatsApp||'').replace(/\D/g,'')+'?text='+encodeURIComponent(text||'')}
function mailUrl(sub,body){return 'mailto:'+(CFG.mail||'')+'?subject='+encodeURIComponent(sub||'')+'&body='+encodeURIComponent(body||'')}
function cur(n){return toBn((CFG.currency||'৳')+n)}
function usd(n){return '$'+toBn(n)}
function daysOf(t){return t==='30'?30:t==='7'?7:1}
function prizesOf(t){var a=t==='30'?CFG.prize30:t==='7'?CFG.prize7:CFG.prize24;if(Array.isArray(a)&&a.length)return a;if(typeof a==='number')return [a];return t==='30'?[100,60,30]:t==='7'?[2.5]:[1]}
function bonusOf(t){var a=t==='30'?CFG.bonus30:t==='7'?CFG.bonus7:CFG.bonus24;return Array.isArray(a)?a:[]}
function prizeOf(t){return prizesOf(t)[0]}
function nPrize(t){return prizesOf(t).length}
function cBn(t){return t==='30'?'৩০ দিনের':t==='7'?'৭ দিনের':'২৪ ঘণ্টার'}
function cEn(t){return t==='30'?'30 Days':t==='7'?'7 Days':'24 Hours'}
function medal(i){return ['\uD83E\uDD47','\uD83E\uDD48','\uD83E\uDD49'][i]||'\uD83C\uDFC6'}
function ordBn(i){var s=['ম','য়','য়','র্থ','ম','ষ্ঠ','ম','ম','ম','ম'];return toBn(i+1)+(s[i]||'তম')}
function prizeLine(t){var z=prizesOf(t);return z.length>1?z.map(function(v,i){return medal(i)+' '+usd(v)}).join(' · '):usd(z[0])}
function prizeText(t){var z=prizesOf(t),b=bonusOf(t),s=z.length>1?z.map(function(v,i){return ordBn(i)+' '+usd(v)}).join(' · '):'প্রাইজ '+usd(z[0]);return s+(b.length?' + রানার-আপ বোনাস':'')}
function bonusText(t){var b=bonusOf(t),n=nPrize(t);if(!b.length)return '';return '\uD83C\uDF81 রানার-আপ বোনাস পয়েন্ট: '+b.map(function(v,i){return ordBn(n+i)+' '+toBn(v)}).join(' · ')}
function rewardAt(t,i){var pr=prizesOf(t),bo=bonusOf(t);if(i<pr.length)return '\uD83C\uDFC6 '+usd(pr[i]);if(i-pr.length<bo.length)return '\uD83C\uDF81 '+toBn(bo[i-pr.length])+' পয়েন্ট';return ''}
function winLabel(p){if(p.bwin)return '\uD83C\uDF81 '+ordBn((p.rank||1)-1)+' স্থান';return nPrize(p.contest)>1?medal((p.rank||1)-1)+' '+ordBn((p.rank||1)-1)+' স্থান':'\uD83C\uDFC6 বিজয়ী'}
function rulesHtml(){return '<div class="rules"><b>\uD83D\uDCDC নিয়ম:</b> ✅ শুধুমাত্র নিজের মোবাইল বা ক্যামেরায় তোলা ছবি গ্রহণযোগ্য · \uD83D\uDEAB AI দিয়ে বানানো (AI-generated) ছবি নট অ্যালাউড · ❌ অন্যের ছবি বা কপি করা ছবি নয়। নিয়ম না মানলে পোস্ট ডিলিট ও প্রাইজ বাতিল করা হবে।</div>'}
var tt;function toast(m){var t=document.getElementById('toast');t.textContent=m;t.classList.add('on');clearTimeout(tt);tt=setTimeout(function(){t.classList.remove('on')},2200)}

function rs(u,w){u=String(u).replace(/^http:/,'https:');
  if(/\/s\d+(-[a-z0-9-]+)?\//i.test(u))return u.replace(/\/s\d+(-[a-z0-9-]+)?\//i,'/s'+w+'/');
  if(/\/w\d+-h\d+(-[a-z0-9-]+)*\//i.test(u))return u.replace(/\/w\d+-h\d+(-[a-z0-9-]+)*\//i,'/s'+w+'/');
  if(/=s\d+(-[a-z0-9-]+)?$/i.test(u))return u.replace(/=s\d+(-[a-z0-9-]+)?$/i,'=s'+w);
  return u}

function sha(s){
  if(window.crypto&&crypto.subtle&&window.TextEncoder){
    return crypto.subtle.digest('SHA-256',new TextEncoder().encode(s)).then(function(b){
      return Array.prototype.map.call(new Uint8Array(b),function(x){return ('0'+x.toString(16)).slice(-2)}).join('').slice(0,10)})}
  var h=5381;for(var i=0;i<s.length;i++)h=((h<<5)+h+s.charCodeAt(i))|0;
  return Promise.resolve(('0000000000'+(h>>>0).toString(16)).slice(-10))}
function pinHash(pin){return sha((CFG.salt||'')+bn2en(pin).trim())}

var RE_WA=/(?:wa\.me\/|whatsapp\.com\/(?:send\?phone=)?)(\+?\d+)/i,RE_TG=/t\.me\/(\+?[A-Za-z0-9_]+)/i;
function waLink(v){v=bn2en(v).trim();var m=v.match(RE_WA),d=m?m[1]:v.replace(/\D/g,'');d=String(d).replace(/^\+/,'');if(!d)return '';if(/^01\d{9}$/.test(d))d='88'+d;return 'https://wa.me/'+d}
function tgLink(v){v=bn2en(v).trim();if(/^https?:\/\//i.test(v))return v;var m=v.match(RE_TG);if(m)return 'https://t.me/'+m[1];
  if(/^@/.test(v))return 'https://t.me/'+v.slice(1);var d=v.replace(/[\s-]/g,'');
  if(/^\+?\d{8,15}$/.test(d)){d=d.replace(/^\+/,'');if(/^01\d{9}$/.test(d))d='88'+d;return 'https://t.me/+'+d}
  if(/^[A-Za-z0-9_]{4,}$/.test(v))return 'https://t.me/'+v;return ''}
function parseCount(s){s=bn2en(s||'').replace(/,/g,'').replace(/হাজার/g,'K').replace(/লাখ/g,'L').trim().toUpperCase();
  var m=s.match(/^([\d.]+)\s*([KML])?$/);if(!m)return 0;return Math.round((parseFloat(m[1])||0)*({K:1e3,L:1e5,M:1e6}[m[2]]||1))}

/* ---------- ফিড এন্ট্রি পার্স ---------- */
var RE_STORY=/^(?:story|গল্প|ছবির\s*গল্প)\s*[::]\s*(.*)$/i;
function parseEntry(e){
  var id=((e.id&&e.id.$t||'').match(/post-(\d+)/)||[])[1]||'';
  var html=(e.content&&e.content.$t)||'';
  var doc=new DOMParser().parseFromString(html.replace(/<br\s*\/?>/gi,'\n').replace(/(<\/(?:p|div|li|h\d)>)/gi,'$1\n'),'text/html');
  var cfg={},vc=doc.querySelector('.vcfg');
  if(vc){(vc.textContent||'').split('\n').forEach(function(l){var m=l.match(/^\s*([A-Za-z]+)\s*[::=]\s*(.+?)\s*$/);if(m)cfg[m[1].toLowerCase()]=m[2]});vc.parentNode.removeChild(vc)}
  var im=doc.querySelector('img'),src=im?im.getAttribute('src'):'',w=0,h=0;
  if(im){w=+(im.getAttribute('data-original-width')||im.getAttribute('width'))||0;h=+(im.getAttribute('data-original-height')||im.getAttribute('height'))||0}
  var lines=(doc.body.textContent||'').split('\n').map(function(x){return x.replace(/\u00a0/g,' ').trim()}).filter(Boolean);
  var story='',si=-1;
  for(var k=0;k<lines.length;k++){if(RE_STORY.test(lines[k])){si=k;break}}
  if(si>=0){var first=lines[si].match(RE_STORY)[1];story=[first].concat(lines.slice(si+1)).filter(Boolean).join('\n');lines=lines.slice(0,si)}
  var m={name:'',addr:'',wa:'',tg:'',desc:''},rest=[];
  lines.forEach(function(l){var mm;
    if((mm=l.match(/^(?:name|নাম)\s*[::\-–]\s*(.+)$/i))){m.name=mm[1];return}
    if((mm=l.match(/^(?:address|location|ঠিকানা)\s*[::\-–]\s*(.+)$/i))){m.addr=mm[1];return}
    if((mm=l.match(/^(?:description|desc|বর্ণনা)\s*[::\-–]\s*(.+)$/i))){m.desc=mm[1];return}
    if((mm=l.match(/^(?:whats\s*app|wa|হোয়াটসঅ্যাপ|হোয়াটসএপ)\s*[::\-–]\s*(.+)$/i))){m.wa=waLink(mm[1]);return}
    if((mm=l.match(/^(?:telegram|tg|টেলিগ্রাম)\s*[::\-–]\s*(.+)$/i))){m.tg=tgLink(mm[1]);return}
    if(RE_WA.test(l)){m.wa=waLink(l);return}
    if(RE_TG.test(l)){m.tg=tgLink(l);return}
    if(/^\+?(88)?01\d{9}$/.test(bn2en(l).replace(/[\s-]/g,''))){m.wa=waLink(l);return}
    rest.push(l)});
  var title=(e.title&&e.title.$t)||'';
  var name=m.name||rest.shift()||title,addr=m.addr||rest.shift()||'';
  var labels=(e.category||[]).map(function(c){return c.term}),pin='',ucode='',mon=false,noads=false,tags=[],contest='',winTag=false,prizePaid=false,theme='',vb=0,wall=false;
  labels.forEach(function(l){var t=l.trim(),mm;
    if(/^\d{3,10}$/.test(bn2en(t)))pin=bn2en(t);
    else if(/^u-[0-9a-f]{10}$/i.test(t))ucode=t.slice(2).toLowerCase();
    else if((mm=t.match(/^theme\s*[:=]\s*(.+)$/i))){theme=mm[1].trim()}
    else if((mm=t.match(/^votes?\s*[:=]?\s*([0-9০-৯][0-9০-৯,.]*\s*[KkLl]?)$/i))){vb=parseCount(mm[1])}
    else if(/contest/i.test(t)){contest=/(^|\D)30(\D|$)|ত্রিশ|৩০/.test(t)?'30':(/(^|\D)7(\D|$)|সাত|৭/.test(t)?'7':'24')}
    else if(/^winner$/i.test(t))winTag=true;
    else if(/^prizepaid$/i.test(t))prizePaid=true;
    else if(/^story$/i.test(t)){}
    else if(/^(wallpaper|ওয়ালপেপার)$/i.test(t))wall=true;
    else if(/^monetization$/i.test(t))mon=true;
    else if(/^noads$/i.test(t))noads=true;
    else if(/^paid$/i.test(t))cfg.status='PAID';
    else if(/^free$/i.test(t))cfg.status='FREE';
    else if((mm=t.match(/^(price|views|downloads|category|cat|status|withdrawn|bonuswd)\s*[:=]\s*(.+)$/i)))cfg[mm[1].toLowerCase()==='cat'?'category':mm[1].toLowerCase()]=mm[2];
    else tags.push(t)});
  if(wall)contest='';
  if(/^(1|true|yes)$/i.test(cfg.noads||''))noads=true;
  var price=parseFloat(bn2en(cfg.price||'').replace(/[^\d.]/g,''))||0;
  var paid=/paid|পেইড/i.test(cfg.status||'')||(!cfg.status&&price>0);
  var url='';(e.link||[]).forEach(function(l){if(l.rel==='alternate')url=l.href});
  var pub=Date.parse((e.published&&e.published.$t)||'')||Date.now();
  var vl=parseCount(cfg.views);
  var p={id:id,img:src,w:w,h:h,name:name,addr:addr,desc:m.desc,story:story,wa:m.wa,tg:m.tg,pin:pin,ucode:ucode,mon:mon,noads:noads,tags:tags,url:url,
    paid:paid,price:price,category:(cfg.category||'').trim(),vl:vl,fv:0,views:vl,reads:{},dls:parseCount(cfg.downloads),wd:parseCount(cfg.withdrawn),bwd:parseCount(cfg.bonuswd),
    contest:contest,wall:wall,winTag:winTag,prizePaid:prizePaid,pub:pub,end:contest?pub+daysOf(contest)*DAY:0,votes:vb,vb:vb,theme:theme,rank:0,wk:0,win:false,bwin:false,bpts:0,prize:0};
  p.port=(w&&h)?h>w:false;p.ar=(w&&h)?w+'/'+h:'16/9';return p}
function gid(p){
  if(p.pin)return pinHash(p.pin).then(function(h){p.cid=h});
  p.cid=p.ucode||('x'+p.id);return Promise.resolve()}
function isLive(p){return !!p.contest&&p.end>Date.now()}
function isEnded(p){return !!p.contest&&p.end<=Date.now()}
function visible(p){return true}

/* ---------- Firebase সাহায্যকারী ---------- */
function fbOn(){return !!CFG.firebaseUrl}
function fbUrl(path){return String(CFG.firebaseUrl).replace(/\/$/,'')+'/'+path+'.json'}
function fbGet(path){return fetch(fbUrl(path)).then(function(r){return r.json()}).then(function(j){return j&&typeof j==='object'?j:{}}).catch(function(){return {}})}
function fbInc(path){return fetch(fbUrl(path),{method:'PUT',body:JSON.stringify({'.sv':{increment:1}})}).catch(function(){})}
function did(){var d=ls('did');if(!d){d='d'+Math.random().toString(36).slice(2,10)+Date.now().toString(36);ls('did',d)}return d}
function curMonth(){return new Date().toISOString().slice(0,7)}

/* ---------- ভোট ---------- */
function loadVotes(list){
  if(!fbOn()){list.forEach(function(p){p.votes=(p.vb||0)+(+ls('lv'+p.id)||0)});return Promise.resolve()}
  return Promise.all(list.map(function(p){
    return fetch(fbUrl('votes/'+p.id)+'?shallow=true').then(function(r){return r.json()}).then(function(j){p.votes=(p.vb||0)+(j&&typeof j==='object'?Object.keys(j).length:0)}).catch(function(){})}))}
function calcWinners(){
  POSTS.forEach(function(p){p.win=false;p.bwin=false;p.rank=0;p.wk=0;p.prize=0;p.bpts=0});
  var cs=POSTS.filter(function(p){return p.contest}).sort(function(a,b){return a.pub-b.pub});
  ['24','7','30'].forEach(function(t){
    var pr=prizesOf(t),bo=bonusOf(t),span=daysOf(t)*DAY,ths={};
    cs.forEach(function(p){if(p.contest===t)ths[p.theme||'']=1});
    Object.keys(ths).forEach(function(th){
      var L=cs.filter(function(p){return p.contest===t&&(p.theme||'')===th}),i=0;
      while(i<L.length){
        var st=L[i].pub,r=[];
        while(i<L.length&&L[i].pub<st+span){r.push(L[i]);i++}
        if(!r.every(function(p){return p.end<=Date.now()}))continue;
        var rk=function(a,b){return (b.votes-a.votes)||(a.pub-b.pub)};
        var tg=r.filter(function(p){return p.winTag}).sort(rk);
        var rest=fbOn()?r.filter(function(p){return !p.winTag&&p.votes>0}).sort(rk):[];
        tg.concat(rest).slice(0,pr.length+bo.length).forEach(function(w,k){
          w.rank=k+1;w.wk=st;
          if(k<pr.length){w.win=true;w.prize=pr[k]}else{w.bwin=true;w.bpts=bo[k-pr.length]}})}})})}
function updateVotes(){
  [].forEach.call(document.querySelectorAll('[data-vc]'),function(n){var p=byId(n.getAttribute('data-vc'));if(p)n.textContent=num(p.votes)})}
function updateStats(){
  [].forEach.call(document.querySelectorAll('[data-vw]'),function(n){var p=byId(n.getAttribute('data-vw'));if(p)n.textContent=num(p.views)})}
function castVote(p){
  ls('v'+p.id,'1');
  if(fbOn()){
    return fetch(fbUrl('votes/'+p.id+'/'+did()),{method:'PUT',body:'1'}).then(function(){return loadVotes([p])}).then(function(){calcBonus();updateVotes();checkMilestones(p.cid)})}
  var n=(+ls('lv'+p.id)||0)+1;ls('lv'+p.id,n);p.votes=(p.vb||0)+n;calcBonus();updateVotes();checkMilestones(p.cid);return Promise.resolve()}

/* ---------- ভিউ, গল্প পড়া, রেফারেল, থিম ভোট ---------- */
function loadStats(){
  if(!fbOn()){applyStats();return Promise.resolve()}
  return Promise.all([fbGet('views'),fbGet('refc'),fbGet('sr'),fbGet('tv')]).then(function(a){FBV=a[0];REFC=a[1];SR=a[2];TV=a[3];applyStats()})}
function applyStats(){
  POSTS.forEach(function(p){
    p.fv=fbOn()?(+FBV[p.id]||0):(+ls('lvw'+p.id)||0);p.views=p.vl+p.fv;p.reads={};
    if(fbOn()){Object.keys(SR).forEach(function(mo){var n=SR[mo]&&SR[mo][p.id];if(n)p.reads[mo]=+n||0})}
    else{try{p.reads=JSON.parse(ls('lsr'+p.id)||'{}')||{}}catch(e){p.reads={}}}})}
function countView(p,opened){
  var k='vw'+p.id,t=+ls(k)||0;
  if(Date.now()-t>=12*36e5){ls(k,Date.now());
    p.fv=(p.fv||0)+1;p.views=p.vl+p.fv;
    if(fbOn())fbInc('views/'+p.id);else ls('lvw'+p.id,p.fv)}
  /* গল্পের পাঠ শুধু ছবি খুলে পড়লেই গোনা হয় (স্ক্রল/হোভারে নয়) */
  if(opened&&p.story){var k2='sr'+p.id,t2=+ls(k2)||0;
    if(Date.now()-t2>=12*36e5){ls(k2,Date.now());var mo=curMonth();p.reads[mo]=(p.reads[mo]||0)+1;
      if(fbOn())fbInc('sr/'+mo+'/'+p.id);else ls('lsr'+p.id,JSON.stringify(p.reads))}}
  updateStats()}
/* স্ক্রল / টাচ / মাউস হোভারে ভিউ গণনা */
var VIO=null,VTM={};
function watchView(c,p){
  function hit(){countView(p,false)}
  c.addEventListener('mouseenter',hit);
  c.addEventListener('touchstart',hit,{passive:true});
  if('IntersectionObserver' in window){
    if(!VIO)VIO=new IntersectionObserver(function(es){es.forEach(function(en){
      var id=en.target.getAttribute('data-id');
      if(en.isIntersecting){VTM[id]=setTimeout(function(){var q=byId(id);if(q)countView(q,false);VIO.unobserve(en.target)},500)}
      else{clearTimeout(VTM[id])}})},{threshold:.5});
    VIO.observe(c)}
  else setTimeout(hit,800)}
function readsAll(p){var s=0;for(var k in p.reads)s+=p.reads[k]||0;return s}
function readsM(p,m){return (p.reads&&p.reads[m])||0}
function storyPts(p){var s=0,st=CFG.storyReadsPerStep||1000,pp=CFG.storyPointsPerStep||300;for(var k in (p.reads||{}))s+=Math.floor(p.reads[k]/st)*pp;return s}
function countRef(ref){
  if(!fbOn()||!ref||!/^[A-Za-z0-9]{6,32}$/.test(ref))return;
  if(ls('rfany')||ls('ownc')===ref)return;
  ls('rfany',Date.now());fbInc('refc/'+ref)}
function calcBonus(){
  BON={};VER={};VT={};var tv={};
  POSTS.forEach(function(p){var b=BON[p.cid]||(BON[p.cid]={ref:0,story:0,run:0,wd:0,tot:0});
    b.run+=p.bpts||0;b.story+=storyPts(p);b.wd+=p.bwd||0;if(p.contest)tv[p.cid]=(tv[p.cid]||0)+(p.votes||0)});
  Object.keys(BON).forEach(function(c){var b=BON[c];
    b.ref=Math.floor((+REFC[c]||0)/(CFG.refVisitorsPerStep||10))*(CFG.refPointsPerStep||5);
    b.tot=Math.max(0,b.ref+b.story+b.run-b.wd)});
  Object.keys(tv).forEach(function(c){VT[c]=tv[c];if(tv[c]>=(CFG.verifyVotes||50))VER[c]=1})}
function bon(cid){return BON[cid]||{ref:0,story:0,run:0,wd:0,tot:0}}
function isVer(p){return !!VER[p.cid]}
function isHot(p){return (VT[p.cid]||0)>=(CFG.fireVotes||100)}
function nameBadge(p){return isVer(p)?'<i class="vf'+(isHot(p)?' hot':'')+'" title="'+(isHot(p)?'ফায়ার ভেরিফাইড শিল্পী (১০০+ ভোট)':'ভেরিফাইড শিল্পী')+'">✓</i>':'<i>✦</i>'}
/* ---------- ভেরিফাই পপআপ ---------- */
var POPQ=[],POPBUSY=false;
function popQ(o){POPQ.push(o);if(!POPBUSY)popNext()}
function popNext(){
  var o=POPQ.shift();if(!o){POPBUSY=false;return}POPBUSY=true;
  var n=document.getElementById('vpop');if(n&&n.parentNode)n.parentNode.removeChild(n);
  n=el('div','','<div class="vpi">'+(o.fire?'\uD83D\uDD25':'✓')+'</div><div><b>'+o.t+'</b><small>'+o.d+'</small></div><button class="vpx" aria-label="বন্ধ">✕</button>');
  n.id='vpop';if(o.fire)n.className='fire';document.body.appendChild(n);
  setTimeout(function(){n.classList.add('on')},30);
  var done=false;function close(){if(done)return;done=true;n.classList.remove('on');setTimeout(function(){if(n.parentNode)n.parentNode.removeChild(n);popNext()},450)}
  n.querySelector('.vpx').onclick=close;setTimeout(close,6000)}
function seenGet(){try{return JSON.parse(ls('popSeen')||'{}')||{}}catch(e){return {}}}
function checkMilestones(only){
  var seen=seenGet(),first=!ls('popInit'),n=0,vv=CFG.verifyVotes||50,ff=CFG.fireVotes||100,names={};
  POSTS.forEach(function(p){if(!names[p.cid])names[p.cid]=p.name});
  Object.keys(VT).forEach(function(c){
    if(only&&c!==only)return;
    var v=VT[c];
    if(v>=vv&&!seen['v'+c]){seen['v'+c]=1;if(!first&&n<3){n++;popQ({t:'\uD83C\uDF89 '+esc(names[c]||'')+' — Blue Verified!',d:toBn(vv)+' ভোট পূরণ হয়েছে। এই শিল্পীর সব ছবিতে এখন নীল ভেরিফাইড টিক দেখাবে।'})}}
    if(v>=ff&&!seen['f'+c]){seen['f'+c]=1;if(!first&&n<3){n++;popQ({fire:1,t:'\uD83D\uDD25 '+esc(names[c]||'')+' — Fire Verified!',d:toBn(ff)+'+ ভোট! ব্লু টিকে আগুন জ্বলছে।'})}}});
  ls('popSeen',JSON.stringify(seen));
  if(first){ls('popInit','1');
    if(!only)popQ({t:'\u2705 Blue Verified',d:toBn(vv)+' ভোট পেলেই ব্লু টিক, '+toBn(ff)+'+ ভোটে টিকে আগুন \uD83D\uDD25 — কনটেস্টে অংশ নিন!'})}}
function shareUrl(p){var u=(p.url||location.href).replace(/[?&]ref=[^&]*/,'');return u+(u.indexOf('?')<0?'?':'&')+'ref='+p.cid}

function themeList(){return CFG.themePoll||[]}
function themeCount(i){
  var lim=Date.now()-(CFG.themeDays||7)*DAY;
  if(fbOn()){var m=TV['t'+i]||{},c=0;for(var k in m)if(+m[k]>lim)c++;return c}
  try{return (JSON.parse(ls('ltv'+i)||'[]')||[]).filter(function(x){return x>lim}).length}catch(e){return 0}}
function themeLead(){var L=themeList(),best={name:'',n:0,i:-1};L.forEach(function(x,i){var n=themeCount(i);if(n>best.n){best={name:x,n:n,i:i}}});return best}
function castTheme(i){
  var win=(CFG.themeDays||7)*DAY;
  if(Date.now()-(+ls('tvt'+i)||0)<win){toast('এই থিমে আপনি ইতিমধ্যে ভোট দিয়েছেন');return Promise.resolve(false)}
  ls('tvt'+i,Date.now());
  if(fbOn()){return fetch(fbUrl('tv/t'+i+'/'+did()),{method:'PUT',body:String(Date.now())}).then(function(){return fbGet('tv')}).then(function(j){TV=j;return true}).catch(function(){return false})}
  var a=[];try{a=JSON.parse(ls('ltv'+i)||'[]')||[]}catch(e){}a.push(Date.now());ls('ltv'+i,JSON.stringify(a));return Promise.resolve(true)}

/* ---------- কাউন্টডাউন ---------- */
function fmtLeft(ms){
  if(ms<=0)return 'শেষ';
  var d=Math.floor(ms/DAY),h=Math.floor(ms%DAY/36e5),m=Math.floor(ms%36e5/6e4),s=Math.floor(ms%6e4/1e3);
  function z(n){return (n<10?'0':'')+n}
  return toBn((d?d+'দিন ':'')+z(h)+':'+z(m)+':'+z(s))}
var reloaded=false;
setInterval(function(){
  var nodes=document.querySelectorAll('[data-end]');
  [].forEach.call(nodes,function(n){
    var l=(+n.getAttribute('data-end'))-Date.now();n.textContent=fmtLeft(l);
    if(l<=0&&!reloaded&&/view=(c|lb)/.test(location.search)){reloaded=true;setTimeout(function(){location.reload()},2500)}})},1000);

/* ---------- পয়েন্ট ও মনিটাইজেশন ---------- */
function pts(p){var g=Math.floor(p.views/(CFG.viewsPerStep||1000))*(CFG.pointsPerStep||100);return Math.max(0,g-(p.wd||0))}
function taka(n){return Math.floor(n*(CFG.takaPerPoint||0.1))}
function isMon(p){return p.mon||p.views>=(CFG.monetizeViews||500)}
function calcAll(){calcWinners();calcBonus();setTimeout(function(){try{checkMilestones()}catch(e){}},2500)}
function loadPosts(){
  return fetch('/feeds/posts/default?alt=json&max-results='+(CFG.maxPosts||500)).then(function(r){return r.json()}).then(function(j){
    var es=(j.feed&&j.feed.entry)||[];POSTS=es.map(parseEntry).filter(function(p){return p.img&&p.id});
    return Promise.all(POSTS.map(gid))}).then(function(){
    return loadVotes(POSTS.filter(function(p){return p.contest}))}).then(loadStats).then(calcAll)}
function byId(id){return POSTS.filter(function(x){return x.id===id})[0]}

/* =====================================================
   বিজ্ঞাপন সিস্টেম — শুধু ছবির বিস্তারিত ভিউতে চলে
   ===================================================== */
var adsLoaded=false,blocked=false;
function cap(s){return s.charAt(0).toUpperCase()+s.slice(1)}
function adsAllowed(p){
  if(CFG.adsOn===false||p.noads)return false;
  if(p.paid&&CFG.adsOnPaid===false)return false;
  if(CFG.adsMode==='monetized'&&!isMon(p))return false;
  return true}
function hasAd(pos){
  var P=cap(pos);
  return !!(CFG['adCode'+P]||(CFG.adClient&&(CFG['adSlot'+P]||CFG.adSlot))||CFG.adBannerImg||PREV||CFG.adPlaceholder)}
function loadAdSense(){
  if(adsLoaded||!CFG.adClient)return;adsLoaded=true;
  var s=document.createElement('script');s.async=true;s.crossOrigin='anonymous';
  s.src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client='+encodeURIComponent(CFG.adClient);
  document.head.appendChild(s)}
function injectCode(box,html){
  var t=document.createElement('div');t.innerHTML=html;
  var sc=[].slice.call(t.querySelectorAll('script'));
  sc.forEach(function(s){s.parentNode.removeChild(s)});
  box.appendChild(t);
  sc.forEach(function(o){
    if(o.src&&/adsbygoogle\.js/.test(o.src)){if(adsLoaded)return;adsLoaded=true}
    var n=document.createElement('script');
    [].forEach.call(o.attributes,function(a){n.setAttribute(a.name,a.value)});
    if(o.text)n.text=o.text;box.appendChild(n)})}
function fillAd(box,pos){
  var P=cap(pos),code=CFG['adCode'+P],slot=CFG['adSlot'+P]||CFG.adSlot;
  if(blocked&&CFG.adblockNotice){box.innerHTML='<div class="abn">\uD83D\uDE4F বিজ্ঞাপন ব্লকার বন্ধ রাখলে সাইটটি ফ্রি রাখতে সাহায্য হয়। ধন্যবাদ!</div>';return true}
  if(code){
    if(CFG.adCodeIframe||CFG['adFrame'+P]||/atOptions|invoke\.js|document\.write/.test(code)){
      var h={top:100,mid:260,bottom:260,sticky:60}[pos]||100;
      var f=document.createElement('iframe');f.height=h;f.setAttribute('scrolling','no');
      f.setAttribute('sandbox','allow-scripts allow-popups allow-popups-to-escape-sandbox allow-same-origin');
      f.srcdoc='<body style="margin:0;display:flex;justify-content:center;background:transparent">'+code+'</body>';
      box.appendChild(f)}
    else injectCode(box,code);
    return true}
  if(CFG.adClient&&slot){
    loadAdSense();
    var ins=document.createElement('ins');ins.className='adsbygoogle';ins.style.display='block';
    ins.setAttribute('data-ad-client',CFG.adClient);ins.setAttribute('data-ad-slot',slot);
    ins.setAttribute('data-ad-format',pos==='sticky'?'horizontal':'auto');
    ins.setAttribute('data-full-width-responsive','true');
    box.appendChild(ins);
    try{(window.adsbygoogle=window.adsbygoogle||[]).push({})}catch(e){}
    return true}
  if(CFG.adBannerImg){
    var a=document.createElement('a');a.href=CFG.adBannerUrl||'#';a.target='_blank';a.rel='sponsored noopener nofollow';
    a.innerHTML='<img loading="lazy" alt="'+esc(CFG.adBannerAlt||'')+'" src="'+esc(CFG.adBannerImg)+'"/>';
    box.appendChild(a);return true}
  if(PREV||CFG.adPlaceholder){box.innerHTML='<span class="ph0">বিজ্ঞাপনের জায়গা ('+pos+')</span>';return true}
  return false}
function adNode(pos){
  var w=el('div','adbox '+pos,'<span class="al">'+esc(CFG.adLabel||'বিজ্ঞাপন')+'</span><div class="adin"></div>');
  var inn=w.querySelector('.adin'),done=false;
  function go(){if(done)return;done=true;if(!fillAd(inn,pos))w.style.display='none'}
  if(CFG.adLazy!==false&&'IntersectionObserver' in window){
    var io=new IntersectionObserver(function(es){if(es[0].isIntersecting){io.disconnect();go()}},{rootMargin:'250px'});io.observe(w)}
  else setTimeout(go,60);
  return w}
function detectBlock(){
  if(!CFG.adblockNotice)return;
  var b=el('div','adsbox ad-banner textads');b.style.cssText='position:absolute;left:-999px;top:-999px;width:10px;height:10px';
  document.body.appendChild(b);
  setTimeout(function(){blocked=!b.offsetHeight;if(b.parentNode)b.parentNode.removeChild(b)},250)}
function showSticky(p){
  hideSticky();
  if(!adsAllowed(p)||CFG.adShowSticky===false||!hasAd('sticky'))return;
  if(CFG.adStickyMobileOnly!==false&&window.innerWidth>=900)return;
  if(Date.now()-(+ls('stkx')||0)<(CFG.adStickyHideMin||30)*6e4)return;
  var s=document.getElementById('stk');
  s.innerHTML='<button class="sx" aria-label="বন্ধ">✕</button><div class="adin"></div>';
  s.classList.add('on');document.body.classList.add('has-stk');
  fillAd(s.querySelector('.adin'),'sticky');
  s.querySelector('.sx').onclick=function(){ls('stkx',Date.now());hideSticky()}}
function hideSticky(){
  var s=document.getElementById('stk');if(s){s.classList.remove('on');s.innerHTML=''}
  document.body.classList.remove('has-stk')}

/* ---------- কার্ড ও গ্রিড ---------- */
function card(p){
  var a=el('article','card'+(p.win?' win':''));a.setAttribute('data-id',p.id);var pt=pts(p),cx='',badge='';
  if(p.contest&&isLive(p)){
    badge='<span class="lvb">● LIVE</span><span class="pzb">\uD83C\uDFC6 '+usd(prizeOf(p.contest))+'</span>';
    cx='<div class="cx"><span>\uD83D\uDDF3 <b data-vc="'+p.id+'">'+num(p.votes)+'</b></span><span>⏳ <i data-end="'+p.end+'" style="font-style:normal"></i></span></div><button class="btn vt" data-vote="'+p.id+'">\uD83D\uDDF3 ভোট দিন</button>'}
  else if(p.win){badge='<span class="wnb">'+winLabel(p)+'</span>';cx='<div class="cx"><span>\uD83C\uDFC6 '+usd(p.prize)+'</span><span>\uD83D\uDDF3 '+num(p.votes)+' ভোট</span></div>'}
  else if(p.bwin){badge='<span class="wnb">'+winLabel(p)+'</span>';cx='<div class="cx"><span>\uD83C\uDF81 '+toBn(p.bpts)+' পয়েন্ট</span><span>\uD83D\uDDF3 '+num(p.votes)+' ভোট</span></div>'}
  if(p.wall&&!badge)badge='<span class="ct">\uD83D\uDDBC Wallpaper</span>';
  var sx=p.story?'<div class="sty-ex">\uD83D\uDCD6 '+esc(p.story.replace(/\s+/g,' ').slice(0,90))+'…</div>':(p.desc?'<div class="sty-ex">'+esc(p.desc.slice(0,90))+'</div>':'');
  a.innerHTML='<div class="ph"><img loading="lazy" decoding="async" alt="'+esc(p.name)+'" src="'+rs(p.img,p.port?500:640)+'" style="--ar:'+p.ar+'"/>'+
    '<span class="tag">'+(p.port?'৯:১৬':'১৬:৯')+'</span>'+
    '<span class="pb'+(p.paid?' paid':'')+'">'+(p.paid?cur(p.price||0):'FREE')+'</span>'+
    '<button class="shi" data-share="'+p.id+'" aria-label="শেয়ার">\uD83D\uDD17</button>'+
    (badge||(p.category?'<span class="ct">'+esc(p.category)+'</span>':''))+(isMon(p)?'<span class="mb" title="Monetization"><i>$</i>Monetization</span>':'')+'</div>'+
    '<div class="meta"><div class="pn"><span>'+esc(p.name)+'</span>'+nameBadge(p)+'</div>'+(p.addr?'<div class="pa">\uD83D\uDCCD '+esc(p.addr)+'</div>':'')+sx+
    '<div class="st">'+(p.theme?'<span>\uD83C\uDFAF '+esc(p.theme)+'</span>':'')+'<span>\uD83D\uDC41 <i data-vw="'+p.id+'" style="font-style:normal">'+num(p.views)+'</i></span>'+(p.story?'<span>\uD83D\uDCD6 '+num(readsAll(p))+'</span>':'')+(p.dls?'<span>⬇ '+num(p.dls)+'</span>':'')+(pt?'<span>⭐ '+num(pt)+'</span>':'')+'</div>'+cx+'</div>';
  var im=a.querySelector('img');
  im.onload=function(){if(!p.w&&im.naturalWidth){p.w=im.naturalWidth;p.h=im.naturalHeight;p.port=p.h>p.w;p.ar=p.w+'/'+p.h;
    im.style.setProperty('--ar',p.ar);a.querySelector('.tag').textContent=p.port?'৯:১৬':'১৬:৯'}};
  return a}
function mkGrid(list){
  var g=el('div','grid');list.forEach(function(p,i){var c=card(p);c.style.animationDelay=Math.min(i,12)*30+'ms';g.appendChild(c);watchView(c,p)});
  g.addEventListener('click',function(e){
    var s=e.target.closest('[data-share]');if(s){e.stopPropagation();var q=byId(s.getAttribute('data-share'));if(q)openShare(q);return}
    var v=e.target.closest('[data-vote]');if(v){e.stopPropagation();var r=byId(v.getAttribute('data-vote'));if(r)startVote(r);return}
    var c=e.target.closest('.card');if(!c)return;var p=byId(c.getAttribute('data-id'));if(p)openPost(p,list)});
  return g}

/* ---------- মডাল ---------- */
var CURLIST=[],CURIDX=-1;
function backable(){
  var ok=MD.classList.contains('on')&&CURIDX>=0,l=CURLIST,i=CURIDX;
  return ok?function(){CURLIST=l;CURIDX=i;showPost(l[i])}:null}
function openM(node){hideSticky();MB.innerHTML='<button type="button" class="x" aria-label="বন্ধ" onclick="window.__closeM();return false">✕</button>';MB.appendChild(node);MD.style.display='block';MD.classList.add('on');document.body.classList.add('lock');MD.scrollTop=0}
function openPost(p,list){CURLIST=list&&list.length?list:[p];CURIDX=CURLIST.indexOf(p);showPost(p)}
function showPost(p){
  MB.innerHTML='<button type="button" class="x" aria-label="বন্ধ" onclick="window.__closeM();return false">✕</button>'+(CURLIST.length>1?'<button type="button" class="nv prev" aria-label="আগেরটি" onclick="window.__step(-1);return false">‹</button><button type="button" class="nv next" aria-label="পরেরটি" onclick="window.__step(1);return false">›</button>':'');
  MB.appendChild(postView(p));
  MB.style.animation='none';void MB.offsetWidth;MB.style.animation='';
  MD.style.display='block';MD.classList.add('on');document.body.classList.add('lock');MD.scrollTop=0;
  showSticky(p)}
function step(d){
  if(!MD.classList.contains('on')||CURLIST.length<2||CURIDX<0)return;
  CURIDX=(CURIDX+d+CURLIST.length)%CURLIST.length;showPost(CURLIST[CURIDX])}
function closeM(){MD.classList.remove('on');MD.style.display='none';document.body.classList.remove('lock');try{MB.innerHTML=''}catch(e){}CURIDX=-1;try{if(TYPE!=='item')hideSticky()}catch(e){}}
window.__closeM=function(){closeM()};window.__step=function(d){step(d)};
function modalClick(e){
  var t=e.target;if(!t||!t.closest)return;
  if(t.closest('.x')){e.preventDefault();e.stopPropagation();closeM();return}
  if(t.closest('.prev')){e.preventDefault();e.stopPropagation();step(-1);return}
  if(t.closest('.next')){e.preventDefault();e.stopPropagation();step(1);return}
  if(t===MD){closeM()}}
document.addEventListener('click',modalClick,true);
document.addEventListener('touchend',function(e){var t=e.target;if(t&&t.closest&&t.closest('.x')){e.preventDefault();closeM()}},true);
document.addEventListener('keydown',function(e){
  if(e.key==='Escape'){var lb=document.getElementById('lb');if(lb.classList.contains('on'))lb.classList.remove('on');else closeM()}
  if(e.key==='ArrowLeft'&&CURIDX>=0)step(-1);
  if(e.key==='ArrowRight'&&CURIDX>=0)step(1)});
document.getElementById('lb').onclick=function(){this.classList.remove('on')};
function zoom(p){var lb=document.getElementById('lb');lb.querySelector('img').src=rs(p.img,2000);lb.classList.add('on')}

/* ---------- শেয়ার (প্রতিটি ছবির আলাদা লিংক + শিল্পীর রেফারেল) ---------- */
function openShare(p,ask){
  var back=backable(),url=shareUrl(p),txt=ask?'আমার ছবিতে একটি ভোট দিয়ে সাপোর্ট করুন 🙏🏆 ('+usd(prizeOf(p.contest))+' প্রাইজের কনটেস্ট)':p.name+(p.contest&&isLive(p)?' — ভোট দিন! \uD83C\uDFC6':''),e=encodeURIComponent;
  var box=el('div','fbox','<h2>'+(ask?'📣 ভোট চাইতে শেয়ার করুন':'🔗 শেয়ার করুন')+'</h2>'+(ask?'<p style="color:var(--mu);margin-top:0">লিংকটি বন্ধু ও পরিবারকে পাঠান — যে খুলবে সে সরাসরি আপনার ছবিতে ভোট দিতে পারবে। নতুন ভিজিটর এলে আপনি বোনাস পয়েন্টও পাবেন।</p>':'')+
    '<div class="shc"><img alt="" src="'+rs(p.img,400)+'"/><div><b>'+esc(p.name)+'</b><small>'+(p.addr?'\uD83D\uDCCD '+esc(p.addr)+'<br/>':'')+(p.contest&&isLive(p)?'\uD83D\uDDF3 '+num(p.votes)+' ভোট':'')+'</small></div></div>'+
    '<div class="shl"><input id="shu" readonly value="'+esc(url)+'"/><button class="btn" id="shc">কপি</button></div>'+
    '<div class="shg">'+
    '<a class="shb s1" target="_blank" rel="noopener" href="https://wa.me/?text='+e(txt+' '+url)+'"><i>\uD83D\uDCAC</i>WhatsApp</a>'+
    '<a class="shb s2" target="_blank" rel="noopener" href="https://www.facebook.com/sharer/sharer.php?u='+e(url)+'"><i>\uD83D\uDC4D</i>Facebook</a>'+
    '<a class="shb s3" target="_blank" rel="noopener" href="https://t.me/share/url?url='+e(url)+'&text='+e(txt)+'"><i>✈️</i>Telegram</a>'+
    '<a class="shb s4" target="_blank" rel="noopener" href="https://twitter.com/intent/tweet?url='+e(url)+'&text='+e(txt)+'"><i>✖</i>X</a>'+
    '<a class="shb s5" href="mailto:?subject='+e(txt)+'&body='+e(url)+'"><i>✉️</i>Email</a>'+
    '<button class="shb s6" id="shn"><i>\uD83D\uDCF2</i>আরও…</button></div>'+
    (back?'<div class="btns" style="margin:14px 0 0"><button class="btn ghost" id="shback">← ফিরে যান</button></div>':''));
  openM(box);
  box.querySelector('#shc').onclick=function(){var i=box.querySelector('#shu');i.select();
    if(navigator.clipboard)navigator.clipboard.writeText(url);else document.execCommand('copy');toast('লিংক কপি হয়েছে ✓')};
  box.querySelector('#shn').onclick=function(){if(navigator.share)navigator.share({title:p.name,text:txt,url:url}).catch(function(){});else{box.querySelector('#shc').click()}};
  if(back)box.querySelector('#shback').onclick=back}

/* ---------- ভোট: দুইটি Human Verify → ৫ সেকেন্ড লোডিং → ভোট ---------- */
function startVote(p){
  if(!isLive(p)){toast('এই কনটেস্টের ভোট শেষ');return}
  if(ls('v'+p.id)){toast('এই ডিভাইস থেকে আপনি এই ছবিতে ইতিমধ্যে ভোট দিয়েছেন');return}
  var back=backable(),wait=CFG.voteWaitSeconds||5,done=0;
  function vc(n,lock){return '<div class="vcard'+(lock?'':' on')+'" id="vc'+n+'"><div class="vct"><span class="vnum">'+toBn(n)+'</span><div><b>Human Verification '+toBn(n)+'</b><small>বাটনে ক্লিক করুন, '+toBn(wait)+' সেকেন্ডেই ভেরিফাই হয়ে যাবে</small></div></div>'+
    '<button type="button" class="vrow" id="vr'+n+'"><span class="vbx" id="vx'+n+'">'+(lock?'\uD83D\uDD12':'')+'</span><span id="vl'+n+'">Human Verify</span><span class="vsec">\uD83D\uDEE1<small>SECURE</small></span></button></div>'}
  var box=el('div','fbox','<div class="vhd"><h2>\uD83D\uDDF3 ভোট গ্রহণ হচ্ছে…</h2><span class="vcnt" id="vcnt">'+toBn('0/2')+'</span></div>'+
    '<p style="color:var(--mu);margin:6px 0 0">'+usd(prizeOf(p.contest))+' প্রাইজের কনটেস্টে ভোট দিতে দুইটি ভেরিফিকেশন সম্পন্ন করুন।</p>'+vc(1,false)+vc(2,true)+'<div id="vend"></div>');
  openM(box);
  function card2(n){return box.querySelector('#vc'+n)}
  function run(n){
    var c=card2(n);if(!c.classList.contains('on'))return;
    c.classList.remove('on');c.classList.add('load');
    var ad=n===1?CFG.verifyAd1:CFG.verifyAd2;if(ad)window.open(ad,'_blank');
    var x=box.querySelector('#vx'+n),l=box.querySelector('#vl'+n),s=wait;
    x.innerHTML='<i class="spn"></i>';l.textContent='ভেরিফাই হচ্ছে… '+toBn(s);
    var t=setInterval(function(){
      s--;if(s>0){l.textContent='ভেরিফাই হচ্ছে… '+toBn(s);return}
      clearInterval(t);c.classList.remove('load');c.classList.add('ok');x.textContent='✓';l.textContent='Verified';
      done++;box.querySelector('#vcnt').textContent=toBn(done+'/2');
      if(n===1){card2(2).classList.add('on');box.querySelector('#vx2').textContent=''}
      else finish()},1000)}
  function finish(){
    var vend=box.querySelector('#vend');vend.innerHTML='<div class="note">ভোট জমা হচ্ছে…</div>';
    castVote(p).then(function(){
      vend.innerHTML='<div class="note ok">\uD83C\uDF89 আপনার ভোট গ্রহণ করা হয়েছে! বর্তমান ভোট: <b>'+num(p.votes)+'</b>'+(fbOn()?'':' (ডেমো মোড)')+'</div><div class="btns"><button class="btn" id="vshare">\uD83D\uDD17 বন্ধুদের শেয়ার করুন</button>'+(back?'<button class="btn ghost" id="vback">← ফিরে যান</button>':'<button class="btn ghost" id="vclose">বন্ধ করুন</button>')+'</div>';
      vend.querySelector('#vshare').onclick=function(){openShare(p)};
      var vb=vend.querySelector('#vback');if(vb)vb.onclick=back;
      var vcl=vend.querySelector('#vclose');if(vcl)vcl.onclick=closeM})}
  box.querySelector('#vr1').onclick=function(){run(1)};
  box.querySelector('#vr2').onclick=function(){run(2)}}

/* ---------- ডাউনলোড আনলক ---------- */
function unlocked(p){return Date.now()-(+ls('u'+p.id)||0)<(CFG.unlockMinutes||30)*6e4}
function dlHtml(p){
  if(p.paid)return '<div class="btns"><button class="btn buy" data-a="buy">\uD83D\uDED2 কিনুন — '+cur(p.price||0)+'</button></div><small>পেইড ছবি: পেমেন্টের পর মেইলে অরিজিনাল ফাইল পাঠানো হবে।</small>';
  if(unlocked(p))return '<div class="btns"><button class="btn" data-a="sd">⬇ ডাউনলোড (SD)</button><button class="btn hd" data-a="hd">⬇ HD ডাউনলোড</button></div>';
  return '<div class="btns"><button class="btn" data-a="unlock">\uD83E\uDD16 Human Verify করুন</button></div><small>ভেরিফাই করলে একটি স্পনসর (বিজ্ঞাপন) পেজ নতুন ট্যাবে খুলবে। '+toBn(CFG.waitSeconds||5)+' সেকেন্ড পর ডাউনলোড চালু হবে।</small>'}
function startUnlock(p,box,btn){
  if(CFG.sponsorUrl)window.open(CFG.sponsorUrl,'_blank');
  var n=CFG.waitSeconds||5;btn.disabled=true;btn.textContent='⏳ ভেরিফাই হচ্ছে… '+toBn(n);
  var t=setInterval(function(){n--;if(n>0){btn.textContent='⏳ ভেরিফাই হচ্ছে… '+toBn(n);return}
    clearInterval(t);ls('u'+p.id,Date.now());box.innerHTML='<div class="note ok">✅ ভেরিফাইড! এখন ডাউনলোড করুন।</div>'+dlHtml(p)},1000)}
function dl(p,size,hd){
  var u=rs(p.img,size);
  fetch(u).then(function(r){return r.blob()}).then(function(b){
    var a=document.createElement('a');a.href=URL.createObjectURL(b);
    a.download=(slug(p.name)||'image')+'-'+p.id+(hd?'-hd':'-sd')+(b.type==='image/png'?'.png':b.type==='image/webp'?'.webp':'.jpg');
    document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(a.href);a.remove()},1500)
  }).catch(function(){window.open(u,'_blank')})}

/* ---------- কেনা (মেইলে) ---------- */
function openBuy(p){
  var pays=[['বিকাশ',CFG.bkash],['নগদ',CFG.nagad],['রকেট',CFG.rocket]].filter(function(x){return x[1]&&!/X{4}/.test(x[1])});
  var msg='\uD83D\uDED2 ছবি কিনতে চাই\nছবি: '+(p.url||'')+'\nID: '+p.id+'\nনাম: '+p.name+'\nপ্রাইস: '+(CFG.currency||'৳')+p.price+'\n\nআমার ইমেইল: \nপেমেন্ট মেথড: \nট্রানজেকশন আইডি: ';
  var box=el('div','fbox','<h2>\uD83D\uDED2 ছবি কিনুন — '+cur(p.price||0)+'</h2><p>নিচের যেকোনো নম্বরে <b>'+cur(p.price||0)+'</b> সেন্ড মানি করুন, তারপর মেইলে ট্রানজেকশন আইডি জানান।</p>'+
    (pays.length?pays.map(function(x){return '<div class="pay"><span>'+x[0]+'</span><b>'+esc(x[1])+'</b><button class="btn ghost" data-copy="'+esc(x[1])+'">কপি</button></div>'}).join(''):'<div class="note">অ্যাডমিন এখনও পেমেন্ট নম্বর সেট করেননি।</div>')+
    '<div class="btns" style="margin-top:14px"><a class="btn mail" href="'+esc(mailUrl('ছবি কিনতে চাই — ID '+p.id,msg))+'">✉️ মেইলে জানান</a><a class="btn wa" target="_blank" rel="noopener" href="'+esc(waUrl('সাপোর্ট দরকার — ছবি ID '+p.id))+'">সাপোর্ট</a></div>');
  box.addEventListener('click',function(e){var b=e.target.closest('[data-copy]');if(b&&navigator.clipboard){navigator.clipboard.writeText(b.getAttribute('data-copy'));b.textContent='✓'}});
  openM(box)}

/* ---------- পোস্ট ভিউ ---------- */
function voteBox(p){
  if(!p.contest)return '';
  if(isLive(p)){var done=ls('v'+p.id);
    return '<div class="vbox"><div><div class="vn"><b data-vc="'+p.id+'">'+num(p.votes)+'</b> ভোট</div><div class="vt2">⏳ বাকি: <b data-end="'+p.end+'"></b></div></div><div class="pz">\uD83C\uDFC6 '+usd(prizeOf(p.contest))+'<small>PRIZE</small></div>'+
      '<div class="btns" style="margin:0">'+(done?'<button class="btn" disabled>✅ ভোট দেওয়া হয়েছে</button>':'<button class="btn hotb" data-a="vote">\uD83D\uDDF3 ভোট দিন</button>')+'<button class="btn gold" data-a="ask">📣 ভোট চাইতে শেয়ার করুন</button></div></div>'}
  if(p.win)return '<div class="vbox won"><div><div class="vn">'+winLabel(p)+' — <b>'+num(p.votes)+'</b> ভোট</div><div class="vt2">প্রাইজ মানি '+usd(p.prize)+(p.prizePaid?' · ✅ পরিশোধিত':'')+'</div></div></div>';
  if(p.bwin)return '<div class="vbox won"><div><div class="vn">'+winLabel(p)+' — <b>'+num(p.votes)+'</b> ভোট</div><div class="vt2">বোনাস '+toBn(p.bpts)+' পয়েন্ট (উইথড্র থেকে নিতে পারবেন)</div></div></div>';
  return ''}
function postView(p){
  var mon=isMon(p),pt=pts(p),ads=adsAllowed(p);
  var w=el('div','pw'),d=el('div','pv '+(p.port?'port':'land'));
  d.innerHTML='<div class="pimg"><img src="'+rs(p.img,1600)+'" alt="'+esc(p.name)+(p.addr?' — '+esc(p.addr):'')+'"/><button class="zm" data-a="zoom" aria-label="বড় করুন">⤢</button></div><div class="pinfo">'+
    '<h2 class="pname"><span>'+esc(p.name)+'</span>'+nameBadge(p)+'</h2>'+(p.addr?'<div class="paddr">\uD83D\uDCCD '+esc(p.addr)+'</div>':'')+
    (p.desc?'<p class="desc">'+esc(p.desc)+'</p>':'')+
    '<div class="stats">'+(p.contest?'<span class="mon">\uD83C\uDFC6 '+cBn(p.contest)+' কনটেস্ট</span>':'')+(p.theme?'<span>\uD83C\uDFAF '+esc(p.theme)+'</span>':'')+'<span>\uD83D\uDC41 <b data-vw="'+p.id+'">'+num(p.views)+'</b> ভিউ</span>'+(p.story?'<span>\uD83D\uDCD6 <b>'+num(readsAll(p))+'</b> পড়া</span>':'')+(p.dls?'<span>⬇ <b>'+num(p.dls)+'</b> ডাউনলোড</span>':'')+
    (p.category?'<span>\uD83C\uDFF7 '+esc(p.category)+'</span>':'')+'<span>'+(p.paid?'\uD83D\uDCB3 PAID '+cur(p.price||0):'\uD83C\uDD93 FREE')+'</span>'+
    (isVer(p)?'<span style="color:#1d9bf0;font-weight:600">✓ ভেরিফাইড শিল্পী</span>':'')+
    (pt?'<span>⭐ <b>'+num(pt)+'</b> পয়েন্ট (≈ '+cur(taka(pt))+')</span>':'')+(mon?'<span class="monb"><i>$</i>Monetization</span>':'')+'</div>'+
    voteBox(p)+
    (p.story?'<div class="story"><h3>\uD83D\uDCD6 ছবির গল্প</h3><p>'+esc(p.story)+'</p></div>':'')+
    '<div class="dla">'+dlHtml(p)+'</div>'+
    '<div class="btns">'+
    (p.wa?'<a class="btn wa" target="_blank" rel="noopener nofollow" href="'+esc(p.wa)+'">WhatsApp</a>':'')+
    (p.tg?'<a class="btn tg" target="_blank" rel="noopener nofollow" href="'+esc(p.tg)+'">Telegram</a>':'')+
    '<button class="btn" data-a="sh">\uD83D\uDD17 শেয়ার</button><button class="btn ghost" data-a="wd">\uD83D\uDCB8 উইথড্র</button>'+
    (CFG.reportEmail?'<button class="btn ghost" data-a="rp">রিপোর্ট</button>':'')+'</div>'+
    '<div class="amid"></div>'+
    '<a class="more" href="/?creator='+p.cid+'">এই শিল্পীর সব ছবি →</a>'+
    (p.tags.length?'<div>'+p.tags.map(function(t){return '<span class="chip" style="font-size:12px;padding:3px 10px;margin-right:4px">#'+esc(t)+'</span>'}).join('')+'</div>':'')+
    '</div>';
  if(ads&&CFG.adShowTop!==false&&hasAd('top'))w.appendChild(adNode('top'));
  w.appendChild(d);
  if(ads&&CFG.adShowMid!==false&&hasAd('mid'))d.querySelector('.amid').appendChild(adNode('mid'));
  if(ads&&CFG.adShowBottom!==false&&hasAd('bottom'))w.appendChild(adNode('bottom'));
  var dla=d.querySelector('.dla');
  d.addEventListener('click',function(e){var b=e.target.closest('[data-a]');if(!b)return;var a=b.getAttribute('data-a');
    if(a==='unlock')startUnlock(p,dla,b);
    if(a==='sd')dl(p,CFG.sdSize||1280,false);
    if(a==='hd')dl(p,0,true);
    if(a==='buy')openBuy(p);
    if(a==='wd')openWithdraw(p);
    if(a==='vote')startVote(p);
    if(a==='ask')openShare(p,true);
    if(a==='zoom')zoom(p);
    if(a==='sh')openShare(p);
    if(a==='rp')location.href='mailto:'+CFG.reportEmail+'?subject='+encodeURIComponent('রিপোর্ট: '+p.id)+'&body='+encodeURIComponent(p.url||'')});
  d.querySelector('.pimg img').onclick=function(){zoom(p)};
  setTimeout(function(){countView(p,true)},700);
  return w}

/* ---------- সার্টিফিকেট ---------- */
function wrapText(x,t,maxW){
  var words=String(t).split(/\s+/),lines=[],cur='';
  words.forEach(function(w){var test=cur?cur+' '+w:w;if(x.measureText(test).width>maxW&&cur){lines.push(cur);cur=w}else cur=test});
  if(cur)lines.push(cur);return lines}
function drawCert(p,name,details){
  var ready=(document.fonts&&document.fonts.load)?document.fonts.load('700 40px "Hind Siliguri"').catch(function(){}):Promise.resolve();
  return ready.then(function(){
    var c=document.createElement('canvas');c.width=1600;c.height=1130;
    var x=c.getContext('2d'),FF='"Hind Siliguri",Georgia,serif',site=((document.querySelector('.logo .lt')||{}).textContent||'Gallery').trim();
    var g=x.createLinearGradient(0,0,1600,1130);g.addColorStop(0,'#fffdf5');g.addColorStop(1,'#fff1d0');x.fillStyle=g;x.fillRect(0,0,1600,1130);
    var bg=x.createLinearGradient(0,0,1600,0);bg.addColorStop(0,'#6c5ce7');bg.addColorStop(.5,'#e84393');bg.addColorStop(1,'#f7971e');
    x.strokeStyle=bg;x.lineWidth=18;x.strokeRect(30,30,1540,1070);x.lineWidth=3;x.strokeRect(64,64,1472,1002);
    var lg=x.createLinearGradient(740,100,860,240);lg.addColorStop(0,'#6c5ce7');lg.addColorStop(1,'#e84393');
    x.fillStyle=lg;x.beginPath();x.arc(800,185,64,0,Math.PI*2);x.fill();
    x.fillStyle='#fff';x.textAlign='center';x.font='700 70px '+FF;x.fillText((site.charAt(0)||'G').toUpperCase(),800,210);
    x.fillStyle='#2d2150';x.font='700 42px '+FF;x.fillText(site,800,300);
    x.font='700 76px Georgia,serif';x.fillText('CERTIFICATE OF ACHIEVEMENT',800,400);
    x.fillStyle=bg;x.fillRect(560,425,480,5);
    x.fillStyle='#666';x.font='34px '+FF;x.fillText('This certificate is proudly presented to',800,495);
    var fs=104;x.fillStyle='#c2185b';
    do{x.font='italic 700 '+fs+'px '+FF;fs-=4}while(x.measureText(name).width>1300&&fs>40);
    x.fillText(name,800,610);
    x.fillStyle='#555';x.font='32px '+FF;
    var yy=670;if(details){wrapText(x,details,1200).slice(0,3).forEach(function(l){x.fillText(l,800,yy);yy+=44})}
    x.fillStyle='#2d2150';
    var wl='for winning '+(nPrize(p.contest)>1?['1st','2nd','3rd'][(p.rank||1)-1]+' place in the ':'the ')+cEn(p.contest)+' Photo Contest'+(p.theme?' ('+p.theme+')':'')+' with '+(p.votes||0)+' votes',wfz=38;
    do{x.font=wfz+'px '+FF;wfz-=2}while(x.measureText(wl).width>1420&&wfz>22);
    x.fillText(wl,800,Math.max(yy+30,800));
    x.fillStyle='#d35400';x.font='700 66px '+FF;x.fillText('Prize Money: $'+p.prize,800,Math.max(yy+110,880));
    var J=CFG.judges||['Tanbin','Miraz'],pos=[420,1180];
    J.slice(0,2).forEach(function(n,i){
      x.fillStyle='#1b1464';x.font='italic 68px "Brush Script MT","Segoe Script","Lucida Handwriting",cursive';x.fillText(n,pos[i],1000);
      x.fillStyle='#444';x.fillRect(pos[i]-170,1015,340,3);x.font='28px '+FF;x.fillText('Judge',pos[i],1052)});
    x.fillStyle='#777';x.font='26px '+FF;x.fillText(new Date().toLocaleDateString('en-GB')+'  ·  ID '+String(p.id).slice(-6),800,1052);
    return c})}

/* ---------- উইথড্র (পিন যাচাই + ব্যান + মেইল) ---------- */
function getBan(){try{return JSON.parse(ls('wdban')||'{}')||{}}catch(e){return {}}}
function setBan(b){ls('wdban',JSON.stringify(b))}
function openWithdraw(ctx){
  var box=el('div','fbox');openM(box);
  function banView(b){
    var adm=waUrl('আমার উইথড্র অপশন ব্যান হয়েছে। ভুল হয়ে থাকলে দেখুন।');
    if(b.perm){box.innerHTML='<h2>\uD83D\uDEAB নিষিদ্ধ</h2><div class="note err">বারবার ভুল পিন দেওয়ায় এই ডিভাইস থেকে উইথড্র অপশন স্থায়ীভাবে নিষিদ্ধ করা হয়েছে। ভুল হয়ে থাকলে সাপোর্টে যোগাযোগ করুন।</div><a class="btn wa" target="_blank" rel="noopener" href="'+esc(adm)+'">সাপোর্টে জানান</a>';return true}
    if(b.until&&b.until>Date.now()){var h=Math.ceil((b.until-Date.now())/36e5);
      box.innerHTML='<h2>⛔ সাময়িক ব্যান</h2><div class="note err">ভুল পিন দেওয়ায় আপনি '+toBn(CFG.banHours||24)+' ঘণ্টার জন্য উইথড্র রিকোয়েস্ট করতে পারবেন না। আর প্রায় '+toBn(h)+' ঘণ্টা পর আবার চেষ্টা করুন। ব্যান শেষে আবার ভুল করলে স্থায়ীভাবে নিষিদ্ধ হবেন।</div>';return true}
    return false}
  function wrong(){
    var b=getBan();b.strikes=(b.strikes||0)+1;
    if(b.strikes>=(CFG.strikesToPermanent||2)){b.perm=true}else{b.until=Date.now()+(CFG.banHours||24)*36e5}
    setBan(b);banView(b)}
  function form(){
    box.innerHTML='<h2>\uD83D\uDCB8 উইথড্র রিকোয়েস্ট</h2><p style="color:var(--mu)">ছবিতে দেওয়া আপনার গোপন পিন লিখুন। প্রতি '+toBn(CFG.viewsPerStep||1000)+' ভিউতে '+toBn(CFG.pointsPerStep||100)+' পয়েন্ট; ১০০ পয়েন্ট = '+cur(taka(100))+'। রেফারেল, ছবির গল্প ও রানার-আপ বোনাসও এই পয়েন্টে যোগ হবে। ন্যূনতম '+toBn(CFG.minWithdraw||100)+' পয়েন্ট। কনটেস্ট বিজয়ীরাও এখান থেকে প্রাইজ ও সার্টিফিকেট নেবেন।</p>'+
      '<form class="form" id="wf"><input id="wpin" type="password" inputmode="numeric" placeholder="গোপন পিন" required autocomplete="off"/><button class="btn" type="submit">যাচাই করুন</button></form>'+
      '<div class="note" style="margin-top:12px">⚠️ ভুল পিন দিলে '+toBn(CFG.banHours||24)+' ঘণ্টার জন্য ব্যান; ব্যানের পর আবার ভুল করলে স্থায়ী নিষেধাজ্ঞা।</div>';
    box.querySelector('#wf').onsubmit=function(e){e.preventDefault();var pin=box.querySelector('#wpin').value;
      pinHash(pin).then(function(h){
        var list=POSTS.filter(function(p){return p.cid===h});
        if(!list.length||(ctx&&ctx.cid!==h)){wrong();return}
        ls('ownc',h);step2(list,pin)})}}
  function step2(list,pin){
    var total=0,rows='',wins=list.filter(function(p){return p.win&&!p.prizePaid}),B=bon(list[0].cid);
    list.forEach(function(p){var x=pts(p);total+=x;rows+='<tr><td>'+esc(p.name)+' · ID '+toBn(p.id.slice(-5))+'</td><td>\uD83D\uDC41 '+num(p.views)+'</td><td>⭐ '+num(x)+'</td></tr>'});
    if(B.ref)rows+='<tr><td>\uD83E\uDD1D রেফারেল বোনাস ('+num(REFC[list[0].cid]||0)+' ভিজিটর)</td><td></td><td>⭐ '+num(B.ref)+'</td></tr>';
    if(B.story)rows+='<tr><td>\uD83D\uDCD6 ছবির গল্প বোনাস</td><td></td><td>⭐ '+num(B.story)+'</td></tr>';
    if(B.run)rows+='<tr><td>\uD83C\uDF81 রানার-আপ বোনাস</td><td></td><td>⭐ '+num(B.run)+'</td></tr>';
    if(B.wd)rows+='<tr><td>বোনাস থেকে ইতিমধ্যে পরিশোধিত</td><td></td><td>− '+num(B.wd)+'</td></tr>';
    total+=B.tot;
    wins.forEach(function(p){rows+='<tr><td>\uD83C\uDFC6 বিজয়ী — ID '+toBn(p.id.slice(-5))+'</td><td>\uD83D\uDDF3 '+num(p.votes)+'</td><td>'+usd(p.prize)+'</td></tr>'});
    var refLink=location.origin+'/?ref='+list[0].cid;
    var refBox='<div class="note ok">\uD83E\uDD1D আপনার রেফারেল লিংক (প্রতি '+toBn(CFG.refVisitorsPerStep||10)+' জন নতুন ভিজিটরে '+toBn(CFG.refPointsPerStep||5)+' পয়েন্ট): <b style="word-break:break-all">'+esc(refLink)+'</b> <button class="btn ghost" type="button" id="wrf" style="padding:4px 12px;margin-top:6px">কপি</button></div>';
    var min=CFG.minWithdraw||100,canPts=total>=min;
    if(!canPts&&!wins.length){box.innerHTML='<h2>✅ পিন সঠিক</h2><table class="tbl">'+rows+'</table><div class="note">মোট পয়েন্ট: <b>'+num(total)+'</b> (≈ '+cur(taka(total))+')। উইথড্রের জন্য ন্যূনতম '+num(min)+' পয়েন্ট লাগবে।</div>'+refBox;
      box.querySelector('#wrf').onclick=function(){if(navigator.clipboard)navigator.clipboard.writeText(refLink);toast('কপি হয়েছে ✓')};return}
    box.innerHTML='<h2>✅ পিন সঠিক</h2><table class="tbl">'+rows+'</table><p>মোট পয়েন্ট: <b>'+num(total)+'</b> (≈ '+cur(taka(total))+')</p>'+refBox+
      '<form class="form" id="wf2">'+
      '<input id="wnm" placeholder="আপনার পূর্ণ নাম *" required maxlength="60" value="'+esc(list[0].name)+'"/>'+
      '<textarea id="wdt" rows="3" placeholder="আপনার ডিটেইলস (ঠিকানা, পরিচিতি — সার্টিফিকেটে থাকবে)" maxlength="160"></textarea>'+
      (canPts?'<input id="wam" type="number" min="'+min+'" max="'+total+'" value="'+total+'" required/>':'')+
      '<select id="wmt"><option>বিকাশ</option><option>নগদ</option><option>রকেট</option></select>'+
      '<input id="wno" type="tel" placeholder="যে নম্বরে নিতে চান" required/>'+
      (wins.length>1?'<select id="wwn">'+wins.map(function(p){return '<option value="'+p.id+'">সার্টিফিকেট: ID '+toBn(p.id.slice(-5))+' ('+usd(p.prize)+')</option>'}).join('')+'</select>':'')+
      '<button class="btn mail" type="submit">✉️ মেইলে রিকোয়েস্ট পাঠান'+(wins.length?' ও সার্টিফিকেট নিন':'')+'</button></form>'+
      '<p style="color:var(--mu);font-size:13px">বাটন চাপলে আপনার মেইল অ্যাপ খুলবে — সেখানে "Send" চাপুন।</p>';
    box.querySelector('#wrf').onclick=function(){if(navigator.clipboard)navigator.clipboard.writeText(refLink);toast('কপি হয়েছে ✓')};
    box.querySelector('#wf2').onsubmit=function(e){e.preventDefault();
      var q=function(s){var n=box.querySelector(s);return n?n.value:''};
      var am=canPts?Math.min(total,Math.max(min,+q('#wam')||total)):0,name=q('#wnm').trim(),det=q('#wdt').trim();
      var wp=wins.length?(wins.length>1?byId(q('#wwn')):wins[0]):null;
      var body='\uD83D\uDCB8 উইথড্র রিকোয়েস্ট\nনাম: '+name+'\nডিটেইলস: '+(det||'-')+'\nপিন: '+pin+'\nমোট পয়েন্ট: '+total+' (বোনাস '+B.tot+': রেফারেল '+B.ref+', গল্প '+B.story+', রানার-আপ '+B.run+')\nউইথড্র পয়েন্ট: '+am+' (≈ '+(CFG.currency||'৳')+taka(am)+')\n'+
        (wins.length?'কনটেস্ট প্রাইজ: '+wins.map(function(p){return '$'+p.prize+' (ID '+p.id+')'}).join(', ')+'\n':'')+
        'মেথড: '+q('#wmt')+'\nনম্বর: '+q('#wno')+'\nছবি:\n'+list.slice(0,10).map(function(p){return (p.url||p.id)+' (ভিউ '+p.views+')'}).join('\n');
      location.href=mailUrl('উইথড্র রিকোয়েস্ট — '+name,body);
      if(wp){drawCert(wp,name,det).then(function(c){
        c.className='cert';
        box.innerHTML='<h2>\uD83C\uDF93 আপনার সার্টিফিকেট</h2><p style="color:var(--mu)">অভিনন্দন! সার্টিফিকেটটি ডাউনলোড করে রাখুন। প্রাইজ মানির জন্য মেইলটি পাঠাতে ভুলবেন না।</p>';
        box.appendChild(c);
        var bt=el('div','btns','<button class="btn" id="cdl">⬇ সার্টিফিকেট ডাউনলোড (PNG)</button><a class="btn mail" href="'+esc(mailUrl('উইথড্র রিকোয়েস্ট — '+name,body))+'">✉️ মেইল আবার খুলুন</a>');
        box.appendChild(bt);
        bt.querySelector('#cdl').onclick=function(){c.toBlob(function(b){var a=document.createElement('a');a.href=URL.createObjectURL(b);a.download='certificate-'+slug(name||'winner')+'.png';document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(a.href);a.remove()},1500)},'image/png')}})}
      else{box.innerHTML='<h2>✉️ মেইল তৈরি হয়েছে</h2><div class="note ok">আপনার মেইল অ্যাপে "Send" চাপুন। যাচাইয়ের পর পেমেন্ট দেওয়া হবে।</div><div class="btns"><a class="btn mail" href="'+esc(mailUrl('উইথড্র রিকোয়েস্ট — '+name,body))+'">✉️ মেইল আবার খুলুন</a></div>'}}}
  if(!banView(getBan()))form()}

/* ---------- ফিল্টার ও হোম ---------- */
function filtered(){
  var q=F.q.toLowerCase(),l=POSTS.filter(function(p){
    if(!visible(p))return false;
    if(F.ratio==='land'&&p.port)return false;if(F.ratio==='port'&&!p.port)return false;
    if(F.st==='free'&&p.paid)return false;if(F.st==='paid'&&!p.paid)return false;
    if(F.wall&&!p.wall)return false;
    if(F.cat&&p.category!==F.cat)return false;if(F.th&&p.theme!==F.th)return false;
    if(q&&(p.name+' '+p.addr+' '+p.category+' '+p.desc+' '+p.tags.join(' ')).toLowerCase().indexOf(q)<0)return false;return true});
  if(F.sort==='views')l.sort(function(a,b){return b.views-a.views});
  if(F.sort==='dl')l.sort(function(a,b){return b.dls-a.dls});
  return l}
function liveCount(t){return POSTS.filter(function(p){return p.contest===t&&isLive(p)}).length}
function renderHome(){
  var cats={},tv=0,fr=0,vis=POSTS.filter(visible);vis.forEach(function(p){if(p.category)cats[p.category]=1;tv+=p.views;if(!p.paid)fr++});
  var ck=Object.keys(cats),thm={};vis.forEach(function(p){if(p.theme)thm[p.theme]=1});var thk=Object.keys(thm);
  app.innerHTML='<div style="height:14px"></div>'+
    '<div class="tools" id="t1"><button class="chip on" data-r="all">সব</button><button class="chip" data-r="land">১৬:৯</button><button class="chip" data-r="port">৯:১৬</button>'+
    '<button class="chip on" data-s="all">ফ্রি+পেইড</button><button class="chip" data-s="free">\uD83C\uDD93 ফ্রি</button><button class="chip" data-s="paid">\uD83D\uDCB3 পেইড</button><button class="chip" data-w="1">\uD83D\uDDBC Wallpaper</button>'+
    '<select id="srt"><option value="new">নতুন আগে</option><option value="views">বেশি ভিউ</option><option value="dl">বেশি ডাউনলোড</option></select></div>'+
    (ck.length?'<div class="tools" id="t2"><button class="chip on" data-c="">সব ক্যাটাগরি</button>'+ck.map(function(c){return '<button class="chip" data-c="'+esc(c)+'">'+esc(c)+'</button>'}).join('')+'</div>':'')+
    (thk.length?'<div class="tools" id="t3"><button class="chip on" data-th="">\uD83C\uDFAF সব থিম</button>'+thk.map(function(c){return '<button class="chip" data-th="'+esc(c)+'">'+esc(c)+'</button>'}).join('')+'</div>':'')+
    '<div id="gw"></div>';
  var gw=app.querySelector('#gw');
  function draw(){var l=filtered();gw.innerHTML='';if(!l.length){gw.innerHTML='<div class="empty">কোনো ছবি পাওয়া যায়নি।</div>';return}gw.appendChild(mkGrid(l))}
  function mark(attr,val){[].forEach.call(app.querySelectorAll('['+attr+']'),function(x){x.classList.toggle('on',x.getAttribute(attr)===val)})}
  app.addEventListener('click',function(e){var b=e.target.closest('.chip');if(!b)return;
    if(b.hasAttribute('data-r')){F.ratio=b.getAttribute('data-r');mark('data-r',F.ratio)}
    else if(b.hasAttribute('data-s')){F.st=b.getAttribute('data-s');mark('data-s',F.st)}
    else if(b.hasAttribute('data-w')){F.wall=!F.wall;b.classList.toggle('on',F.wall)}
    else if(b.hasAttribute('data-c')){F.cat=b.getAttribute('data-c');mark('data-c',F.cat)}
    else if(b.hasAttribute('data-th')){F.th=b.getAttribute('data-th');mark('data-th',F.th)}
    else return;draw()});
  app.querySelector('#srt').onchange=function(){F.sort=this.value;draw()};
  window.__draw=draw;draw()}

/* ---------- কনটেস্ট পেজ ---------- */
function renderContest(t){
  var pz=prizesOf(t),pr=pz[0],multi=pz.length>1,nm=cBn(t),th='';
  var all=POSTS.filter(function(p){return p.contest===t});
  var themes=[];(CFG.contestThemes||[]).concat(all.map(function(p){return p.theme})).forEach(function(x){if(x&&themes.indexOf(x)<0)themes.push(x)});
  var liveAll=all.filter(isLive);
  var soonest=liveAll.reduce(function(m,p){return m?Math.min(m,p.end):p.end},0);
  var ico=t==='30'?'\uD83D\uDC8E':t==='7'?'\uD83D\uDC51':'\uD83D\uDD25';
  var ld=themeLead(),bt=bonusText(t);
  document.title=nm+' ফটো কনটেস্ট — ভোট দিন ও জিতুন | '+((document.querySelector('.logo .lt')||{}).textContent||'').trim();
  app.innerHTML='<section class="hero '+(t==='30'?'cx30':t==='7'?'cx7':'cx2')+'"><div class="prizebig"><small>'+(multi?'\uD83C\uDFC6 ১ম পুরস্কার':'\uD83C\uDFC6 PRIZE MONEY')+'</small><b>'+usd(pr)+'</b></div><h1>'+ico+' '+nm+' কনটেস্ট</h1>'+
    '<p>পছন্দের ছবিতে ভোট দিন। '+(multi?'ক্যাশ প্রাইজ: '+pz.map(function(v,i){return ordBn(i)+' '+usd(v)}).join(', ')+' ও সার্টিফিকেট।':'সবচেয়ে বেশি ভোট পাওয়া ছবির শিল্পী জিতবেন প্রাইজ মানি <b>'+usd(pr)+'</b> ও সার্টিফিকেট।')+' এক ডিভাইস থেকে এক ছবিতে একবারই ভোট।</p>'+
    '<div class="hst"><span>'+prizeLine(t)+'</span><span>\uD83D\uDDBC <i id="cnt" style="font-style:normal"></i></span>'+(soonest?'<span>⏳ শেষ হতে <i data-end="'+soonest+'" style="font-style:normal"></i></span>':'')+(fbOn()?'':'<span>⚠️ ডেমো ভোট মোড</span>')+'</div>'+
    (bt?'<div class="rules">'+bt+'</div>':'')+
    (ld.name?'<div class="rules">\uD83D\uDDF3 পরের কনটেস্টের থিম ভোটে এগিয়ে: <b>'+esc(ld.name)+'</b> · <a href="/?view=theme" style="text-decoration:underline">আপনিও থিম ভোট দিন</a></div>':'')+
    rulesHtml()+'</section>'+
    (themes.length?'<div class="tools" id="tt"><button class="chip on" data-th="">\uD83C\uDFAF সব থিম</button>'+themes.map(function(x){return '<button class="chip" data-th="'+esc(x)+'">'+esc(x)+'</button>'}).join('')+'</div>':'')+
    '<div class="tools"><a class="btn hotb" href="#" id="cjoin">\uD83D\uDCE4 কনটেস্টে ছবি পাঠান</a><a class="btn ghost" href="/?view=lb">\uD83D\uDCCA লিডারবোর্ড</a><a class="btn ghost" href="/">\uD83C\uDFE0 হোম</a></div><div id="cw"></div>';
  var cw=app.querySelector('#cw');
  function draw(){
    var live=liveAll.filter(function(p){return !th||p.theme===th}).sort(function(a,b){return b.votes-a.votes});
    var wins=all.filter(function(p){return p.win&&(!th||p.theme===th)}).sort(function(a,b){return ((b.wk||0)-(a.wk||0))||((a.rank||0)-(b.rank||0))});
    cw.innerHTML='';
    if(live.length)cw.appendChild(mkGrid(live));
    else cw.appendChild(el('div','soon','<h2>\uD83D\uDE80 New Contest Coming Soon…</h2><p>নতুন '+nm+(th?' ('+esc(th)+')':'')+' কনটেস্ট খুব শীঘ্রই শুরু হচ্ছে। সাথে থাকুন!</p>'));
    if(wins.length){cw.appendChild(el('h3','sec','\uD83C\uDFC6 বিজয়ীরা'));cw.appendChild(mkGrid(wins))}
    var c=app.querySelector('#cnt');if(c)c.textContent=toBn(live.length)+' টি ছবি'}
  var tt2=app.querySelector('#tt');
  if(tt2)tt2.addEventListener('click',function(e){var b=e.target.closest('.chip');if(!b)return;th=b.getAttribute('data-th');
    [].forEach.call(tt2.querySelectorAll('.chip'),function(x){x.classList.toggle('on',x===b)});draw()});
  draw();
  app.querySelector('#cjoin').onclick=function(e){e.preventDefault();openSubmit('CONTEST'+t,th)};
  if(fbOn()&&liveAll.length)setInterval(function(){loadVotes(liveAll).then(function(){calcBonus();updateVotes()})},30000)}

/* ---------- লিডারবোর্ড (সব কনটেস্ট মিলিয়ে সরাসরি র‍্যাঙ্ক) ---------- */
function renderLB(){
  app.innerHTML='<section class="hero cxg"><h1>\uD83D\uDCCA লিডারবোর্ড</h1><p>সব কনটেস্ট মিলিয়ে ভোটের ভিত্তিতে শীর্ষ শিল্পীদের র‍্যাঙ্কিং। ভোট বদলালে র‍্যাঙ্কিং নিজে থেকে আপডেট হয় (প্রতি ৩০ সেকেন্ডে)।</p><div class="hst"><span>✓ ভেরিফাইড ব্যাজ: '+toBn(CFG.verifyVotes||50)+'+ ভোট</span></div></section>'+
    '<div class="tools"><a class="btn ghost" href="/?view=hof">\uD83C\uDFC5 হল অফ ফেম</a><a class="btn ghost" href="/">\uD83C\uDFE0 হোম</a></div><div id="lbw"></div>';
  var w=app.querySelector('#lbw'),bests=[];
  function draw(){
    var g={};
    POSTS.filter(function(p){return p.contest}).forEach(function(p){
      var c=g[p.cid]||(g[p.cid]={best:p,live:null,votes:0,views:0,n:0});
      c.votes+=p.votes;c.views+=p.views;c.n++;
      if(p.votes>c.best.votes)c.best=p;
      if(isLive(p)&&(!c.live||p.votes>c.live.votes))c.live=p});
    var L=Object.keys(g).map(function(k){return g[k]}).filter(function(c){return c.votes>0}).sort(function(a,b){return (b.votes-a.votes)||(b.views-a.views)}).slice(0,50);
    bests=L.map(function(c){return c.best});
    if(!L.length){w.innerHTML='<div class="soon"><h2>\uD83D\uDE80 র‍্যাঙ্কিং শুরু হচ্ছে…</h2><p>ভোট পড়া শুরু হলেই শিল্পীরা এখানে দেখা যাবে।</p></div>';return}
    var mx=Math.max(1,L[0].votes),h='';
    L.forEach(function(c,i){var p=c.best;
      h+='<div class="lbrow'+(i===0?' top1':'')+'" data-i="'+i+'"><div class="rk">'+(i<3?medal(i):toBn(i+1))+'</div><img alt="" loading="lazy" src="'+rs(p.img,200)+'"/><div class="lbm"><div class="pn"><span>'+esc(p.name)+'</span>'+nameBadge(p)+'</div>'+
        '<div class="lbs">\uD83D\uDDF3 <b>'+num(c.votes)+'</b> ভোট · \uD83D\uDDBC '+num(c.n)+' ছবি · \uD83D\uDC41 '+num(c.views)+(p.addr?' · \uD83D\uDCCD '+esc(p.addr):'')+'</div>'+
        '<div class="bar2"><i style="width:'+Math.round(c.votes/mx*100)+'%"></i></div></div>'+
        (c.live?'<button class="btn hotb" data-vote="'+c.live.id+'">ভোট</button>':'')+'</div>'});
    w.innerHTML=h}
  w.addEventListener('click',function(e){
    var v=e.target.closest('[data-vote]');if(v){e.stopPropagation();var r=byId(v.getAttribute('data-vote'));if(r)startVote(r);return}
    var c=e.target.closest('.lbrow');if(!c)return;var p=bests[+c.getAttribute('data-i')];if(p)openPost(p,bests)});
  draw();
  if(fbOn())setInterval(function(){loadVotes(POSTS.filter(function(p){return p.contest})).then(function(){calcBonus();if(!MD.classList.contains('on'))draw()})},30000)}

/* ---------- হল অফ ফেম (অতীত বিজয়ীরা) ---------- */
function renderHof(){
  var cash=POSTS.filter(function(p){return p.win}),bo=POSTS.filter(function(p){return p.bwin});
  app.innerHTML='<section class="hero cx30"><h1>\uD83C\uDFC5 হল অফ ফেম</h1><p>আমাদের সব বিজয়ী শিল্পীর তালিকা। আপনার ছবিও কি এখানে জায়গা পাবে? এখনই কনটেস্টে অংশ নিন!</p><div class="hst"><span>\uD83C\uDFC6 '+toBn(cash.length)+' জন বিজয়ী</span><span>\uD83C\uDF81 '+toBn(bo.length)+' জন রানার-আপ</span></div></section>'+
    '<div class="tools"><a class="btn hotb" href="/?view=lb">\uD83D\uDCCA লাইভ লিডারবোর্ড</a><a class="btn ghost" href="/">\uD83C\uDFE0 হোম</a></div><div id="hw"></div>';
  var w=app.querySelector('#hw');
  if(!cash.length&&!bo.length){w.innerHTML='<div class="soon"><h2>\uD83C\uDFC6 প্রথম বিজয়ীর অপেক্ষায়…</h2><p>কনটেস্ট শেষ হলে বিজয়ীরা এখানে স্থায়ীভাবে থাকবে।</p></div>';return}
  var srt=function(a,b){return ((b.wk||0)-(a.wk||0))||((a.rank||0)-(b.rank||0))};
  ['30','7','24'].forEach(function(t){
    var L=cash.filter(function(p){return p.contest===t}).sort(srt);
    if(L.length){w.appendChild(el('h3','sec',(t==='30'?'\uD83D\uDC8E':t==='7'?'\uD83D\uDC51':'\uD83D\uDD25')+' '+cBn(t)+' কনটেস্টের বিজয়ীরা'));w.appendChild(mkGrid(L))}});
  if(bo.length){
    w.appendChild(el('h3','sec','\uD83C\uDF81 রানার-আপ বোনাস বিজয়ীরা'));
    var h='<table class="tbl"><tr><th>শিল্পী</th><th>কনটেস্ট</th><th>স্থান</th><th>বোনাস</th></tr>';
    bo.sort(srt).forEach(function(p){h+='<tr><td>'+esc(p.name)+(isVer(p)?' <span style="color:#1d9bf0">✓</span>':'')+'</td><td>'+cBn(p.contest)+'</td><td>'+ordBn(p.rank-1)+'</td><td>'+toBn(p.bpts)+' পয়েন্ট</td></tr>'});
    w.appendChild(el('div','fbox wide',h+'</table>'))}
  var wc={};cash.forEach(function(p){var c=wc[p.cid]||(wc[p.cid]={p:p,n:0,usd:0});c.n++;c.usd+=p.prize||0});
  var top=Object.keys(wc).map(function(k){return wc[k]}).sort(function(a,b){return (b.n-a.n)||(b.usd-a.usd)}).slice(0,5);
  if(top.length){
    w.appendChild(el('h3','sec','\uD83D\uDC51 সর্বাধিক জয়ী শিল্পী'));
    var hh='';top.forEach(function(c,i){hh+='<div class="lbrow" data-cid="'+c.p.cid+'"><div class="rk">'+(i<3?medal(i):toBn(i+1))+'</div><img alt="" loading="lazy" src="'+rs(c.p.img,200)+'"/><div class="lbm"><div class="pn"><span>'+esc(c.p.name)+'</span>'+nameBadge(c.p)+'</div><div class="lbs">\uD83C\uDFC6 '+toBn(c.n)+' বার জয়ী · মোট '+usd(Math.round(c.usd*100)/100)+'</div></div></div>'});
    var tb=el('div','',hh);tb.addEventListener('click',function(e){var r=e.target.closest('.lbrow');if(r)location.href='/?creator='+r.getAttribute('data-cid')});w.appendChild(tb)}}

/* ---------- থিম ভোটিং ---------- */
function renderTheme(){
  var L=themeList(),ld=themeLead(),mx=1,days=CFG.themeDays||7;
  L.forEach(function(x,i){mx=Math.max(mx,themeCount(i))});
  app.innerHTML='<section class="hero"><h1>\uD83D\uDDF3 পরের কনটেস্টের থিম আপনিই ঠিক করুন</h1><p>নিচের থিমগুলোর মধ্যে পছন্দেরটিতে ভোট দিন। শেষ '+toBn(days)+' দিনে যে থিম সবচেয়ে বেশি ভোট পাবে, সেই থিমেই পরের কনটেস্ট চালু হবে। একজন চাইলে সবগুলো থিমেই ভোট দিতে পারবেন (প্রতি থিমে '+toBn(days)+' দিনে একবার)।</p>'+
    '<div class="hst">'+(ld.name?'<span>\uD83C\uDFC6 এখন এগিয়ে: '+esc(ld.name)+' ('+toBn(ld.n)+' ভোট)</span>':'<span>এখনও কেউ ভোট দেয়নি</span>')+(fbOn()?'':'<span>⚠️ ডেমো মোড</span>')+'</div></section><div class="tgrid" id="tg"></div>';
  var g=app.querySelector('#tg');
  L.forEach(function(x,i){var n=themeCount(i),lead=ld.i===i,voted=Date.now()-(+ls('tvt'+i)||0)<days*DAY;
    g.appendChild(el('div','tcard'+(lead?' lead':''),'<b>'+(lead?'\uD83C\uDFC6 ':'')+esc(x)+'</b><div class="tb"><i style="width:'+Math.round(n/mx*100)+'%"></i></div><div style="color:var(--mu);font-size:13px;margin-bottom:8px">\uD83D\uDDF3 '+toBn(n)+' ভোট</div><button class="btn" data-ti="'+i+'"'+(voted?' disabled':'')+'>'+(voted?'✅ ভোট দেওয়া হয়েছে':'\uD83D\uDDF3 এই থিমে ভোট দিন')+'</button>'))});
  g.addEventListener('click',function(e){var b=e.target.closest('[data-ti]');if(!b)return;
    castTheme(+b.getAttribute('data-ti')).then(function(ok){if(ok){toast('ভোট গ্রহণ করা হয়েছে \uD83C\uDF89');renderTheme()}})})}

/* ---------- ছবির গল্প ---------- */
function renderStories(){
  var L=POSTS.filter(function(p){return p.story}),mo=curMonth();
  var top=L.filter(function(p){return readsM(p,mo)>0}).sort(function(a,b){return readsM(b,mo)-readsM(a,mo)}).slice(0,10);
  app.innerHTML='<section class="hero cx2"><h1>\uD83D\uDCD6 ছবির গল্প</h1><p>একটি ছবি, তার পেছনের জীবনের গল্প। আপনার গল্প যত বেশি মানুষ পড়বে, তত বোনাস: প্রতি মাসে প্রতি '+toBn(CFG.storyReadsPerStep||1000)+' পাঠকে <b>'+toBn(CFG.storyPointsPerStep||300)+' পয়েন্ট</b>।</p><div class="hst"><span>\uD83D\uDCD6 '+toBn(L.length)+' টি গল্প</span><span>প্রতি ডিভাইস ১২ ঘণ্টায় একবার গণনা</span></div></section>'+
    '<div class="tools"><a class="btn hotb" href="#" id="sjoin">\uD83D\uDCD6 আপনার ছবির গল্প পাঠান</a><a class="btn ghost" href="/">\uD83C\uDFE0 হোম</a></div><div id="sw"></div>';
  var w=app.querySelector('#sw');
  if(!L.length){w.innerHTML='<div class="soon"><h2>✍️ প্রথম গল্পটি আপনার হোক</h2><p>ছবি ও জীবনের গল্প পাঠান, বোনাস পয়েন্ট জিতুন।</p></div>'}
  else{
    if(top.length){
      w.appendChild(el('h3','sec','\uD83D\uDD25 এই মাসের সবচেয়ে বেশি পড়া গল্প'));
      var h='',mx=Math.max(1,readsM(top[0],mo));
      top.forEach(function(p,i){h+='<div class="lbrow'+(i===0?' top1':'')+'" data-id="'+p.id+'"><div class="rk">'+(i<3?medal(i):toBn(i+1))+'</div><img alt="" loading="lazy" src="'+rs(p.img,200)+'"/><div class="lbm"><div class="pn"><span>'+esc(p.name)+'</span>'+nameBadge(p)+'</div><div class="lbs">\uD83D\uDCD6 <b>'+num(readsM(p,mo))+'</b> পড়া এই মাসে</div><div class="bar2"><i style="width:'+Math.round(readsM(p,mo)/mx*100)+'%"></i></div></div></div>'});
      var tb=el('div','',h);tb.addEventListener('click',function(e){var r=e.target.closest('.lbrow');if(!r)return;var p=byId(r.getAttribute('data-id'));if(p)openPost(p,top)});w.appendChild(tb)}
    w.appendChild(el('h3','sec','সব গল্প'));
    w.appendChild(mkGrid(L.slice().sort(function(a,b){return b.pub-a.pub})))}
  app.querySelector('#sjoin').onclick=function(e){e.preventDefault();openSubmit('STORY')}}

/* ---------- ক্রিয়েটর পেজ ---------- */
function renderCreator(cid){
  var list=POSTS.filter(function(p){return p.cid===cid&&visible(p)});
  if(!list.length){app.innerHTML='<div class="empty">এই শিল্পীর কোনো ছবি পাওয়া যায়নি।</div>';return}
  var p0=list[0],v=0,d=0,pt=0,B=bon(cid);list.forEach(function(p){v+=p.views;d+=p.dls;pt+=pts(p)});
  var h=el('div','chead','<div class="av">'+esc((p0.name||'?').charAt(0))+'</div><div style="flex:1;min-width:200px"><h1>'+esc(p0.name)+(isVer(p0)?'<i class="vf" title="ভেরিফাইড শিল্পী">✓</i>':'')+'</h1>'+
    (p0.addr?'<p class="addr" style="margin:2px 0 8px">\uD83D\uDCCD '+esc(p0.addr)+'</p>':'')+
    '<div class="stats" style="margin:0"><span><b>'+num(list.length)+'</b> ছবি</span><span>\uD83D\uDC41 <b>'+num(v)+'</b></span>'+(d?'<span>⬇ <b>'+num(d)+'</b></span>':'')+'<span>⭐ <b>'+num(pt+B.tot)+'</b> পয়েন্ট</span></div></div>'+
    '<div class="btns" style="margin:0">'+(p0.wa?'<a class="btn wa" target="_blank" rel="noopener nofollow" href="'+esc(p0.wa)+'">WhatsApp</a>':'')+(p0.tg?'<a class="btn tg" target="_blank" rel="noopener nofollow" href="'+esc(p0.tg)+'">Telegram</a>':'')+
    '<button class="btn ghost" id="cwd">\uD83D\uDCB8 উইথড্র</button></div>');
  app.innerHTML='';app.appendChild(h);app.appendChild(mkGrid(list));
  h.querySelector('#cwd').onclick=function(){openWithdraw(list[0])}}

/* ---------- সিঙ্গেল পোস্ট ---------- */
function setMeta(d){var m=document.querySelector('meta[name="description"]');if(!m){m=document.createElement('meta');m.name='description';document.head.appendChild(m)}m.setAttribute('content',d)}
function seoItem(p){
  try{
    var dsc=p.desc||(p.story?p.story.replace(/\s+/g,' ').slice(0,160):(p.name+(p.addr?' — '+p.addr:'')+' | ছবি ডাউনলোড ও ফটো কনটেস্ট'));
    setMeta(dsc);
    var s=document.createElement('script');s.type='application/ld+json';
    s.text=JSON.stringify({'@context':'https://schema.org','@type':'ImageObject',name:p.name,description:dsc,contentUrl:rs(p.img,1600),thumbnailUrl:rs(p.img,400),url:p.url||location.href,uploadDate:new Date(p.pub).toISOString(),creator:{'@type':'Person',name:p.name}});
    document.head.appendChild(s)}catch(e){}}
function renderItem(pid){
  function go(p){
    app.innerHTML='';app.appendChild(postView(p));showSticky(p);seoItem(p);
    var o=POSTS.filter(function(x){return x.cid===p.cid&&x.id!==p.id&&visible(x)});
    if(o.length){app.appendChild(el('h3','sec','এই শিল্পীর আরও ছবি'));app.appendChild(mkGrid(o))}
    var m=POSTS.filter(function(x){return x.cid!==p.cid&&visible(x)}).slice(0,12);
    if(m.length){app.appendChild(el('h3','sec','আরও ছবি'));app.appendChild(mkGrid(m))}}
  var p=byId(pid);if(p)return go(p);
  return fetch('/feeds/posts/default/'+pid+'?alt=json').then(function(r){return r.json()}).then(function(j){
    var q=parseEntry(j.entry);if(!q.img){document.body.classList.remove('app-on');app.style.display='none';return}
    return gid(q).then(function(){POSTS.push(q);return loadVotes(q.contest?[q]:[])}).then(loadStats).then(calcAll).then(function(){go(q)})})}

/* ---------- পিন-কোড টুল ---------- */
function renderTool(){
  app.innerHTML='<div class="fbox" style="margin-top:30px"><h2>\uD83D\uDD10 পিন → নিরাপদ লেবেল কোড</h2><p style="color:var(--mu)">পিন লিখুন, নিচে যে কোড আসবে সেটি লেবেল হিসেবে দিন। এতে আসল পিন ফিডে দেখা যাবে না, কিন্তু উইথড্রে ওই পিনই কাজ করবে।</p>'+
    '<form class="form" id="tf"><input id="tpin" inputmode="numeric" placeholder="পিন (৪–১০ সংখ্যা)" required/><button class="btn" type="submit">কোড বানান</button></form><div id="tout"></div></div>';
  app.querySelector('#tf').onsubmit=function(e){e.preventDefault();
    pinHash(app.querySelector('#tpin').value).then(function(h){app.querySelector('#tout').innerHTML='<div class="note ok">লেবেল: <b>u-'+h+'</b></div>'})}}

/* ---------- বিজ্ঞাপন কোড কনভার্টার ---------- */
function toLine(code,P){
  var s=String(code).trim().replace(/\\/g,'\\\\').replace(/'/g,"\\'").replace(/\r?\n/g,'\\n').replace(/<\/script/gi,'<\\/script');
  return 'adCode'+P+":'"+s+"',"}
function renderAdTool(){
  var ta='padding:12px 14px;border-radius:12px;border:1px solid var(--bd);background:var(--bg);color:var(--tx);font:13px monospace;width:100%';
  app.innerHTML='<div class="fbox" style="margin-top:30px;max-width:720px"><h2>\uD83E\uDDE9 বিজ্ঞাপনের কোড কনভার্টার</h2><p style="color:var(--mu)">নেটওয়ার্কের কোড নিচে যেমন আছে তেমন পেস্ট করুন। জায়গা বেছে "লাইন বানান" চাপুন, তারপর যে লাইন আসবে সেটি GCFG-র ফাঁকা লাইনের জায়গায় বসান।</p>'+
    '<form class="form" id="atf"><select id="atp"><option value="Top">Top — ছবির উপরে</option><option value="Mid">Mid — বাটনের নিচে</option><option value="Bottom">Bottom — সবার নিচে</option><option value="Sticky">Sticky — মোবাইলের নিচে আটকানো</option></select>'+
    '<textarea id="atc" rows="8" style="'+ta+'" placeholder="এখানে নেটওয়ার্কের কোড পেস্ট করুন" required></textarea><button class="btn" type="submit">লাইন বানান</button></form><div id="ato"></div></div>';
  app.querySelector('#atf').onsubmit=function(e){e.preventDefault();
    var P=app.querySelector('#atp').value,line=toLine(app.querySelector('#atc').value,P);
    app.querySelector('#ato').innerHTML='<div class="note ok" style="margin-top:12px">তৈরি লাইন (কপি করে GCFG-তে adCode'+P+': লাইনের জায়গায় বসান):</div><textarea id="atr" rows="6" readonly style="'+ta+'"></textarea><div class="btns" style="margin-top:8px"><button class="btn" type="button" id="atcp">কপি</button></div>';
    var r=app.querySelector('#atr');r.value=line;
    app.querySelector('#atcp').onclick=function(){r.select();if(navigator.clipboard)navigator.clipboard.writeText(line);toast('কপি হয়েছে ✓')}}}

/* ---------- ছবি ছোট করে (সর্বোচ্চ ২০০০px JPEG) ---------- */
function prepImage(file){return new Promise(function(res,rej){
  var u=URL.createObjectURL(file),im=new Image();
  im.onerror=function(){URL.revokeObjectURL(u);rej()};
  im.onload=function(){
    var LIM=3.5e6,M=2000,qs=[.9,.8,.7,.6,.5],tries=0;
    function go(){
      var k=Math.min(1,M/Math.max(im.width,im.height)),c=document.createElement('canvas');
      c.width=Math.round(im.width*k);c.height=Math.round(im.height*k);
      var x=c.getContext('2d');x.fillStyle='#fff';x.fillRect(0,0,c.width,c.height);x.drawImage(im,0,0,c.width,c.height);
      (function q(n){
        c.toBlob(function(b){
          if(!b){URL.revokeObjectURL(u);return rej()}
          if(b.size<LIM||(n>=qs.length-1&&M<=700)){URL.revokeObjectURL(u);return res(b)}
          if(n<qs.length-1)return q(n+1);
          M=Math.round(M*.75);tries++;go()
        },'image/jpeg',qs[n])
      })(0)
    }
    go()};
  im.src=u})}

/* ---------- ছবি জমা (মেইলে) ---------- */
function openSubmit(pre,pth){
  var cats={};POSTS.forEach(function(p){if(p.category)cats[p.category]=1});
  var themes=(CFG.contestThemes||[]).slice();POSTS.forEach(function(p){if(p.theme&&themes.indexOf(p.theme)<0)themes.push(p.theme)});
  var ldn=themeLead().name;if(ldn&&themes.indexOf(ldn)<0)themes.push(ldn);
  var wallOk=!/^(c24|c7|c30|lb)$/.test(typeof VIEW==='string'?VIEW:'')&&!/^CONTEST/.test(pre||'');
  var box=el('div','fbox','<h2>\uD83D\uDCE4 ছবি জমা দিন (মেইলে)</h2>'+
    '<div class="note err" id="sai" style="font-weight:600">\uD83D\uDEAB AI ছবি নট অ্যালাউড! ✅ শুধুমাত্র নিজের মোবাইল বা ক্যামেরায় তোলা ছবি দিন।</div>'+
    '<form class="form" id="sf">'+
    '<input name="name" placeholder="আপনার নাম *" required maxlength="60"/>'+
    '<input name="addr" placeholder="ঠিকানা *" required maxlength="120"/>'+
    '<input name="pin" type="tel" inputmode="numeric" pattern="[0-9০-৯]{4,10}" placeholder="গোপন পিন (৪–১০ সংখ্যা) * — মনে রাখুন" required/>'+
    '<input name="wa" placeholder="আপনার WhatsApp নম্বর (ঐচ্ছিক)"/>'+
    '<input name="tg" placeholder="টেলিগ্রাম ইউজারনেম (ঐচ্ছিক)"/>'+
    '<input name="cat" list="cl" placeholder="ক্যাটাগরি (যেমন Viral)"/><datalist id="cl">'+Object.keys(cats).map(function(c){return '<option value="'+esc(c)+'"/>'}).join('')+'</datalist>'+
    '<select name="ctype" id="sct"><option value="">সাধারণ ছবি (কনটেস্ট নয়)</option>'+
      '<option value="24 CONTEST">\uD83D\uDD25 ২৪ ঘণ্টার CONTEST ('+prizeText('24')+')</option>'+
      '<option value="7 DAYS CONTEST">\uD83D\uDC51 ৭ দিনের CONTEST ('+prizeText('7')+')</option>'+
      '<option value="30 DAYS CONTEST">\uD83D\uDC8E ৩০ দিনের CONTEST ('+prizeText('30')+')</option>'+
      '<option value="STORY">\uD83D\uDCD6 ছবির গল্প (ছবি + জীবনের গল্প — পাঠক বাড়লে বোনাস)</option>'+(wallOk?'<option value="WALLPAPER">\uD83D\uDDBC Wallpaper (৯:১৬ — AI ছবিও চলবে)</option>':'')+'</select>'+
    '<select name="theme" id="sth" hidden><option value="">\uD83C\uDFAF কন্টেস্ট থিম: সাধারণ / যেকোনো</option>'+themes.map(function(x){return '<option value="'+esc(x)+'">'+esc(x)+'</option>'}).join('')+'</select>'+
    '<input name="desc" maxlength="150" placeholder="ছবির ছোট বর্ণনা (ঐচ্ছিক, ১৫০ অক্ষর) — SEO ও ভোটে সাহায্য করে"/>'+
    '<div id="sstw" hidden><textarea name="story" id="sstory" rows="6" maxlength="2000" placeholder="\uD83D\uDCD6 ছবির পেছনের জীবনের গল্প লিখুন (সত্য ঘটনা, আপনার অনুভূতি, কোথায় কীভাবে তুললেন…)"></textarea><small style="color:var(--mu)">প্রতি মাসে প্রতি '+toBn(CFG.storyReadsPerStep||1000)+' জন পাঠকে '+toBn(CFG.storyPointsPerStep||300)+' বোনাস পয়েন্ট।</small></div>'+
    '<select name="st" id="sst"><option value="FREE">ফ্রি ছবি</option><option value="PAID">পেইড ছবি</option></select>'+
    '<input name="price" id="spr" type="number" min="1" placeholder="প্রাইস" hidden/>'+
    '<div id="srl">'+rulesHtml()+'</div>'+
    '<label class="ck"><input type="checkbox" required/> <span id="sck">আমি নিশ্চিত করছি ছবিটি আমার নিজের মোবাইল বা ক্যামেরায় তোলা — এটি AI দিয়ে বানানো নয়, অন্যের ছবিও নয়; প্রকাশে আমি সম্মতি দিচ্ছি।</span></label>'+
    '<div class="dropw" id="dropw"><div class="dh">\uD83D\uDCF7 শেষ ধাপ: ছবি সিলেক্ট করুন <b>(বাধ্যতামূলক)</b></div>'+
      '<label class="drop big"><input type="file" id="sfile" accept="image/*"/><span class="dic">\uD83D\uDCF7</span><span id="dtxt">\uD83D\uDC47 এখানে ট্যাপ করে আপনার মোবাইল/ক্যামেরায় তোলা ছবি বাছাই করুন</span></label><img id="sprev" hidden alt=""/></div>'+
    '<button class="btn buy" type="button" id="sdirect">\uD83D\uDCE4 ছবিসহ সরাসরি পাঠান</button>'+'<a class="btn ghost" id="sbtn" href="#">✉️ মেইল অ্যাপে পাঠান (ছবি নিজে যুক্ত করতে হবে)</a>'+
    '<button class="btn ghost" type="button" id="sshare" hidden>\uD83D\uDCE4 ছবিসহ পাঠান (মোবাইল শেয়ার)</button>'+
    '<p id="smsg" style="margin:0;font-size:14px;color:var(--mu)">ছবি বাছাই করে "ছবিসহ সরাসরি পাঠান" চাপুন — ছবি ও তথ্য সরাসরি '+esc(CFG.mail||'')+' ঠিকানায় চলে যাবে। কনটেস্টের ছবি অ্যাডমিন যাচাই করে লাইভ করবেন।</p></form>');
  openM(box);
  var f=box.querySelector('#sf'),fi=box.querySelector('#sfile'),prev=box.querySelector('#sprev'),file=null,far=0;
  var sct=box.querySelector('#sct'),sth=box.querySelector('#sth'),sstw=box.querySelector('#sstw'),sstory=box.querySelector('#sstory'),srl=box.querySelector('#srl'),sck=box.querySelector('#sck'),sai=box.querySelector('#sai'),R0=srl.innerHTML,C0=sck.textContent;
  function isC(){return /CONTEST/.test(sct.value)}
  function thSync(){sth.hidden=!isC()||!themes.length;if(!isC())sth.value='';var s=sct.value==='STORY';sstw.hidden=!s;sstory.required=s;var wl=sct.value==='WALLPAPER';sai.hidden=wl;
    srl.innerHTML=wl?'<div class="rules"><b>\uD83D\uDDBC Wallpaper নিয়ম:</b> ✅ ৯:১৬ সাইজের (মোবাইল স্ক্রিনের) ছবি · ✅ AI দিয়ে বানানো ছবিও চলবে · ✅ যেমন ইচ্ছা ছবি দিতে পারবেন · ❌ অন্যের নাম বা লোগো দেওয়া ছবি নয়। Wallpaper শুধু হোম পেজে দেখাবে, কনটেস্টে নয়।</div>':R0;
    sck.textContent=wl?'আমি নিশ্চিত করছি এই ছবি প্রকাশের অধিকার আমার আছে এবং প্রকাশে আমি সম্মতি দিচ্ছি।':C0}
  if(pre)sct.value=({CONTEST7:'7 DAYS CONTEST',CONTEST30:'30 DAYS CONTEST',STORY:'STORY'})[pre]||'24 CONTEST';
  if(pth&&themes.indexOf(pth)>=0)sth.value=pth;
  sct.onchange=thSync;thSync();
  box.querySelector('#sst').onchange=function(){box.querySelector('#spr').hidden=this.value!=='PAID'};
  fi.onchange=function(){file=fi.files[0];if(!file)return;prev.src=URL.createObjectURL(file);prev.hidden=false;
    var im=new Image();im.onload=function(){var ar=im.width/im.height;far=ar;var wl=sct.value==='WALLPAPER',ok=wl?Math.abs(ar-9/16)<0.07:((Math.abs(ar-16/9)<0.12)||(Math.abs(ar-9/16)<0.07));
      box.querySelector('#dtxt').textContent=(ok?'✅ ':'⚠️ ')+'ছবি সিলেক্ট হয়েছে — '+(im.width>=im.height?'ল্যান্ডস্কেপ':'পোর্ট্রেইট')+' ('+im.width+'×'+im.height+')'+(ok?'':(wl?' — Wallpaper-এর জন্য ৯:১৬ সাইজ লাগবে':' — আদর্শ অনুপাত ১৬:৯ / ৯:১৬'))};im.src=prev.src;
    if(navigator.canShare&&navigator.canShare({files:[file]}))box.querySelector('#sshare').hidden=false};
  function ctLabel(v){return v==='STORY'?'না (ছবির গল্প)':v==='WALLPAPER'?'না (Wallpaper — পোস্টে লেবেল দিন: wallpaper)':(v||'না')}
  function text(){var fd=new FormData(f),st=fd.get('st'),pr=fd.get('price');
    return '\uD83D\uDCF8 নতুন ছবি জমা\nনাম: '+fd.get('name')+'\nঠিকানা: '+fd.get('addr')+'\nপিন: '+bn2en(fd.get('pin'))+
      '\nWhatsApp: '+(fd.get('wa')||'-')+'\nTelegram: '+(fd.get('tg')||'-')+'\nক্যাটাগরি: '+(fd.get('cat')||'-')+
      '\nকনটেস্ট: '+ctLabel(fd.get('ctype'))+'\nথিম: '+(fd.get('theme')||'-')+
      '\nস্ট্যাটাস: '+st+(st==='PAID'&&pr?' '+(CFG.currency||'৳')+pr:'')+
      '\nবর্ণনা: '+(fd.get('desc')||'-')+(fd.get('ctype')==='STORY'?'\nগল্প: '+(fd.get('story')||''):'')+'\n\n(ছবি সংযুক্ত করুন \uD83D\uDCCE)'}
  function subj(){var v=f.elements.ctype.value;return 'ছবি জমা'+(v?' ['+(v==='STORY'?'ছবির গল্প':v==='WALLPAPER'?'Wallpaper':v)+']':'')+' — '+(f.elements.name.value||'')}
  function needFile(){var w=box.querySelector('#dropw');w.classList.remove('shake');void w.offsetWidth;w.classList.add('shake');w.scrollIntoView({behavior:'smooth',block:'center'});toast('\uD83D\uDCF7 আগে ছবি সিলেক্ট করুন')}
  box.querySelector('#sbtn').addEventListener('click',function(e){
    if(!f.reportValidity()){e.preventDefault();return}
    this.href=mailUrl(subj(),text())});
  box.querySelector('#sdirect').onclick=function(){
    if(!f.reportValidity())return;
    if(!file){needFile();return}
    if(sct.value==='WALLPAPER'&&far&&Math.abs(far-9/16)>0.07){toast('Wallpaper-এর জন্য ৯:১৬ সাইজের ছবি দিন');needFile();return}
    var b=this,old=b.textContent;b.disabled=true;b.textContent='⏳ ছবি প্রস্তুত হচ্ছে…';
    prepImage(file).then(function(blob){
      b.textContent='⏳ পাঠানো হচ্ছে…';
      var fd=new FormData(f),body=new FormData(),st=fd.get('st'),pr=fd.get('price');
      body.append('Name',fd.get('name'));body.append('Address',fd.get('addr'));body.append('PIN',bn2en(fd.get('pin')));
      body.append('WhatsApp',fd.get('wa')||'-');body.append('Telegram',fd.get('tg')||'-');body.append('Category',fd.get('cat')||'-');
      body.append('Contest',ctLabel(fd.get('ctype')));body.append('Theme',fd.get('theme')||'-');body.append('Status',st+(st==='PAID'&&pr?' '+(CFG.currency||'৳')+pr:''));
      body.append('Description',fd.get('desc')||'-');body.append('Story',fd.get('ctype')==='STORY'?(fd.get('story')||'-'):'-');
      body.append('attachment',blob,(slug(fd.get('name'))||'photo')+'.jpg');
      body.append('_subject',subj());body.append('_template','table');body.append('_captcha','false');body.append('_honey','');
      return fetch('https://formsubmit.co/'+CFG.mail,{method:'POST',body:body,mode:'no-cors'})
    }).then(function(){
      box.innerHTML='<h2>✅ পাঠানো হয়েছে</h2><div class="note ok">আপনার ছবি ও তথ্য অ্যাডমিনের কাছে পাঠানো হয়েছে। যাচাইয়ের পর পোস্ট করা হবে।</div><p style="color:var(--mu);font-size:13px">দ্রষ্টব্য: ডেলিভারি এই পেজ থেকে নিশ্চিত করা যায় না। অ্যাডমিন না জানালে মেইল অ্যাপ দিয়ে আবার পাঠাতে পারেন।</p><div class="btns"><button class="btn" id="sdone">ঠিক আছে</button></div>';
      box.querySelector('#sdone').onclick=closeM
    }).catch(function(){b.disabled=false;b.textContent=old;toast('সরাসরি পাঠানো যায়নি — মেইল অ্যাপ বাটন ব্যবহার করুন')})};
  box.querySelector('#sshare').onclick=function(){if(!f.reportValidity())return;
    navigator.share({files:[file],title:subj(),text:text()}).catch(function(){})}}

/* ---------- হেডার ও অন্যান্য ---------- */
document.getElementById('sub').onclick=function(){openSubmit()};
document.getElementById('wdb').onclick=function(){openWithdraw(null)};
document.getElementById('supl').onclick=function(e){e.preventDefault();window.open(waUrl('সাপোর্ট দরকার'),'_blank')};
document.getElementById('thm').onclick=function(){var t=document.documentElement.getAttribute('data-t')==='dark'?'light':'dark';document.documentElement.setAttribute('data-t',t);ls('th',t)};
var qi=document.getElementById('q'),qt;
qi.addEventListener('input',function(){clearTimeout(qt);qt=setTimeout(function(){F.q=qi.value.trim();
  if(window.__draw&&document.getElementById('gw'))window.__draw();else if(F.q)location.href='/?q='+encodeURIComponent(F.q)},250)});
var up=document.getElementById('up');
window.addEventListener('scroll',function(){up.classList.toggle('on',window.scrollY>600)},{passive:true});
up.onclick=function(){window.scrollTo({top:0,behavior:'smooth'})};

/* ---------- SEO: WebSite স্কিমা ---------- */
try{var ws=document.createElement('script');ws.type='application/ld+json';
  ws.text=JSON.stringify({'@context':'https://schema.org','@type':'WebSite',name:(document.querySelector('.logo .lt')||{}).textContent||'Gallery',url:location.origin+'/',potentialAction:{'@type':'SearchAction',target:location.origin+'/?q={search_term_string}','query-input':'required name=search_term_string'}});
  document.head.appendChild(ws)}catch(e){}

/* ---------- PWA অ্যাপ ইনস্টল পপআপ (১ মিনিট পর) ---------- */
function isStandalone(){return (window.matchMedia&&matchMedia('(display-mode: standalone)').matches)||window.navigator.standalone===true}
function isIOS(){return /iphone|ipad|ipod/i.test(navigator.userAgent)&&!window.MSStream}
function pwaHidden(){return (+ls('pwaHide')||0)>Date.now()||ls('pwaDone')==='1'}
function pwaClose(){var n=document.getElementById('pwa');if(!n)return;n.classList.remove('on');setTimeout(function(){if(n.parentNode)n.parentNode.removeChild(n)},400)}
function showInstall(force){
  if(isStandalone()||document.getElementById('pwa'))return;
  var ios=isIOS(),can=!!window.__ip;
  if(!can&&!ios&&!force)return;
  var logo='<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="pg" x1="0" x2="1" y1="0" y2="1"><stop offset="0" stop-color="#6c5ce7"/><stop offset="1" stop-color="#e84393"/></linearGradient></defs><rect fill="url(#pg)" height="64" rx="16" width="64"/><rect fill="#fff" height="26" rx="6" width="36" x="9" y="21"/><rect fill="#fff" height="9" rx="3" width="14" x="19" y="15"/><circle cx="27" cy="34" fill="#6c5ce7" r="8"/><circle cx="27" cy="34" fill="#fff" r="3.6"/><circle cx="47" cy="45" fill="#ffd200" r="13" stroke="#fff" stroke-width="2.5"/></svg>';
  var msg=can?'হোম স্ক্রিনে অ্যাপ যোগ করুন — এক ট্যাপেই কনটেস্ট, ভোট ও নতুন ছবি।':(ios?'Safari-তে নিচের Share (⬆️) বাটন চেপে "Add to Home Screen" বাছাই করুন।':'ব্রাউজারের মেনু (⋮) খুলে "Install app" বা "Add to Home screen" চাপুন।');
  var n=el('div','','<div class="ph1">'+logo+'<div><b>📲 Photo Earn Gallery অ্যাপ</b><small>'+msg+'</small></div></div><div class="btns">'+(can?'<button class="btn" id="pwai">⬇ ইনস্টল করুন</button>':'')+'<button class="btn ghost" id="pwax">'+(can?'পরে':'বুঝেছি')+'</button></div>');
  n.id='pwa';document.body.appendChild(n);
  setTimeout(function(){n.classList.add('on')},30);
  try{sessionStorage.setItem('pwaS','1')}catch(e){}
  function later(){ls('pwaHide',Date.now()+(CFG.pwaHideDays||7)*864e5);pwaClose()}
  n.querySelector('#pwax').onclick=later;
  var bi=n.querySelector('#pwai');
  if(bi)bi.onclick=function(){
    var ip=window.__ip;if(!ip){pwaClose();return}
    ip.prompt();
    ip.userChoice.then(function(c){window.__ip=null;if(c&&c.outcome==='accepted'){ls('pwaDone','1');toast('অ্যাপ ইনস্টল হচ্ছে ✓')}else later();pwaClose()}).catch(function(){pwaClose()})}}
(function(){
  var pl=document.getElementById('pwal');
  if(isStandalone()){if(pl)pl.style.display='none';return}
  if(pl)pl.onclick=function(e){e.preventDefault();showInstall(true)};
  var t0=0;try{t0=+sessionStorage.getItem('pwaT0')||0;if(!t0){t0=Date.now();sessionStorage.setItem('pwaT0',t0)}}catch(e){t0=Date.now()}
  var shown=false;try{shown=sessionStorage.getItem('pwaS')==='1'}catch(e){}
  if(shown||pwaHidden())return;
  var delay=Math.max(0,(CFG.pwaDelaySeconds||60)*1000-(Date.now()-t0));
  setTimeout(function(){if(!pwaHidden())showInstall(false)},delay)})();

/* ---------- শুরু ---------- */
detectBlock();
var qs=new URLSearchParams(location.search),VIEW=qs.get('view')||'';
[].forEach.call(document.querySelectorAll('#cnav .cn'),function(a){a.classList.toggle('on',a.getAttribute('data-v')===VIEW&&(TYPE!=='item'))});
countRef(qs.get('ref'));
if(TYPE==='static'){app.style.display='none'}
else{
  document.body.classList.add('app-on');
  if(qs.get('pintool')){renderTool()}
  else if(qs.get('adtool')){renderAdTool()}
  else loadPosts().then(function(){
    if(TYPE==='item'&&PID)return renderItem(PID);
    if(VIEW==='c24')return renderContest('24');
    if(VIEW==='c7')return renderContest('7');
    if(VIEW==='c30')return renderContest('30');
    if(VIEW==='lb')return renderLB(qs.get('t'));
    if(VIEW==='hof')return renderHof();
    if(VIEW==='theme')return renderTheme();
    if(VIEW==='story')return renderStories();
    if(qs.get('creator'))return renderCreator(qs.get('creator'));
    if(qs.get('q')){F.q=qs.get('q');qi.value=F.q}
    renderHome()
  }).catch(function(){app.innerHTML='<div class="empty">লোড করা যায়নি। ব্লগের Settings → Site feed "Full" করা আছে কিনা দেখুন।</div>'})
}
})();
//]]></script>
</body>
</html>

PIN: 464890
বিজ্ঞাপন
পোস্ট করেছেন

Tanbin Farazi