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

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

AI Test Lab

Test your prompts directly on official platforms.

ছবির সংগ্রহ ওয়েবসাইট রেডিকোড For Blogger

Downloadpopular

 









<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE html>

<html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' b:responsive='true' b:templateUrl='gallery.xml' b:templateVersion='1.0.0' expr:dir='data:blog.languageDirection' expr:lang='data:blog.locale' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>

<head>

<!--

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


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

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

        নাম: রাহিম

        ঠিকানা: ঢাকা

        WhatsApp: 017XXXXXXXX

        Telegram: @rahim

  ২) HTML ভিউতে এই ব্লকটি যোগ করুন (দরকারি লাইনগুলো রাখুন):

        div class vcfg  এর ভেতরে এভাবে:

        STATUS: FREE  (অথবা PAID)

        CATEGORY: Viral

        PRICE: ৳10

        VIEWS: 12K

        DOWNLOADS: 40

  ৩) অথবা এগুলো লেবেল দিয়েও দেওয়া যায় (লেবেল ব্লকের চেয়ে অগ্রাধিকার পায়):

        paid   বা   free

        price:10

        views:12000

        downloads:40

        cat:Viral

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

        Monetization    (জোর করে বিজ্ঞাপন চালু)

        noads           (এই ছবিতে কোনো বিজ্ঞাপন দেখাবে না)

        482913          (গোপন পিন)  অথবা  u-xxxxxxxxxx  (নিরাপদ পিন-কোড)

  ৪) নিরাপদ পিন-কোড বানাতে: আপনার সাইটের  /?pintool=1  পেজে যান।

  ৫) বিজ্ঞাপন কেমন দেখাবে আগে দেখতে (ফাঁকা বক্স সহ): যেকোনো পেজের শেষে  ?adpreview=1  যোগ করুন।


 বিজ্ঞাপন বসানোর নতুন উপায় (Layout থেকে):

  Layout → Ad Top / Ad Mid / Ad Bottom / Ad Sticky → "গ্যাজেট যোগ করুন" → HTML/JavaScript

  গ্যাজেটে কোডটি এভাবে মুড়ে বসান (script চালু হওয়া ঠিকমতো নিয়ন্ত্রণের জন্য):

        &lt;template&gt; আপনার বিজ্ঞাপনের কোড &lt;/template&gt;


 VIEWS ঘরে ব্লগার স্ট্যাটস থেকে আসল সংখ্যাটিই বসান।

-->

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

