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

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

AI Test Lab

Test your prompts directly on official platforms.

Photo Gallery সম্পুর্ন ব্লগার রেডি কোড।

Downloadpopular


 

<?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>

<!--

 ✏️ এডিট জোন — শুধু নিচের GCFG অংশটুকু বদলালেই চলবে


 পোস্ট কীভাবে দেবেন:

  ১) পোস্টের লেখায় ছবি দিন, তারপর লিখুন:

        নাম: রাহিম

        ঠিকানা: ঢাকা

        WhatsApp: 017XXXXXXXX   (ঐচ্ছিক)

        Telegram: @rahim        (ঐচ্ছিক)

  ২) লেবেলে (Labels) এগুলো দিতে পারেন:

        paid / free            → পেইড বা ফ্রি

        price:10   views:12000   downloads:40   cat:Viral

        withdrawn:100          → এই ছবির যত পয়েন্ট পেমেন্ট হয়ে গেছে

        Monetization / noads

        482913  অথবা  u-xxxxxxxxxx   → গোপন পিন / নিরাপদ পিন-কোড (/?pintool=1)

        24 CONTEST             → ২৪ ঘণ্টার কন্টেস্ট (পোস্ট পাবলিশের সময় থেকে ২৪ ঘণ্টা)

        7 DAYS CONTEST         → ৭ দিনের কন্টেস্ট

        30 DAYS CONTEST        → ৩০ দিনের কন্টেস্ট (১ম $100, ২য় $60, ৩য় $30 — GCFG.prize30 থেকে)

        theme:শীতের ছবি        → কন্টেস্টের থিম/ক্যাটাগরি (শীত, পাখি…) — থিম ধরে আলাদা কন্টেস্ট ও আলাদা বিজয়ী

        Vote 40                → ছবিতে আগে থেকে ৪০ ভোট দেখাবে (vote:40 বা votes:40ও চলবে)

        WINNER                 → হাতে বিজয়ী ঠিক করতে (Firebase ছাড়াও কাজ করবে)

        prizepaid              → বিজয়ীর প্রাইজ দেওয়া হয়ে গেছে

  ৩) বিজ্ঞাপন দেখতে: যেকোনো পেজের শেষে ?adpreview=1 | বিজ্ঞাপন কোড কনভার্টার: /?adtool=1 | পিন টুল: /?pintool=1

-->

<script type='text/javascript'>//<![CDATA[

window.GCFG={

  /* ===== যোগাযোগ ও পেমেন্ট ===== */

  mail:'submit@gallerybd.online',     /* সাবমিট / উইথড্র / কেনা — সব এই মেইলে আসবে */

  supportWhatsApp:'8801927661298',/* শুধু সাপোর্টের জন্য (দেশের কোডসহ, + ছাড়া) */

  bkash:'01927661298',

  nagad:'01927661298',

  rocket:'',

  currency:'৳',


  /* ===== কনটেস্ট ===== */

  prize24:1,                      /* ২৪ ঘণ্টার কনটেস্টের প্রাইজ ($) */

  prize7:2.5,                     /* ৭ দিনের কনটেস্টের প্রাইজ ($) */

  prize30:[100,60,30],            /* ৩০ দিনের কনটেস্ট: ১ম, ২য়, ৩য় পুরস্কার ($) */

  contestThemes:['শীতের ছবি','পাখির ছবি'],  /* কন্টেস্টের থিম তালিকা — ছবি জমার ফর্মে সিলেক্ট করা যাবে; লেবেল: theme:শীতের ছবি */

  verifyAd1:'https://uplcm.com/4/12003305',                              /* Human Verify ১ এ যে অ্যাডে যাবে */

  verifyAd2:'https://asiafilm.org/4/d67ad64222f27878af4b3d5dd1ae8222',   /* Human Verify ২ এ যে অ্যাডে যাবে */

  voteWaitSeconds:5,              /* ভেরিফাইয়ের পর লোডিং */

  judges:['Tanbin','Miraz'],

  pwaDelaySeconds:60,             /* সাইটে ঢোকার কত সেকেন্ড পর অ্যাপ ইনস্টল পপআপ আসবে */

  pwaHideDays:7,                  /* 'পরে' চাপলে কত দিন আর দেখাবে না */      /* সার্টিফিকেটের জাজ সাইন */

  /* ভোট সবাইকে দেখাতে ফ্রি Firebase Realtime Database লাগবে (নিচে নির্দেশনা দেখুন)।

     যেমন: 'https://your-project-default-rtdb.firebaseio.com' — ফাঁকা থাকলে ভোট শুধু নিজের ডিভাইসে গোনা হবে (ডেমো)। */

  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='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%236c5ce7'/%3E%3Cstop offset='1' stop-color='%23e84393'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='100' height='100' rx='24' fill='url(%23g)'/%3E%3Ctext x='50' y='68' font-size='56' text-anchor='middle'%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='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='24' fill='%236c5ce7'/%3E%3Ctext x='50' y='68' font-size='56' text-anchor='middle'%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 v3 (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)}

@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)}

