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

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

AI Test Lab

Test your prompts directly on official platforms.

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

Pinnedpopular

 





✦ 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' name='viewport'/>
<title><data:blog.pageTitle/></title>
<b:include data='blog' name='all-head-content'/>

<script>
//<![CDATA[
/* =====================================================================
   ★★★ WEBSITE CONFIGURATION — শুধু এই অংশ পরিবর্তন করলেই হবে ★★★
   ===================================================================== */
var VCONFIG = {
  siteName : 'VIDORA',                 // ওয়েবসাইটের নাম
  logo     : '',                       // লোগো ইমেজের URL (ফাঁকা রাখলে নাম দেখাবে)

  whatsapp : '8801927661298',          // WhatsApp নম্বর (দেশের কোড সহ, + ছাড়া। যেমন 8801712345678)
  bkash    : '01927661298',            // bKash নম্বর
  nagad    : '01927661298',            // Nagad নম্বর
  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 : '#ff2e63',    // মূল রং (বাটন, ব্যাজ)
    accent2: '#ff8a00',    // গ্র্যাডিয়েন্টের দ্বিতীয় রং
    darkBg : '#0b0b0f',    // ডার্ক মোড ব্যাকগ্রাউন্ড
    darkCard: '#16161d',   // ডার্ক মোড কার্ড
    lightBg: '#f4f5f8',    // লাইট মোড ব্যাকগ্রাউন্ড
    lightCard:'#ffffff'    // লাইট মোড কার্ড
  },

  // ক্যাটাগরি = Blogger Label. 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']],

  shorts : true,                       // true = Shorts (৯:১৬ লম্বা) স্টাইল, false = সাধারণ ১৬:৯
  /* ===== ADS (বিজ্ঞাপন) ===== */
  ads : {
    enabled : false,                       // বিজ্ঞাপন চালু করতে true করুন
    adsenseClient : 'ca-pub-XXXXXXXXXXXXXXXX',   // আপনার AdSense Publisher ID
    // AdSense Ad Unit-এর slot ID (ফাঁকা রাখলে ঐ জায়গায় অ্যাড আসবে না)
    slots  : { top:'', feed:'', player:'', after:'' },
    // অন্য নেটওয়ার্কের কোড (Adsterra, Monetag ইত্যাদি) বসাতে ব্যবহার করুন; এটা দিলে AdSense-এর বদলে এটা চলবে
    custom : { top:'', feed:'', player:'', after:'' },
    feedEvery : 6                          // প্রতি কয়টি ভিডিওর পর হোমপেজে অ্যাড
  },
  defaultCategory : 'Viral'            // পোস্টে ক্যাটাগরি না দিলে এটা দেখাবে
};

/* রং CSS-এ বসানো + সেভ করা থিম আগেই সেট (ফ্ল্যাশ এড়াতে) */
(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%')+'}';
  if (!VCONFIG.shorts) document.documentElement.className += ' 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[
/* ===== Base ===== */
:root{--tx:#f2f3f7;--mut:#9aa0b4;--bd:rgba(255,255,255,.09);--sh:0 10px 28px rgba(0,0,0,.45)}
[data-theme=light]{--tx:#14161f;--mut:#667085;--bd:rgba(0,0,0,.09);--sh:0 10px 28px rgba(20,22,31,.13)}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
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.55;transition:background .25s,color .25s}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
button,input,select{font:inherit;color:inherit}
#navbar,#navbar-iframe,.Navbar{display:none!important;height:0!important}
.wrap{max-width:1280px;margin:0 auto;padding:0 16px}
.mut{color:var(--mut)} .sm{font-size:.82rem}

/* ===== Header ===== */
.vhead{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--bd)}
.vh{display:flex;align-items:center;gap:14px;height:62px}
.brand{font-weight:800;font-size:1.35rem;letter-spacing:.5px;display:flex;align-items:center;gap:6px;white-space:nowrap}
.brand span{color:var(--ac)} .brand img{height:34px}
#vnav{display:none;gap:4px;margin-left:8px}
#vnav a{padding:7px 12px;border-radius:99px;font-size:.92rem;color:var(--mut);transition:.2s}
#vnav a:hover,#vnav a.on{background:var(--card);color:var(--tx)}
.vsearch{margin-left:auto;display:flex;background:var(--card);border:1px solid var(--bd);border-radius:99px;overflow:hidden;min-width:0;flex:1;max-width:340px}
.vsearch input{background:none;border:0;outline:0;padding:8px 14px;min-width:0;width:100%}
.vsearch button{background:none;border:0;padding:0 14px;cursor:pointer}
#vtheme{width:40px;height:40px;border-radius:50%;border:1px solid var(--bd);background:var(--card);cursor:pointer;font-size:1.05rem;flex:none}
.chips{display:flex;gap:8px;overflow-x:auto;padding:0 0 12px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;padding:6px 14px;border-radius:99px;background:var(--card);border:1px solid var(--bd);font-size:.88rem;transition:.2s}
.chip:hover,.chip.on{background:linear-gradient(135deg,var(--ac),var(--ac2));border-color:transparent;color:#fff}
@media(min-width:900px){#vnav{display:flex}}

/* ===== Sections & Grid ===== */
main{padding:22px 0 40px;min-height:60vh}
.vsec{margin-bottom:34px}
.vsec h2{font-size:1.25rem;margin-bottom:14px;font-weight:700}
.vgrid{display:grid;gap:14px;grid-template-columns:repeat(2,1fr)}
@media(min-width:640px){.vgrid{grid-template-columns:repeat(3,1fr)}}
@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)}