window.GCFG={

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

  ownerWhatsApp:'8801XXXXXXXXX',  /* দেশের কোডসহ, + ছাড়া। সাবমিট/কেনা/উইথড্র সব এই নম্বরে আসবে */

  bkash:'01XXXXXXXXX',            /* বিকাশ নম্বর (পেইড ছবি কেনার জন্য দেখাবে) */

  nagad:'01XXXXXXXXX',            /* নগদ নম্বর */

  rocket:'',                      /* রকেট (ফাঁকা রাখলে দেখাবে না) */

  currency:'৳',


  /* ===== ডাউনলোড আনলক (স্পনসর পেজ) ===== */

  sponsorUrl:'https://femalesfellowship.com/me7xy2yp?key=d67ad64222f27878af4b3d5dd1ae8222',

  waitSeconds:5,                  /* কত সেকেন্ড পর ডাউনলোড চালু হবে */

  unlockMinutes:30,               /* একবার আনলক করলে কত মিনিট খোলা থাকবে */

  sdSize:1280,                    /* সাধারণ (SD) ডাউনলোডের সাইজ, HD সবসময় আসল সাইজ */


  /* ===== পয়েন্ট ও উইথড্র ===== */

  viewsPerStep:1000,              /* প্রতি এত ভিউতে */

  pointsPerStep:100,              /* এত পয়েন্ট */

  minWithdraw:100,                /* ন্যূনতম উইথড্র পয়েন্ট */

  banHours:24,                    /* ভুল পিনে কত ঘণ্টা ব্যান */

  strikesToPermanent:2,           /* কত বার ভুল হলে স্থায়ী নিষেধাজ্ঞা */

  salt:'change-this-salt-123',    /* গোপন লেখা: পরে বদলালে আগের পিন-কোড কাজ করবে না */


  /* =====================================================

     বিজ্ঞাপন (শুধু ছবি খুললে দেখাবে — হোম পেজে কখনো না)

     ===================================================== */

  adsOn:true,                     /* false দিলে সব বিজ্ঞাপন বন্ধ */

  adsMode:'all',                  /* 'all' = প্রতিটি ছবিতে | 'monetized' = শুধু মনিটাইজড ছবিতে */

  monetizeViews:500,              /* 'monetized' মোডে: এত ভিউ হলে বিজ্ঞাপন */

  adsOnPaid:true,                 /* পেইড ছবির পেজেও বিজ্ঞাপন? (false = না) */


  /* --- AdSense (সবচেয়ে সহজ) --- */

  adClient:'',                    /* যেমন ca-pub-1234567890123456 */

  adSlot:'',                      /* সব জায়গার জন্য একটি স্লট আইডি (নিচেরগুলো ফাঁকা থাকলে এটি কাজ করবে) */

  adSlotTop:'',                   /* ছবির উপরের ব্যানার স্লট (ঐচ্ছিক) */

  adSlotMid:'',                   /* বাটনের নিচের স্লট (ঐচ্ছিক) */

  adSlotBottom:'',                /* সবার নিচের স্লট (ঐচ্ছিক) */

  adSlotSticky:'',                /* মোবাইলের নিচে আটকে থাকা ব্যানার স্লট (ঐচ্ছিক) */


  /* --- অন্য নেটওয়ার্ক (Adsterra, Monetag, PropellerAds ইত্যাদি) ---

     সহজ উপায়: সাইটে ঢুকে ঠিকানার শেষে  /?adtool=1  লিখুন। সেখানে নেটওয়ার্কের কোড যেমন আছে তেমন পেস্ট করলে

     নিচের ঘরের জন্য তৈরি লাইন পাবেন — সেটি এখানে ফাঁকা লাইনের জায়গায় বসান। */

  adCodeTop:'',

  adCodeMid:'',

  adCodeBottom:'',

  adCodeSticky:'',

  adCodeIframe:false,             /* true দিলে সব কোড আলাদা ফ্রেমে চলবে (invoke.js / document.write ভিত্তিক ব্যানারের জন্য দরকার) */


  /* --- নিজস্ব ব্যানার (সরাসরি স্পনসর/অ্যাফিলিয়েট) --- */

  /* দ্রষ্টব্য: উপরের adCode ঘরগুলো ফাঁকা থাকলে তবেই এই ব্যানার কাজ করবে */

  adBannerImg:'',   /* ব্যানার ছবির লিংক */

  adBannerUrl:'',              /* ক্লিক করলে যে লিংকে যাবে */

  adBannerAlt:'স্পনসর',


  /* --- কোথায় কোথায় দেখাবে --- */

  adShowTop:true,                 /* ছবির উপরে ব্যানার */

  adShowMid:true,                 /* বাটনের নিচে (ডাউনলোড বাটনের কাছে) */

  adShowBottom:true,              /* ছবির কার্ডের নিচে */

  adShowSticky:true,              /* নিচে আটকানো ব্যানার (ক্লোজ বাটনসহ) */

  adStickyMobileOnly:true,        /* শুধু মোবাইলে দেখাবে */

  adStickyHideMin:30,             /* ✕ চাপলে কত মিনিট লুকিয়ে থাকবে */


  /* --- আরও ফিচার --- */

  adLazy:true,                    /* স্ক্রলে দেখা গেলে তবেই বিজ্ঞাপন লোড (দ্রুত সাইট, ভালো ভিউযোগ্যতা) */

  adLabel:'বিজ্ঞাপন',             /* বিজ্ঞাপনের উপরের ছোট লেখা */

  adPlaceholder:false,            /* true হলে বিজ্ঞাপন না থাকলেও ফাঁকা বক্স দেখাবে (টেস্টের জন্য) */

  adblockNotice:false,            /* true হলে অ্যাড-ব্লকার থাকলে নরম অনুরোধ দেখাবে */


  /* ===== অন্যান্য ===== */

  reportEmail:'',

  maxPosts:500,

  bn:true                         /* সংখ্যা বাংলায় */

};