.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;font-size:11px;padding:3px 9px;border-radius:99px;background:#fdcb6e;color:#2d2400;font-weight:600;z-index:2}

.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)}

.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)}


/* ---------- ছবির বিস্তারিত ---------- */

.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}

.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)}

.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}

#sprev{width:100%;max-height:240px;object-fit:contain;border-radius:12px;background:#000}

.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}

}

@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'>&#128184; উইথড্র</button>

<button class='btn' id='sub'>&#65291; ছবি জমা দিন</button>

</div>

<nav class='cnav' id='cnav'>

<a class='cn' data-v='' href='/'>&#127968; হোম</a>

<a class='cn hot' data-v='c24' href='/?view=c24'><i class='dot'></i>&#128293; ২৪ ঘণ্টার CONTEST</a>

<a class='cn gold' data-v='c7' href='/?view=c7'>&#128081; ৭ দিনের CONTEST</a>

<a class='cn mega' data-v='c30' href='/?view=c30'>&#128142; ৩০ দিনের CONTEST</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: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; ছবির স্বত্ব সংশ্লিষ্ট শিল্পীর। আপত্তি থাকলে &quot;রিপোর্ট&quot; বাটন ব্যবহার করুন।

<div style='margin-top:8px'><a href='#' id='supl' style='color:var(--ac);font-weight:600'>&#128172; সাপোর্ট (WhatsApp)</a> &#183; <a href='#' id='pwal' style='color:var(--ac);font-weight:600'>&#128242; অ্যাপ ইনস্টল করুন</a></div>

<div style='opacity:.5;font-size:11px'>theme v6</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'/>


<!-- ===== বিজ্ঞাপন গ্যাজেট এলাকা (Layout থেকে HTML/JavaScript গ্যাজেট যোগ করুন) ===== -->

<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;


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){if(t==='30'){var a=CFG.prize30;return Array.isArray(a)&&a.length?a:[100,60,30]}return [t==='7'?CFG.prize7:CFG.prize24]}

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){return toBn(i+1)+(['ম','য়','য়'][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);return z.length>1?z.map(function(v,i){return ordBn(i)+' '+usd(v)}).join(' · '):'প্রাইজ '+usd(z[0])}

function winLabel(p){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> ✅ নিজের তোলা ছবি ও গ্রাফিক্স ডিজাইন গ্রহণযোগ্য · ❌ 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))}


/* ---------- ফিড এন্ট্রি পার্স ---------- */

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 m={name:'',addr:'',wa:'',tg:''},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(/^(?: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;

  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(/^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)\s*[:=]\s*(.+)$/i)))cfg[mm[1].toLowerCase()==='cat'?'category':mm[1].toLowerCase()]=mm[2];

    else tags.push(t)});

  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 p={id:id,img:src,w:w,h:h,name:name,addr:addr,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(),views:parseCount(cfg.views),dls:parseCount(cfg.downloads),wd:parseCount(cfg.withdrawn),

    contest:contest,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,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 Realtime Database / লোকাল ডেমো) ---------- */

function fbOn(){return !!CFG.firebaseUrl}

function fbUrl(path){return String(CFG.firebaseUrl).replace(/\/$/,'')+'/'+path+'.json'}

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 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(){

  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),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 ws=tg.length?tg:(fbOn()?r.slice().sort(rk).filter(function(p){return p.votes>0}):[]);

        ws.slice(0,pr.length).forEach(function(w,k){w.win=true;w.rank=k+1;w.wk=st;w.prize=pr[k]})}})})}

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 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(updateVotes)}

  var n=(+ls('lv'+p.id)||0)+1;ls('lv'+p.id,n);p.votes=(p.vb||0)+n;updateVotes();return Promise.resolve()}


