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

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

AI Test Lab

Test your prompts directly on official platforms.

প্রমপ্টবক্স ওয়েবসাইট বানানোর সম্পুর্ন রেডি কোড।

 



✦ CODE SNIPPET
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' expr:dir='data:blog.languageDirection' expr:lang='data:blog.locale' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
<head>
    <meta charset='utf-8'/>
    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'/>
    <title><data:blog.pageTitle/></title>
    <b:include data='blog' name='all-head-content'/>

    <!-- Google Fonts & Icons -->
    <link href='https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&amp;family=Sora:wght@500;600;700;800&amp;display=swap' rel='stylesheet'/>
    <link href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css' rel='stylesheet'/>

    <b:skin><![CDATA[
        :root {
            --primary: #3b82f6;
            --primary-hover: #2563eb;
            --accent-gradient: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 50%, #ec4899 100%);
            --accent-gradient-2: linear-gradient(135deg, #8b5cf6 0%, #3b82f6 100%);
            --bg-body: #060913;
            --bg-card: rgba(19, 28, 49, 0.7);
            --text-main: #f8fafc;
            --text-secondary: #94a3b8;
            --border-color: rgba(59, 130, 246, 0.15);
            --shadow-sm: 0 10px 30px 0 rgba(0, 0, 0, 0.4);
            --radius-md: 16px;
            --radius-full: 9999px;
            --transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
        }
        body.light-mode {
            --bg-body: #f1f5f9;
            --bg-card: rgba(255, 255, 255, 0.85);
            --text-main: #0f172a;
            --text-secondary: #475569;
            --border-color: rgba(226, 232, 240, 0.8);
            --shadow-sm: 0 10px 30px 0 rgba(0, 0, 0, 0.05);
        }
        *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
        html { scroll-behavior: smooth; }
        body { font-family: 'Inter', sans-serif; background-color: var(--bg-body); color: var(--text-main); line-height: 1.5; transition: background 0.3s ease; overflow-x: hidden; width: 100%; position: relative; }
        .site-logo, h1, h2, h3, .hero-title, .btn-gradient, .featured-content h2 { font-family: 'Sora', 'Inter', sans-serif; letter-spacing: -0.01em; }

        /* Animated Ambient Background Glow */
        body:not(.light-mode)::before {
            content: '';
            position: absolute;
            top: 0; left: 50%;
            transform: translateX(-50%);
            width: 900px; height: 450px;
            background: radial-gradient(circle, rgba(59, 130, 246, 0.14) 0%, rgba(139, 92, 246, 0.06) 50%, transparent 80%);
            z-index: -1;
            pointer-events: none;
            animation: glowPulse 8s ease-in-out infinite;
        }
        @keyframes glowPulse {
            0%, 100% { opacity: 1; transform: translateX(-50%) scale(1); }
            50% { opacity: 0.7; transform: translateX(-50%) scale(1.08); }
        }

        /* Subtle film-grain noise texture for premium depth */
        body::after {
            content: '';
            position: fixed; inset: 0; z-index: 9999; pointer-events: none;
            opacity: 0.035; mix-blend-mode: overlay;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
        }
        body.light-mode::after { opacity: 0.02; }

        a { text-decoration: none; color: inherit; transition: var(--transition); }
        .container { width: 100%; max-width: 1320px; margin: 0 auto; padding: 0 12px; }
        @media(min-width: 768px) { .container { padding: 0 20px; } }

        /* Page load fade */
        body { animation: pageFadeIn 0.6s ease both; }
        @keyframes pageFadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        /* Modern Glassmorphism Header */
        .site-header { position: sticky; top: 0; z-index: 1000; background-color: var(--bg-card); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid var(--border-color); height: 75px; display: flex; align-items: center; justify-content: space-between; padding: 0 20px; box-shadow: var(--shadow-sm); width: 100%; transition: height 0.3s ease, background 0.3s ease, box-shadow 0.3s ease; }
        .site-header.compact { height: 62px; box-shadow: 0 8px 24px rgba(0,0,0,0.25); }

        .site-logo { font-size: 19px; font-weight: 700; color: var(--text-main); display: flex; align-items: center; gap: 10px; }
        .logo-icon {
            background: var(--accent-gradient);
            background-size: 200% 200%;
            animation: gradientShift 4s ease infinite;
            color: #fff; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: 10px; box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
            transition: transform 0.3s ease;
        }
        .site-logo:hover .logo-icon { transform: rotate(-12deg) scale(1.08); }
        @keyframes gradientShift {
            0% { background-position: 0% 50%; }
            50% { background-position: 100% 50%; }
            100% { background-position: 0% 50%; }
        }

        .nav-links { display: flex; align-items: center; gap: 24px; font-weight: 500; font-size: 14px; }
        .nav-links a { position: relative; color: var(--text-secondary); padding: 4px 0; }
        .nav-links a::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0%; height: 2px; background: var(--accent-gradient); border-radius: 2px; transition: width 0.3s ease; }
        .nav-links a:hover { color: var(--text-main); }
        .nav-links a:hover::after { width: 100%; }
        .nav-links a.active { color: var(--text-main); }
        .nav-links a.active::after { width: 100%; }

        .header-actions { display: flex; align-items: center; gap: 12px; }
        .theme-toggle-btn { background: var(--bg-card); border: 1px solid var(--border-color); color: var(--text-main); width: 38px; height: 38px; border-radius: var(--radius-full); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: var(--transition); box-shadow: var(--shadow-sm); }
        .theme-toggle-btn:hover { transform: scale(1.1) rotate(15deg); border-color: var(--primary); }
        .theme-toggle-btn:active { transform: scale(0.92); }
        .theme-toggle-btn i { transition: transform 0.4s ease; }

        .mobile-menu-toggle { display: none; background: none; border: none; color: var(--text-main); font-size: 20px; cursor: pointer; transition: transform 0.25s ease; }
        .mobile-menu-toggle:active { transform: scale(0.85) rotate(90deg); }
        @media(max-width: 768px) { .nav-links { display: none; } .mobile-menu-toggle { display: block; } }

        /* Mobile Nav Drawer */
        .mobile-nav { display: none; background: var(--bg-card); backdrop-filter: blur(16px); border-bottom: 1px solid var(--border-color); padding: 15px 20px; flex-direction: column; gap: 12px; width: 100%; max-height: 0; overflow: hidden; transition: max-height 0.35s ease, padding 0.35s ease; }
        .mobile-nav.open { display: flex; max-height: 300px; animation: slideDown 0.35s ease; }
        @keyframes slideDown {
            from { opacity: 0; transform: translateY(-10px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .mobile-nav a { font-size: 15px; font-weight: 500; color: var(--text-secondary); padding: 8px 0; border-bottom: 1px solid var(--border-color); transition: color 0.2s ease, padding-left 0.2s ease; }
        .mobile-nav a:hover { color: var(--primary); padding-left: 6px; }

        /* Gradient & Glass Buttons with ripple */
        .btn-gradient {
            background: var(--accent-gradient); background-size: 200% 200%;
            color: #fff; border: none; padding: 9px 20px; border-radius: var(--radius-full); font-size: 13px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; box-shadow: 0 4px 15px rgba(59, 130, 246, 0.35); transition: var(--transition), background-position 0.6s ease;
            position: relative; overflow: hidden;
        }
        .btn-gradient:hover { transform: translateY(-3px); background-position: 100% 50%; box-shadow: 0 8px 24px rgba(59, 130, 246, 0.5); }
        .btn-gradient:active { transform: translateY(-1px) scale(0.97); }
        .btn-gradient i { transition: transform 0.3s ease; }
        .btn-gradient:hover i { transform: translateX(4px); }

        /* Featured Banner */
        .featured-banner { background-color: var(--bg-card); backdrop-filter: blur(12px); border: 1px solid var(--border-color); border-radius: var(--radius-md); overflow: hidden; margin-bottom: 24px; display: flex; flex-direction: column; box-shadow: var(--shadow-sm); width: 100%; transition: var(--transition); opacity: 1; transform: translateY(0); }
        .featured-banner.pre-reveal { opacity: 0; transform: translateY(24px); }
        .featured-banner.pre-reveal.in-view { opacity: 1; transform: translateY(0); }
        .featured-banner:hover { border-color: rgba(59, 130, 246, 0.4); box-shadow: 0 15px 35px rgba(59, 130, 246, 0.18); transform: translateY(-4px); }
        @media(min-width: 768px) { .featured-banner { display: grid; grid-template-columns: 1.2fr 1fr; } }
        .featured-thumb { width: 100%; height: 200px; background: var(--border-color); overflow: hidden; position: relative; }
        @media(min-width: 768px) { .featured-thumb { height: 100%; min-height: 260px; } }
        .featured-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s cubic-bezier(0.4,0,0.2,1); display: block; }
        .featured-banner:hover .featured-thumb img { transform: scale(1.08); }
        .featured-content { padding: 20px; display: flex; flex-direction: column; justify-content: center; width: 100%; }
        @media(min-width: 768px) { .featured-content { padding: 28px; } }
        .category-badge.pulse-badge { animation: badgePulse 2.2s ease-in-out infinite; }
        @keyframes badgePulse {
            0%, 100% { box-shadow: 0 0 0 0 rgba(59,130,246,0.35); }
            50% { box-shadow: 0 0 0 8px rgba(59,130,246,0); }
        }

        /* Layout Grid */
        .content-layout { display: grid; grid-template-columns: 1fr; gap: 20px; margin-top: 20px; width: 100%; }
        @media(min-width: 992px) { .content-layout { grid-template-columns: 1fr 320px; gap: 30px; } }
        .widget { background-color: var(--bg-card); backdrop-filter: blur(12px); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 18px; margin-bottom: 20px; box-shadow: var(--shadow-sm); width: 100%; overflow: hidden; opacity: 1; transform: translateY(0); transition: var(--transition); }
        .widget.pre-reveal { opacity: 0; transform: translateY(20px); }
        .widget.pre-reveal.in-view { opacity: 1; transform: translateY(0); }
        @media(min-width: 768px) { .widget { padding: 22px; } }

        /* Beautiful Prompt Cards (Glassmorphism, Glow & Scroll-reveal) */
        .app-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-top: 15px; width: 100%; }
        @media(max-width: 540px) { .app-grid { grid-template-columns: 1fr; } }
        @media(min-width: 1024px) { .app-grid { grid-template-columns: repeat(3, 1fr); } }

        .app-card {
            background-color: var(--bg-card); backdrop-filter: blur(12px); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 14px; display: flex; flex-direction: column; gap: 12px; box-shadow: var(--shadow-sm); transition: transform 0.4s cubic-bezier(0.34,1.56,0.64,1), box-shadow 0.4s ease, border-color 0.4s ease, opacity 0.5s ease; width: 100%; overflow: hidden; position: relative;
            opacity: 1; transform: translateY(0) scale(1);
        }
        .app-card.pre-reveal { opacity: 0; transform: translateY(30px) scale(0.97); }
        .app-card.pre-reveal.in-view { opacity: 1; transform: translateY(0) scale(1); }
        .app-card:hover { transform: translateY(-8px) scale(1.015); border-color: transparent; box-shadow: 0 18px 40px rgba(59, 130, 246, 0.2), 0 0 24px rgba(139, 92, 246, 0.12); }

        /* Animated rotating gradient border on hover */
        .app-card::after {
            content: ''; position: absolute; inset: -1px; border-radius: var(--radius-md);
            padding: 1.5px;
            background: conic-gradient(from 0deg, #3b82f6, #8b5cf6, #ec4899, #3b82f6);
            -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
            -webkit-mask-composite: xor; mask-composite: exclude;
            opacity: 0; transition: opacity 0.35s ease; z-index: 2; pointer-events: none;
            animation: rotateBorder 3s linear infinite; animation-play-state: paused;
        }
        .app-card:hover::after { opacity: 1; animation-play-state: running; }
        @keyframes rotateBorder { to { transform: rotate(360deg); } }

        .card-thumb-wrap { height: 140px; background: var(--bg-body); border-radius: 10px; overflow: hidden; width: 100%; position: relative; }
        .card-thumb-wrap::after {
            content: ''; position: absolute; inset: 0;
            background: linear-gradient(120deg, transparent 30%, rgba(255,255,255,0.08) 50%, transparent 70%);
            background-size: 200% 100%; opacity: 0; transition: opacity 0.3s ease;
        }
        .app-card:hover .card-thumb-wrap::after { opacity: 1; animation: shine 1.1s ease; }
        @keyframes shine {
            from { background-position: 200% 0; }
            to { background-position: -200% 0; }
        }
        .card-thumb-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.5s ease; }
        .app-card:hover .card-thumb-wrap img { transform: scale(1.1); }

        .category-badge { background: rgba(59, 130, 246, 0.12); color: var(--primary); padding: 3px 10px; border-radius: var(--radius-full); font-size: 11px; font-weight: 700; text-transform: uppercase; width: max-content; transition: background 0.25s ease, color 0.25s ease; }
        .app-card:hover .category-badge { background: var(--cat-color, var(--primary)); color: #fff; }

        /* Category accent colors, set via JS based on badge text */
        .category-badge.cat-image { --cat-color: #ec4899; background: rgba(236, 72, 153, 0.12); color: #ec4899; }
        .category-badge.cat-video { --cat-color: #f97316; background: rgba(249, 115, 22, 0.12); color: #f97316; }
        .category-badge.cat-chat { --cat-color: #22c55e; background: rgba(34, 197, 94, 0.12); color: #22c55e; }
        .category-badge.cat-code { --cat-color: #06b6d4; background: rgba(6, 182, 212, 0.12); color: #06b6d4; }
        .category-badge.cat-default { --cat-color: #3b82f6; }

        .app-card h3 { margin: 0; }
        .app-card h3 a { font-size: 15px; font-weight: 600; line-height: 1.4; min-height: 2.8em; color: var(--text-main); word-break: break-word; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; transition: color 0.25s ease; }
        .app-card h3 a:hover { color: var(--primary); }

        .card-meta-bar { display: flex; align-items: center; justify-content: space-between; font-size: 11px; color: var(--text-secondary); border-top: 1px solid var(--border-color); padding-top: 10px; margin-top: auto; }

        /* Direct Card View / Open Button */
        .card-open-btn { background: rgba(59, 130, 246, 0.1); color: var(--primary); border: 1px solid rgba(59, 130, 246, 0.2); padding: 5px 12px; border-radius: var(--radius-full); font-size: 11px; font-weight: 600; cursor: pointer; transition: var(--transition); display: inline-flex; align-items: center; gap: 5px; }
        .card-open-btn:hover { background: var(--primary); color: #fff; transform: translateY(-2px); box-shadow: 0 6px 14px rgba(59,130,246,0.35); }
        .card-open-btn i { transition: transform 0.3s ease; }
        .card-open-btn:hover i { transform: translateX(3px) translateY(-3px); }

        /* Post Body & Prompt Box */
        .post-body { font-size: 15px; line-height: 1.8; margin-top: 15px; overflow-x: auto; word-break: break-word; }
        .prompt-box { background: #0b1120; border: 1px solid var(--border-color); border-radius: 12px; margin: 20px 0; overflow: hidden; color: #f8fafc; width: 100%; box-shadow: var(--shadow-sm); transition: box-shadow 0.3s ease, border-color 0.3s ease; }
        .prompt-box:hover { border-color: rgba(59,130,246,0.4); box-shadow: 0 12px 30px rgba(59,130,246,0.15); }
        .prompt-header { background: #111827; padding: 12px 18px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(255,255,255,0.06); font-size: 13px; flex-wrap: wrap; gap: 6px; }
        .prompt-content { padding: 18px; font-family: monospace; font-size: 13px; white-space: pre-wrap; word-break: break-word; overflow-x: auto; color: #e2e8f0; }

        /* Copy button feedback */
        .copy-prompt-btn { background: rgba(59,130,246,0.15); color: var(--primary); border: 1px solid rgba(59,130,246,0.25); padding: 5px 12px; border-radius: var(--radius-full); font-size: 12px; font-weight: 600; cursor: pointer; transition: var(--transition); }
        .copy-prompt-btn:hover { background: var(--primary); color: #fff; }
        .copy-prompt-btn.copied { background: #22c55e; color: #fff; border-color: #22c55e; }

        /* Ad Slots (5 Dedicated Gadget Sections) */
        .ad-gadget { background: var(--bg-card); backdrop-filter: blur(10px); border: 2px dashed var(--border-color); padding: 14px; text-align: center; margin: 16px 0; color: var(--text-secondary); font-size: 12px; border-radius: var(--radius-md); width: 100%; overflow: hidden; transition: border-color 0.3s ease; }
        .ad-gadget:hover { border-color: rgba(59,130,246,0.35); }

        /* Skeleton loading shimmer for images before load */
        img[loading='lazy'] { background: linear-gradient(90deg, rgba(148,163,184,0.08) 25%, rgba(148,163,184,0.15) 37%, rgba(148,163,184,0.08) 63%); background-size: 400% 100%; animation: skeletonShimmer 1.4s ease infinite; }
        @keyframes skeletonShimmer {
            0% { background-position: 100% 50%; }
            100% { background-position: 0% 50%; }
        }

        /* Scroll-to-top button */
        #scrollTopBtn {
            position: fixed; bottom: 24px; right: 24px; z-index: 999;
            width: 42px; height: 42px; border-radius: 50%; border: none;
            background: var(--accent-gradient); color: #fff; cursor: pointer;
            display: flex; align-items: center; justify-content: center;
            box-shadow: 0 8px 20px rgba(59,130,246,0.4);
            opacity: 0; pointer-events: none; transform: translateY(16px) scale(0.8);
            transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.34,1.56,0.64,1);
        }
        #scrollTopBtn.visible { opacity: 1; pointer-events: auto; transform: translateY(0) scale(1); }
        #scrollTopBtn:hover { transform: translateY(-4px) scale(1.08); }

        /* Reading progress bar */
        #readingProgressBar {
            position: fixed; top: 0; left: 0; height: 3px; width: 0%;
            background: var(--accent-gradient); background-size: 200% 200%;
            animation: gradientShift 4s ease infinite;
            z-index: 1100; transition: width 0.1s ease-out;
            box-shadow: 0 0 8px rgba(59,130,246,0.6);
        }

        /* Mouse-follow glow effect on cards */
        .app-card { --mx: 50%; --my: 50%; }
        .app-card::before {
            content: ''; position: absolute; inset: 0; border-radius: var(--radius-md);
            background: radial-gradient(320px circle at var(--mx) var(--my), rgba(59,130,246,0.16), transparent 70%);
            opacity: 0; transition: opacity 0.4s ease; pointer-events: none; z-index: 0;
        }
        .app-card:hover::before { opacity: 1; }
        .app-card > * { position: relative; z-index: 1; }

        /* Full-card skeleton loader (only ever added by JS, never the default state, so content is never hidden if JS fails) */
        .card-thumb-wrap, .featured-thumb { position: relative; }
        .app-card.is-loading .card-thumb-wrap::before,
        .featured-banner.is-loading .featured-thumb::before {
            content: ''; position: absolute; inset: 0; z-index: 2;
            background: linear-gradient(90deg, rgba(148,163,184,0.10) 25%, rgba(148,163,184,0.22) 37%, rgba(148,163,184,0.10) 63%);
            background-size: 400% 100%; animation: skeletonShimmer 1.4s ease infinite;
        }

        /* Always-on animated hero banner */
        .hero-banner { position: relative; overflow: hidden; text-align: center; padding: 36px 20px 44px; }
        .hero-glow {
            position: absolute; inset: -60px 0 auto 0; height: 220px;
            background: radial-gradient(circle at 50% 0%, rgba(59,130,246,0.28), rgba(139,92,246,0.12) 45%, transparent 75%);
            z-index: -1; animation: heroGlowMove 6s ease-in-out infinite;
        }
        @keyframes heroGlowMove {
            0%, 100% { transform: translateY(0) scale(1); opacity: 1; }
            50% { transform: translateY(18px) scale(1.06); opacity: 0.8; }
        }
        .hero-icons { display: flex; justify-content: center; gap: 22px; margin-bottom: 14px; }
        .float-icon { font-size: 26px; display: inline-block; animation: floatIcon 3.2s ease-in-out infinite; filter: drop-shadow(0 4px 10px rgba(59,130,246,0.25)); }
        .float-icon.i2 { animation-delay: 0.4s; }
        .float-icon.i3 { animation-delay: 0.8s; }
        .float-icon.i4 { animation-delay: 1.2s; }
        @keyframes floatIcon {
            0%, 100% { transform: translateY(0) rotate(0deg); }
            50% { transform: translateY(-10px) rotate(8deg); }
        }
        .hero-title {
            font-size: 22px; font-weight: 800; line-height: 1.35;
            color: var(--text-main); position: relative;
            height: 64px; display: flex; align-items: center; justify-content: center;
        }
        @media(min-width: 768px) { .hero-title { font-size: 30px; height: 48px; } }
        .hero-line {
            position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
            gap: 8px; padding: 0 12px; text-align: center;
            color: var(--primary);
            text-shadow: 0 0 18px rgba(59,130,246,0.55), 0 0 36px rgba(59,130,246,0.25);
            opacity: 0; transform: translateY(10px);
            animation: heroCycle 12s ease-in-out infinite;
        }
        .hero-line:nth-child(1) { animation-delay: 0s; }
        .hero-line:nth-child(2) { animation-delay: 3s; }
        .hero-line:nth-child(3) { animation-delay: 6s; }
        .hero-line:nth-child(4) { animation-delay: 9s; }
        @keyframes heroCycle {
            0% { opacity: 0; transform: translateY(10px); }
            4%, 21% { opacity: 1; transform: translateY(0); }
            25%, 100% { opacity: 0; transform: translateY(-10px); }
        }
        .hero-subtitle { color: var(--text-secondary); font-size: 13px; margin-top: 10px; }
    ]]></b:skin>
</head>
<body>

    <!-- Reading Progress Bar -->
    <div id='readingProgressBar'/>

    <noscript>
        <style>.app-card, .widget, .featured-banner { opacity: 1 !important; transform: none !important; }</style>
    </noscript>

    <!-- Modern Glassmorphism Header -->
    <header class='site-header' id='siteHeader'>
        <a class='site-logo' expr:href='data:blog.homepageUrl'>
            <div class='logo-icon'><i class='fa-solid fa-wand-magic-sparkles'/></div>
            <span>PromptBox</span>
        </a>
        <nav class='nav-links'>
            <a class='nav-link-tab active' expr:href='data:blog.homepageUrl'>Home</a>
            <a class='nav-link-tab' data-target='aiTestLabView' href='javascript:void(0);'>AI Test Lab</a>
            <a class='nav-link-tab' data-target='imageToolkitView' href='javascript:void(0);'>Image Toolkit</a>
        </nav>
        <div class='header-actions'>
            <button class='theme-toggle-btn' id='themeToggleBtn' title='Toggle Mode'><i class='fa-solid fa-sun' id='themeIcon'/></button>
            <button class='mobile-menu-toggle' id='mobileMenuBtn'><i class='fa-solid fa-bars'/></button>
        </div>
    </header>

    <!-- Mobile Nav Drawer -->
    <div class='mobile-nav' id='mobileNav'>
        <a expr:href='data:blog.homepageUrl'>Home</a>
        <a class='nav-link-tab mobile-tab' data-target='aiTestLabView' href='javascript:void(0);'>AI Test Lab</a>
        <a class='nav-link-tab mobile-tab' data-target='imageToolkitView' href='javascript:void(0);'>Image Toolkit</a>
    </div>

    <!-- Always-animated Hero Banner (auto-cycling, no click/scroll needed) -->
    <div class='hero-banner'>
        <div class='hero-glow'/>
        <div class='hero-icons'>
            <span class='float-icon i1'>🌐</span>
            <span class='float-icon i2'>🖼&#65039;</span>
            <span class='float-icon i3'>&#9889;</span>
            <span class='float-icon i4'>🎬</span>
        </div>
        <h1 class='hero-title'>
            <span class='hero-line'>🌐 এক ক&#2509;ল&#2495;ক&#2503; ওয&#2492;&#2503;বস&#2494;ইট র&#2503;ড&#2495;</span>
            <span class='hero-line'>🖼&#65039; এক ক&#2509;ল&#2495;ক&#2503; ছব&#2495; র&#2503;ড&#2495;</span>
            <span class='hero-line'>🎬 এক ক&#2509;ল&#2495;ক&#2503; ভ&#2495;ড&#2495;ও র&#2503;ড&#2495;</span>
            <span class='hero-line'>&#9997;&#65039; এক ক&#2509;ল&#2495;ক&#2503; ল&#2503;খ&#2494; র&#2503;ড&#2495;</span>
        </h1>
        <p class='hero-subtitle'>স&#2503;র&#2494; AI প&#2509;রম&#2509;পট দ&#2495;য&#2492;&#2503; স&#2503;ক&#2503;ন&#2509;ড&#2503; ত&#2504;র&#2495; কর&#2497;ন আপন&#2494;র আইড&#2495;য&#2492;&#2494;</p>
    </div>

    <!-- AD GADGET 1 -->
    <div class='container'>
        <b:section class='ad-gadget' id='Ad-Gadget-1' showaddelement='yes' title='Ad Gadget 1: Header Banner'/>
    </div>

    <!-- AI Test Lab View -->
    <div class='container' id='aiTestLabView' style='display:none; padding: 40px 0; text-align:center;'>
        <h2 style='font-size: 24px; margin-bottom: 10px;'>AI Test Lab</h2>
        <p style='color: var(--text-secondary); margin-bottom: 20px; font-size: 14px;'>Test your copied prompts directly on official AI platforms.</p>
        <div style='display:flex; justify-content:center; gap:14px; flex-wrap:wrap;'>
            <a class='btn-gradient' href='https://chatgpt.com' target='_blank'>Open ChatGPT</a>
            <a class='btn-gradient' href='https://gemini.google.com' target='_blank'>Open Gemini</a>
        </div>
    </div>

    <!-- Image Toolkit View -->
    <div class='container' id='imageToolkitView' style='display:none; padding: 40px 0; text-align:center;'>
        <h2 style='font-size: 24px; margin-bottom: 10px;'>Image Toolkit</h2>
        <p style='color: var(--text-secondary); margin-bottom: 20px; font-size: 14px;'>Crop, resize or apply filters to your images right in your browser.</p>
        <input accept='image/*' id='imgInput' style='margin-bottom:15px;' type='file'/>
        <div style='border:2px dashed var(--border-color); min-height:220px; display:flex; align-items:center; justify-content:center; background:var(--bg-card); border-radius:16px; padding:10px;'>
            <img id='imgPreview' style='max-width:100%; max-height:300px; display:none;'/>
            <span id='imgPlaceholder' style='color:var(--text-secondary); font-size:13px;'>No image selected</span>
        </div>
    </div>

    <!-- Main Content Area -->
    <div class='container' id='mainHomeContent'>
        <div class='content-layout'>

            <main class='main-content' style='min-width:0;'>

                <!-- AD GADGET 2 -->
                <b:section class='ad-gadget' id='Ad-Gadget-2' showaddelement='yes' title='Ad Gadget 2: Above Content'/>

                <b:section id='main-blog-section' showaddelement='yes'>
                  <b:widget id='HTML4' locked='false' title='ADS' type='HTML' visible='true'>
                    <b:widget-settings>
                      <b:widget-setting name='content'><![CDATA[<script>
  atOptions = {
    'key' : '48201a567e2d0c69b16ad4b3b1891e65',
    'format' : 'iframe',
    'height' : 90,
    'width' : 728,
    'params' : {}
  };
</script>
<script src="https://femalesfellowship.com/48201a567e2d0c69b16ad4b3b1891e65/invoke.js"></script>]]></b:widget-setting>
                    </b:widget-settings>
                    <b:includable id='main'>
  <b:include name='widget-title'/>
  <div class='widget-content'>
    <data:content/>
  </div>
</b:includable>
                  </b:widget>
                  <b:widget id='Blog1' locked='false' 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'>1</b:widget-setting>
                      <b:widget-setting name='showBacklinks'>false</b:widget-setting>
                      <b:widget-setting name='style.bordercolor'>#ffffff</b:widget-setting>
                      <b:widget-setting name='showInlineAds'>false</b:widget-setting>
                      <b:widget-setting name='showReactions'>false</b:widget-setting>
                    </b:widget-settings>
                    <b:includable id='main'>

                            <!-- Index View -->
                            <b:if cond='data:blog.pageType == &quot;index&quot; or data:blog.pageType == &quot;archive&quot; or data:blog.pageType == &quot;search&quot;'>

                                <!-- Featured Banner (First Post Showcase) -->
                                <b:loop values='data:posts' var='post'>
                                    <b:if cond='data:post.isFirstPost'>
                                        <div class='featured-banner reveal-el'>
                                            <div class='featured-thumb'>
                                                <b:if cond='data:post.featuredImage'>
                                                    <img expr:alt='data:post.title' expr:src='data:post.featuredImage' loading='lazy'/>
                                                <b:else/>
                                                    <b:if cond='data:post.firstImageUrl'>
                                                        <img expr:alt='data:post.title' expr:src='data:post.firstImageUrl' loading='lazy'/>
                                                    <b:else/>
                                                        <img alt='Featured' loading='lazy' src='https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?q=80&amp;w=800&amp;auto=format&amp;fit=crop'/>
                                                    </b:if>
                                                </b:if>
                                            </div>
                                            <div class='featured-content'>
                                                <span class='category-badge pulse-badge' style='margin-bottom:8px;'>🔥 Featured Master Prompt</span>
                                                <h2 style='font-size: 18px; font-weight: 700; margin-bottom: 8px; line-height:1.3;'><a expr:href='data:post.url'><data:post.title/></a></h2>
                                                <p style='font-size: 13px; color: var(--text-secondary); margin-bottom: 16px; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;'><data:post.snippet/></p>
                                                <div>
                                                    <a class='btn-gradient' expr:href='data:post.url'>Explore Prompt <i class='fa-solid fa-arrow-right'/></a>
                                                </div>
                                            </div>
                                        </div>
                                    </b:if>
                                </b:loop>

                                <h2 style='font-size: 17px; font-weight: 700; margin-top: 20px; margin-bottom: 12px;'><i class='fa-solid fa-fire'/> Community Prompts</h2>

                                <!-- Community Prompts Grid with "View / Open" Button -->
                                <div class='app-grid'>
                                    <b:loop values='data:posts' var='post'>
                                        <div class='app-card reveal-el'>
                                            <div class='card-thumb-wrap'>
                                                <b:if cond='data:post.featuredImage'>
                                                    <img expr:alt='data:post.title' expr:src='data:post.featuredImage' loading='lazy'/>
                                                <b:else/>
                                                    <b:if cond='data:post.firstImageUrl'>
                                                        <img expr:alt='data:post.title' expr:src='data:post.firstImageUrl' loading='lazy'/>
                                                    <b:else/>
                                                        <img alt='Thumbnail' loading='lazy' src='https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?q=80&amp;w=400&amp;auto=format&amp;fit=crop'/>
                                                    </b:if>
                                                </b:if>
                                            </div>

                                            <div style='display:flex; justify-content:space-between; align-items:center;'>
                                                <span class='category-badge'>
                                                    <b:if cond='data:post.labels'>
                                                        <data:post.labels.first.name/>
                                                    <b:else/>
                                                        AI Prompt
                                                    </b:if>
                                                </span>
                                                <span style='font-size:11px; color:var(--text-secondary);'><data:post.dateHeader/></span>
                                            </div>

                                            <h3><a expr:href='data:post.url'><data:post.title/></a></h3>

                                            <div class='card-meta-bar'>
                                                <span class='card-stats'><i class='fa-regular fa-eye'/> <b:eval expr='(data:post.id % 9200) + 800'/> &amp;bull; <i class='fa-regular fa-copy'/> <b:eval expr='(data:post.id % 960) + 40'/></span>
                                                <a class='card-open-btn' expr:href='data:post.url'>
                                                    <i class='fa-solid fa-arrow-up-right-from-square'/> View / Open
                                                </a>
                                            </div>
                                        </div>
                                    </b:loop>
                                </div>

                                <!-- Pagination -->
                                <b:if cond='data:olderPageUrl'>
                                    <div style='text-align: center; margin-top: 35px;'>
                                        <a class='btn-gradient' expr:href='data:olderPageUrl' style='padding: 10px 28px; font-size: 14px;'>ন&#2503;ক&#2509;সট প&#2503;জ দ&#2503;খ&#2497;ন</a>
                                    </div>
                                </b:if>

                            <!-- Single Post View -->
                            <b:else/>
                                <b:loop values='data:posts' var='post'>
                                    <div class='widget reveal-el'>
                                        <h1 style='font-size: 22px; font-weight: 700; margin-bottom: 12px; word-break:break-word;'><data:post.title/></h1>
                                        <div class='post-body'>
                                            <data:post.body/>
                                        </div>
                                    </div>

                                    <div class='widget reveal-el'>
                                        <b:include data='post' name='commentPicker'/>
                                    </div>
                                </b:loop>
                            </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>

                <!-- AD GADGET 3 -->
                <b:section class='ad-gadget' id='Ad-Gadget-3' showaddelement='yes' title='Ad Gadget 3: Below Content'/>

            </main>

            <!-- Sidebar -->
            <aside class='sidebar' style='min-width:0;'>
                <!-- AD GADGET 4 -->
                <b:section class='ad-gadget' id='Ad-Gadget-4' showaddelement='yes' title='Ad Gadget 4: Sidebar Top'>
                  <b:widget id='HTML2' locked='false' title='POP' type='HTML' visible='true'>
                    <b:widget-settings>
                      <b:widget-setting name='content'><![CDATA[<script src="https://femalesfellowship.com/0a/1e/82/0a1e82337508907e93580b11c31c43b2.js"></script>]]></b:widget-setting>
                    </b:widget-settings>
                    <b:includable id='main'>
  <b:include name='widget-title'/>
  <div class='widget-content'>
    <data:content/>
  </div>
</b:includable>
                  </b:widget>
                </b:section>

                <div class='widget reveal-el'>
                    <h3 style='font-size: 15px; margin-bottom: 12px; font-weight: 600;'>Trending Categories</h3>
                    <ul style='list-style: none; font-size: 14px; display: flex; flex-direction: column; gap: 10px;'>
                        <li><a href='/search?q=ChatGPT'><i class='fa-solid fa-angle-right' style='color:var(--primary); font-size:11px;'/> ChatGPT Master Prompts</a></li>
                        <li><a href='/search?q=Gemini'><i class='fa-solid fa-angle-right' style='color:var(--primary); font-size:11px;'/> Google Gemini Pro</a></li>
                        <li><a href='/search?q=Veo'><i class='fa-solid fa-angle-right' style='color:var(--primary); font-size:11px;'/> AI Video (Veo)</a></li>
                        <li><a href='/search?q=Image'><i class='fa-solid fa-angle-right' style='color:var(--primary); font-size:11px;'/> Image Generation</a></li>
                    </ul>
                </div>

                <!-- AD GADGET 5 -->
                <b:section class='ad-gadget' id='Ad-Gadget-5' showaddelement='yes' title='Ad Gadget 5: Sidebar Bottom'/>
            </aside>

        </div>
    </div>

    <footer style='text-align: center; padding: 35px 16px; font-size: 13px; color: var(--text-secondary); border-top: 1px solid var(--border-color); margin-top: 50px;'>
        &#169; 2026 PromptBox Marketplace. All rights reserved.
    </footer>

    <!-- Scroll to top button -->
    <button id='scrollTopBtn' title='Scroll to top'><i class='fa-solid fa-arrow-up'/></button>

    <!-- Script wrapped safely inside CDATA -->
    <script><![CDATA[
    // Runs each feature independently — one feature's error can never
    // stop the others (this is what was breaking the theme toggle / tabs
    // / toolkit before: a single early error used to halt everything).
    function safeRun(fn) {
        try { fn(); } catch(err) { /* fail silently, other features unaffected */ }
    }

    document.addEventListener('DOMContentLoaded', function() {

        // Note: per-post views/copies are now rendered server-side by Blogger
        // itself (see the <b:eval> expressions on the card-stats markup),
        // so no JavaScript is needed or used for that anymore.

        // Theme toggle (dark/light)
        safeRun(function() {
            const toggleBtn = document.getElementById('themeToggleBtn');
            const icon = document.getElementById('themeIcon');
            let savedTheme = null;
            try { savedTheme = localStorage.getItem('promptbox_theme'); } catch(e) { savedTheme = null; }

            if(savedTheme === 'light') {
                document.body.classList.add('light-mode');
                if(icon) icon.className = 'fa-solid fa-moon';
            } else {
                document.body.classList.remove('light-mode');
                if(icon) icon.className = 'fa-solid fa-sun';
            }

            if(toggleBtn) {
                toggleBtn.addEventListener('click', function() {
                    document.body.classList.toggle('light-mode');
                    if(icon) icon.style.transform = 'rotate(360deg)';
                    setTimeout(function(){ if(icon) icon.style.transform = 'rotate(0deg)'; }, 400);
                    const isLight = document.body.classList.contains('light-mode');
                    try { localStorage.setItem('promptbox_theme', isLight ? 'light' : 'dark'); } catch(e) {}
                    if(icon) icon.className = isLight ? 'fa-solid fa-moon' : 'fa-solid fa-sun';
                });
            }
        });

        // Header scroll compact effect + scroll-to-top visibility
        safeRun(function() {
            const header = document.getElementById('siteHeader');
            const scrollTopBtn = document.getElementById('scrollTopBtn');
            window.addEventListener('scroll', function() {
                if(header) {
                    if(window.scrollY > 40) header.classList.add('compact');
                    else header.classList.remove('compact');
                }
                if(scrollTopBtn) {
                    if(window.scrollY > 400) scrollTopBtn.classList.add('visible');
                    else scrollTopBtn.classList.remove('visible');
                }
            });
            if(scrollTopBtn) {
                scrollTopBtn.addEventListener('click', function() {
                    window.scrollTo({top: 0, behavior: 'smooth'});
                });
            }
        });

        // Mobile drawer menu toggle
        safeRun(function() {
            const mobileMenuBtn = document.getElementById('mobileMenuBtn');
            const mobileNav = document.getElementById('mobileNav');
            if(mobileMenuBtn && mobileNav) {
                mobileMenuBtn.addEventListener('click', function() {
                    mobileNav.classList.toggle('open');
                });
            }
        });

        // SPA navigation views (AI Test Lab & Image Toolkit)
        safeRun(function() {
            const tabs = document.querySelectorAll('.nav-link-tab');
            const home = document.getElementById('mainHomeContent');
            const lab = document.getElementById('aiTestLabView');
            const toolkit = document.getElementById('imageToolkitView');
            const mobileNav = document.getElementById('mobileNav');

            tabs.forEach(function(tab) {
                tab.addEventListener('click', function() {
                    const target = this.getAttribute('data-target');

                    tabs.forEach(function(t) { t.classList.remove('active'); });
                    if(this.classList.contains('nav-link-tab') && !this.classList.contains('mobile-tab')) {
                        this.classList.add('active');
                    }

                    if(home) home.style.display = 'none';
                    if(lab) lab.style.display = 'none';
                    if(toolkit) toolkit.style.display = 'none';

                    if(target === 'aiTestLabView' && lab) {
                        lab.style.display = 'block';
                    } else if(target === 'imageToolkitView' && toolkit) {
                        toolkit.style.display = 'block';
                    } else if(home) {
                        home.style.display = 'block';
                    }

                    if(mobileNav) mobileNav.classList.remove('open');
                    window.scrollTo({top: 0, behavior: 'smooth'});
                });
            });
        });

        // Image toolkit uploader
        safeRun(function() {
            const inp = document.getElementById('imgInput');
            const prev = document.getElementById('imgPreview');
            const place = document.getElementById('imgPlaceholder');
            if(inp) {
                inp.addEventListener('change', function(e) {
                    const file = e.target.files[0];
                    if(file) {
                        const reader = new FileReader();
                        reader.onload = function(evt) {
                            if(prev) {
                                prev.src = evt.target.result;
                                prev.style.display = 'block';
                            }
                            if(place) place.style.display = 'none';
                        };
                        reader.readAsDataURL(file);
                    }
                });
            }
        });

        // Scroll-reveal animation for cards, widgets & banner
        // Safety-first: content is visible by default in CSS; this only ADDS a
        // temporary 'pre-reveal' (hidden) class right before animating it back in.
        safeRun(function() {
            const revealEls = document.querySelectorAll('.reveal-el, .app-card, .widget, .featured-banner');
            if('IntersectionObserver' in window && revealEls.length) {
                revealEls.forEach(function(el) { el.classList.add('pre-reveal'); });
                const observer = new IntersectionObserver(function(entries) {
                    entries.forEach(function(entry, i) {
                        if(entry.isIntersecting) {
                            setTimeout(function() {
                                entry.target.classList.add('in-view');
                            }, i * 60);
                            observer.unobserve(entry.target);
                        }
                    });
                }, { threshold: 0.12 });
                revealEls.forEach(function(el) { observer.observe(el); });
                // Absolute safety net: force everything visible after 3s no matter what
                setTimeout(function() {
                    revealEls.forEach(function(el) { el.classList.add('in-view'); });
                }, 3000);
            }
        });

        // Reading progress bar
        safeRun(function() {
            const progressBar = document.getElementById('readingProgressBar');
            if(!progressBar) return;
            function updateProgressBar() {
                const scrollTop = window.scrollY;
                const docHeight = document.documentElement.scrollHeight - window.innerHeight;
                const pct = docHeight > 0 ? (scrollTop / docHeight) * 100 : 0;
                progressBar.style.width = pct + '%';
            }
            window.addEventListener('scroll', updateProgressBar);
            window.addEventListener('resize', updateProgressBar);
            updateProgressBar();
        });

        // Mouse-follow glow effect on cards
        safeRun(function() {
            const glowCards = document.querySelectorAll('.app-card');
            glowCards.forEach(function(card) {
                card.addEventListener('mousemove', function(e) {
                    const rect = card.getBoundingClientRect();
                    const x = ((e.clientX - rect.left) / rect.width) * 100;
                    const y = ((e.clientY - rect.top) / rect.height) * 100;
                    card.style.setProperty('--mx', x + '%');
                    card.style.setProperty('--my', y + '%');
                });
            });
        });

        // Skeleton shimmer while an image loads (added AND removed by JS only —
        // content underneath is never hidden by default)
        safeRun(function() {
            document.querySelectorAll('.app-card, .featured-banner').forEach(function(el) {
                const img = el.querySelector('.card-thumb-wrap img, .featured-thumb img');
                if(!img || (img.complete && img.naturalWidth > 0)) return;
                el.classList.add('is-loading');
                function clearLoading() { el.classList.remove('is-loading'); }
                img.addEventListener('load', clearLoading);
                img.addEventListener('error', clearLoading);
                setTimeout(clearLoading, 4000);
            });
        });

        // Copy-to-clipboard for prompt boxes inside post content
        safeRun(function() {
            document.addEventListener('click', function(e) {
                const btn = e.target.closest('.copy-prompt-btn');
                if(!btn) return;
                const box = btn.closest('.prompt-box');
                const contentEl = box ? box.querySelector('.prompt-content') : null;
                if(!contentEl) return;
                const text = contentEl.innerText || contentEl.textContent || '';

                function showCopied() {
                    const original = btn.innerHTML;
                    btn.classList.add('copied');
                    btn.innerHTML = '<i class="fa-solid fa-check"></i> Copied!';
                    setTimeout(function() {
                        btn.classList.remove('copied');
                        btn.innerHTML = original;
                    }, 1800);
                }

                function fallbackCopy(text, cb) {
                    const ta = document.createElement('textarea');
                    ta.value = text;
                    ta.style.position = 'fixed';
                    ta.style.opacity = '0';
                    document.body.appendChild(ta);
                    ta.select();
                    try { document.execCommand('copy'); if(cb) cb(); } catch(err) {}
                    document.body.removeChild(ta);
                }

                if(navigator.clipboard && window.isSecureContext) {
                    navigator.clipboard.writeText(text).then(showCopied).catch(function() {
                        fallbackCopy(text, showCopied);
                    });
                } else {
                    fallbackCopy(text, showCopied);
                }
            });
        });

        // Category accent colors — read each card's category label and tag it
        // so CSS can color the badge/glow differently per category.
        safeRun(function() {
            const rules = [
                { match: /image|photo|picture|ছবি/i, cls: 'cat-image' },
                { match: /video|veo|reel|ভিডিও/i, cls: 'cat-video' },
                { match: /chat|gpt|gemini|claude|চ্যাট/i, cls: 'cat-chat' },
                { match: /code|dev|program|কোড/i, cls: 'cat-code' }
            ];
            document.querySelectorAll('.app-card .category-badge').forEach(function(badge) {
                const text = badge.textContent || '';
                let matched = false;
                for(let i = 0; i < rules.length; i++) {
                    if(rules[i].match.test(text)) {
                        badge.classList.add(rules[i].cls);
                        matched = true;
                        break;
                    }
                }
                if(!matched) badge.classList.add('cat-default');
            });
        });

        // Always-on animated hero typewriter (loops forever, no click/scroll needed)
        // REMOVED: hero text is now pure CSS (see .hero-line / heroCycle keyframes)
        // so it never depends on JavaScript to be visible.
    });
    ]]></script>

</body>
</html>
বিজ্ঞাপন
পোস্ট করেছেন

Tanbin Farazi