//]]></script>

<meta content='width=device-width, initial-scale=1' name='viewport'/>

<meta content='#6c5ce7' name='theme-color'/>

<title><data:blog.pageTitle/></title>

<b:include data='blog' name='all-head-content'/>

<link href='https://fonts.googleapis.com' rel='preconnect'/>

<link href='https://fonts.googleapis.com/css2?family=Hind+Siliguri:wght@400;500;600;700&amp;display=swap' rel='stylesheet'/>

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

try{var t=localStorage.getItem('th')||(window.matchMedia&&matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light');document.documentElement.setAttribute('data-t',t)}catch(e){}

//]]></script>

<b:skin><![CDATA[

/* ===== Modern Photo Gallery Theme v2 ===== */

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


/* ---------- হিরো ---------- */

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


/* ---------- ফিল্টার ---------- */

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

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

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

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

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


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

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

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


/* ---------- বিজ্ঞাপন ---------- */

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


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

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

@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 h2{margin-top:0}

.x{position:fixed;top:14px;right:14px;z-index:2147483000;pointer-events:auto;touch-action:manipulation;width:40px;height:40px;border-radius:50%;border:0;background:rgba(0,0,0,.65);color:#fff;font-size:18px;cursor:pointer}

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


/* ---------- টোস্ট ও টপ বাটন ---------- */

#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:400}

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

}

@media(min-width:900px){#stk{display:none!important}}

]]></b:skin>

</head>

<body>

<b:if cond='data:blog.pageType == &quot;item&quot;'>

<div id='bi' style='display:none' data-type='item' expr:data-pid='data:blog.postId'></div>

<b:elseif cond='data:blog.pageType == &quot;static_page&quot;'/>

<div id='bi' style='display:none' data-type='static'></div>

<b:else/>

<div id='bi' style='display:none' data-type='index'></div>

</b:if>


<header class='top'><div class='wrap bar'>

<a class='logo' expr:href='data:blog.homepageUrl'><span><data:blog.title/></span></a>

<div class='search'><input id='q' type='search' placeholder='নাম, ঠিকানা বা ট্যাগ দিয়ে খুঁজুন…'/></div>

<button class='ic' id='thm' title='থিম বদলান'>◐</button>

<button class='btn ghost' id='wdb'>উইথড্র</button>

<button class='btn' id='sub'>+ ছবি জমা দিন</button>

</div></header>


<main class='wrap'>

<div id='app'><div class='skg'><div class='sk'></div><div class='sk'></div><div class='sk'></div><div class='sk'></div><div class='sk'></div><div class='sk'></div><div class='sk'></div><div class='sk'></div></div></div>

<b:section class='main' id='main' showaddelement='yes'>

<b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog' version='2'>

<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:section>

</main>


<footer class='wrap'>© <data:blog.title/> — ছবির স্বত্ব সংশ্লিষ্ট শিল্পীর। আপত্তি থাকলে "রিপোর্ট" বাটন ব্যবহার করুন।

<div class='dev'>Development by <b>Tanbin Farazi</b> · <a href='https://youtube.com/@tanbintechzone?si=87yRAD3ZbGZms4dY' target='_blank' rel='noopener'>▶ YouTube: Tanbin Tech</a></div>

</footer>


<div id='modal'><div id='mbox'></div></div>

<div id='stk'></div>

<div id='lb'><img alt=''/></div>

<div id='toast'></div>


<!-- ===== বিজ্ঞাপন গ্যাজেট এলাকা (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 id='up' aria-label='উপরে যান'>↑</button>


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

(function(){

var CFG=window.GCFG||{};

/* লেয়াউটের HTML/JavaScript গ্যাজেট থেকে বিজ্ঞাপনের কোড পড়া (কোড <template> দিয়ে মুড়ে বসাতে হবে) */

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


function el(t,c,h){var e=document.createElement(t);if(c)e.className=c;if(h!=null)e.innerHTML=h;return e}

function esc(s){return String(s==null?'':s).replace(/[&<>"']/g,function(m){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[m]})}

function bn2en(s){return String(s==null?'':s).replace(/[০-৯]/g,function(d){return '০১২৩৪৫৬৭৮৯'.indexOf(d)})}

function toBn(s){return CFG.bn?String(s).replace(/\d/g,function(d){return '০১২৩৪৫৬৭৮৯'.charAt(d)}):String(s)}

function num(n){n=+n||0;return toBn(n>=1e6?(Math.round(n/1e5)/10)+'M':n>=1000?(Math.round(n/100)/10)+'K':n)}

function slug(s){return String(s).toLowerCase().replace(/[^a-z0-9ঀ-৿]+/g,'-').replace(/^-|-$/g,'')}

function ls(k,v){try{if(v===undefined)return localStorage.getItem(k);localStorage.setItem(k,v)}catch(e){}return null}

function waUrl(text,to){return 'https://wa.me/'+String(to||CFG.ownerWhatsApp||'').replace(/\D/g,'')+'?text='+encodeURIComponent(text||'')}

function cur(n){return toBn((CFG.currency||'৳')+n)}

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')},1800)}


/* ---------- Blogger ইমেজ রিসাইজ ---------- */

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


/* ---------- 12K / ১২ হাজার → সংখ্যা ---------- */

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=[];

  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(/^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 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)};

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

function byId(id){return POSTS.filter(function(x){return x.id===id})[0]}


/* ---------- পয়েন্ট ও মনিটাইজেশন ---------- */

function pts(p){var g=Math.floor(p.views/(CFG.viewsPerStep||1000))*(CFG.pointsPerStep||100);return Math.max(0,g-(p.wd||0))}

function isMon(p){return p.mon||p.views>=(CFG.monetizeViews||500)}


/* =====================================================

   বিজ্ঞাপন সিস্টেম — শুধু ছবির বিস্তারিত ভিউতে চলে

   ===================================================== */

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');a.setAttribute('data-id',p.id);var pt=pts(p);

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

    (p.category?'<span class="ct">'+esc(p.category)+'</span>':'')+(isMon(p)?'<span class="mb">\uD83D\uDCB0</span>':'')+'</div>'+

    '<div class="meta"><b>'+esc(p.name)+'</b>'+(p.addr?'<small>\uD83D\uDCCD '+esc(p.addr)+'</small>':'')+

    '<div class="st">'+(p.views?'<span>\uD83D\uDC41 '+num(p.views)+'</span>':'')+(p.dls?'<span>⬇ '+num(p.dls)+'</span>':'')+(pt?'<span>⭐ '+num(pt)+'</span>':'')+'</div></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 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 openM(node){hideSticky();MB.innerHTML='<button class="x" aria-label="বন্ধ">✕</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 class="x" aria-label="বন্ধ">✕</button>'+(CURLIST.length>1?'<button class="nv prev" aria-label="আগেরটি">‹</button><button class="nv next" aria-label="পরেরটি">›</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){}}

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 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>পেইড ছবি: পেমেন্টের পর WhatsApp-এ অরিজিনাল ফাইল পাঠানো হবে।</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পেমেন্ট করার পর ট্রানজেকশন আইডি পাঠাচ্ছি।';

  var box=el('div','fbox','<h2>\uD83D\uDED2 ছবি কিনুন — '+cur(p.price||0)+'</h2><p>নিচের যেকোনো নম্বরে <b>'+cur(p.price||0)+'</b> সেন্ড মানি করুন, তারপর WhatsApp-এ ট্রানজেকশন আইডি জানান।</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 wa" target="_blank" rel="noopener" href="'+esc(waUrl(msg))+'">WhatsApp-এ জানান</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 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)+'"/><button class="zm" data-a="zoom" aria-label="বড় করুন">⤢</button></div><div class="pinfo">'+

    '<h2>'+esc(p.name)+'</h2>'+(p.addr?'<p class="addr">\uD83D\uDCCD '+esc(p.addr)+'</p>':'')+

    '<div class="stats">'+(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> পয়েন্ট</span>':'')+(mon?'<span class="mon">\uD83D\uDCB0 মনিটাইজড</span>':'')+'</div>'+

    '<div class="dla">'+dlHtml(p)+'</div>'+

    '<div class="btns">'+

    (p.wa?'<a class="btn wa" target="_blank" rel="noopener nofollow" href="'+esc(p.wa)+'">WhatsApp</a>':'')+

    (p.tg?'<a class="btn tg" target="_blank" rel="noopener nofollow" href="'+esc(p.tg)+'">Telegram</a>':'')+

    '<button class="btn ghost" data-a="sh">শেয়ার</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==='zoom')zoom(p);

    if(a==='sh'){var u=p.url||location.href;if(navigator.share)navigator.share({title:p.name,url:u}).catch(function(){});

      else if(navigator.clipboard){navigator.clipboard.writeText(u);toast('লিংক কপি হয়েছে ✓')}}

    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 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)+' পয়েন্ট। ন্যূনতম '+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='';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>'});

    var min=CFG.minWithdraw||100;

    if(total<min){box.innerHTML='<h2>✅ পিন সঠিক</h2><table class="tbl">'+rows+'</table><div class="note">মোট পয়েন্ট: <b>'+num(total)+'</b>। উইথড্রের জন্য ন্যূনতম '+num(min)+' পয়েন্ট লাগবে।</div>';return}

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

      '<form class="form" id="wf2"><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/><button class="btn wa" type="submit">WhatsApp-এ রিকোয়েস্ট পাঠান</button></form>';

    box.querySelector('#wf2').onsubmit=function(e){e.preventDefault();

      var am=Math.min(total,Math.max(min,+box.querySelector('#wam').value||total));

      var msg='\uD83D\uDCB8 উইথড্র রিকোয়েস্ট\nনাম: '+list[0].name+'\nপিন: '+pin+'\nমোট পয়েন্ট: '+total+'\nউইথড্র: '+am+'\nমেথড: '+box.querySelector('#wmt').value+'\nনম্বর: '+box.querySelector('#wno').value+'\nছবি:\n'+list.slice(0,10).map(function(p){return (p.url||p.id)+' (ভিউ '+p.views+')'}).join('\n');

      window.open(waUrl(msg),'_blank')}}

  if(!banView(getBan()))form()}


/* ---------- হোম (কোনো বিজ্ঞাপন নেই) ---------- */

function filtered(){

  var q=F.q.toLowerCase(),l=POSTS.filter(function(p){

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

  var cats={},tv=0,fr=0;POSTS.forEach(function(p){if(p.category)cats[p.category]=1;tv+=p.views;if(!p.paid)fr++});

  var ck=Object.keys(cats);

  app.innerHTML='<section class="hero"><h1>সুন্দর ছবির সংগ্রহ</h1><p>১৬:৯ ও ৯:১৬ — আপনার তোলা বা ডিজাইন করা ছবি জমা দিন, ডাউনলোড করুন, শিল্পীর সাথে সরাসরি যোগাযোগ করুন।</p>'+

    '<div class="hst"><span>\uD83D\uDDBC '+num(POSTS.length)+' ছবি</span><span>\uD83D\uDC41 '+num(tv)+' ভিউ</span><span>\uD83C\uDD93 '+num(fr)+' ফ্রি</span></div></section>'+

    '<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>':'')+

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

  app.querySelector('#srt').onchange=function(){F.sort=this.value;draw()};

  window.__draw=draw;draw()}


/* ---------- ক্রিয়েটর পেজ (কোনো বিজ্ঞাপন নেই) ---------- */

function renderCreator(cid){

  var list=POSTS.filter(function(p){return p.cid===cid});

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

  function go(p){

    app.innerHTML='';app.appendChild(postView(p));showSticky(p);

    var o=POSTS.filter(function(x){return x.cid===p.cid&&x.id!==p.id});

    if(o.length){app.appendChild(el('h3','sec','এই শিল্পীর আরও ছবি'));app.appendChild(mkGrid(o))}

    var m=POSTS.filter(function(x){return x.cid!==p.cid}).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);go(q)})})}


/* ---------- পিন-কোড টুল (শুধু অ্যাডমিনের জন্য: /?pintool=1) ---------- */

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


/* ---------- বিজ্ঞাপন কোড কনভার্টার (শুধু অ্যাডমিনের জন্য: /?adtool=1) ---------- */

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('কপি হয়েছে ✓')}}}