/* ---------- কাউন্টডাউন ---------- */

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/.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 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(calcWinners)}

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>'}

  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">\uD83D\uDCB0</span>':'')+'</div>'+

    '<div class="meta"><div class="pn"><span>'+esc(p.name)+'</span><i>✦</i></div>'+(p.addr?'<div class="pa">\uD83D\uDCCD '+esc(p.addr)+'</div>':'')+

    '<div class="st">'+(p.theme?'<span>\uD83C\uDFAF '+esc(p.theme)+'</span>':'')+(p.views?'<span>\uD83D\uDC41 '+num(p.views)+'</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)});

  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=p.url||location.href,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 card(n){return box.querySelector('#vc'+n)}

  function run(n){

    var c=card(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){card(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>';

  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><i>✦</i></h2>'+(p.addr?'<div class="paddr">\uD83D\uDCCD '+esc(p.addr)+'</div>':'')+

    '<div class="stats">'+(p.contest?'<span class="mon">\uD83C\uDFC6 '+cBn(p.contest)+' কনটেস্ট</span>':'')+(p.theme?'<span>\uD83C\uDFAF '+esc(p.theme)+'</span>':'')+(p.views?'<span>\uD83D\uDC41 <b>'+num(p.views)+'</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>'+

    (pt?'<span>⭐ <b>'+num(pt)+'</b> পয়েন্ট (≈ '+cur(taka(pt))+')</span>':'')+(mon?'<span class="mon">\uD83D\uDCB0 মনিটাইজড</span>':'')+'</div>'+

    voteBox(p)+

    '<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)};

  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}

        step2(list,pin)})}}

  function step2(list,pin){

    var total=0,rows='',wins=list.filter(function(p){return p.win&&!p.prizePaid});

    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>'});

    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 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>';return}

    box.innerHTML='<h2>✅ পিন সঠিক</h2><table class="tbl">'+rows+'</table><p>মোট পয়েন্ট: <b>'+num(total)+'</b> (≈ '+cur(taka(total))+')</p>'+

      '<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('#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+'\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.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.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>'+

    '<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-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';

  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>'+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="/">\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 tt=app.querySelector('#tt');

  if(tt)tt.addEventListener('click',function(e){var b=e.target.closest('.chip');if(!b)return;th=b.getAttribute('data-th');

    [].forEach.call(tt.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(updateVotes)},30000)}


/* ---------- ক্রিয়েটর পেজ ---------- */

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;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)+'</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> পয়েন্ট</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 seoItem(p){

  try{

    var s=document.createElement('script');s.type='application/ld+json';

    s.text=JSON.stringify({'@context':'https://schema.org','@type':'ImageObject',name:p.name,description:p.name+(p.addr?' — '+p.addr:'')+' | ছবি ডাউনলোড ও ফটো কনটেস্ট',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(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 box=el('div','fbox','<h2>\uD83D\uDCE4 ছবি জমা দিন (মেইলে)</h2><form class="form" id="sf">'+

    '<label class="drop"><input type="file" id="sfile" accept="image/*"/><span id="dtxt">\uD83D\uDCF7 ছবি বাছাই করুন (১৬:৯ বা ৯:১৬ হলে ভালো)</span></label><img id="sprev" hidden alt=""/>'+

    '<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></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>'+

    '<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/>'+

    rulesHtml()+

    '<label class="ck"><input type="checkbox" required/> আমি নিশ্চিত করছি ছবিটি আমার নিজের তোলা বা নিজের ডিজাইন করা গ্রাফিক্স — এটি AI দিয়ে বানানো নয়; প্রকাশে আমি সম্মতি দিচ্ছি।</label>'+

    '<button class="btn buy" type="button" id="sdirect">📤 ছবিসহ সরাসরি পাঠান</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;

  var sct=box.querySelector('#sct'),sth=box.querySelector('#sth');

  function thSync(){sth.hidden=!sct.value||!themes.length;if(!sct.value)sth.value=''}

  if(pre)sct.value=({CONTEST7:'7 DAYS CONTEST',CONTEST30:'30 DAYS CONTEST'})[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,ok=(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?'':' — আদর্শ অনুপাত ১৬:৯ / ৯:১৬')};im.src=prev.src;

    if(navigator.canShare&&navigator.canShare({files:[file]}))box.querySelector('#sshare').hidden=false};

  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কনটেস্ট: '+(fd.get('ctype')||'না')+'\nথিম: '+(fd.get('theme')||'-')+

      '\nস্ট্যাটাস: '+st+(st==='PAID'&&pr?' '+(CFG.currency||'৳')+pr:'')+'\n\n(ছবি সংযুক্ত করুন \uD83D\uDCCE)'}

  function subj(){return 'ছবি জমা'+(f.elements.ctype.value?' ['+f.elements.ctype.value+']':'')+' — '+(f.elements.name.value||'')}

  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){toast('আগে ছবি বাছাই করুন');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',fd.get('ctype')||'No');body.append('Theme',fd.get('theme')||'-');body.append('Status',st+(st==='PAID'&&pr?' '+(CFG.currency||'৳')+pr:''));

      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'))});

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(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>


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

Tanbin Farazi