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

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

AI Test Lab

Test your prompts directly on official platforms.

বেস্ট ডিজাইনের ভিডিও প্লাটোফর্ম রেডিকোড 🔥

Lockpopularprice-170
Lockpopularprice-170
✦Tanbin Premium
🔐

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

মাত্র ৫০ টাকা

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

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

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

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

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

 







✦ CODE SNIPPET
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:version='2' class='v2' expr:dir='data:blog.languageDirection' 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>
<meta content='width=device-width, initial-scale=1, viewport-fit=cover' name='viewport'/>
<meta content='notranslate' name='google'/>
<title><data:blog.pageTitle/></title>
<b:include data='blog' name='all-head-content'/>

<!-- SEO / Social Preview / Mobile meta -->
<meta content='yes' name='mobile-web-app-capable'/>
<meta content='yes' name='apple-mobile-web-app-capable'/>
<meta content='black' name='apple-mobile-web-app-status-bar-style'/>
<meta expr:content='data:blog.title' name='apple-mobile-web-app-title'/>
<meta content='#0a0a0c' name='theme-color'/>
<link href='https://fonts.googleapis.com' rel='preconnect'/>
<link crossorigin='crossorigin' href='https://fonts.gstatic.com' rel='preconnect'/>
<link href='https://fonts.googleapis.com/css2?family=Hind+Siliguri:wght@400;500;600;700&amp;family=Playfair+Display:wght@600;700;800&amp;display=swap' rel='stylesheet'/>
<meta content='telephone=no' name='format-detection'/>
<meta expr:content='data:blog.title' property='og:site_name'/>
<meta content='bn_BD' property='og:locale'/>
<meta content='summary_large_image' name='twitter:card'/>
<meta expr:content='data:blog.pageTitle' name='twitter:title'/>
<b:if cond='data:blog.metaDescription'>
  <meta expr:content='data:blog.metaDescription' name='twitter:description'/>
</b:if>
<b:if cond='data:blog.postImageUrl'>
  <meta expr:content='data:blog.postImageUrl' name='twitter:image'/>
<b:else/>
  <!-- Replace the link below with your own 1200x630 image URL (homepage share preview) -->
  <meta content='https://via.placeholder.com/1200x630.png?text=VIDORA' property='og:image'/>
  <meta content='https://via.placeholder.com/1200x630.png?text=VIDORA' name='twitter:image'/>
</b:if>
<link expr:href='data:blog.homepageUrl + &quot;sitemap.xml&quot;' rel='sitemap' type='application/xml'/>

<script>
//<![CDATA[
/* =====================================================================
   WEBSITE CONFIGURATION - শুধু এই অংশ পরিবর্তন করলেই হবে
   ===================================================================== */
var VCONFIG = {
  siteName : 'VIDORA',
  logo     : '',                       // লোগো ইমেজের URL (ফাঁকা রাখলে নাম দেখাবে)
  favicon  : '',                       // Favicon URL (৫১২x৫১২ PNG ভালো)। ফাঁকা রাখলে সোনালি ▶ আইকন অটো তৈরি হবে

  whatsapp : '8801927661298',          // WhatsApp নম্বর (দেশের কোড সহ, + ছাড়া)
  bkash    : '01927661298',
  nagad    : '01927661298',
  price    : '৳100',                   // ডিফল্ট Premium ভিডিও প্রাইস (পোস্টে PRICE দিলে সেটা কাজ করবে)

  /* ===== PIN আনলক =====
     প্রতিটি পোস্টে আলাদা PIN: vcfg-তে  PIN: 4821
     পোস্টে PIN না দিলে masterPin চলবে (ফাঁকা থাকলে চলবে না)
     PIN বানাতে যেকোনো পেজের লিংকের শেষে #pinsetup দিন (যেমন yourblog.com/#pinsetup) */
  masterPin: '',

  facebook : 'https://facebook.com/yourpage',      // ফাঁকা রাখলে বাটন দেখাবে না
  telegram : 'https://t.me/yourchannel',
  youtube  : 'https://youtube.com/@yourchannel',

  colors : {
    accent : '#e8c26a',
    accent2: '#b98a2e',
    darkBg : '#0a0a0c',
    darkCard: '#141418',
    lightBg: '#f6f3ec',
    lightCard:'#ffffff'
  },

  // ক্যাটাগরি = Blogger Label (নাম হুবহু এক হতে হবে)
  categories : [['Viral','🔥'],['Entertainment','🎬'],['Funny','😂'],['Music','🎵'],
                ['Trending','🎥'],['Emotional','❤️'],['Latest','⚡'],['Premium','🔒']],

  nav : [['Home','/'],['Viral Videos','/search/label/Viral'],['Trending','/search/label/Trending'],
         ['Latest Videos','/search'],['Premium Videos','/search/label/Premium']],

  // মোবাইলের নিচের বার [আইকন, নাম, লিংক] ('#pkg' = প্যাকেজ পপআপ)
  bottomNav : [['🏠','Home','/'],['🔥','Trending','/search/label/Trending'],
               ['📦','Packages','#pkg'],['🔒','Premium','/search/label/Premium']],

  shorts : true,                       // true = Shorts (৯:১৬), false = সাধারণ ১৬:৯

  /* ===== অফার ব্যানার (টাইমার সহ) =====
     discount: একক Premium ভিডিওর দামে কত % ছাড় (0 = শুধু ব্যানার)
     endDate : 'YYYY-MM-DDTHH:MM:SS+06:00' (সময় পার হলে নিজে বন্ধ হবে) */
  offer : {
    enabled : true,
    text    : '🔥 বিশেষ অফার! সব Premium ভিডিওতে ছাড়',
    discount: 20,
    endDate : '2026-12-31T23:59:59+06:00',
    button  : '📦 প্যাকেজ দেখুন'
  },

  /* ===== Premium প্যাকেজ =====
     name  : প্যাকেজের নাম
     videos: কয়টি ভিডিও আনলক করা যাবে (ক্রেতা নিজে বেছে নেবে)
             0 = সব Premium ভিডিও (একবার PIN দিলেই সব একসাথে আনলক)
     price : প্যাকেজের দাম (এখানে সরাসরি লিখুন)   old: আগের দাম (ফাঁকা রাখা যায়)
     tag   : ব্যাজ (ফাঁকা রাখা যায়)   note: ছোট লেখা (ফাঁকা রাখা যায়)
     pin   : এই প্যাকেজের PIN। ফাঁকা থাকলে প্যাকেজ কাজ করবে না!
             #pinsetup দিয়ে বানান। ক্রেতাকে পেমেন্টের পর WhatsApp-এ দিন। */
  packages : [
    {id:'p3',  name:'স্টার্টার প্যাক',  videos:10,  price:'৳৫০', old:'৳১৫০',  pin:'', tag:'',            note:''},
    {id:'p5',  name:'রেগুলার ভিডিও প্যাক',   videos:20,  price:'৳১০০', old:'৳৩০০',  pin:'', tag:'🔥 জনপ্রিয়',  note:''},
    {id:'p10', name:'ভিআইপি প্যাক',    videos:30, price:'৳১৫০', old:'৳৪৫০', pin:'', tag:'💎 সেরা অফার', note:''}
    /* সব Premium ভিডিও একবারে খুলে দিতে চাইলে এই লাইন (আগের লাইনের শেষে কমা দিয়ে) যোগ করুন:
    ,{id:'all', name:'সব ভিডিও পাস', videos:0, price:'৳1500', old:'', pin:'', tag:'👑 অল অ্যাক্সেস', note:'একবার PIN দিলেই সব Premium ভিডিও'} */
  ],
  /* প্যাকেজ সেকশন হোমপেজের একদম নিচে (ভিডিওর পরে) দেখাবে। বন্ধ করতে false দিন */
  pkgOnHome : true,

  /* ===== Google Analytics 4 (G-XXXXXXXXXX), ফাঁকা = বন্ধ ===== */
  ga : '',

  /* ===== PWA (icon: ৫১২x৫১২ PNG URL, ফাঁকা = অটো আইকন) ===== */
  pwa : { enabled:true, name:'', shortName:'', icon:'', themeColor:'' },

  /* ===== ADS =====
     সবচেয়ে সহজ: Layout -> "Ad: ..." গ্যাজেটে কোড পেস্ট করুন
     জায়গা: top, feed, vtop, player, after, mid, bottom, sticky */
  ads : {
    enabled : false,
    adsenseClient : 'ca-pub-XXXXXXXXXXXXXXXX',
    slots  : { top:'', feed:'', vtop:'', player:'', after:'', mid:'', bottom:'', sticky:'' },
    custom : { top:'', feed:'', vtop:'', player:'', after:'', mid:'', bottom:'', sticky:'' },
    feedEvery : 6
  },
  defaultCategory : 'Viral'
};

(function(){
  var c = VCONFIG.colors, s = document.createElement('style');
  s.textContent = ':root{--ac:'+c.accent+';--ac2:'+c.accent2+';--bg:'+c.darkBg+';--card:'+c.darkCard+'}' +
                  '[data-theme=light]{--bg:'+c.lightBg+';--card:'+c.lightCard+'}' +
                  ':root{--ratio:'+(VCONFIG.shorts?'9/16':'16/9')+';--pw:'+(VCONFIG.shorts?'420px':'100%')+'}';
  document.documentElement.className += VCONFIG.shorts ? ' shorts' : ' wide';
  document.head.appendChild(s);
  var t = 'dark';
  try { t = localStorage.getItem('vtheme') || 'dark'; } catch(e) {}
  document.documentElement.setAttribute('data-theme', t);
})();
//]]>
</script>