/* ---------- সাবমিট (WhatsApp-এ) ---------- */

function openSubmit(){

  var cats={};POSTS.forEach(function(p){if(p.category)cats[p.category]=1});

  var box=el('div','fbox','<h2>ছবি জমা দিন (WhatsApp-এ)</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="st" id="sst"><option value="FREE">ফ্রি ছবি</option><option value="PAID">পেইড ছবি</option></select>'+

    '<input name="price" id="spr" type="number" min="1" placeholder="প্রাইস" hidden/>'+

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

    '<a class="btn wa" id="sbtn" href="#" target="_blank" rel="noopener">WhatsApp-এ পাঠান</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)">তথ্য পাঠানোর পর WhatsApp চ্যাটে ছবিটি (\uD83D\uDCCE) যুক্ত করে পাঠান।</p></form>');

  openM(box);

  var f=box.querySelector('#sf'),fi=box.querySelector('#sfile'),prev=box.querySelector('#sprev'),file=null;

  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স্ট্যাটাস: '+st+(st==='PAID'&&pr?' '+(CFG.currency||'৳')+pr:'')+'\n\n(ছবি নিচে যুক্ত করছি)'}

  box.querySelector('#sbtn').addEventListener('click',function(e){

    if(!f.reportValidity()){e.preventDefault();return}

    this.href=waUrl(text())});

  box.querySelector('#sshare').onclick=function(){if(!f.reportValidity())return;

    navigator.share({files:[file],text:text()}).catch(function(){})}}


/* ---------- হেডার ও অন্যান্য ---------- */

document.getElementById('sub').onclick=openSubmit;

document.getElementById('wdb').onclick=function(){openWithdraw(null)};

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


/* ---------- শুরু ---------- */

detectBlock();

if(TYPE==='static'){app.style.display='none'}

else{

  document.body.classList.add('app-on');

  var qs=new URLSearchParams(location.search);

  if(qs.get('pintool')){renderTool()}

  else if(qs.get('adtool')){renderAdTool()}

  else loadPosts().then(function(){

    if(TYPE==='item'&&PID)return renderItem(PID);

    if(qs.get('creator'))return renderCreator(qs.get('creator'));

    if(qs.get('q')){F.q=qs.get('q');qi.value=F.q}

    renderHome()

  }).catch(function(){app.innerHTML='<div class="empty">লোড করা যায়নি। ব্লগের Settings → Site feed "Full" করা আছে কিনা দেখুন।</div>'})

}

})();

//]]></script>

</body>

</html>

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

Tanbin Farazi