/* ===== Video Card ===== */
.vc{display:block;transition:transform .25s}
.vc:hover{transform:translateY(-4px)}
.vth{position:relative;aspect-ratio:var(--ratio);border-radius:14px;overflow:hidden;background:linear-gradient(135deg,#23232e,#12121a);box-shadow:var(--sh)}
.vth img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.vc:hover .vth img{transform:scale(1.06)}
.vplay{position:absolute;left:50%;top:50%;width:58px;height:58px;margin:-29px 0 0 -29px;border-radius:50%;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);border:2px solid rgba(255,255,255,.85);display:flex;align-items:center;justify-content:center;color:#fff;font-size:1.3rem;padding-left:4px;transition:.25s}
.vplay::after{content:'';position:absolute;inset:-2px;border-radius:50%;border:2px solid var(--ac);opacity:0;animation:ring 2s infinite}
.vc:hover .vplay{background:var(--ac);transform:scale(1.12)}
@keyframes ring{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.6);opacity:0}}
.vbadge{position:absolute;top:10px;left:10px;font-size:.72rem;font-weight:700;padding:3px 10px;border-radius:99px;color:#fff;letter-spacing:.4px}
.vbadge.free{background:#16a34a}
.vbadge.lock{background:linear-gradient(135deg,#f59e0b,#ef4444)}
.vbadge.lock i{display:inline-block;font-style:normal;animation:shake 2.4s infinite}
@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:38px 10px 10px;background:linear-gradient(transparent,rgba(0,0,0,.88));color:#fff}
.vcap h3{font-size:.9rem;font-weight:600;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.vcap .vm{color:rgba(255,255,255,.8);font-size:.72rem;margin-top:3px}
.vth{display:block}
.vinfo h3{font-size:1rem;font-weight:600;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.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:10px}
.vpager a{padding:10px 20px;border-radius:99px;background:var(--card);border:1px solid var(--bd)}
.vpager a:hover{background:var(--ac);color:#fff;border-color:transparent}

/* ===== Video Page ===== */
.vpost{max-width:980px;margin:0 auto}
.vtitle{font-size:1.5rem;line-height:1.35;margin:4px 0 14px}
#vplayer{max-width:var(--pw);margin:0 auto}
.vstage{position:relative;aspect-ratio:var(--ratio);background:#000;border-radius:16px;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:84px;height:84px;margin:-42px 0 0 -42px;border-radius:50%;border:0;cursor:pointer;background:linear-gradient(135deg,var(--ac),var(--ac2));color:#fff;font-size:2rem;padding-left:6px;box-shadow:0 0 0 0 var(--ac);animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,46,99,.55)}100%{box-shadow:0 0 0 26px rgba(255,46,99,0)}}
.vspin{position:absolute;left:50%;top:50%;width:42px;height:42px;margin:-21px 0 0 -21px;border:4px solid rgba(255,255,255,.25);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,12,.78);backdrop-filter:blur(7px);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:16px;color:#fff;overflow-y:auto}
.vlock .ic{font-size:3rem;animation:shake 2.4s infinite}
.vlock b{font-size:1.2rem;letter-spacing:1.5px}
.vlock p{opacity:.85;margin-bottom:8px}
.vbtn{border:0;cursor:pointer;padding:11px 24px;border-radius:99px;font-weight:700;color:#fff;background:linear-gradient(135deg,var(--ac),var(--ac2));transition:.2s}
.vbtn:hover{transform:translateY(-2px);filter:brightness(1.1)}
.vbtn.wa{background:#25d366;width:100%;margin-top:6px}
.vlink{background:none;border:0;color:#fff;opacity:.8;text-decoration:underline;cursor:pointer;font-size:.85rem;margin-top:6px}

/* PIN বক্স (লক স্ক্রিনে) */
.vpinbox{width:100%;max-width:300px;margin-top:12px;padding-top:12px;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(--bd);word-break:break-all;font-weight:700}

.vtools{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.vtools button,.vtools a{padding:7px 14px;border-radius:99px;background:var(--card);border:1px solid var(--bd);cursor:pointer;font-size:.86rem}
.vtools button:hover,.vtools a:hover{border-color:var(--ac)}
.vmeta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;color:var(--mut);font-size:.9rem;margin-bottom:14px}
.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,#f59e0b,#ef4444)}
.vdesc{background:var(--card);border:1px solid var(--bd);border-radius:14px;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:8px 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(--bd)}
.vrel{margin-top:30px}

/* ===== Payment Modal ===== */
.vmodal{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.72);display:flex;align-items:center;justify-content:center;padding:16px;overflow-y:auto}
.vbox{position:relative;width:100%;max-width:420px;background:var(--card);border:1px solid var(--bd);border-radius:18px;padding:22px;box-shadow:var(--sh);animation:pop .25s}
@keyframes pop{from{transform:scale(.92);opacity:0}to{transform:none;opacity:1}}
.vbox h3{margin-bottom:2px}
.vx{position:absolute;right:12px;top:12px;width:32px;height:32px;border-radius:50%;border:0;background:var(--bg);cursor:pointer}
.vnum{display:flex;align-items:center;gap:8px;margin-top:10px;padding:10px 12px;border-radius:12px;background:var(--bg);border:1px dashed var(--bd)}
.vnum span{flex:1;font-weight:700;letter-spacing:.5px}
.vnum button{border:0;background:var(--ac);color:#fff;border-radius:8px;padding:4px 10px;cursor:pointer;font-size:.8rem}
.vprice{margin:12px 0 4px;font-size:1.1rem}
.vbox label{display:block;margin-top:10px;font-size:.82rem;color:var(--mut)}
.vbox input,.vbox select{width:100%;margin-top:4px;padding:10px 12px;border-radius:10px;border:1px solid var(--bd);background:var(--bg);outline:0}
.vbox input:focus,.vbox select:focus{border-color:var(--ac)}

/* ===== Footer & Toast ===== */
.vad{margin:18px 0;text-align:center;overflow:hidden}
.vad small{display:block;color:var(--mut);font-size:.68rem;margin-bottom:4px}
.vad.feed{grid-column:1/-1;margin:4px 0}
.vfoot{border-top:1px solid var(--bd);padding:22px 0 30px;text-align:center;color:var(--mut);font-size:.88rem}
.vfoot .soc{display:flex;justify-content:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.vfoot .soc a{padding:6px 14px;border-radius:99px;background:var(--card);border:1px solid var(--bd);color:var(--tx)}
.vtoast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:#111;color:#fff;padding:10px 20px;border-radius:99px;z-index:200;font-size:.9rem;box-shadow:var(--sh)}
]]></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'>
  <div class='wrap vh'>
    <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='Dark/Light' id='vtheme' type='button'>&#9728;&#65039;</button>
  </div>
  <div class='wrap'><div class='chips' id='vchips'/></div>
</header>

<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;'>
  <!-- ===== ভিডিও ডিটেইলস পেজ ===== -->
  <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'/>
    </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/>
  <!-- ===== হোমপেজ / লেবেল / সার্চ ===== -->
  <section class='vsec'>
    <h2 id='vh2'>🆕 Latest Videos</h2>
    <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; নতুন ভিডিও</a></b:if></span>
      <span><b:if cond='data:olderPageUrl'><a expr:href='data:olderPageUrl'>আরও ভিডিও &#8594;</a></b:if></span>
    </div>
  </section>
  <section class='vsec' id='sec-trending' style='display:none'><h2>🔥 Trending Videos</h2><div class='vgrid'/></section>
  <section class='vsec' id='sec-most' style='display:none'><h2>🔥 Most Viewed</h2><div class='vgrid'/></section>
</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: Layout থেকে এডিট করা যাবে (Layout → Ad: ... গ্যাজেটে ক্লিক → কোড পেস্ট) ===== -->
<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'/>
    </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'/>
    </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: Player (প্লেয়ারের নিচে)' 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='player'><data:content/></template></b:includable>
  </b:widget>
  <b:widget id='HTML4' locked='false' title='Ad: After (বর্ণনার নিচে)' 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='after'><data:content/></template></b:includable>
  </b:widget>
</b:section>

<footer class='vfoot'><div class='wrap' id='vfoot'/></footer>

<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 ---------- */
function toast(m){ var t = D.createElement('div'); t.className = 'vtoast'; t.textContent = m; B.appendChild(t); setTimeout(function(){ t.remove(); }, 2600); }
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 = String(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|PRICE|VIEWS|PIN)\s*:/i;

/* পোস্টের লেখা থেকে VIDEO URL / STATUS / CATEGORY / PRICE / VIEWS / PIN পড়া */
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|PRICE|VIEWS|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'] || '', views: o['VIEWS'] || '', 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, views:toNum(c.views), drive:c.url, pin:c.pin };
}
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 []; }));
}

/* ---------- Video Card ---------- */
function card(p){
  var lock = p.status === 'LOCKED', img = thumb(p.img, S ? 360 : 640, S ? 640 : 360);
  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>') +
    '<div class="vcap"><h3>'+esc(p.title)+'</h3><div class="vm"><span>'+esc(p.cat)+'</span>' +
    (p.views ? '<span>👁 '+fmt(p.views)+'</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+'"]');            /* ১) Layout গ্যাজেটের কোড */
  if (t) h = t.innerHTML.trim();
  if (!h && A.enabled) {                                /* ২) Config-এর কোড */
    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){               /* innerHTML-এর script চলে না, তাই নতুন করে বানানো */
    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 / Footer ---------- */
var br = $('#brand');
br.innerHTML = C.logo ? '<img src="'+esc(C.logo)+'" alt="'+esc(C.siteName)+'">' : '<span>▶</span> '+esc(C.siteName);
$('#vnav').innerHTML = C.nav.map(function(n){
  var on = (n[1] === '/' && location.pathname === '/') || (n[1] !== '/' && decodeURI(location.pathname) === n[1]);
  return '<a class="'+(on?'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 soc = [['Facebook',C.facebook],['Telegram',C.telegram],['YouTube',C.youtube]].filter(function(s){ return s[1]; })
  .map(function(s){ return '<a href="'+esc(s[1])+'" target="_blank" rel="noopener">'+s[0]+'</a>'; }).join('');
$('#vfoot').innerHTML = (soc ? '<div class="soc">'+soc+'</div>' : '') + '© '+new Date().getFullYear()+' '+esc(C.siteName);

/* টপ ব্যানার অ্যাড */
var mw = $('main .wrap'), topAd = adEl('top'); if (mw && topAd) mw.insertBefore(topAd, mw.firstChild);

/* ---------- 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('');
  });
}
/* stored = "4821" (সাধারণ) অথবা "sha256:xxxx" (Hash). পোস্টে PIN না থাকলে masterPin */
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);
}

/* ---------- 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">✕</button><h3>🔑 PIN Setup</h3>' +
    '<p class="mut sm">PIN লিখুন বা Random বানান, তারপর নিচের লাইনটি কপি করে পোস্টের vcfg-তে বসান।</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);
  m.onclick = function(e){ if (e.target === m || e.target.className === 'vx') m.remove(); };
  $('#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(p){
  var m = $('#vpay');
  if(!m){ m = D.createElement('div'); m.id = 'vpay'; m.className = 'vmodal'; B.appendChild(m); }
  m.style.display = 'flex';
  m.innerHTML = '<div class="vbox"><button class="vx" aria-label="Close">✕</button><h3>💳 Payment</h3><p class="mut sm">'+esc(p.title)+'</p>' +
    '<div class="vnum"><b>bKash:</b><span>'+esc(C.bkash)+'</span><button data-c="'+esc(C.bkash)+'">কপি</button></div>' +
    '<div class="vnum"><b>Nagad:</b><span>'+esc(C.nagad)+'</span><button data-c="'+esc(C.nagad)+'">কপি</button></div>' +
    '<div class="vprice">Price: <b>'+esc(p.price)+'</b></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(p.price)+'"></label>' +
    '<label>Gmail (ভিডিও Access পেতে)<input id="vpg" type="email" placeholder="you@gmail.com"></label>' +
    '<button class="vbtn wa" id="vpw">📱 WhatsApp-এ Payment Details পাঠান</button>' +
    '<p class="mut sm" style="margin-top:8px">Payment করার পর Transaction ID দিয়ে বাটনে ক্লিক করুন। Admin verify করে WhatsApp-এ আপনাকে একটি PIN পাঠাবেন। সেই PIN ভিডিওর উপরে দিলে ভিডিও Unlock হবে।</p></div>';
  m.onclick = function(e){
    if(e.target === m || e.target.className === 'vx') m.style.display = 'none';
    var c = e.target.getAttribute && e.target.getAttribute('data-c'); if(c) copy(c);
  };
  $('#vpw').onclick = function(){
    var trx = $('#vpt').value.trim();
    if(!trx){ toast('Transaction ID লিখুন'); $('#vpt').focus(); return; }
    var gm = $('#vpg').value.trim();
    var msg = 'Hello,\nI want to unlock this video.\n\nVideo: '+p.title+'\n\nPayment Method: '+$('#vpm').value+
      '\n\nTransaction ID: '+trx+'\n\nAmount: '+$('#vpa').value.trim()+(gm ? '\n\nGmail: '+gm : '')+
      '\n\nPlease unlock this video.';
    window.open('https://wa.me/'+C.whatsapp.replace(/\D/g,'')+'?text='+encodeURIComponent(msg), '_blank');
    m.style.display = 'none';
    toast('WhatsApp-এ পাঠানো হয়েছে। PIN পেলে ভিডিওর উপরে দিন');
    var pi = $('#vpin'); if (pi) pi.focus();
  };
}

/* ---------- হোমপেজ / লেবেল / সার্চ ---------- */
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;
  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 premium = p.status === 'LOCKED';
  var unl = false;                                      /* আগে PIN দিয়ে আনলক করা থাকলে মনে রাখা */
  try { unl = localStorage.getItem('vu_' + (fid || p.url)) === '1'; } catch(e) {}
  var locked = premium && !unl;
  var th = thumb(p.img, S ? 720 : 1280, S ? 1280 : 720);

  /* কনফিগ লাইন ও থাম্বনেইল ছবি বর্ণনা থেকে সরানো (PIN-সহ) */
  $$('.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 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">🔓 Unlock Video — '+esc(p.price)+'</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">▶</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 pad = adEl('player'); if (pad) box.appendChild(pad);
  var stage = $('#vstage');
  function load(){
    if (!fid) { toast('ভিডিও লিংক পাওয়া যায়নি'); return; }
    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(){ pay(p); };

  /* PIN দিয়ে আনলক (৫ বার ভুল হলে ৩০ সেকেন্ড অপেক্ষা) */
  var tries = 0, waitUntil = 0;
  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 (!String(p.pin || C.masterPin || '').trim()) { toast('এই ভিডিওর জন্য PIN সেট করা নেই'); return; }
    checkPin(v, p.pin).then(function(ok){
      if (ok) {
        try { localStorage.setItem('vu_' + (fid || p.url), '1'); } catch(e) {}
        toast('আনলক হয়েছে ✓ 🎉');
        var pl = $('.pill'); if (pl) pl.textContent = '🔓 PREMIUM';
        load();
      } else {
        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, আবার চেষ্টা করুন');
      }
    });
  }
  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.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); };

  /* Related Videos — একই ক্যাটাগরির ভিডিও */
  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"><h2>🎬 Related Videos</h2><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>
বিজ্ঞাপন
পোস্ট করেছেন

Tanbin Farazi