<?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&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 == "item"'>
<div data-type='item' expr:data-pid='data:blog.postId' id='bi' style='display:none'/>
<b:elseif cond='data:blog.pageType == "static_page"'/>
<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='থিম বদলান'>◐</button>
<button class='btn ghost' id='wdb'>💸 উইথড্র</button>
<button class='btn' id='sub'>+ ছবি জমা দিন</button>
</div>
<nav class='cnav' id='cnav'>
<a class='cn' data-v='' href='/'>🏠 হোম</a>
<a class='cn hot' data-v='c24' href='/?view=c24'><i class='dot'></i>🔥 ২৪ ঘণ্টার CONTEST</a>
<a class='cn gold' data-v='c7' href='/?view=c7'>👑 ৭ দিনের CONTEST</a>
<a class='cn mega' data-v='c30' href='/?view=c30'>💎 ৩০ দিনের 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'>© <data:blog.title/> — ছবির স্বত্ব সংশ্লিষ্ট শিল্পীর। আপত্তি থাকলে "রিপোর্ট" বাটন ব্যবহার করুন।
<div style='margin-top:8px'><a href='#' id='supl' style='color:var(--ac);font-weight:600'>💬 সাপোর্ট (WhatsApp)</a> · <a href='#' id='pwal' style='color:var(--ac);font-weight:600'>📲 অ্যাপ ইনস্টল করুন</a></div>
<div style='opacity:.5;font-size:11px'>theme v6</div><div class='dev'>Development by <b>Tanbin Farazi</b> · <a href='https://youtube.com/@tanbintechzone?si=87yRAD3ZbGZms4dY' rel='noopener' target='_blank'>▶ 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'>↑</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 {'&':'&','<':'<','>':'>','"':'"',"'":'''}[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>
