✦ 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&family=Sora:wght@500;600;700;800&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'>🖼️</span>
<span class='float-icon i3'>⚡</span>
<span class='float-icon i4'>🎬</span>
</div>
<h1 class='hero-title'>
<span class='hero-line'>🌐 এক ক্লিকে ওয়েবসাইট রেডি</span>
<span class='hero-line'>🖼️ এক ক্লিকে ছবি রেডি</span>
<span class='hero-line'>🎬 এক ক্লিকে ভিডিও রেডি</span>
<span class='hero-line'>✍️ এক ক্লিকে লেখা রেডি</span>
</h1>
<p class='hero-subtitle'>সেরা AI প্রম্পট দিয়ে সেকেন্ডে তৈরি করুন আপনার আইডিয়া</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 == "index" or data:blog.pageType == "archive" or data:blog.pageType == "search"'>
<!-- 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&w=800&auto=format&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&w=400&auto=format&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'/> &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;'>নেক্সট পেজ দেখুন</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='"item-control " + 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 != ""'>
<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 ?: "90px"' frameborder='0' id='comment-editor' name='comment-editor' src='' width='100%'/>
<data:post.cmtfpIframe/>
<script type='text/javascript'>
BLOG_CMT_createIframe('<data:post.appRpcRelayPath/>');
</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='"c" + 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='"comment-body" + (data:comment.isDeleted ? " deleted" : "")'>
<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='"comments" + (data:post.embedCommentForm ? " embed" : "")' 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 + "_comments-block-wrapper"'>
<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 != ""'>
<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 + "_blog-pager-older-link"' 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='"post-body-" + 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 != ""'>
<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 + "_blog-pager-newer-link"' 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 != ""'>
<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 ?: "90px"' frameborder='0' id='comment-editor' name='comment-editor' src='' width='100%'/>
<data:post.cmtfpIframe/>
<script type='text/javascript'>
BLOG_CMT_createIframe('<data:post.appRpcRelayPath/>');
</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;'>
© 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>