<b:skin><![CDATA[
/* =====================================================================
   VIDORA - Premium Classic (gold on ink), mobile-first
   ===================================================================== */
:root{
  --tx:#f3efe6;--mut:#a59f90;--bd:rgba(255,255,255,.08);
  --ln:color-mix(in srgb,var(--ac) 24%,transparent);
  --gt:var(--ac);--ink:#1b1406;
  --sh:0 12px 30px rgba(0,0,0,.5);--r:14px
}
[data-theme=light]{
  --tx:#1c1810;--mut:#6f6755;--bd:rgba(0,0,0,.08);
  --gt:#8a5f0f;--sh:0 10px 26px rgba(60,44,10,.14)
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{background:var(--bg);color:var(--tx);font-family:'Hind Siliguri','Noto Sans Bengali',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;line-height:1.6;transition:background .25s,color .25s;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
button,input,select{font:inherit;color:inherit}
input,select{font-size:16px}
::selection{background:var(--ac);color:var(--ink)}
:focus-visible{outline:2px solid var(--ac);outline-offset:2px}
#navbar,#navbar-iframe,.Navbar{display:none!important;height:0!important}
.wrap{max-width:1280px;margin:0 auto;padding:0 14px}
@media(min-width:700px){.wrap{padding:0 20px}}
.mut{color:var(--mut)} .sm{font-size:.82rem}
.brand,.vsec h2,.vtitle,.vbox h3,.pk h3,.pk .cnt,.vdr .dh b,.vlock b{font-family:'Playfair Display','Hind Siliguri',Georgia,serif}
@media(max-width:899px){body{padding-bottom:calc(64px + env(safe-area-inset-bottom,0px))}}

/* ===== Header ===== */
.vhead{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--ln)}
.vh{display:flex;align-items:center;gap:8px;height:56px}
.ib{width:40px;height:40px;border-radius:50%;border:1px solid var(--ln);background:var(--card);cursor:pointer;font-size:1.05rem;flex:none;display:inline-flex;align-items:center;justify-content:center;transition:border-color .2s}
.ib:hover{border-color:var(--ac)}
#vmenu{display:inline-flex}
#vsbtn{display:none;margin-left:auto}
.brand{font-weight:800;font-size:1.28rem;letter-spacing:2.5px;display:flex;align-items:center;gap:6px;white-space:nowrap;background:linear-gradient(135deg,#f8e9b0,var(--ac),var(--ac2));-webkit-background-clip:text;background-clip:text;color:transparent}
.brand span{color:var(--ac);-webkit-text-fill-color:var(--ac)}
.brand img{height:32px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.4))}
#vnav{display:none;gap:2px;margin-left:10px}
#vnav a{padding:7px 12px;border-radius:99px;font-size:.92rem;color:var(--mut);transition:.2s}
#vnav a:hover,#vnav a.on{background:color-mix(in srgb,var(--ac) 12%,transparent);color:var(--gt)}
.vsearch{margin-left:auto;display:flex;background:var(--card);border:1px solid var(--ln);border-radius:99px;overflow:hidden;min-width:0;flex:1;max-width:340px;transition:.2s}
.vsearch:focus-within{border-color:var(--ac);box-shadow:0 0 0 3px color-mix(in srgb,var(--ac) 16%,transparent)}
.vsearch input{background:none;border:0;outline:0;padding:9px 14px;min-width:0;width:100%}
.vsearch button{background:none;border:0;padding:0 14px;cursor:pointer}
.chips{display:flex;gap:8px;overflow-x:auto;padding:0 0 10px;scrollbar-width:none;-webkit-overflow-scrolling:touch;-webkit-mask-image:linear-gradient(90deg,#000 94%,transparent);mask-image:linear-gradient(90deg,#000 94%,transparent)}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;padding:7px 15px;border-radius:99px;background:var(--card);border:1px solid var(--ln);font-size:.86rem;transition:.2s;white-space:nowrap}
.chip:hover,.chip.on{background:linear-gradient(135deg,#f6e3a1,var(--ac),var(--ac2));border-color:transparent;color:var(--ink);font-weight:600}
@media(max-width:699px){
  .brand{margin-right:auto}
  #vsbtn{display:inline-flex;margin-left:0}
  .vsearch{display:none;position:absolute;left:12px;right:12px;top:100%;margin:8px 0 0;max-width:none;z-index:60;box-shadow:var(--sh)}
  .vhead.ss .vsearch{display:flex}
}
@media(min-width:900px){#vnav{display:flex}#vmenu{display:none}.vh{height:62px}}

/* ===== Drawer ===== */
.vdr{position:fixed;inset:0;z-index:120;display:none}
.vdr.on{display:block}
.vdr .ov{position:absolute;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(2px)}
.vdr .pn{position:absolute;left:0;top:0;bottom:0;width:min(84vw,330px);background:var(--card);padding:16px 14px calc(18px + env(safe-area-inset-bottom,0px));overflow-y:auto;animation:slide .22s;border-right:1px solid var(--ln)}
@keyframes slide{from{transform:translateX(-100%)}to{transform:none}}
.vdr .dh{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:1.25rem}
.vdr .dh b{color:var(--gt);letter-spacing:2px}
.vdr .vx2{width:38px;height:38px;border-radius:50%;border:0;background:var(--bg);cursor:pointer}
.vdr a.dl{display:block;padding:12px 10px;border-radius:12px;font-size:1rem}
.vdr a.dl:hover,.vdr a.dl.on{background:var(--bg);color:var(--gt)}
.vdr h4{margin:14px 10px 6px;font-size:.78rem;color:var(--mut);font-weight:600}
.vdr .soc2{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.vdr .soc2 a{padding:7px 14px;border-radius:99px;background:var(--bg);border:1px solid var(--ln);font-size:.85rem}

/* ===== Bottom Nav ===== */
.vbn{position:fixed;left:0;right:0;bottom:0;z-index:55;display:flex;background:color-mix(in srgb,var(--bg) 95%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--ln);padding-bottom:env(safe-area-inset-bottom,0px)}
.vbn a,.vbn button{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;padding:8px 2px 6px;font-size:.68rem;color:var(--mut);background:none;border:0;cursor:pointer;min-width:0;position:relative}
.vbn span{font-size:1.28rem;line-height:1.2}
.vbn a.on{color:var(--gt);font-weight:700}
.vbn a.on::before{content:'';position:absolute;top:0;left:30%;right:30%;height:2px;border-radius:0 0 4px 4px;background:var(--ac)}
@media(min-width:900px){.vbn{display:none}}

/* ===== Offer Banner (slim) ===== */
.voff{background:linear-gradient(135deg,#f8e9b0,#d9aa4e 55%,var(--ac2));color:#2a1d05;font-size:.82rem}
.voff .wrap{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:4px 10px;padding:6px 42px 6px 14px;position:relative;text-align:center;min-height:38px}
.voff .ot{font-weight:700}
.voff .vt{display:inline-flex;gap:3px;align-items:center}
.voff .vt b{background:#1a1205;color:#f6e3a1;border-radius:6px;padding:0 6px;font-variant-numeric:tabular-nums}
.voff .vt i{font-style:normal;font-size:.7rem;margin-right:3px;opacity:.85}
.voff .obtn{background:#1a1205;color:#f6e3a1;padding:3px 13px;border-radius:99px;font-weight:700;font-size:.78rem}
.voff .ox{position:absolute;right:6px;top:50%;margin-top:-17px;width:34px;height:34px;border-radius:50%;border:0;background:rgba(0,0,0,.18);color:#2a1d05;cursor:pointer;z-index:2}

/* ===== Sections & Grid ===== */
main{padding:16px 0 36px;min-height:60vh}
.vsec{margin-bottom:28px}
.vsh{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-bottom:12px}
.vsec h2{font-size:1.25rem;font-weight:700;letter-spacing:.3px;line-height:1.3}
.vsec h2::after{content:'';display:block;width:46px;height:2px;margin-top:7px;background:linear-gradient(90deg,var(--ac),transparent)}
.vall{font-size:.82rem;color:var(--gt);padding:6px 2px;white-space:nowrap}
.vsub{margin:-4px 0 12px}
.vgrid{display:grid;gap:10px;grid-template-columns:repeat(2,1fr)}
@media(min-width:640px){.vgrid{grid-template-columns:repeat(3,1fr);gap:14px}}
@media(min-width:900px){.vgrid{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1200px){.vgrid{grid-template-columns:repeat(5,1fr)}}
.wide .vgrid{grid-template-columns:1fr}
@media(min-width:560px){.wide .vgrid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:900px){.wide .vgrid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1200px){.wide .vgrid{grid-template-columns:repeat(4,1fr)}}
.vraw{display:block}
.vempty{padding:40px 0;text-align:center;color:var(--mut)}

/* swipe rows on phones/tablets (Trending, Most Viewed) */
@media(max-width:899px){
  .rail .vgrid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:10px;margin:0 -14px;padding:0 14px 8px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .rail .vgrid::-webkit-scrollbar{display:none}
  .rail .vc{flex:0 0 44%;scroll-snap-align:start}
  .wide .rail .vc{flex-basis:78%}
}
@media(min-width:560px) and (max-width:899px){.rail .vc{flex-basis:30%}.wide .rail .vc{flex-basis:46%}}

/* ===== Video Card ===== */
.vc{display:block;transition:transform .25s}
@media(hover:hover){.vc:hover{transform:translateY(-4px)}}
.vth{position:relative;display:block;aspect-ratio:var(--ratio);border-radius:var(--r);overflow:hidden;background:linear-gradient(135deg,#23232e,#12121a);border:1px solid var(--ln);box-shadow:var(--sh);transition:border-color .25s,box-shadow .25s}
@media(hover:hover){.vc:hover .vth{border-color:var(--ac);box-shadow:0 14px 34px rgba(0,0,0,.55),0 0 0 1px color-mix(in srgb,var(--ac) 35%,transparent)}}
.vth img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
@media(hover:hover){.vc:hover .vth img{transform:scale(1.06)}}
.vplay{position:absolute;left:50%;top:50%;width:48px;height:48px;margin:-24px 0 0 -24px;border-radius:50%;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1.5px solid var(--ac);display:flex;align-items:center;justify-content:center;color:var(--ac);font-size:1.05rem;padding-left:3px;transition:.25s}
.vplay::after{content:'';position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--ac);opacity:0;animation:ring 2.4s infinite}
@media(hover:hover){.vc:hover .vplay{background:var(--ac);color:var(--ink);transform:scale(1.1)}}
@keyframes ring{0%{transform:scale(1);opacity:.6}100%{transform:scale(1.6);opacity:0}}
.vbadge{position:absolute;top:9px;left:9px;font-size:.68rem;font-weight:700;padding:3px 10px;border-radius:99px;color:#fff;letter-spacing:.4px}
.vbadge.free{background:rgba(22,163,74,.92)}
.vbadge.lock{background:linear-gradient(135deg,#f6e3a1,var(--ac2));color:var(--ink)}
.vbadge.lock i{display:inline-block;font-style:normal;animation:shake 2.6s infinite}
.vdur{position:absolute;top:9px;right:9px;font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:6px;color:#fff;background:rgba(0,0,0,.65)}
@keyframes shake{0%,80%,100%{transform:rotate(0)}85%{transform:rotate(-14deg)}90%{transform:rotate(12deg)}95%{transform:rotate(-8deg)}}
.vcap{position:absolute;left:0;right:0;bottom:0;padding:40px 10px 10px;background:linear-gradient(transparent,rgba(0,0,0,.9));color:#fff}
.vcap h3{font-size:.88rem;font-weight:600;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vcap .vm{color:rgba(255,255,255,.82);font-size:.7rem;margin-top:3px;display:flex;flex-wrap:wrap;gap:2px 8px}
.vcap .vprc b{color:var(--ac)}
.vcap .vprc s{opacity:.7}
.vm{margin-top:4px;font-size:.8rem;color:var(--mut);display:flex;flex-wrap:wrap;gap:4px 10px}

/* ===== Pager ===== */
.vpager{display:flex;justify-content:space-between;gap:10px;margin-top:14px}
.vpager a{padding:11px 20px;border-radius:99px;background:var(--card);border:1px solid var(--ln);font-size:.9rem}
.vpager a:hover{background:var(--ac);color:var(--ink);border-color:transparent}

/* ===== Package Cards ===== */
.vpk{display:grid;gap:14px;grid-template-columns:1fr}
@media(min-width:640px){.vpk{grid-template-columns:repeat(3,1fr)}.vpk.one{grid-template-columns:1fr}}
@media(max-width:639px){
  .vpk.rail{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin:0 -14px;padding:14px 14px 8px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .vpk.rail::-webkit-scrollbar{display:none}
  .vpk.rail .pk{flex:0 0 78%;scroll-snap-align:center}
}
.pk{position:relative;display:flex;flex-direction:column;gap:6px;background:linear-gradient(180deg,var(--card),color-mix(in srgb,var(--card) 92%,#000));border:1px solid var(--ln);border-radius:16px;padding:20px 16px 16px;box-shadow:var(--sh)}
.pk.hot{border-color:var(--ac);box-shadow:0 12px 34px color-mix(in srgb,var(--ac2) 30%,transparent)}
.pk .tag{position:absolute;top:-11px;right:14px;background:linear-gradient(135deg,#f6e3a1,var(--ac2));color:var(--ink);font-size:.72rem;font-weight:700;padding:3px 11px;border-radius:99px}
.pk h3{font-size:1.02rem}
.pk .cnt{font-size:1.5rem;font-weight:800;line-height:1.2;color:var(--gt)}
.pk .pr{font-size:1.15rem;display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px}
.pk .pr s{color:var(--mut);font-size:.9rem}
.pk .save{font-style:normal;font-size:.72rem;font-weight:700;background:#16a34a;color:#fff;padding:2px 8px;border-radius:99px}
.pk .vbtn{margin-top:8px}

/* ===== Video Page ===== */
.vpost{max-width:980px;margin:0 auto}
.vtitle{font-size:1.5rem;line-height:1.4;margin:2px 0 14px}
@media(max-width:560px){.vtitle{font-size:1.18rem;margin-bottom:12px}}
#vplayer{max-width:var(--pw);margin:0 auto}
.shorts #vplayer{max-width:max(260px,min(420px,calc((100svh - 150px) * .5625)))}
.vstage{position:relative;aspect-ratio:var(--ratio);background:#000;border:1px solid var(--ln);border-radius:var(--r);overflow:hidden;box-shadow:var(--sh)}
.vstage>img{width:100%;height:100%;object-fit:cover}
.vstage iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.vbig{position:absolute;left:50%;top:50%;width:80px;height:80px;margin:-40px 0 0 -40px;border-radius:50%;border:0;cursor:pointer;background:linear-gradient(135deg,#f6e3a1,var(--ac),var(--ac2));color:var(--ink);font-size:1.9rem;padding-left:6px;animation:pulseg 2.2s infinite}
@keyframes pulseg{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--ac) 55%,transparent)}100%{box-shadow:0 0 0 26px transparent}}
.vspin{position:absolute;left:50%;top:50%;width:42px;height:42px;margin:-21px 0 0 -21px;border:4px solid rgba(255,255,255,.22);border-top-color:var(--ac);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.vlock{position:absolute;inset:0;background:rgba(8,8,10,.86);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;text-align:center;gap:6px;padding:16px;color:#fff;overflow-y:auto}
.vlock>:first-child{margin-top:auto}
.vlock>:last-child{margin-bottom:auto}
.vlock .ic{font-size:2.6rem;animation:shake 2.6s infinite}
.vlock b{font-size:1.15rem;letter-spacing:2px;color:var(--ac)}
.vlock p{opacity:.85;margin-bottom:6px}
.vlock s{opacity:.7;font-size:.85em}
@media(max-width:560px){.wide .vlock{padding:10px;gap:3px}.wide .vlock .ic{font-size:1.5rem}.wide .vlock p{margin-bottom:2px;font-size:.85rem}.wide .vlock .vbtn{padding:9px 18px;font-size:.88rem}}
.vbtn{border:0;cursor:pointer;padding:12px 24px;border-radius:99px;font-weight:700;color:var(--ink);background:linear-gradient(135deg,#f6e3a1,var(--ac),var(--ac2));box-shadow:0 6px 18px color-mix(in srgb,var(--ac2) 38%,transparent);letter-spacing:.3px;transition:.2s}
.vbtn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.vbtn:active{transform:scale(.98)}
.vbtn.wa{background:#25d366;color:#fff;width:100%;margin-top:6px;box-shadow:0 6px 18px rgba(37,211,102,.3)}
.vlink{background:none;border:0;color:#fff;opacity:.9;text-decoration:underline;cursor:pointer;font-size:.88rem;margin-top:4px;padding:6px}

.vpinbox{width:100%;max-width:300px;margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.2)}
.vpinbox small{display:block;opacity:.85;margin-bottom:8px;font-size:.82rem}
.vpinrow{display:flex;gap:6px}
.vpinrow input{flex:1;min-width:0;padding:10px 12px;border-radius:99px;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.12);color:#fff;outline:0;text-align:center;letter-spacing:4px;font-weight:700}
.vpinrow input:focus{border-color:var(--ac)}
.vpinrow input::placeholder{letter-spacing:0;font-weight:400;color:rgba(255,255,255,.6)}
.vpinrow .vbtn{padding:10px 18px}
.vpinrow.bad input{border-color:#ef4444;animation:nope .35s}
@keyframes nope{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.vout{margin-top:10px;padding:10px 12px;border-radius:10px;background:var(--bg);border:1px dashed var(--ln);word-break:break-all;font-weight:700}

.vtools{display:flex;gap:8px;margin:12px 0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.vtools::-webkit-scrollbar{display:none}
.vtools button,.vtools a{flex:none;padding:9px 15px;border-radius:99px;background:var(--card);border:1px solid var(--ln);cursor:pointer;font-size:.86rem;white-space:nowrap}
.vtools button:hover,.vtools a:hover{border-color:var(--ac);color:var(--gt)}
.vmeta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;color:var(--mut);font-size:.88rem;margin-bottom:14px}
.vmeta a:hover{color:var(--gt)}
.pill{padding:3px 12px;border-radius:99px;font-size:.78rem;font-weight:700;color:#fff}
.pill.free{background:#16a34a}
.pill.lock{background:linear-gradient(135deg,#f6e3a1,var(--ac2));color:var(--ink)}
.vdesc{background:var(--card);border:1px solid var(--ln);border-radius:var(--r);padding:16px;overflow-wrap:anywhere}
.vdesc:empty{display:none}
.vdesc img{border-radius:10px;margin:8px 0}
.vshare{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:16px 0}
.vshare a,.vshare button{padding:9px 16px;border-radius:99px;border:0;cursor:pointer;color:#fff;font-size:.86rem;font-weight:600}
.vshare .fb{background:#1877f2}.vshare .wa{background:#25d366}.vshare .tg{background:#229ed9}.vshare .x{background:#000;border:1px solid #444}.vshare .cp{background:var(--card);color:var(--tx);border:1px solid var(--ln)}
.vrel{margin-top:30px}

/* ===== Modal (bottom sheet on phones) ===== */
.vmodal{position:fixed;inset:0;z-index:130;background:rgba(0,0,0,.74);display:flex;padding:16px;overflow-y:auto;overscroll-behavior:contain;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.vbox{position:relative;margin:auto;width:100%;max-width:420px;background:var(--card);border:1px solid var(--ln);border-radius:18px;padding:22px;box-shadow:var(--sh);animation:pop .25s}
.vbox.big{max-width:520px}
@keyframes pop{from{transform:scale(.94);opacity:0}to{transform:none;opacity:1}}
@keyframes sheet{from{transform:translateY(100%)}to{transform:none}}
.vbox h3{margin-bottom:2px;padding-right:44px;color:var(--gt)}
.vx{position:absolute;right:10px;top:10px;width:38px;height:38px;border-radius:50%;border:0;background:var(--bg);cursor:pointer;z-index:5;touch-action:manipulation;font-size:1rem;line-height:1}
.vx *{pointer-events:none}
@media(max-width:559px){
  .vmodal{padding:0}
  .vbox,.vbox.big{margin:auto 0 0;max-width:none;border-radius:22px 22px 0 0;padding:22px 16px calc(22px + env(safe-area-inset-bottom,0px));animation:sheet .28s}
  .vx{position:sticky;top:8px;float:right;margin:0 0 -38px 8px}
}
.vnum{display:flex;align-items:center;gap:8px;margin-top:10px;padding:10px 12px;border-radius:12px;background:var(--bg);border:1px dashed var(--ln)}
.vnum span{flex:1;font-weight:700;letter-spacing:.5px}
.vnum button{border:0;background:var(--ac);color:var(--ink);font-weight:700;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:.8rem}
.vprice{margin:12px 0 4px;font-size:1.1rem}
.vprice s{color:var(--mut);font-size:.9rem}
.vbox label{display:block;margin-top:10px;font-size:.82rem;color:var(--mut)}
.vbox input,.vbox select{width:100%;margin-top:4px;padding:12px;border-radius:10px;border:1px solid var(--bd);background:var(--bg);outline:0}
.vbox input:focus,.vbox select:focus{border-color:var(--ac)}
.vbox .vpk{margin-top:16px}
.vbox ol{margin:10px 0 0 18px;line-height:1.9}

/* ===== Install banner / Sticky ad / Back to top ===== */
.vins{position:fixed;left:12px;right:12px;bottom:calc(72px + env(safe-area-inset-bottom,0px));z-index:90;display:flex;align-items:center;gap:10px;background:var(--card);border:1px solid var(--ln);border-radius:16px;padding:10px 12px;box-shadow:var(--sh)}
.vins>span{flex:1;font-size:.88rem}
.vins .vbtn{padding:8px 16px;font-size:.85rem}
.vins .ox2{border:0;background:none;cursor:pointer;color:var(--mut);padding:8px 10px}
@media(min-width:900px){.vins{left:auto;right:20px;bottom:20px;max-width:380px}}
.vsticky{position:fixed;left:0;right:0;bottom:calc(58px + env(safe-area-inset-bottom,0px));z-index:54;background:var(--card);border-top:1px solid var(--ln);text-align:center;padding:2px 0;max-height:110px;overflow:hidden}
.vsticky .vad{margin:0}
.vsticky .vsx{position:absolute;right:4px;top:2px;width:26px;height:26px;border-radius:50%;border:0;background:rgba(0,0,0,.45);color:#fff;font-size:.75rem;cursor:pointer;z-index:2}
@media(min-width:900px){.vsticky{bottom:0}}
.vtop{position:fixed;right:14px;bottom:calc(78px + env(safe-area-inset-bottom,0px));z-index:53;width:42px;height:42px;border-radius:50%;border:1px solid var(--ac);background:color-mix(in srgb,var(--card) 92%,transparent);color:var(--gt);cursor:pointer;font-size:1.1rem;display:none;align-items:center;justify-content:center;box-shadow:var(--sh)}
.vtop.on{display:flex}
@media(min-width:900px){.vtop{bottom:24px;right:22px}}

/* ===== Ads, Footer & Toast ===== */
.vad{margin:16px 0;text-align:center;overflow:hidden;max-width:100%}
.vad small{display:block;color:var(--mut);font-size:.68rem;margin-bottom:4px}
.vad.feed{grid-column:1/-1;margin:4px 0}
.vad.bot{max-width:1280px;margin:18px auto;padding:0 14px}
.vfoot{border-top:1px solid var(--ln);padding:24px 0 30px;text-align:center;color:var(--mut);font-size:.88rem}
.vfoot .soc{display:flex;justify-content:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.vfoot .soc a,.vfoot .soc button{padding:8px 15px;border-radius:99px;background:var(--card);border:1px solid var(--ln);color:var(--tx);cursor:pointer}
.vfoot .soc a:hover,.vfoot .soc button:hover{border-color:var(--ac);color:var(--gt)}
.vfoot .fb2{font-family:'Playfair Display',serif;letter-spacing:2px;color:var(--gt);font-weight:700;margin-bottom:2px}
.vtoast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:#141418;color:var(--ac);border:1px solid var(--ln);padding:10px 20px;border-radius:99px;z-index:300;font-size:.9rem;box-shadow:var(--sh);max-width:92vw;text-align:center}
@media(min-width:900px){.vtoast{bottom:26px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

]]></b:skin>
</head>

<body expr:data-label='data:blog.searchLabel' expr:data-pt='data:blog.pageType' expr:data-q='data:blog.searchQuery'>

<header class='vhead' id='vhead'>
  <div class='wrap vh'>
    <button aria-label='Menu' class='ib' id='vmenu' type='button'>&#9776;</button>
    <a class='brand' expr:href='data:blog.homepageUrl' id='brand'><data:blog.title/></a>
    <nav id='vnav'/>
    <form action='/search' class='vsearch' method='get'>
      <input name='q' placeholder='ভিডিও খুঁজুন...' required='required' type='search'/>
      <button aria-label='Search' type='submit'>🔍</button>
    </form>
    <button aria-label='Search' class='ib' id='vsbtn' type='button'>🔍</button>
    <button aria-label='Dark/Light' class='ib' id='vtheme' type='button'>&#9728;&#65039;</button>
  </div>
  <div class='wrap'><div class='chips' id='vchips'/></div>
</header>
<div id='voffer'/>
<div class='vdr' id='vdrawer'/>

<main>
<div class='wrap'>
<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'>true</b:widget-setting>
      <b:widget-setting name='showCommentLink'>true</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'>true</b:widget-setting>
      <b:widget-setting name='showLocation'>true</b:widget-setting>
      <b:widget-setting name='postLabelsLabel'/>
      <b:widget-setting name='showTimestamp'>true</b:widget-setting>
      <b:widget-setting name='postsPerAd'>3</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'>true</b:widget-setting>
      <b:widget-setting name='showReactions'>false</b:widget-setting>
    </b:widget-settings>
    <b:includable id='main' var='top'>

<b:if cond='data:blog.pageType == &quot;item&quot;'>
  <!-- Video details page -->
  <b:loop values='data:posts' var='post'>
    <article class='vpost' expr:data-date='data:post.date' expr:data-id='data:post.id' expr:data-title='data:post.title'>
      <h1 class='vtitle'><data:post.title/></h1>
      <div id='vplayer'/>
      <div class='vmeta' id='vmeta'/>
      <span class='vlabels' style='display:none'><b:loop values='data:post.labels' var='label'><i><data:label.name/></i></b:loop></span>
      <div class='vdesc' id='vdesc'><data:post.body/></div>
      <div class='vshare' id='vshare'/>
      <section class='vrel' id='vrel'/>
      <section class='vsec' id='vpkp' style='display:none'/>
    </article>
  </b:loop>

<b:elseif cond='data:blog.pageType == &quot;static_page&quot;'/>
  <b:loop values='data:posts' var='post'>
    <article class='vpost'>
      <h1 class='vtitle'><data:post.title/></h1>
      <div class='vdesc' style='display:block'><data:post.body/></div>
    </article>
  </b:loop>

<b:else/>
  <!-- Home / Label / Search -->
  <section class='vsec'>
    <div class='vsh'><h2 id='vh2'>🆕 Latest Videos</h2></div>
    <div class='vgrid' id='vmain'>
      <b:loop values='data:posts' var='post'>
        <article class='vraw' expr:data-date='data:post.date' expr:data-title='data:post.title' expr:data-url='data:post.url'>
          <a class='vc' expr:href='data:post.url'>
            <div class='vth'>
              <b:if cond='data:post.firstImageUrl'><img expr:src='data:post.firstImageUrl' loading='lazy'/></b:if>
              <span class='vplay'>&#9654;</span>
              <div class='vcap'><h3><data:post.title/></h3><div class='vm'><span><data:post.date/></span></div></div>
            </div>
          </a>
          <span class='vlabels' style='display:none'><b:loop values='data:post.labels' var='label'><i><data:label.name/></i></b:loop></span>
          <template><data:post.body/></template>
        </article>
      </b:loop>
    </div>
    <div class='vpager'>
      <span><b:if cond='data:newerPageUrl'><a expr:href='data:newerPageUrl'>&#8592; নত&#2497;ন ভ&#2495;ড&#2495;ও</a></b:if></span>
      <span><b:if cond='data:olderPageUrl'><a expr:href='data:olderPageUrl'>আরও ভ&#2495;ড&#2495;ও &#8594;</a></b:if></span>
    </div>
  </section>
  <section class='vsec rail' id='sec-trending' style='display:none'><div class='vsh'><h2>🔥 Trending Videos</h2><a class='vall' href='/search/label/Trending'>সব দ&#2503;খ&#2497;ন &#8594;</a></div><div class='vgrid'/></section>
  <section class='vsec rail' id='sec-most' style='display:none'><div class='vsh'><h2>👁 Most Viewed</h2><a class='vall' href='/search'>সব দ&#2503;খ&#2497;ন &#8594;</a></div><div class='vgrid'/></section>
  <!-- Premium packages now sit at the bottom of the page, after all videos -->
  <section class='vsec' id='vpkgs' style='display:none'/>
</b:if>

</b:includable>
    <b:includable id='aboutPostAuthor'>
  <div class='author-name'>
    <a class='g-profile' expr:href='data:post.author.profileUrl' rel='author' title='author profile'>
      <span>
        <data:post.author.name/>
      </span>
    </a>
  </div>
  <div>
    <span class='author-desc'>
      <data:post.author.aboutMe/>
    </span>
  </div>
</b:includable>
    <b:includable id='addComments'>
  <a expr:href='data:post.commentsUrl' expr:onclick='data:post.commentsUrlOnclick'>
    <b:message name='messages.postAComment'/>
  </a>
</b:includable>
    <b:includable id='commentAuthorAvatar'>
  <div class='avatar-image-container'>
    <img class='author-avatar' expr:src='data:comment.authorAvatarSrc' height='35' width='35'/>
  </div>
</b:includable>
    <b:includable id='commentDeleteIcon' var='comment'>
  <span expr:class='&quot;item-control &quot; + data:comment.adminClass'>
    <b:if cond='data:showCmtPopup'>
      <div class='goog-toggle-button'>
        <div class='goog-inline-block comment-action-icon'/>
      </div>
    <b:else/>
      <a class='comment-delete' expr:href='data:comment.deleteUrl' expr:title='data:messages.deleteComment'>
        <img src='https://resources.blogblog.com/img/icon_delete13.gif'/>
      </a>
    </b:if>
  </span>
</b:includable>
    <b:includable id='commentForm' var='post'>
  <div class='comment-form'>
    <a name='comment-form'/>
    <h4 id='comment-post-message'><data:messages.postAComment/></h4>
    <b:if cond='data:this.messages.blogComment != &quot;&quot;'>
      <p><data:this.messages.blogComment/></p>
    </b:if>
    <b:include data='post' name='commentFormIframeSrc'/>
    <iframe allowtransparency='allowtransparency' class='blogger-iframe-colorize blogger-comment-from-post' expr:height='data:cmtIframeInitialHeight ?: &quot;90px&quot;' frameborder='0' id='comment-editor' name='comment-editor' src='' width='100%'/>
    <data:post.cmtfpIframe/>
    <script type='text/javascript'>
      BLOG_CMT_createIframe(&#39;<data:post.appRpcRelayPath/>&#39;);
    </script>
  </div>
</b:includable>
    <b:includable id='commentFormIframeSrc' var='post'>
  <a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/>
</b:includable>
    <b:includable id='commentItem' var='comment'>
  <div class='comment' expr:id='&quot;c&quot; + data:comment.id'>
    <b:include cond='data:blog.enabledCommentProfileImages' name='commentAuthorAvatar'/>

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

      <b:include name='commentsTitle'/>

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

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

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

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

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

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

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

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

    <b:include name='commentsTitle'/>

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

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

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

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

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

    @media (hover: hover) {
      .post-body a.b-tooltip-container:hover .b-tooltip {
        visibility: visible;
        opacity: 1;
      }
    }
  </style>
  <!-- LINT.ThenChange(//depot/google3/java/com/google/blogger/b2/layouts/widgets/v2-style.css) -->
</b:includable>
  </b:widget>
</b:section>
</div>
</main>

<!-- AD GADGETS: editable from Layout -->
<b:section class='adpool' id='adpool' showaddelement='no'>
  <b:widget id='HTML1' locked='false' title='Ad: Top (সব পেজের উপরে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script src="https://femalesfellowship.com/a8/3f/4a/a83f4a85b177c6adae3621f251c5bc1f.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='top'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML2' locked='false' title='Ad: Feed (হোমপেজে ভিডিওর মাঝে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : '147f0f414ca298f27c5c9572d916c562',
    'format' : 'iframe',
    'height' : 50,
    'width' : 320,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/147f0f414ca298f27c5c9572d916c562/invoke.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='feed'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML3' locked='false' title='Ad: Video Top (ভিডিও প্লেয়ারের উপরে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : '8fa0ff3e1d517efad25a2a6b9e6dbaa4',
    'format' : 'iframe',
    'height' : 90,
    'width' : 728,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/8fa0ff3e1d517efad25a2a6b9e6dbaa4/invoke.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='vtop'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML4' locked='false' title='Ad: Player (প্লেয়ারের নিচে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : 'e7648ec1ac91f33fd912d0e05c864236',
    'format' : 'iframe',
    'height' : 600,
    'width' : 160,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/e7648ec1ac91f33fd912d0e05c864236/invoke.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='player'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML5' locked='false' title='Ad: After (বর্ণনার নিচে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : 'a2f4df1b5170f8706a50f95123b964a2',
    'format' : 'iframe',
    'height' : 300,
    'width' : 160,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/a2f4df1b5170f8706a50f95123b964a2/invoke.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='after'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML6' locked='false' title='Ad: Mid (শেয়ার বাটনের নিচে)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script async="async" data-cfasync="false" src="https://femalesfellowship.com/82c3d175925efc268befd6780a971449/invoke.js"></script>
<div id="container-82c3d175925efc268befd6780a971449"></div>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='mid'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML7' 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'><template class='vadtpl' data-pos='bottom'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML8' locked='false' title='Ad: Sticky (মোবাইলে নিচে ভাসমান ব্যানার)' type='HTML' version='2' visible='true'>
    <b:widget-settings>
      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : 'f5be93acb2ee6be3a748c0baac4c59fc',
    'format' : 'iframe',
    'height' : 250,
    'width' : 300,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/f5be93acb2ee6be3a748c0baac4c59fc/invoke.js"></script>]]></b:widget-setting>
    </b:widget-settings>
    <b:includable id='main'><template class='vadtpl' data-pos='sticky'><data:content/></template></b:includable>
  </b:widget>
</b:section>

<footer class='vfoot'><div class='wrap' id='vfoot'/></footer>
<nav class='vbn' id='vbn'/>
<button aria-label='Top' class='vtop' id='vtop' type='button'>&#8593;</button>

<script>
//<![CDATA[
(function(){
'use strict';
var C = window.VCONFIG, D = document, B = D.body, S = !!C.shorts;
var PT = B.getAttribute('data-pt'), LBL = B.getAttribute('data-label') || '', Q = B.getAttribute('data-q') || '';
var $ = function(s, r){ return (r || D).querySelector(s); };
var $$ = function(s, r){ return Array.prototype.slice.call((r || D).querySelectorAll(s)); };
var esc = function(s){ return String(s == null ? '' : s).replace(/[&<>"']/g, function(c){ return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]; }); };

/* ---------- Helpers ---------- */
var BND = '০১২৩৪৫৬৭৮৯';
function en(s){ return String(s == null ? '' : s).replace(/[০-৯]/g, function(d){ return BND.indexOf(d); }); }
function bnum(s){ return String(s).replace(/\d/g, function(d){ return BND.charAt(+d); }); }
function numOf(s){ var m = en(s).match(/\d[\d,]*(?:\.\d+)?/); return m ? parseFloat(m[0].replace(/,/g,'')) : 0; }
function toast(m){ var t = D.createElement('div'); t.className = 'vtoast'; t.textContent = m; B.appendChild(t); setTimeout(function(){ t.remove(); }, 2800); }
function copy(txt){
  if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(txt).then(function(){ toast('কপি হয়েছে ✓'); }, function(){ toast('কপি করা যায়নি'); }); return; }
  var i = D.createElement('textarea'); i.value = txt; B.appendChild(i); i.select();
  try { D.execCommand('copy'); toast('কপি হয়েছে ✓'); } catch(e) {} i.remove();
}
function toNum(s){ if(!s) return 0; var m = en(s).replace(/,/g,'').match(/([\d.]+)\s*([kKmM]?)/); if(!m) return 0; var n = parseFloat(m[1]); if(/k/i.test(m[2])) n *= 1e3; if(/m/i.test(m[2])) n *= 1e6; return n; }
function fmt(n){ return n >= 1e6 ? (n/1e6).toFixed(1).replace('.0','')+'M' : n >= 1e3 ? (n/1e3).toFixed(1).replace('.0','')+'K' : String(n); }
function thumb(u, w, h){
  if(!u) return '';
  return u.replace(/\/(?:s\d+|w\d+-h\d+)(?:-[a-z]+)*\//, '/w'+w+'-h'+h+'-c/').replace(/=(?:s|w)\d+[^?&"']*$/, '=w'+w+'-h'+h+'-c');
}
var CFG_KEYS = /^\s*(VIDEO\s*URL|VIDEO\s*STATUS|STATUS|VIDEO\s*CATEGORY|CATEGORY|OLD\s*PRICE|PRICE|VIEWS|DURATION|PACKAGE|PIN)\s*:/i;

/* ---------- Google Analytics ---------- */
function initGA(){
  var id = C.ga; if (!id) return;
  var s = D.createElement('script'); s.async = true; s.src = 'https://www.googletagmanager.com/gtag/js?id=' + encodeURIComponent(id); D.head.appendChild(s);
  window.dataLayer = window.dataLayer || [];
  window.gtag = function(){ window.dataLayer.push(arguments); };
  window.gtag('js', new Date()); window.gtag('config', id);
}
function track(n, o){ try { if (window.gtag) window.gtag('event', n, o || {}); } catch(e) {} }
initGA();

/* ---------- Modal helpers ---------- */
function closeModal(m){
  if (!m) return;
  if (m.id === 'vpkm' || m.id === 'vpay') m.style.display = 'none'; else m.remove();
}
function closeAllModals(){ $$('.vmodal').forEach(closeModal); }

/* ---------- Offer, Price, Packages ---------- */
var O = C.offer || {}, offEnd = O.endDate ? Date.parse(O.endDate) : 0;
function offerOn(){ return !!O.enabled && (!O.endDate || offEnd > Date.now()); }
function priceInfo(price, oldp){
  var raw = String(price || ''), d = offerOn() ? (+O.discount || 0) : 0;
  if (d > 0) {
    var e = en(raw), m = e.match(/\d[\d,]*(?:\.\d+)?/);
    if (m) {
      var v = String(Math.round(parseFloat(m[0].replace(/,/g,'')) * (100 - d) / 100));
      if (/[০-৯]/.test(raw)) v = bnum(v);
      return { now: raw.slice(0, m.index) + v + raw.slice(m.index + m[0].length), old: raw, pct: d };
    }
  }
  return { now: raw, old: oldp || '', pct: 0 };
}
var PK = (C.packages || []).filter(function(k){ return k && k.name; }).map(function(k, i){ k.id = k.id || ('pk' + i); return k; });
var hasPk = PK.length > 0;
function pkById(id){ return PK.filter(function(k){ return k.id === id; })[0]; }
function vcount(k){ return k.videos > 0 ? bnum(k.videos) + 'টি ভিডিও' : 'সব Premium ভিডিও'; }
function pkCard(k){
  var n = numOf(k.price), o = numOf(k.old), pct = (o > n && n > 0) ? Math.round((1 - n / o) * 100) : 0;
  var cur = (String(k.price).match(/^[^\d০-৯]*/) || [''])[0];
  var per = (k.videos > 0 && n > 0) ? 'প্রতি ভিডিও ≈ ' + esc(cur) + bnum(Math.round(n / k.videos)) : '';
  var all = k.videos > 0 ? '' : '<div class="mut sm">একবার PIN দিলেই সব Premium ভিডিও আনলক</div>';
  return '<div class="pk'+(k.tag ? ' hot' : '')+'">' + (k.tag ? '<span class="tag">'+esc(k.tag)+'</span>' : '') +
    '<h3>'+esc(k.name)+'</h3><div class="cnt">'+vcount(k)+'</div>' + (per ? '<div class="mut sm">'+per+'</div>' : '') + all +
    '<div class="pr"><b>'+esc(k.price)+'</b>' + (k.old ? '<s>'+esc(k.old)+'</s>' : '') + (pct ? '<em class="save">'+bnum(pct)+'% ছাড়</em>' : '') + '</div>' +
    (k.note ? '<p class="mut sm">'+esc(k.note)+'</p>' : '') +
    '<button class="vbtn" data-pk="'+esc(k.id)+'" type="button">🛒 কিনুন</button></div>';
}
function pkSection(){
  return '<div class="vsh"><h2>📦 Premium Packages</h2></div>' +
    '<p class="mut sm vsub">একসাথে কিনলে বেশি সাশ্রয়। পেমেন্টের পর WhatsApp-এ PIN পাবেন।</p>' +
    '<div class="vpk rail">' + PK.map(pkCard).join('') + '</div>';
}
function pkgModal(){
  if (!hasPk) { toast('এখন কোনো প্যাকেজ নেই'); return; }
  var m = $('#vpkm');
  if (!m) { m = D.createElement('div'); m.id = 'vpkm'; m.className = 'vmodal'; B.appendChild(m); }
  m.style.display = 'flex';
  m.innerHTML = '<div class="vbox big"><button class="vx" aria-label="Close" type="button">✕</button><h3>📦 Premium Packages</h3>' +
    '<p class="mut sm">একসাথে কিনলে বেশি সাশ্রয়। কেনার পর WhatsApp-এ PIN পাবেন, সেই PIN Premium ভিডিওতে দিলে ভিডিও আনলক হবে।</p>' +
    '<div class="vpk one">' + PK.map(pkCard).join('') + '</div></div>';
  track('view_packages');
}
/* প্যাকেজের ব্যবহার ও পাস (এই ব্রাউজারে) */
function pkUsed(id){ try { return (JSON.parse(localStorage.getItem('vpk') || '{}')[id]) || []; } catch(e) { return []; } }
function pkSave(id, list){ try { var o = JSON.parse(localStorage.getItem('vpk') || '{}'); o[id] = list; localStorage.setItem('vpk', JSON.stringify(o)); } catch(e) {} }
function hasPass(){ try { return localStorage.getItem('vpass') === '1'; } catch(e) { return false; } }
function setPass(){ try { localStorage.setItem('vpass', '1'); } catch(e) {} }

/* ---------- Config parse / Video Card ---------- */
function parseCfg(html){
  var t = html.replace(/<br\s*\/?>|<\/(div|p|li)>/gi, '\n').replace(/<[^>]+>/g, '').replace(/&nbsp;/g,' ').replace(/&amp;/g,'&');
  var o = {}, m, re = /^\s*(VIDEO\s*URL|VIDEO\s*STATUS|STATUS|VIDEO\s*CATEGORY|CATEGORY|OLD\s*PRICE|PRICE|VIEWS|DURATION|PACKAGE|PIN)\s*:[ \t]*\n?\s*(.+?)\s*$/gim;
  while ((m = re.exec(t))) o[m[1].toUpperCase().replace(/\s+/g,' ')] = m[2];
  var st = (o['VIDEO STATUS'] || o['STATUS'] || '').toUpperCase();
  return { url: o['VIDEO URL'] || '', status: /LOCK|PREMIUM/.test(st) ? 'LOCKED' : 'FREE',
           cat: o['VIDEO CATEGORY'] || o['CATEGORY'] || '', price: o['PRICE'] || '', old: o['OLD PRICE'] || '',
           views: o['VIEWS'] || '', dur: o['DURATION'] || '', pkg: o['PACKAGE'] || '', pin: o['PIN'] || '' };
}
function build(html, o){
  var c = parseCfg(html), m = html.match(/<img[^>]+src=["']([^"']+)/i), L = o.labels || [];
  var skip = ['Premium','Trending','Latest'];
  var cat = c.cat || L.filter(function(l){ return skip.indexOf(l) < 0; })[0] || L[0] || C.defaultCategory;
  return { title:o.title || 'ভিডিও', url:o.url, date:o.date, labels:L, img: m ? m[1] : (o.img || ''), cat:cat,
           status:c.status, price:c.price || C.price, old:c.old, dur:c.dur, views:toNum(c.views), drive:c.url, pin:c.pin,
           pkgOk: !/^(NO|N|0|FALSE)$/i.test(c.pkg || '') };
}
function fromRaw(el){
  var tpl = $('template', el), html = tpl ? tpl.innerHTML : '';
  var labels = $$('.vlabels i', el).map(function(i){ return i.textContent; });
  return build(html, { title: el.getAttribute('data-title'), url: el.getAttribute('data-url'), date: el.getAttribute('data-date'), labels: labels });
}
function fromEntry(e){
  var link = (e.link || []).filter(function(l){ return l.rel === 'alternate'; })[0];
  var html = (e.content || e.summary || {}).$t || '';
  var d = new Date(e.published.$t);
  return build(html, { title: e.title.$t, url: link ? link.href : '#', date: d.toLocaleDateString('bn-BD', {day:'numeric', month:'short', year:'numeric'}),
                       labels: (e.category || []).map(function(c){ return c.term; }), img: e.media$thumbnail ? e.media$thumbnail.url : '' });
}
var feedP;
function feed(){
  return feedP || (feedP = fetch('/feeds/posts/default?alt=json&max-results=150').then(function(r){ return r.json(); })
    .then(function(j){ return (j.feed.entry || []).map(fromEntry); }).catch(function(){ return []; }));
}
function card(p){
  var lock = p.status === 'LOCKED', img = thumb(p.img, S ? 360 : 640, S ? 640 : 360), pi = lock ? priceInfo(p.price, p.old) : null;
  return '<a class="vc" href="'+esc(p.url)+(lock ? '' : '#play')+'">' +
    '<div class="vth">' + (img ? '<img loading="lazy" decoding="async" src="'+esc(img)+'" alt="'+esc(p.title)+'">' : '') +
    '<span class="vplay">▶</span>' +
    (lock ? '<span class="vbadge lock"><i>🔒</i> PREMIUM</span>' : '<span class="vbadge free">FREE</span>') +
    (p.dur ? '<span class="vdur">'+esc(p.dur)+'</span>' : '') +
    '<div class="vcap"><h3>'+esc(p.title)+'</h3><div class="vm"><span>'+esc(p.cat)+'</span>' +
    (p.views ? '<span>👁 '+fmt(p.views)+'</span>' : '') +
    (lock ? '<span class="vprc">' + (pi.old ? '<s>'+esc(pi.old)+'</s> ' : '') + '<b>'+esc(pi.now)+'</b></span>' : '') +
    '<span>'+esc(p.date)+'</span></div></div></div></a>';
}
function fill(id, list){
  var s = $('#'+id); if(!s) return;
  if(!list.length){ return; }
  $('.vgrid', s).innerHTML = list.map(card).join(''); s.style.display = '';
}

/* ---------- Ads ---------- */
var adsLoaded = false;
function loadAdsense(){
  if (adsLoaded) return; adsLoaded = true;
  var s = D.createElement('script'); s.async = true; s.crossOrigin = 'anonymous';
  s.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=' + C.ads.adsenseClient;
  D.head.appendChild(s);
}
var seenSrc = {};
function adEl(pos){
  var A = C.ads || {}, h = '', fromCfg = false;
  var t = $('.vadtpl[data-pos="'+pos+'"]');
  if (t) h = t.innerHTML.trim();
  if (!h && A.enabled) {
    fromCfg = true;
    h = (A.custom && A.custom[pos]) || '';
    if (!h && A.adsenseClient && A.slots && A.slots[pos])
      h = '<ins class="adsbygoogle" style="display:block" data-ad-client="'+A.adsenseClient+'" data-ad-slot="'+A.slots[pos]+'" data-ad-format="auto" data-full-width-responsive="true"></ins>';
  }
  if (!h) return null;
  var d = D.createElement('div'); d.className = 'vad'; d.innerHTML = '<small>Advertisement</small><div class="vadin"></div>';
  var inn = $('.vadin', d); inn.innerHTML = h;
  $$('script', inn).forEach(function(o){
    if (o.src) { if (seenSrc[o.src]) { o.remove(); return; } seenSrc[o.src] = 1; }
    var n = D.createElement('script');
    Array.prototype.slice.call(o.attributes).forEach(function(a){ n.setAttribute(a.name, a.value); });
    n.text = o.text; o.parentNode.replaceChild(n, o);
  });
  if (fromCfg && $('.adsbygoogle', inn)) { loadAdsense(); try { (window.adsbygoogle = window.adsbygoogle || []).push({}); } catch(e) {} }
  return d;
}

/* ---------- Header / Drawer / Bottom nav / Footer ---------- */
var br = $('#brand');
br.innerHTML = C.logo ? '<img src="'+esc(C.logo)+'" alt="'+esc(C.siteName)+'">' : '<span>▶</span> '+esc(C.siteName);
function isOn(href){ return (href === '/' && location.pathname === '/') || (href !== '/' && decodeURI(location.pathname) === href); }
$('#vnav').innerHTML = C.nav.map(function(n){ return '<a class="'+(isOn(n[1])?'on':'')+'" href="'+esc(n[1])+'">'+esc(n[0])+'</a>'; }).join('');
$('#vchips').innerHTML = C.categories.map(function(c){
  return '<a class="chip'+(LBL === c[0] ? ' on' : '')+'" href="/search/label/'+encodeURIComponent(c[0])+'">'+c[1]+' '+esc(c[0])+'</a>';
}).join('');
var onChip = $('.chip.on'); if (onChip && onChip.scrollIntoView) { try { $('#vchips').scrollLeft = Math.max(0, onChip.offsetLeft - 40); } catch(e) {} }
var socL = [['Facebook',C.facebook],['Telegram',C.telegram],['YouTube',C.youtube]].filter(function(s){ return s[1]; });
var soc = socL.map(function(s){ return '<a href="'+esc(s[1])+'" target="_blank" rel="noopener">'+s[0]+'</a>'; }).join('');
var pwaOn = !!(C.pwa && C.pwa.enabled);
$('#vfoot').innerHTML = (soc || pwaOn ? '<div class="soc">'+soc+(pwaOn ? '<button type="button" id="vinst2" style="display:none">📲 অ্যাপ ইনস্টল</button>' : '')+'</div>' : '') +
  '<div class="fb2">'+esc(C.siteName)+'</div>© '+new Date().getFullYear()+' '+esc(C.siteName);

var dr = $('#vdrawer');
dr.innerHTML = '<div class="ov"></div><div class="pn"><div class="dh"><b>'+esc(C.siteName)+'</b><button class="vx2" type="button" aria-label="Close">✕</button></div>' +
  C.nav.map(function(n){ return '<a class="dl'+(isOn(n[1])?' on':'')+'" href="'+esc(n[1])+'">'+esc(n[0])+'</a>'; }).join('') +
  (hasPk ? '<a class="dl" href="#pkg">📦 Premium Packages</a>' : '') +
  '<h4>ক্যাটাগরি</h4>' + C.categories.map(function(c){ return '<a class="dl'+(LBL === c[0] ? ' on' : '')+'" href="/search/label/'+encodeURIComponent(c[0])+'">'+c[1]+' '+esc(c[0])+'</a>'; }).join('') +
  (pwaOn ? '<button class="vbtn" id="vinst" type="button" style="display:none;width:100%;margin-top:14px">📲 অ্যাপ ইনস্টল করুন</button>' : '') +
  (socL.length ? '<div class="soc2">'+soc+'</div>' : '') + '</div>';
function openDr(){ dr.classList.add('on'); }
function closeDr(){ dr.classList.remove('on'); }
$('#vmenu').onclick = openDr;

$('#vbn').innerHTML = (C.bottomNav || []).filter(function(n){ return n[2] !== '#pkg' || hasPk; }).map(function(n){
  return '<a class="'+(isOn(n[2])?'on':'')+'" href="'+esc(n[2])+'"><span>'+n[0]+'</span>'+esc(n[1])+'</a>';
}).join('') + '<button type="button" id="vbmenu"><span>☰</span>মেনু</button>';
$('#vbmenu').onclick = openDr;

var hd = $('#vhead');
$('#vsbtn').onclick = function(){ hd.classList.toggle('ss'); if (hd.classList.contains('ss')) $('.vsearch input').focus(); };

var mw = $('main .wrap'), topAd = adEl('top'); if (mw && topAd) mw.insertBefore(topAd, mw.firstChild);
var botAd = adEl('bottom'), ftEl = $('.vfoot'); if (botAd && ftEl) { botAd.className += ' bot'; ftEl.parentNode.insertBefore(botAd, ftEl); }
var stk = adEl('sticky');
if (stk) {
  var sw = D.createElement('div'); sw.className = 'vsticky'; sw.appendChild(stk);
  var sx = D.createElement('button'); sx.className = 'vsx'; sx.type = 'button'; sx.textContent = '✕'; sx.onclick = function(){ sw.remove(); };
  sw.appendChild(sx); B.appendChild(sw);
}

/* ---------- Back to top ---------- */
var tp = $('#vtop');
if (tp) {
  var tpOn = false;
  window.addEventListener('scroll', function(){
    var on = window.pageYOffset > 700;
    if (on !== tpOn) { tpOn = on; tp.classList.toggle('on', on); }
  }, { passive: true });
  tp.onclick = function(){ window.scrollTo({ top: 0, behavior: 'smooth' }); };
}

/* ---------- অফার ব্যানার ---------- */
var offerEl = $('#voffer'), offerIv = 0;
function removeOffer(save){
  if (offerEl) { offerEl.remove(); offerEl = null; }
  if (offerIv) { clearInterval(offerIv); offerIv = 0; }
  if (save) { try { sessionStorage.setItem('voff_x', '1'); } catch(e) {} }
}
(function(){
  if (!offerEl || !offerOn()) return;
  try { if (sessionStorage.getItem('voff_x') === '1') return; } catch(e) {}
  offerEl.className = 'voff';
  offerEl.innerHTML = '<div class="wrap"><span class="ot">'+esc(O.text || '')+'</span><span class="vt" id="vtm"></span>' +
    (O.button && hasPk ? '<a class="obtn" href="#pkg">'+esc(O.button)+'</a>' : '') +
    '<button class="ox" type="button" aria-label="Close">✕</button></div>';
  if (!O.endDate) return;
  function u(n, l){ return '<b>'+bnum(('0' + n).slice(-2))+'</b><i>'+l+'</i>'; }
  function tick(){
    var ms = offEnd - Date.now();
    if (ms <= 0) { removeOffer(false); return; }
    var s = Math.floor(ms / 1000), d = Math.floor(s / 86400), h = Math.floor(s % 86400 / 3600), m = Math.floor(s % 3600 / 60), sc = s % 60;
    var t = $('#vtm'); if (t) t.innerHTML = (d ? '<b>'+bnum(d)+'</b><i>দিন</i>' : '') + u(h,'ঘ') + u(m,'মি') + u(sc,'সে');
  }
  tick(); offerIv = setInterval(tick, 1000);
})();

/* ---------- Dark / Light ---------- */
var tb = $('#vtheme'), root = D.documentElement;
function sync(){ tb.textContent = root.getAttribute('data-theme') === 'light' ? '🌙' : '☀️'; }
tb.onclick = function(){
  var n = root.getAttribute('data-theme') === 'light' ? 'dark' : 'light';
  root.setAttribute('data-theme', n);
  try { localStorage.setItem('vtheme', n); } catch(e) {}
  sync();
};
sync();

/* ---------- PIN যাচাই ---------- */
function sha(s){
  if (!(window.crypto && crypto.subtle && window.TextEncoder)) return Promise.resolve('');
  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('');
  });
}
function checkPin(inp, stored){
  stored = String(stored || C.masterPin || '').trim();
  if (!stored) return Promise.resolve(false);
  if (/^sha256:/i.test(stored)) return sha(inp).then(function(h){ return !!h && h === stored.slice(7).toLowerCase(); });
  return Promise.resolve(inp === stored);
}
function pkgMatch(v){
  var list = PK.filter(function(k){ return String(k.pin || '').trim(); });
  return Promise.all(list.map(function(k){ return checkPin(v, k.pin); })).then(function(r){
    for (var i = 0; i < list.length; i++) if (r[i]) return list[i];
    return null;
  });
}

/* ---------- PIN সেটআপ টুল (লিংকের শেষে #pinsetup) ---------- */
function pinTool(){
  if ($('#vpintool')) return;
  var m = D.createElement('div'); m.className = 'vmodal'; m.id = 'vpintool';
  m.innerHTML = '<div class="vbox"><button class="vx" aria-label="Close" type="button">✕</button><h3>🔑 PIN Setup</h3>' +
    '<p class="mut sm">PIN লিখুন বা Random বানান, তারপর নিচের লাইনটি কপি করে পোস্টের vcfg-তে (অথবা প্যাকেজের pin: এ) বসান।</p>' +
    '<label>PIN (সংখ্যা ব্যবহার করা ভালো)<input id="vsp" inputmode="numeric" maxlength="12" placeholder="যেমন: 4821" autocomplete="off"></label>' +
    '<label>ধরন<select id="vst"><option value="plain">সাধারণ (সহজ)</option><option value="hash">Hash (পোস্টে PIN সরাসরি দেখা যাবে না)</option></select></label>' +
    '<div style="display:flex;gap:8px;margin-top:12px"><button class="vbtn" id="vsr" type="button">🎲 Random</button><button class="vbtn" id="vsg" type="button">⚙ লাইন বানান</button></div>' +
    '<div class="vout" id="vso" style="display:none"></div>' +
    '<button class="vbtn wa" id="vsc" type="button" style="display:none">📋 কপি</button></div>';
  B.appendChild(m);
  $('#vsr', m).onclick = function(){ $('#vsp', m).value = String(Math.floor(1000 + Math.random() * 9000)); };
  $('#vsg', m).onclick = function(){
    var pin = $('#vsp', m).value.trim();
    if (!pin) { toast('PIN লিখুন'); return; }
    var show = function(line){ var o = $('#vso', m); o.textContent = line; o.style.display = ''; $('#vsc', m).style.display = ''; };
    if ($('#vst', m).value === 'hash') {
      sha(pin).then(function(h){
        if (!h) { toast('এই ব্রাউজারে Hash চলবে না, সাধারণ ধরন ব্যবহার করুন'); return; }
        show('PIN: sha256:' + h);
      });
    } else show('PIN: ' + pin);
  };
  $('#vsc', m).onclick = function(){ copy($('#vso', m).textContent); };
}
if (location.hash === '#pinsetup') pinTool();
window.addEventListener('hashchange', function(){ if (location.hash === '#pinsetup') pinTool(); });

/* ---------- Payment Box + WhatsApp ---------- */
function pay(o){
  var m = $('#vpay');
  if(!m){ m = D.createElement('div'); m.id = 'vpay'; m.className = 'vmodal'; B.appendChild(m); }
  m.style.display = 'flex';
  var isPk = o.kind === 'package';
  track('begin_checkout', { item_name: o.title, value: numOf(o.price) });
  m.innerHTML = '<div class="vbox"><button class="vx" aria-label="Close" type="button">✕</button><h3>💳 Payment</h3><p class="mut sm">'+(isPk ? '📦 ' : '🎬 ')+esc(o.title)+'</p>' +
    '<div class="vnum"><b>bKash:</b><span>'+esc(C.bkash)+'</span><button type="button" data-c="'+esc(C.bkash)+'">কপি</button></div>' +
    '<div class="vnum"><b>Nagad:</b><span>'+esc(C.nagad)+'</span><button type="button" data-c="'+esc(C.nagad)+'">কপি</button></div>' +
    '<div class="vprice">Price: <b>'+esc(o.price)+'</b>'+(o.old ? ' <s>'+esc(o.old)+'</s>' : '')+'</div>' +
    '<label>Payment Method<select id="vpm"><option>bKash</option><option>Nagad</option></select></label>' +
    '<label>Transaction ID<input id="vpt" placeholder="যেমন: 8N7A6D5E4C" autocomplete="off"></label>' +
    '<label>Amount<input id="vpa" value="'+esc(o.price)+'"></label>' +
    '<label>Gmail (ভিডিও Access পেতে)<input id="vpg" type="email" placeholder="you@gmail.com"></label>' +
    '<button class="vbtn wa" id="vpw" type="button">📱 WhatsApp-এ Payment Details পাঠান</button>' +
    '<p class="mut sm" style="margin-top:8px">Payment করার পর Transaction ID দিয়ে বাটনে ক্লিক করুন। Admin verify করে WhatsApp-এ আপনাকে একটি PIN পাঠাবেন। সেই PIN ভিডিওর উপরে দিলে ভিডিও Unlock হবে।</p></div>';
  $('#vpw').onclick = function(){
    var trx = $('#vpt').value.trim();
    if(!trx){ toast('Transaction ID লিখুন'); $('#vpt').focus(); return; }
    var gm = $('#vpg').value.trim();
    var msg = 'Hello,\n' + (isPk ? 'I want to buy this package.' : 'I want to unlock this video.') +
      '\n\n' + (isPk ? 'Package: ' : 'Video: ') + o.title + '\n\nPayment Method: '+$('#vpm').value+
      '\n\nTransaction ID: '+trx+'\n\nAmount: '+$('#vpa').value.trim()+(gm ? '\n\nGmail: '+gm : '')+
      '\n\nPlease send my PIN.';
    track('purchase_whatsapp', { item_name: o.title, value: numOf($('#vpa').value) });
    window.open('https://wa.me/'+C.whatsapp.replace(/\D/g,'')+'?text='+encodeURIComponent(msg), '_blank');
    closeModal(m);
    toast('WhatsApp-এ পাঠানো হয়েছে। PIN পেলে ভিডিওর উপরে দিন');
    var pi = $('#vpin'); if (pi) pi.focus();
  };
}

/* ---------- গ্লোবাল ক্লিক: সব ✕, বাইরে ক্লিক, প্যাকেজ, কপি ---------- */
D.addEventListener('click', function(e){
  var t = e.target; if (!t || !t.closest) return;

  if (t.closest('.voff .ox')) { removeOffer(true); return; }
  if (t.closest('.vdr .vx2') || t.closest('.vdr .ov')) { closeDr(); return; }
  if (t.closest('.vdr a')) { closeDr(); }

  var cx = t.closest('.vx');
  if (cx) { e.preventDefault(); closeModal(cx.closest('.vmodal')); return; }
  if (t.classList && t.classList.contains('vmodal')) { closeModal(t); return; }

  var cb = t.closest('[data-c]');
  if (cb) { copy(cb.getAttribute('data-c')); return; }

  if (t.closest('a[href="#pkg"]')) { e.preventDefault(); closeDr(); pkgModal(); return; }
  var b = t.closest('[data-pk]');
  if (b) {
    e.preventDefault();
    var k = pkById(b.getAttribute('data-pk')); if (!k) return;
    closeModal($('#vpkm'));
    pay({ title: k.name + ' (' + vcount(k) + ')', price: k.price, old: k.old, kind: 'package' });
  }
});
D.addEventListener('keydown', function(e){
  if (e.key !== 'Escape') return;
  closeAllModals(); closeDr();
});

/* ---------- PWA ---------- */
var deferred = null;
function standalone(){ return (window.matchMedia && matchMedia('(display-mode: standalone)').matches) || window.navigator.standalone === true; }
var isIOS = /iphone|ipad|ipod/i.test(navigator.userAgent) && !window.MSStream;
function mkIcon(){
  try {
    var cv = D.createElement('canvas'); cv.width = cv.height = 512; var x = cv.getContext('2d');
    var g = x.createLinearGradient(0, 0, 512, 512); g.addColorStop(0, C.colors.accent); g.addColorStop(1, C.colors.accent2);
    x.fillStyle = g; x.fillRect(0, 0, 512, 512); x.fillStyle = '#fff';
    x.beginPath(); x.moveTo(200, 150); x.lineTo(200, 362); x.lineTo(372, 256); x.closePath(); x.fill();
    return cv.toDataURL('image/png');
  } catch(e) { return ''; }
}
function installNow(){
  if (deferred) { deferred.prompt(); deferred.userChoice.then(function(r){ track('pwa_install', { outcome: r && r.outcome }); deferred = null; showInstallBtns(false); }); return; }
  if (isIOS) {
    var m = D.createElement('div'); m.className = 'vmodal';
    m.innerHTML = '<div class="vbox"><button class="vx" aria-label="Close" type="button">✕</button><h3>📲 iPhone-এ ইনস্টল</h3><ol><li>Safari-তে নিচের <b>Share</b> বাটনে চাপুন</li><li><b>Add to Home Screen</b> বেছে নিন</li><li><b>Add</b> চাপুন</li></ol></div>';
    B.appendChild(m);
    return;
  }
  toast('ব্রাউজারের মেনু (⋮) থেকে "Install app" বা "Add to Home screen" চাপুন');
}
function showInstallBtns(on){
  ['vinst','vinst2'].forEach(function(id){ var b = $('#'+id); if (b) b.style.display = on ? '' : 'none'; });
}
function installBanner(){
  var seen = false; try { seen = localStorage.getItem('vins_x') === '1'; } catch(e) {}
  if (seen || standalone() || $('.vins')) return;
  var b = D.createElement('div'); b.className = 'vins';
  b.innerHTML = '<span>📲 <b>'+esc(C.siteName)+'</b> অ্যাপের মতো ইনস্টল করুন</span><button class="vbtn" type="button">ইনস্টল</button><button class="ox2" type="button" aria-label="Close">✕</button>';
  B.appendChild(b);
  $('.vbtn', b).onclick = function(){ b.remove(); installNow(); };
  $('.ox2', b).onclick = function(){ b.remove(); try { localStorage.setItem('vins_x', '1'); } catch(e) {} };
}
if (pwaOn && !standalone()) {
  var P = C.pwa, icon = P.icon || C.favicon || mkIcon(), orig = location.origin;
  var man = { name: P.name || C.siteName, short_name: P.shortName || C.siteName, start_url: orig + '/', scope: orig + '/', display: 'standalone',
              orientation: 'portrait', background_color: C.colors.darkBg, theme_color: P.themeColor || C.colors.accent, lang: 'bn',
              icons: icon ? [{ src: icon, sizes: '512x512', type: 'image/png', purpose: 'any maskable' }] : [] };
  try {
    $$('link[rel="manifest"]').forEach(function(l){ l.remove(); });
    var ml = D.createElement('link'); ml.rel = 'manifest';
    ml.href = URL.createObjectURL(new Blob([JSON.stringify(man)], { type: 'application/manifest+json' })); D.head.appendChild(ml);
    if (icon) { var ai = D.createElement('link'); ai.rel = 'apple-touch-icon'; ai.href = icon; D.head.appendChild(ai); }
    var tc = $('meta[name="theme-color"]'); if (tc) tc.setAttribute('content', P.themeColor || C.colors.accent);
  } catch(e) {}
  window.addEventListener('beforeinstallprompt', function(e){ e.preventDefault(); deferred = e; showInstallBtns(true); setTimeout(installBanner, 4000); });
  window.addEventListener('appinstalled', function(){ showInstallBtns(false); var b = $('.vins'); if (b) b.remove(); });
  if (isIOS) { showInstallBtns(true); setTimeout(installBanner, 6000); }
  ['vinst','vinst2'].forEach(function(id){ var b = $('#'+id); if (b) b.onclick = function(){ closeDr(); installNow(); }; });
}

/* ---------- Favicon ---------- */
function setFavicon(){
  var u = C.favicon || mkIcon(); if (!u) return;
  $$('link[rel~="icon"],link[rel="apple-touch-icon"]').forEach(function(l){ l.remove(); });
  [['icon','32x32'],['shortcut icon',''],['apple-touch-icon','180x180']].forEach(function(r){
    var l = D.createElement('link'); l.rel = r[0];
    if (r[1]) l.sizes = r[1];
    if (/\.png(\?|$)|^data:image\/png/i.test(u)) l.type = 'image/png';
    l.href = u; D.head.appendChild(l);
  });
}
setFavicon();

/* ---------- SEO: Structured Data ---------- */
function ld(o){ var s = D.createElement('script'); s.type = 'application/ld+json'; s.text = JSON.stringify(o); D.head.appendChild(s); }

/* ---------- হোমপেজ / লেবেল / সার্চ ---------- */
if (PT === 'index' || PT === 'archive') {
  var grid = $('#vmain'), h2 = $('#vh2');
  if (h2) { if (LBL) h2.textContent = '🎬 ' + LBL; else if (Q) h2.textContent = '🔍 ' + Q; }
  if (grid) {
    $$('.vraw', grid).forEach(function(el){ try { el.outerHTML = card(fromRaw(el)); } catch(e) {} });
    $$('.vc', grid).forEach(function(c, i){
      if ((i + 1) % ((C.ads && C.ads.feedEvery) || 6) === 0) { var fa = adEl('feed'); if (fa) { fa.className += ' feed'; c.parentNode.insertBefore(fa, c.nextSibling); } }
    });
    if (!$('.vc', grid)) grid.innerHTML = '<div class="vempty" style="grid-column:1/-1">😕 কোনো ভিডিও পাওয়া যায়নি</div>';
  }
  var home = (location.pathname === '/' || location.pathname === '') && !LBL && !Q;
  var pks = $('#vpkgs');
  /* প্যাকেজ সেকশন এখন পেজের নিচে (সব ভিডিও সেকশনের পরে) */
  if (pks && hasPk && C.pkgOnHome !== false && (home || LBL === 'Premium')) {
    pks.innerHTML = pkSection(); pks.style.display = '';
  }
  if (home) {
    ld({ '@context':'https://schema.org', '@type':'WebSite', name: C.siteName, url: location.origin + '/',
         potentialAction: { '@type':'SearchAction', target: location.origin + '/search?q={search_term_string}', 'query-input':'required name=search_term_string' } });
  }
  if (home && ($('#sec-trending') || $('#sec-most'))) {
    feed().then(function(all){
      var byViews = all.slice().sort(function(a,b){ return b.views - a.views; });
      var tr = all.filter(function(p){ return p.labels.indexOf('Trending') > -1; }).slice(0, 4);
      if (tr.length < 4) byViews.forEach(function(p){ if (tr.length < 4 && tr.indexOf(p) < 0 && p.views) tr.push(p); });
      fill('sec-trending', tr);
      fill('sec-most', byViews.filter(function(p){ return p.views; }).slice(0, 8));
    });
  }
}

/* ---------- ভিডিও ডিটেইলস পেজ ---------- */
if (PT === 'item' && $('#vdesc')) {
  var art = $('.vpost'), d = $('#vdesc'), html = d.innerHTML;
  var labels = $$('.vlabels i', art).map(function(i){ return i.textContent; });
  var p = build(html, { title: art.getAttribute('data-title'), url: location.href.split('#')[0], date: art.getAttribute('data-date'), labels: labels });
  var vt = $('.vtitle'); if (vt && !vt.textContent.trim()) vt.textContent = p.title;

  var idm = p.drive.match(/\/d\/([\w-]+)/) || p.drive.match(/[?&]id=([\w-]+)/);
  var fid = idm ? idm[1] : '';
  var key = fid || p.url;
  var premium = p.status === 'LOCKED';
  var unl = false;
  try { unl = localStorage.getItem('vu_' + key) === '1'; } catch(e) {}
  /* "সব ভিডিও পাস" থাকলে (এবং ভিডিও প্যাকেজের আওতায় থাকলে) আনলক */
  if (premium && !unl && p.pkgOk && hasPass()) unl = true;
  var locked = premium && !unl;
  var th = thumb(p.img, S ? 720 : 1280, S ? 1280 : 720);

  $$('.vcfg', d).forEach(function(e){ e.remove(); });
  $$('div,p,span,b', d).forEach(function(e){
    if (!e.querySelector('div,p') && e.textContent.length < 400 && CFG_KEYS.test(e.textContent)) e.remove();
  });
  var fi = $('img', d); if (fi) { var fa = fi.closest('a'); (fa || fi).remove(); }

  var pi0 = priceInfo(p.price, p.old);

  var box = $('#vplayer');
  box.innerHTML = '<div class="vstage" id="vstage">' + (th ? '<img src="'+esc(th)+'" alt="'+esc(p.title)+'">' : '') +
    (locked
      ? '<div class="vlock"><div class="ic">🔒</div><b>PREMIUM VIDEO</b><p>ভিডিও দেখতে Unlock করুন</p>' +
        '<button class="vbtn" id="vunlock" type="button">🔓 Unlock — '+esc(pi0.now)+(pi0.old ? ' <s>'+esc(pi0.old)+'</s>' : '')+'</button>' +
        (hasPk && p.pkgOk ? '<button class="vlink" id="vpkb" type="button">📦 প্যাকেজে কিনলে কম খরচ — অফার দেখুন</button>' : '') +
        '<div class="vpinbox"><small>Payment-এর পর WhatsApp-এ PIN পেয়েছেন?</small>' +
        '<div class="vpinrow" id="vpinrow"><input id="vpin" type="password" inputmode="numeric" maxlength="12" placeholder="PIN দিন" autocomplete="off">' +
        '<button class="vbtn" id="vpinok" type="button">Unlock</button></div></div></div>'
      : '<button class="vbig" id="vgo" aria-label="Play" type="button">▶</button>') + '</div>' +
    '<div class="vtools"><button id="vfs" type="button">⛶ Fullscreen</button>' +
    (!locked && fid ? '<a href="https://drive.google.com/file/d/'+fid+'/view" target="_blank" rel="noopener">↗ Google Drive-এ খুলুন</a>' : '') +
    '<button id="vcl" type="button">🔗 লিংক কপি</button></div>';

  var tad = adEl('vtop'); if (tad) box.parentNode.insertBefore(tad, box);
  var pad = adEl('player'); if (pad) box.appendChild(pad);
  var stage = $('#vstage');
  function load(){
    if (!fid) { toast('ভিডিও লিংক পাওয়া যায়নি'); return; }
    track('video_play', { video_title: p.title, premium: premium });
    stage.innerHTML = '<div class="vspin"></div><iframe src="https://drive.google.com/file/d/'+fid+'/preview" allow="autoplay; fullscreen" allowfullscreen></iframe>';
    $('iframe', stage).onload = function(){ var s = $('.vspin', stage); if (s) s.remove(); };
  }
  if ($('#vgo'))     $('#vgo').onclick = load;
  if ($('#vunlock')) $('#vunlock').onclick = function(){ var q = priceInfo(p.price, p.old); track('unlock_click', { video_title: p.title }); pay({ title: p.title, price: q.now, old: q.old, kind: 'video' }); };
  if ($('#vpkb'))    $('#vpkb').onclick = pkgModal;

  /* PIN: ভিডিওর নিজের PIN বা প্যাকেজ PIN (৫ বার ভুলে ৩০ সেকেন্ড অপেক্ষা) */
  var tries = 0, waitUntil = 0;
  function anyPin(){ return !!(String(p.pin || C.masterPin || '').trim() || PK.some(function(k){ return String(k.pin || '').trim(); })); }
  function unlockOk(msg){
    try { localStorage.setItem('vu_' + key, '1'); } catch(e) {}
    toast(msg || 'আনলক হয়েছে ✓ 🎉');
    var pl = $('.pill'); if (pl) pl.textContent = '🔓 PREMIUM';
    var pp0 = $('#vpkp'); if (pp0) pp0.style.display = 'none';
    track('video_unlock', { video_title: p.title });
    load();
  }
  function tryPin(){
    var inp = $('#vpin'), row = $('#vpinrow'), v = inp.value.trim();
    if (Date.now() < waitUntil) { toast('একটু অপেক্ষা করে আবার চেষ্টা করুন'); return; }
    if (!v) { toast('PIN লিখুন'); inp.focus(); return; }
    if (!anyPin()) { toast('এই ভিডিওর জন্য PIN সেট করা নেই'); return; }
    function bad(){
      tries++; inp.value = '';
      row.classList.remove('bad'); void row.offsetWidth; row.classList.add('bad');
      if (tries >= 5) { tries = 0; waitUntil = Date.now() + 30000; toast('৫ বার ভুল! ৩০ সেকেন্ড অপেক্ষা করুন'); }
      else toast('ভুল PIN, আবার চেষ্টা করুন');
    }
    checkPin(v, p.pin).then(function(ok){
      if (ok) return unlockOk();
      return pkgMatch(v).then(function(k){
        if (!k) return bad();
        if (p.pkgOk === false) { toast('এই ভিডিও প্যাকেজের আওতায় নেই'); return; }
        if (k.videos === 0) { setPass(); return unlockOk('সব Premium ভিডিও আনলক হয়েছে ✓ 🎉'); }
        var u = pkUsed(k.id);
        if (u.indexOf(key) > -1) return unlockOk();
        if (u.length >= k.videos) { toast('এই প্যাকেজের সব ভিডিও ব্যবহার হয়ে গেছে'); return; }
        u.push(key); pkSave(k.id, u);
        unlockOk('আনলক হয়েছে ✓ প্যাকেজে আরও ' + bnum(k.videos - u.length) + 'টি ভিডিও বাকি');
      });
    });
  }
  if ($('#vpinok')) {
    $('#vpinok').onclick = tryPin;
    $('#vpin').onkeydown = function(e){ if (e.key === 'Enter') tryPin(); };
  }

  $('#vfs').onclick = function(){ (stage.requestFullscreen || stage.webkitRequestFullscreen || function(){ toast('Fullscreen সাপোর্ট নেই'); }).call(stage); };
  $('#vcl').onclick = function(){ copy(p.url); };
  if (!locked && location.hash === '#play') load();

  $('#vmeta').innerHTML = '<span class="pill '+(premium?'lock':'free')+'">'+(premium ? (locked ? '🔒 PREMIUM' : '🔓 PREMIUM') : 'FREE')+'</span>' +
    '<a href="/search/label/'+encodeURIComponent(p.cat)+'">📂 '+esc(p.cat)+'</a>' +
    (p.dur ? '<span>⏱ '+esc(p.dur)+'</span>' : '') +
    (p.views ? '<span>👁 '+fmt(p.views)+' views</span>' : '') + '<span>📅 '+esc(p.date)+'</span>';

  var aad = adEl('after'); if (aad) $('#vshare').parentNode.insertBefore(aad, $('#vshare'));

  var u = encodeURIComponent(p.url), t = encodeURIComponent(p.title);
  $('#vshare').innerHTML = '<b>Share:</b>' +
    '<a class="fb" target="_blank" rel="noopener" href="https://www.facebook.com/sharer/sharer.php?u='+u+'">Facebook</a>' +
    '<a class="wa" target="_blank" rel="noopener" href="https://wa.me/?text='+t+'%20'+u+'">WhatsApp</a>' +
    '<a class="tg" target="_blank" rel="noopener" href="https://t.me/share/url?url='+u+'&text='+t+'">Telegram</a>' +
    '<a class="x" target="_blank" rel="noopener" href="https://twitter.com/intent/tweet?url='+u+'&text='+t+'">X</a>' +
    '<button class="cp" type="button" id="vcp">Copy Link</button>';
  $('#vcp').onclick = function(){ copy(p.url); };

  var mad = adEl('mid'); if (mad) $('#vshare').parentNode.insertBefore(mad, $('#vrel'));

  /* প্যাকেজ: লক করা ভিডিওর পেজে সবার নিচে */
  var pp = $('#vpkp');
  if (pp && locked && hasPk && p.pkgOk) { pp.innerHTML = pkSection(); pp.style.display = ''; }

  (function(){
    var desc = (d.textContent || '').replace(/\s+/g, ' ').trim().slice(0, 200) || p.title;
    var dm = String(p.dur || '').match(/^(?:(\d+):)?(\d{1,2}):(\d{2})$/);
    var iso = dm ? 'PT' + (dm[1] ? dm[1] + 'H' : '') + dm[2] + 'M' + dm[3] + 'S' : '';
    function put(up){
      var o = { '@context':'https://schema.org', '@type':'VideoObject', name: p.title, description: desc, uploadDate: up,
                isAccessibleForFree: !premium, url: p.url };
      if (p.img) o.thumbnailUrl = [p.img];
      if (iso) o.duration = iso;
      if (!premium && fid) o.embedUrl = 'https://drive.google.com/file/d/' + fid + '/preview';
      ld(o);
    }
    var pid = art.getAttribute('data-id');
    if (pid) fetch('/feeds/posts/default/' + pid + '?alt=json').then(function(r){ return r.json(); })
      .then(function(j){ put(j.entry.published.$t); }).catch(function(){ put(new Date().toISOString()); });
    else put(new Date().toISOString());
  })();

  feed().then(function(all){
    var cur = p.url.replace(/^https?:/,'');
    var rest = all.filter(function(x){ return x.url.replace(/^https?:/,'') !== cur; });
    var rel = rest.filter(function(x){ return x.cat === p.cat; }).slice(0, 4);
    rest.forEach(function(x){ if (rel.length < 4 && rel.indexOf(x) < 0) rel.push(x); });
    if (rel.length) $('#vrel').innerHTML = '<div class="vsec"><div class="vsh"><h2>🎬 Related Videos</h2></div><div class="vgrid">'+rel.map(card).join('')+'</div></div>';
  });
}
})();
//]]>
</script>
</body>
</html>
✦ CODE SNIPPET
<div class="vcfg">
VIDEO URL: https://drive.google.com/file/d/XXXXXXXX/view<br>
VIDEO STATUS: LOCKED<br>
VIDEO CATEGORY: Premium<br>
PRICE: ৳100<br>
VIEWS: 12K<br>
PIN: 4821
</div>
PIN: 91014
বিজ্ঞাপন
পোস্ট করেছেন

Tanbin Farazi