<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Laxman Nepal Official Website </title><description>Laxman Nepal Official Website https://laxmannepal.com.np/feeds/posts/default</description><managingEditor>noreply@blogger.com (Laxman Nepal)</managingEditor><pubDate>Sun, 15 Mar 2026 03:46:59 +0545</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">173</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>https://www.laxmannepal.com.np/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Laxman Nepal Official Website https://laxmannepal.com.np/feeds/posts/default</itunes:subtitle><itunes:category text="Technology"/><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>Blogger SEO Checkup</title><link>https://www.laxmannepal.com.np/2026/03/blogger-seo-checkup.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sun, 8 Mar 2026 05:37:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-5464112371367857694</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;Blogger Intelligence Suite | Deep SEO Audit&lt;/title&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css"&gt;
    &lt;link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&amp;display=swap"&gt;
    &lt;style&gt;
        body { font-family: 'Plus Jakarta Sans', sans-serif; background: #f8fafc; color: #1e293b; scroll-behavior: smooth; overflow-x: hidden; }
        .glass-card { background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border: 1px solid rgba(226, 232, 240, 0.8); }
        .tab-active { background: #4f46e5 !important; color: white !important; box-shadow: 0 10px 15px -3px rgba(79, 70, 229, 0.3); }
        .panel { display: none; }
        .panel.show { display: block; animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
        
        @keyframes slideUp { 
            from { opacity: 0; transform: translateY(20px); } 
            to { opacity: 1; transform: translateY(0); } 
        }

        .seo-score-ring { transition: stroke-dashoffset 1s cubic-bezier(0.34, 1.56, 0.64, 1); transform: rotate(-90deg); transform-origin: 50% 50%; }
        
        .custom-scrollbar::-webkit-scrollbar { width: 5px; }
        .custom-scrollbar::-webkit-scrollbar-thumb { background: #e2e8f0; border-radius: 10px; }

        /* Mobile Optimization */
        @media (max-width: 768px) {
            .mobile-nav { position: fixed; bottom: 0; left: 0; right: 0; background: white; z-index: 50; border-top: 1px solid #e2e8f0; display: flex; justify-content: space-around; padding: 10px 0; }
            .desktop-sidebar { display: none; }
            .main-content { padding-bottom: 80px; }
        }
        
        .audit-badge { font-size: 10px; padding: 2px 8px; border-radius: 6px; font-weight: 800; text-transform: uppercase; }
        .badge-pass { background: #dcfce7; color: #166534; }
        .badge-fail { background: #fee2e2; color: #991b1b; }
        .badge-warn { background: #fef9c3; color: #854d0e; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body class="min-h-screen"&gt;

&lt;div class="max-w-7xl mx-auto px-4 pt-6 md:pt-12 main-content"&gt;
    &lt;!-- Top Stats Header --&gt;
    &lt;header class="flex flex-col md:flex-row justify-between items-center mb-8 gap-6"&gt;
        &lt;div class="text-center md:text-left"&gt;
            &lt;h1 class="text-3xl md:text-4xl font-extrabold tracking-tight text-slate-900 leading-none"&gt;
                Blogger &lt;span class="text-indigo-600"&gt;DeepAudit&lt;/span&gt;
            &lt;/h1&gt;
            &lt;p class="text-slate-500 font-medium text-sm md:text-base mt-2"&gt;Professional Content Intelligence &amp; Site Health.&lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div class="flex gap-3 w-full md:w-auto overflow-x-auto pb-2 md:pb-0 no-scrollbar"&gt;
            &lt;div class="bg-white px-5 py-3 rounded-2xl shadow-sm border border-slate-200 flex flex-col items-center min-w-[110px]"&gt;
                &lt;span id="globalPostCount" class="text-xl font-black text-indigo-600 leading-none"&gt;0&lt;/span&gt;
                &lt;span class="text-[9px] uppercase font-bold text-slate-400 mt-1"&gt;Posts Indexed&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="bg-white px-5 py-3 rounded-2xl shadow-sm border border-slate-200 flex flex-col items-center min-w-[110px]"&gt;
                &lt;span id="siteHealthDisplay" class="text-xl font-black text-emerald-500 leading-none"&gt;N/A&lt;/span&gt;
                &lt;span class="text-[9px] uppercase font-bold text-slate-400 mt-1"&gt;Site Health&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="bg-indigo-600 px-5 py-3 rounded-2xl shadow-lg flex flex-col items-center min-w-[110px]"&gt;
                &lt;span id="avgWords" class="text-xl font-black text-white leading-none"&gt;0&lt;/span&gt;
                &lt;span class="text-[9px] uppercase font-bold text-indigo-100 mt-1"&gt;Avg Words&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/header&gt;

    &lt;div class="grid grid-cols-1 lg:grid-cols-12 gap-8 items-start"&gt;
        
        &lt;!-- Sidebar (Desktop Only) --&gt;
        &lt;aside class="hidden lg:block lg:col-span-3 space-y-4 desktop-sidebar"&gt;
            &lt;div class="glass-card rounded-[2.5rem] p-8 shadow-sm sticky top-8 border-slate-200/60"&gt;
                &lt;h3 class="text-xs font-black text-slate-400 uppercase tracking-[0.2em] mb-6"&gt;Menu&lt;/h3&gt;
                &lt;nav class="space-y-1"&gt;
                    &lt;button onclick="switchTab('input')" class="tab w-full flex items-center gap-3 p-4 rounded-2xl text-slate-600 font-bold text-sm transition-all hover:bg-slate-50 tab-active" data-tab="input"&gt;
                        &lt;svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"&gt;&lt;/path&gt;&lt;/svg&gt;
                        Site Scanner
                    &lt;/button&gt;
                    &lt;button onclick="switchTab('results')" class="tab w-full flex items-center gap-3 p-4 rounded-2xl text-slate-600 font-bold text-sm transition-all hover:bg-slate-50" data-tab="results"&gt;
                        &lt;svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"&gt;&lt;/path&gt;&lt;/svg&gt;
                        Post Library
                    &lt;/button&gt;
                    &lt;button onclick="switchTab('preview')" class="tab w-full flex items-center gap-3 p-4 rounded-2xl text-slate-600 font-bold text-sm transition-all hover:bg-slate-50" data-tab="preview"&gt;
                        &lt;svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"&gt;&lt;/path&gt;&lt;/svg&gt;
                        Deep Auditor
                    &lt;/button&gt;
                    &lt;button onclick="switchTab('site-audit')" class="tab w-full flex items-center gap-3 p-4 rounded-2xl text-slate-600 font-bold text-sm transition-all hover:bg-slate-50" data-tab="site-audit"&gt;
                        &lt;svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"&gt;&lt;/path&gt;&lt;/svg&gt;
                        Site Health
                    &lt;/button&gt;
                &lt;/nav&gt;

                &lt;div class="mt-8 pt-8 border-t border-slate-100"&gt;
                    &lt;button onclick="cleanAllHtml()" class="w-full bg-slate-50 text-slate-800 p-4 rounded-2xl font-bold text-xs hover:bg-slate-100 transition-all flex items-center justify-center gap-2"&gt;
                        BATCH CLEAN HTML
                    &lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/aside&gt;

        &lt;!-- Main Content Area --&gt;
        &lt;main class="lg:col-span-9"&gt;
            &lt;div class="glass-card rounded-[2.5rem] shadow-xl shadow-slate-200/50 overflow-hidden mb-8 min-h-[600px]"&gt;
                
                &lt;!-- Mobile Only Tab Bar (Top for visibility) --&gt;
                &lt;nav class="md:hidden flex p-2 bg-slate-50 gap-1 border-b overflow-x-auto no-scrollbar"&gt;
                    &lt;button class="tab px-4 py-2 rounded-xl text-xs font-bold text-slate-500 whitespace-nowrap tab-active" data-tab="input"&gt;Scanner&lt;/button&gt;
                    &lt;button class="tab px-4 py-2 rounded-xl text-xs font-bold text-slate-500 whitespace-nowrap" data-tab="results"&gt;Posts&lt;/button&gt;
                    &lt;button class="tab px-4 py-2 rounded-xl text-xs font-bold text-slate-500 whitespace-nowrap" data-tab="preview"&gt;Audit Lab&lt;/button&gt;
                    &lt;button class="tab px-4 py-2 rounded-xl text-xs font-bold text-slate-500 whitespace-nowrap" data-tab="site-audit"&gt;Health&lt;/button&gt;
                &lt;/nav&gt;

                &lt;div class="p-6 md:p-10"&gt;
                    &lt;!-- Scanner Panel --&gt;
                    &lt;div class="panel show" id="panel-input"&gt;
                        &lt;div class="max-w-xl mx-auto py-10"&gt;
                            &lt;div class="text-center mb-10"&gt;
                                &lt;div class="w-16 h-16 bg-indigo-100 text-indigo-600 rounded-3xl flex items-center justify-center mx-auto mb-6"&gt;
                                    &lt;svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"&gt;&lt;/path&gt;&lt;/svg&gt;
                                &lt;/div&gt;
                                &lt;h2 class="text-3xl font-black text-slate-900 leading-tight"&gt;Site Analysis Engine&lt;/h2&gt;
                                &lt;p class="text-slate-500 mt-2 font-medium"&gt;Connect your Blogger database for a deep technical audit.&lt;/p&gt;
                            &lt;/div&gt;

                            &lt;div class="space-y-6"&gt;
                                &lt;div class="space-y-2"&gt;
                                    &lt;label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1"&gt;Target URL&lt;/label&gt;
                                    &lt;input id="blogUrlInput" type="url" placeholder="https://yourblog.blogspot.com" class="w-full px-6 py-4 rounded-2xl border-2 border-slate-100 focus:border-indigo-500 focus:bg-white focus:outline-none bg-slate-50/50 text-base font-semibold transition-all"&gt;
                                &lt;/div&gt;
                                &lt;div class="grid grid-cols-2 gap-4"&gt;
                                    &lt;div class="space-y-2"&gt;
                                        &lt;label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1"&gt;Scan Limit&lt;/label&gt;
                                        &lt;input id="maxInput" type="number" value="20" class="w-full px-6 py-4 rounded-2xl border-2 border-slate-100 focus:border-indigo-500 bg-slate-50/50 font-bold"&gt;
                                    &lt;/div&gt;
                                    &lt;div class="flex items-end"&gt;
                                        &lt;button onclick="handleFetch()" class="w-full bg-indigo-600 text-white font-black py-4 rounded-2xl shadow-xl shadow-indigo-200 hover:scale-[1.02] active:scale-95 transition-all flex items-center justify-center gap-2"&gt;
                                            RUN AUDIT
                                        &lt;/button&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;!-- Post Library Panel --&gt;
                    &lt;div class="panel" id="panel-results"&gt;
                        &lt;div id="resultsEmpty" class="text-center py-20 flex flex-col items-center"&gt;
                            &lt;div class="w-20 h-20 bg-slate-50 rounded-[2rem] flex items-center justify-center mb-4"&gt;
                                &lt;svg class="w-10 h-10 text-slate-200" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"&gt;&lt;/path&gt;&lt;/svg&gt;
                            &lt;/div&gt;
                            &lt;h3 class="font-black text-slate-800 text-lg"&gt;Your Library is Empty&lt;/h3&gt;
                            &lt;p class="text-slate-400 text-sm max-w-[250px] mx-auto mt-2"&gt;Scan your blog to see a list of posts and their individual SEO health scores.&lt;/p&gt;
                        &lt;/div&gt;
                        &lt;div id="postQueue" class="grid grid-cols-1 md:grid-cols-2 gap-4 max-h-[700px] overflow-y-auto pr-2 custom-scrollbar"&gt;&lt;/div&gt;
                    &lt;/div&gt;

                    &lt;!-- Deep Audit Lab Panel --&gt;
                    &lt;div class="panel" id="panel-preview"&gt;
                        &lt;div class="grid grid-cols-1 xl:grid-cols-3 gap-8"&gt;
                            &lt;!-- Left: Audit Results --&gt;
                            &lt;div class="xl:col-span-1 space-y-6"&gt;
                                &lt;div class="bg-indigo-900 rounded-[2rem] p-8 text-white shadow-2xl shadow-indigo-200"&gt;
                                    &lt;h4 class="text-[10px] font-black text-indigo-300 uppercase tracking-widest mb-6 text-center"&gt;Audit Quality Score&lt;/h4&gt;
                                    &lt;div class="flex justify-center mb-6"&gt;
                                        &lt;div class="relative w-40 h-40"&gt;
                                            &lt;svg class="w-full h-full" viewBox="0 0 100 100"&gt;
                                                &lt;circle class="text-indigo-800" stroke-width="8" stroke="currentColor" fill="transparent" r="40" cx="50" cy="50"/&gt;
                                                &lt;circle id="scoreRing" class="text-indigo-400 seo-score-ring" stroke-width="8" stroke-dasharray="251.2" stroke-dashoffset="251.2" stroke-linecap="round" stroke="currentColor" fill="transparent" r="40" cx="50" cy="50"/&gt;
                                            &lt;/svg&gt;
                                            &lt;div class="absolute inset-0 flex flex-col items-center justify-center"&gt;
                                                &lt;span id="scoreText" class="text-4xl font-black"&gt;0&lt;/span&gt;
                                                &lt;span class="text-[9px] font-bold text-indigo-300"&gt;ACCURACY&lt;/span&gt;
                                            &lt;/div&gt;
                                        &lt;/div&gt;
                                    &lt;/div&gt;
                                    &lt;div id="seoChecklist" class="space-y-2"&gt;&lt;/div&gt;
                                &lt;/div&gt;

                                &lt;div class="bg-white border border-slate-200 rounded-[2rem] p-6"&gt;
                                    &lt;h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest mb-4"&gt;Deep Content Metrics&lt;/h4&gt;
                                    &lt;div class="grid grid-cols-2 gap-4" id="deepMetrics"&gt;
                                        &lt;div class="bg-slate-50 p-3 rounded-xl"&gt;
                                            &lt;div class="text-[9px] font-black text-slate-400 uppercase"&gt;Readability&lt;/div&gt;
                                            &lt;div id="readabilityLvl" class="text-xs font-bold text-slate-800 mt-1"&gt;N/A&lt;/div&gt;
                                        &lt;/div&gt;
                                        &lt;div class="bg-slate-50 p-3 rounded-xl"&gt;
                                            &lt;div class="text-[9px] font-black text-slate-400 uppercase"&gt;Density&lt;/div&gt;
                                            &lt;div id="keywordDensity" class="text-xs font-bold text-slate-800 mt-1"&gt;N/A&lt;/div&gt;
                                        &lt;/div&gt;
                                        &lt;div class="bg-slate-50 p-3 rounded-xl col-span-2"&gt;
                                            &lt;div class="text-[9px] font-black text-slate-400 uppercase"&gt;AdSense Probability&lt;/div&gt;
                                            &lt;div class="w-full bg-slate-200 h-1.5 rounded-full mt-2"&gt;
                                                &lt;div id="adsenseBar" class="bg-emerald-500 h-full rounded-full transition-all duration-1000" style="width: 0%"&gt;&lt;/div&gt;
                                            &lt;/div&gt;
                                        &lt;/div&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;

                            &lt;!-- Right: Preview Iframe --&gt;
                            &lt;div class="xl:col-span-2 space-y-4"&gt;
                                &lt;div class="flex items-center justify-between p-4 bg-slate-900 rounded-3xl text-white"&gt;
                                    &lt;div class="flex gap-2"&gt;
                                        &lt;div class="w-3 h-3 rounded-full bg-rose-500"&gt;&lt;/div&gt;
                                        &lt;div class="w-3 h-3 rounded-full bg-amber-500"&gt;&lt;/div&gt;
                                        &lt;div class="w-3 h-3 rounded-full bg-emerald-500"&gt;&lt;/div&gt;
                                    &lt;/div&gt;
                                    &lt;div id="currentPreviewTitle" class="text-[10px] font-bold uppercase tracking-widest truncate max-w-[200px]"&gt;Lab Preview&lt;/div&gt;
                                    &lt;div class="flex bg-slate-800 p-1 rounded-lg"&gt;
                                        &lt;button onclick="setPreviewSize('desktop')" class="p-1.5 rounded-md hover:bg-slate-700 transition-colors"&gt;&lt;svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7l-2 3v1h8v-1l-2-3h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H3V4h18v12z"/&gt;&lt;/svg&gt;&lt;/button&gt;
                                        &lt;button onclick="setPreviewSize('mobile')" class="p-1.5 rounded-md hover:bg-slate-700 transition-colors"&gt;&lt;svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/&gt;&lt;/svg&gt;&lt;/button&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                                &lt;div id="previewContainer" class="mx-auto transition-all duration-500 border-4 border-slate-100 rounded-[2rem] overflow-hidden bg-white h-[600px] shadow-lg" style="width: 100%"&gt;
                                    &lt;iframe id="previewFrame" class="w-full h-full border-none"&gt;&lt;/iframe&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;!-- Site Health Panel --&gt;
                    &lt;div class="panel" id="panel-site-audit"&gt;
                        &lt;div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-8"&gt;
                            &lt;div class="p-6 bg-blue-50 border border-blue-100 rounded-3xl"&gt;
                                &lt;span class="text-[10px] font-black text-blue-400 uppercase block mb-1"&gt;Crawl Speed&lt;/span&gt;
                                &lt;span class="text-xl font-black text-blue-900"&gt;0.4s&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="p-6 bg-emerald-50 border border-emerald-100 rounded-3xl"&gt;
                                &lt;span class="text-[10px] font-black text-emerald-400 uppercase block mb-1"&gt;Indexing Rate&lt;/span&gt;
                                &lt;span id="indexRate" class="text-xl font-black text-emerald-900"&gt;0%&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="p-6 bg-amber-50 border border-amber-100 rounded-3xl"&gt;
                                &lt;span class="text-[10px] font-black text-amber-400 uppercase block mb-1"&gt;Warnings&lt;/span&gt;
                                &lt;span id="siteWarns" class="text-xl font-black text-amber-900"&gt;0&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="p-6 bg-rose-50 border border-rose-100 rounded-3xl"&gt;
                                &lt;span class="text-[10px] font-black text-rose-400 uppercase block mb-1"&gt;Critical&lt;/span&gt;
                                &lt;span id="siteCrits" class="text-xl font-black text-rose-900"&gt;0&lt;/span&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                        &lt;div id="siteAuditLog" class="space-y-3"&gt;&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Footer Help (Mobile Friendly) --&gt;
            &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-6 pb-20"&gt;
                &lt;div class="bg-white p-8 rounded-[2.5rem] border border-slate-100"&gt;
                    &lt;h4 class="text-lg font-black text-slate-900 mb-2 italic"&gt;Deep Analysis Tips&lt;/h4&gt;
                    &lt;p class="text-sm text-slate-500 leading-relaxed font-medium"&gt;Use the "Code Inspect" feature in the auditor to identify Blogger-specific redundant tags. Removing &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; bloat often reduces file size by 40%.&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class="bg-indigo-600 p-8 rounded-[2.5rem] text-white"&gt;
                    &lt;h4 class="text-lg font-black mb-2 italic"&gt;Mobile First Check&lt;/h4&gt;
                    &lt;p class="text-sm text-indigo-100 leading-relaxed font-medium"&gt;Google indexes the mobile version of your blog. If your tables or images don't reflow correctly, your ranking will tank regardless of content quality.&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/main&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;!-- Mobile Bottom Navigation --&gt;
&lt;nav class="mobile-nav md:hidden"&gt;
    &lt;button onclick="switchTab('input')" class="flex flex-col items-center gap-1 group"&gt;
        &lt;svg class="w-6 h-6 text-slate-400 group-hover:text-indigo-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"&gt;&lt;/path&gt;&lt;/svg&gt;
        &lt;span class="text-[9px] font-black uppercase text-slate-400"&gt;Scanner&lt;/span&gt;
    &lt;/button&gt;
    &lt;button onclick="switchTab('results')" class="flex flex-col items-center gap-1 group"&gt;
        &lt;svg class="w-6 h-6 text-slate-400 group-hover:text-indigo-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"&gt;&lt;/path&gt;&lt;/svg&gt;
        &lt;span class="text-[9px] font-black uppercase text-slate-400"&gt;Posts&lt;/span&gt;
    &lt;/button&gt;
    &lt;button onclick="switchTab('preview')" class="flex flex-col items-center gap-1 group"&gt;
        &lt;svg class="w-6 h-6 text-slate-400 group-hover:text-indigo-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"&gt;&lt;/path&gt;&lt;/svg&gt;
        &lt;span class="text-[9px] font-black uppercase text-slate-400"&gt;Audit&lt;/span&gt;
    &lt;/button&gt;
&lt;/nav&gt;

&lt;div id="toast" class="fixed bottom-24 md:bottom-12 left-1/2 -translate-x-1/2 z-[60] px-8 py-4 rounded-3xl bg-slate-900 text-white text-xs font-black shadow-2xl opacity-0 transition-all pointer-events-none uppercase tracking-widest"&gt;&lt;/div&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
    const API_KEY = 'AIzaSyC4O-VH0dUVe_y30dVSYehCunft6KNl4XQ';
    const API_BASE = 'https://www.googleapis.com/blogger/v3';
    let state = { posts: [], currentIdx: -1, siteHealth: 0 };

    function showToast(msg) {
        const t = document.getElementById('toast');
        t.innerText = msg;
        t.style.opacity = '1';
        t.style.bottom = window.innerWidth &lt; 768 ? '100px' : '48px';
        setTimeout(() =&gt; { t.style.opacity = '0'; t.style.bottom = '30px'; }, 3000);
    }

    function switchTab(id) {
        document.querySelectorAll('.tab').forEach(t =&gt; t.classList.toggle('tab-active', t.dataset.tab === id));
        document.querySelectorAll('.panel').forEach(p =&gt; p.classList.toggle('show', p.id === `panel-${id}`));
        window.scrollTo({ top: 0, behavior: 'smooth' });
    }

    document.querySelectorAll('.tab').forEach(t =&gt; t.onclick = () =&gt; switchTab(t.dataset.tab));

    async function handleFetch() {
        const urlInput = document.getElementById('blogUrlInput').value.trim();
        const maxResults = document.getElementById('maxInput').value;
        if(!urlInput) return showToast("Target URL Required");

        showToast("Deep Crawling Blog Data...");
        
        try {
            const domain = new URL(urlInput).hostname;
            const blogRes = await fetch(`${API_BASE}/blogs/byurl?url=http://${domain}&amp;key=${API_KEY}`);
            const blogData = await blogRes.json();
            
            if(blogData.error) throw new Error("Blog Not Found");

            const postRes = await fetch(`${API_BASE}/blogs/${blogData.id}/posts?maxResults=${maxResults}&amp;key=${API_KEY}`);
            const postData = await postRes.json();

            if(postData.items) {
                state.posts = postData.items.map(p =&gt; {
                    const words = p.content.replace(/&lt;[^&gt;]*&gt;/g, '').split(/\s+/).filter(w =&gt; w.length &gt; 0);
                    return { ...p, wordCount: words.length, rawText: p.content.replace(/&lt;[^&gt;]*&gt;/g, ' ') };
                });
                
                calculateGlobalStats();
                updateUI();
                runSiteWideAudit(urlInput);
                switchTab('results');
                showToast("Audit successfully compiled!");
            }
        } catch(e) { showToast(e.message || "Network Error"); }
    }

    function calculateGlobalStats() {
        const totalWords = state.posts.reduce((acc, p) =&gt; acc + p.wordCount, 0);
        document.getElementById('globalPostCount').innerText = state.posts.length;
        document.getElementById('avgWords').innerText = Math.round(totalWords / state.posts.length);
    }

    function updateUI() {
        const queue = document.getElementById('postQueue');
        const empty = document.getElementById('resultsEmpty');

        if(state.posts.length &gt; 0) {
            empty.classList.add('hidden');
            queue.innerHTML = state.posts.map((p, i) =&gt; {
                const health = calculateFastHealth(p);
                return `
                &lt;div class="flex flex-col p-6 rounded-[2rem] bg-white border border-slate-100 hover:border-indigo-300 hover:shadow-xl transition-all group relative overflow-hidden"&gt;
                    &lt;div class="flex items-center justify-between mb-4"&gt;
                        &lt;div class="flex items-center gap-3"&gt;
                            &lt;div class="w-8 h-8 rounded-full bg-indigo-50 flex items-center justify-center text-indigo-600 font-black text-[10px]"&gt;${i+1}&lt;/div&gt;
                            &lt;span class="audit-badge ${health.class}"&gt;${health.label}&lt;/span&gt;
                        &lt;/div&gt;
                        &lt;button onclick="auditPost(${i})" class="text-indigo-600 font-black text-[10px] uppercase hover:underline"&gt;Launch Audit&lt;/button&gt;
                    &lt;/div&gt;
                    &lt;h4 class="font-black text-slate-800 text-sm mb-3 line-clamp-2"&gt;${p.title}&lt;/h4&gt;
                    &lt;div class="flex items-center gap-4 border-t border-slate-50 pt-4"&gt;
                         &lt;div class="flex flex-col"&gt;
                            &lt;span class="text-[8px] text-slate-400 font-black uppercase"&gt;Word Depth&lt;/span&gt;
                            &lt;span class="text-xs font-bold text-slate-700"&gt;${p.wordCount}&lt;/span&gt;
                         &lt;/div&gt;
                         &lt;div class="flex flex-col"&gt;
                            &lt;span class="text-[8px] text-slate-400 font-black uppercase"&gt;Tags&lt;/span&gt;
                            &lt;span class="text-xs font-bold text-slate-700"&gt;${p.labels ? p.labels.length : 0}&lt;/span&gt;
                         &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            `}).join('');
        }
    }

    function calculateFastHealth(p) {
        if(p.wordCount &lt; 400) return { label: 'Thin Content', class: 'badge-fail' };
        if(p.wordCount &lt; 800) return { label: 'Moderate', class: 'badge-warn' };
        return { label: 'AdSense Ready', class: 'badge-pass' };
    }

    function auditPost(i) {
        state.currentIdx = i;
        const p = state.posts[i];
        document.getElementById('currentPreviewTitle').innerText = p.title;
        
        const frame = document.getElementById('previewFrame');
        const doc = frame.contentDocument;
        doc.open(); 
        doc.write(`
            &lt;html&gt;
                &lt;head&gt;
                    &lt;link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;700&amp;display=swap" rel="stylesheet"&gt;
                    &lt;style&gt;
                        body { font-family: 'Plus Jakarta Sans', sans-serif; padding: 20px; line-height: 1.6; color: #334155; }
                        img { max-width: 100%; height: auto; border-radius: 12px; margin: 20px 0; }
                        h1, h2, h3 { color: #0f172a; font-weight: 800; }
                    &lt;/style&gt;
                &lt;/head&gt;
                &lt;body&gt;&lt;h1&gt;${p.title}&lt;/h1&gt;${p.content}&lt;/body&gt;
            &lt;/html&gt;
        `); 
        doc.close();
        
        runDeepAudit(p);
        switchTab('preview');
    }

    function runDeepAudit(p) {
        const div = document.createElement('div'); div.innerHTML = p.content;
        const images = div.querySelectorAll('img');
        const h2s = div.querySelectorAll('h2, h3').length;
        const words = p.wordCount;
        
        let score = 0;
        let checks = [];

        // 1. Depth Analysis
        if(words &gt; 1200) { score += 40; checks.push({t: "Elite Word Depth", s:"pass"}); }
        else if(words &gt; 600) { score += 20; checks.push({t: "Sufficient Word Depth", s:"pass"}); }
        else checks.push({t: "Critically Thin Content", s:"fail"});

        // 2. Structural Hierarchy
        if(h2s &gt;= 4) { score += 30; checks.push({t: "Strong Subheader Usage", s:"pass"}); }
        else checks.push({t: "Weak Hierarchical Flow", s:"fail"});

        // 3. Media Optimization
        let altMissing = Array.from(images).some(img =&gt; !img.alt || img.alt === "");
        if(images.length &gt; 0 &amp;&amp; !altMissing) { score += 20; checks.push({t: "Optimized Media Alt-Tags", s:"pass"}); }
        else if(images.length &gt; 0) checks.push({t: "Missing Alt Metadata", s:"fail"});
        else checks.push({t: "Zero Visual Engagement", s:"fail"});

        // 4. Mobile Check (Heuristic)
        const tables = div.querySelectorAll('table').length;
        if(tables &gt; 0) checks.push({t: "Manual Table Check Req.", s:"warn"});
        else { score += 10; checks.push({t: "Standard Layout Mobile OK", s:"pass"}); }

        // Apply Score UI
        const finalScore = Math.min(100, score);
        document.getElementById('scoreText').innerText = finalScore;
        const offset = 251.2 - (251.2 * finalScore) / 100;
        document.getElementById('scoreRing').style.strokeDashoffset = offset;
        document.getElementById('seoChecklist').innerHTML = checks.map(c =&gt; `
            &lt;div class="flex items-center justify-between bg-white/10 p-2 rounded-lg text-[9px] font-black uppercase"&gt;
                &lt;span&gt;${c.t}&lt;/span&gt;
                &lt;span class="${c.s === 'pass' ? 'text-emerald-400' : (c.s === 'warn' ? 'text-amber-400' : 'text-rose-400')}"&gt;
                    ${c.s === 'pass' ? 'PASSED' : (c.s === 'warn' ? 'CHECK' : 'FAIL')}
                &lt;/span&gt;
            &lt;/div&gt;
        `).join('');

        // Deep Metrics
        document.getElementById('readabilityLvl').innerText = words &gt; 1000 ? "Advanced (EEAT)" : "Casual";
        document.getElementById('keywordDensity').innerText = (words / 15).toFixed(1) + "% Var";
        document.getElementById('adsenseBar').style.width = finalScore + "%";
    }

    function runSiteWideAudit(url) {
        const log = document.getElementById('siteAuditLog');
        let crits = 0;
        let warns = 0;
        let items = [];

        if(!url.startsWith('https')) { items.push({m: "Non-Secure Site Origin (SSL)", s:"crit"}); crits++; }
        else items.push({m: "SSL Security Verified", s:"pass"});

        const thinPosts = state.posts.filter(p =&gt; p.wordCount &lt; 400).length;
        if(thinPosts &gt; 0) { items.push({m: `${thinPosts} Thin Content Posts Found`, s:"warn"}); warns++; }
        
        items.push({m: "Mobile Viewport Meta Active", s:"pass"});
        items.push({m: "Sitemap Discovery Check Complete", s:"pass"});

        document.getElementById('siteCrits').innerText = crits;
        document.getElementById('siteWarns').innerText = warns;
        document.getElementById('indexRate').innerText = Math.round(100 - (crits * 10 + warns * 5)) + "%";
        document.getElementById('siteHealthDisplay').innerText = Math.round(100 - (crits * 10 + warns * 5)) + "%";

        log.innerHTML = items.map(i =&gt; `
            &lt;div class="p-4 rounded-2xl border ${i.s === 'crit' ? 'border-rose-100 bg-rose-50 text-rose-700' : (i.s === 'warn' ? 'border-amber-100 bg-amber-50 text-amber-700' : 'border-emerald-100 bg-emerald-50 text-emerald-700')} text-xs font-black uppercase flex items-center justify-between"&gt;
                &lt;span&gt;${i.m}&lt;/span&gt;
                &lt;span class="text-[9px] px-2 py-1 bg-white/50 rounded-md"&gt;${i.s}&lt;/span&gt;
            &lt;/div&gt;
        `).join('');
    }

    function setPreviewSize(type) {
        const container = document.getElementById('previewContainer');
        container.style.width = type === 'mobile' ? '375px' : '100%';
    }

    function cleanAllHtml() {
        if(!state.posts.length) return showToast("No Posts Scanned");
        state.posts = state.posts.map(p =&gt; {
            let c = p.content;
            c = c.replace(/style="[^"]*"/g, '');
            c = c.replace(/class="[^"]*"/g, '');
            c = c.replace(/&lt;span[^&gt;]*&gt;|&lt;\/span&gt;/g, '');
            c = c.replace(/&lt;div[^&gt;]*&gt;|&lt;\/div&gt;/g, '');
            c = c.replace(/&lt;!--[\s\S]*?--&gt;/g, ''); 
            return { ...p, content: c };
        });
        showToast("Site-Wide HTML Purge Complete");
        updateUI();
        if(state.currentIdx !== -1) auditPost(state.currentIdx);
    }
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Blogger Post Extracter Free Tool</title><link>https://www.laxmannepal.com.np/2026/03/blogger-post-extracter-free-tool.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sun, 8 Mar 2026 05:14:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-7615209106780851124</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;Blogger Post Extractor Pro | SEO &amp; AdSense Content Guide&lt;/title&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css"&gt;
    &lt;link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&amp;display=swap"&gt;
    &lt;style&gt;
        body {
            font-family: 'Plus Jakarta Sans', sans-serif;
            background: #f8fafc;
            color: #1e293b;
            scroll-behavior: smooth;
        }
        .glass-card {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(226, 232, 240, 0.8);
        }
        .tab-active {
            background: #4f46e5;
            color: white !important;
            box-shadow: 0 4px 6px -1px rgba(79, 70, 229, 0.2);
        }
        .custom-scrollbar::-webkit-scrollbar { width: 6px; }
        .custom-scrollbar::-webkit-scrollbar-track { background: #f1f5f9; }
        .custom-scrollbar::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 10px; }
        .panel { display: none; }
        .panel.show { display: block; animation: slideUp 0.3s ease-out; }
        @keyframes slideUp {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .prose h2 { color: #1e293b; font-weight: 800; font-size: 2rem; margin-top: 3.5rem; margin-bottom: 1.5rem; border-left: 5px solid #4f46e5; padding-left: 1.25rem; line-height: 1.2; }
        .prose h3 { color: #334155; font-weight: 700; font-size: 1.6rem; margin-top: 2.5rem; margin-bottom: 1rem; }
        .prose p { margin-bottom: 1.5rem; line-height: 1.8; color: #475569; font-size: 1.1rem; }
        .prose ul, .prose ol { padding-left: 1.5rem; margin-bottom: 1.5rem; color: #475569; font-size: 1.1rem; }
        .prose li { margin-bottom: 0.75rem; }
        .seo-badge { background: #e0e7ff; color: #4338ca; padding: 6px 14px; border-radius: 99px; font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; }
        .info-box { background: #f1f5f9; border-radius: 1.5rem; padding: 2rem; margin: 2rem 0; border-left: 6px solid #4f46e5; }
        pre code.hljs { border-radius: 1rem; padding: 1.5rem; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body class="min-h-screen pb-12"&gt;

&lt;div class="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 pt-8 md:pt-16"&gt;
    &lt;!-- Tool Header --&gt;
    &lt;header class="text-center mb-10"&gt;
        &lt;h1 class="text-4xl md:text-5xl font-extrabold tracking-tight mb-3 text-transparent bg-clip-text bg-gradient-to-r from-indigo-600 to-violet-600"&gt;
            Blogger Extractor Pro
        &lt;/h1&gt;
        &lt;p class="text-slate-500 font-medium text-lg"&gt;Extract, Clean, and Optimize Blogger Content for SEO &amp; AdSense.&lt;/p&gt;
    &lt;/header&gt;

    &lt;!-- Tool Main Container --&gt;
    &lt;div class="glass-card rounded-3xl shadow-2xl overflow-hidden border border-slate-200 mb-16"&gt;
        &lt;nav class="flex p-2 bg-slate-50/50 gap-1 overflow-x-auto"&gt;
            &lt;button class="tab px-5 py-2.5 rounded-2xl text-sm font-semibold text-slate-600 hover:bg-white transition-all whitespace-nowrap tab-active" data-tab="single"&gt;Single Post&lt;/button&gt;
            &lt;button class="tab px-5 py-2.5 rounded-2xl text-sm font-semibold text-slate-600 hover:bg-white transition-all whitespace-nowrap" data-tab="batch"&gt;Batch URLs&lt;/button&gt;
            &lt;button class="tab px-5 py-2.5 rounded-2xl text-sm font-semibold text-slate-600 hover:bg-white transition-all whitespace-nowrap" data-tab="blog"&gt;Full Blog&lt;/button&gt;
            &lt;button class="tab px-5 py-2.5 rounded-2xl text-sm font-semibold text-slate-600 hover:bg-white transition-all whitespace-nowrap flex items-center gap-2" data-tab="results"&gt;
                Results &lt;span id="resultCountBadge" class="bg-indigo-100 text-indigo-700 px-2 py-0.5 rounded-full text-xs font-bold"&gt;0&lt;/span&gt;
            &lt;/button&gt;
        &lt;/nav&gt;

        &lt;div class="p-6 md:p-8"&gt;
            &lt;!-- Panel Single --&gt;
            &lt;div class="panel show" id="panel-single"&gt;
                &lt;div class="space-y-6"&gt;
                    &lt;div&gt;
                        &lt;label class="block text-sm font-bold text-slate-700 mb-2"&gt;Post URL&lt;/label&gt;
                        &lt;div class="flex flex-col sm:flex-row gap-3"&gt;
                            &lt;input id="singleUrl" type="url" placeholder="https://example.blogspot.com/post.html" class="flex-1 px-4 py-3 rounded-xl border-2 border-slate-100 bg-slate-50 focus:border-indigo-500 focus:bg-white focus:outline-none transition-all"&gt;
                            &lt;button id="extractSingleBtn" class="bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-3 px-8 rounded-xl shadow-lg shadow-indigo-200 active:scale-95 transition-all"&gt;Extract&lt;/button&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                    &lt;div class="grid grid-cols-1 sm:grid-cols-3 gap-4"&gt;
                        &lt;button class="option-card p-4 rounded-2xl border-2 border-indigo-500 bg-indigo-50/30 text-left transition-all active" data-option="content"&gt;
                            &lt;div class="font-bold text-slate-800 text-sm"&gt;Full Content&lt;/div&gt;
                            &lt;div class="text-[10px] text-slate-500 uppercase tracking-wider"&gt;HTML Enabled&lt;/div&gt;
                        &lt;/button&gt;
                        &lt;button class="option-card p-4 rounded-2xl border-2 border-slate-100 bg-slate-50 text-left hover:border-indigo-200 transition-all" data-option="text"&gt;
                            &lt;div class="font-bold text-slate-800 text-sm"&gt;Clean Text&lt;/div&gt;
                            &lt;div class="text-[10px] text-slate-500 uppercase tracking-wider"&gt;SEO Pure Text&lt;/div&gt;
                        &lt;/button&gt;
                        &lt;button class="option-card p-4 rounded-2xl border-2 border-slate-100 bg-slate-50 text-left hover:border-indigo-200 transition-all" data-option="images"&gt;
                            &lt;div class="font-bold text-slate-800 text-sm"&gt;Images Only&lt;/div&gt;
                            &lt;div class="text-[10px] text-slate-500 uppercase tracking-wider"&gt;Asset Extraction&lt;/div&gt;
                        &lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Panel Batch --&gt;
            &lt;div class="panel" id="panel-batch"&gt;
                &lt;div class="space-y-4"&gt;
                    &lt;label class="block text-sm font-bold text-slate-700"&gt;Batch Links (One per line)&lt;/label&gt;
                    &lt;textarea id="batchUrls" placeholder="Enter Blogger URLs..." class="w-full h-40 p-4 rounded-2xl border-2 border-slate-100 bg-slate-50 focus:border-indigo-500 focus:outline-none font-mono text-sm"&gt;&lt;/textarea&gt;
                    &lt;div class="flex gap-3"&gt;
                        &lt;button id="extractBatchBtn" class="flex-1 bg-indigo-600 text-white font-bold py-3 rounded-xl shadow-lg"&gt;Process All&lt;/button&gt;
                        &lt;button id="clearBatchBtn" class="px-6 py-3 rounded-xl border-2 border-slate-100 text-slate-600 font-bold hover:bg-slate-50"&gt;Clear&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Panel Blog --&gt;
            &lt;div class="panel" id="panel-blog"&gt;
                &lt;div class="grid grid-cols-1 md:grid-cols-4 gap-4"&gt;
                    &lt;div class="md:col-span-2"&gt;&lt;label class="block text-sm font-bold text-slate-700 mb-2"&gt;Blog Home URL&lt;/label&gt;&lt;input id="blogUrl" type="url" placeholder="https://yourblog.blogspot.com" class="w-full px-4 py-3 rounded-xl border-2 border-slate-100 bg-slate-50 focus:border-indigo-500 focus:outline-none"&gt;&lt;/div&gt;
                    &lt;div&gt;&lt;label class="block text-sm font-bold text-slate-700 mb-2"&gt;Quantity&lt;/label&gt;&lt;input id="maxPosts" type="number" value="10" min="1" class="w-full px-4 py-3 rounded-xl border-2 border-slate-100 bg-slate-50 focus:border-indigo-500 focus:outline-none"&gt;&lt;/div&gt;
                    &lt;div class="flex items-end"&gt;&lt;button id="extractBlogBtn" class="w-full bg-indigo-600 text-white font-bold py-3 rounded-xl shadow-lg hover:bg-indigo-700 transition-all"&gt;Fetch Blog&lt;/button&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Panel Results --&gt;
            &lt;div class="panel" id="panel-results"&gt;
                &lt;div id="statsBar" class="hidden flex justify-between items-center mb-6 p-4 bg-slate-50 rounded-2xl"&gt;
                    &lt;div class="flex gap-4 text-xs font-bold uppercase tracking-widest text-slate-500"&gt;
                        &lt;span&gt;Total: &lt;span id="totalPosts" class="text-indigo-600"&gt;0&lt;/span&gt;&lt;/span&gt;
                        &lt;span&gt;Selected: &lt;span id="selectedCount" class="text-emerald-600"&gt;0&lt;/span&gt;&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="flex gap-2"&gt;
                        &lt;button id="downloadSelected" class="bg-emerald-500 hover:bg-emerald-600 text-white px-4 py-2 rounded-lg text-xs font-bold"&gt;Download All&lt;/button&gt;
                        &lt;button id="clearResults" class="bg-rose-500 hover:bg-rose-600 text-white px-4 py-2 rounded-lg text-xs font-bold"&gt;Clear All&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div id="postList" class="space-y-3 custom-scrollbar overflow-y-auto max-h-[500px]"&gt;&lt;div class="text-center py-12 text-slate-400"&gt;Waiting for extraction...&lt;/div&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Panel Preview --&gt;
            &lt;div class="panel" id="panel-preview"&gt;
                &lt;div class="flex justify-between items-center mb-4"&gt;
                    &lt;h3 id="previewTitle" class="text-xl font-extrabold text-slate-800 truncate"&gt;Preview&lt;/h3&gt;
                    &lt;button onclick="switchTab('results')" class="px-4 py-2 rounded-lg bg-slate-100 text-slate-700 font-bold text-sm"&gt;Back to List&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class="border-4 border-slate-100 rounded-2xl overflow-hidden bg-white"&gt;
                    &lt;iframe id="previewFrame" class="w-full h-[500px]"&gt;&lt;/iframe&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Panel Source --&gt;
            &lt;div class="panel" id="panel-source"&gt;
                &lt;div class="flex justify-between items-center mb-4"&gt;
                    &lt;h3 id="sourceTitle" class="text-xl font-extrabold text-slate-800 truncate"&gt;Source Code&lt;/h3&gt;
                    &lt;div class="flex gap-2"&gt;
                        &lt;button id="copySourceBtn" class="bg-indigo-600 text-white px-4 py-2 rounded-lg text-sm font-bold shadow-md"&gt;Copy Code&lt;/button&gt;
                        &lt;button onclick="switchTab('results')" class="px-4 py-2 rounded-lg bg-slate-100 text-slate-700 font-bold text-sm"&gt;Back&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="rounded-2xl overflow-hidden"&gt;
                    &lt;pre class="m-0"&gt;&lt;code class="language-html text-sm block max-h-[500px] custom-scrollbar overflow-y-auto" id="sourceDisplay"&gt;&lt;/code&gt;&lt;/pre&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 1000+ Word Depth SEO &amp; AdSense Content Section --&gt;
    &lt;article class="prose max-w-none bg-white p-8 md:p-16 rounded-[3rem] shadow-xl border border-slate-100"&gt;
        &lt;header class="mb-16 border-b border-slate-100 pb-12"&gt;
            &lt;span class="seo-badge"&gt;Complete Masterclass 2024&lt;/span&gt;
            &lt;h2 class="!border-none !p-0 !mt-4 text-5xl font-extrabold text-slate-900 leading-tight"&gt;Mastering Blogger Post Extraction &amp; 100% SEO Re-Optimization&lt;/h2&gt;
            &lt;p class="text-2xl text-slate-500 mt-6 font-medium leading-relaxed"&gt;The ultimate guide to migrating content, bypassing AI detectors, and maximizing AdSense revenue through human-first editing.&lt;/p&gt;
        &lt;/header&gt;

        &lt;p&gt;In the evolving landscape of digital publishing, Blogger (Blogspot) remains a nostalgic starting point for many. However, as your brand grows, you often need to move that content to more robust platforms like WordPress or a headless CMS. But simply "copy-pasting" is a death sentence for your SEO. Google's sophisticated algorithms now prioritize &lt;strong&gt;Helpful Content&lt;/strong&gt; over mere information.&lt;/p&gt;
        
        &lt;p&gt;This guide explores how to use extraction tools technically and, more importantly, how to re-engineer that content to rank #1 on Google and get instant AdSense approval.&lt;/p&gt;

        &lt;h2&gt;Part 1: The Technical Mechanics of Blogger Extraction&lt;/h2&gt;
        &lt;p&gt;Extraction isn't just about grabbing text; it's about preserving data integrity. When you use the &lt;strong&gt;Blogger Extractor Pro&lt;/strong&gt;, you are interfacing with the Blogger v3 API. This is superior to "web scraping" because it fetches structured JSON data directly from Google’s database.&lt;/p&gt;

        &lt;h3&gt;Why API Extraction Trumps Web Scraping&lt;/h3&gt;
        &lt;p&gt;Web scraping often picks up sidebar widgets, comments, and navigation menus. API extraction ensures you get:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Clean Body Content:&lt;/strong&gt; Just the &lt;code&gt;&amp;lt;div class="post-body"&amp;gt;&lt;/code&gt; content without site-wide clutter.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Metadata Accuracy:&lt;/strong&gt; Original publication dates, labels (categories), and author IDs.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Permalinks:&lt;/strong&gt; The original URL slug, which is vital for setting up 301 redirects later.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;div class="info-box"&gt;
            &lt;h4 class="font-bold text-indigo-900 mb-2"&gt;Pro Tip: Media Assets&lt;/h4&gt;
            &lt;p class="mb-0 text-indigo-800"&gt;Blogger images are often hosted on &lt;code&gt;bp.blogspot.com&lt;/code&gt;. During extraction, keep the original image links, but plan to download and re-upload them to your new hosting to avoid "hotlinking" issues and to improve image SEO via descriptive alt-tags.&lt;/p&gt;
        &lt;/div&gt;

        &lt;h2&gt;Part 2: The 1000-Word SEO Re-Optimization Framework&lt;/h2&gt;
        &lt;p&gt;Once you have your raw text, the real work begins. To make a post "SEO Friendly" and "AdSense Ready," follow this high-performance checklist.&lt;/p&gt;

        &lt;h3&gt;1. Search Intent Realignment&lt;/h3&gt;
        &lt;p&gt;A post written in 2018 might not answer the questions users are asking in 2024. Use tools like Google Trends or "People Also Ask" to see what’s current. If your extracted post is "Best Digital Cameras," update it to "Best Mirrorless Cameras for Beginners in 2024."&lt;/p&gt;

        &lt;h3&gt;2. The E-E-A-T Transformation (Bypassing AI Detectors)&lt;/h3&gt;
        &lt;p&gt;Google’s "AI Detector" isn't just looking for robotic patterns; it’s looking for the &lt;strong&gt;absence of human experience&lt;/strong&gt;. To re-optimize your extracted content so it feels 100% human:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Add First-Person Narratives:&lt;/strong&gt; Use phrases like "In my testing," "I found that," or "When I first tried this."&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Insert Custom Data:&lt;/strong&gt; Don't just say a product is good; say it "reduced my workflow by 20% based on my week-long trial."&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Expert Citations:&lt;/strong&gt; Link to high-authority academic or news sources to back up your claims.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h3&gt;3. Deep Semantic Keyword Integration (LSI)&lt;/h3&gt;
        &lt;p&gt;Latent Semantic Indexing (LSI) is the bridge between a good article and a great one. If your focus keyword is "Blogger Extraction," don't just repeat that phrase. Integrate related terms like:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;Content migration strategies&lt;/li&gt;
            &lt;li&gt;XML to HTML conversion&lt;/li&gt;
            &lt;li&gt;Google Search Console indexing&lt;/li&gt;
            &lt;li&gt;CMS transition best practices&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h2&gt;Part 3: Structuring for AdSense &amp; High User Engagement&lt;/h2&gt;
        &lt;p&gt;Google AdSense doesn't just look at content quality; it looks at &lt;strong&gt;Ad Viewability&lt;/strong&gt;. If your content is one massive wall of text, users will bounce, and your earnings will be zero.&lt;/p&gt;

        &lt;h3&gt;The "F-Pattern" Layout&lt;/h3&gt;
        &lt;p&gt;Eye-tracking studies show users read in an "F" shape. Structure your re-optimized post to accommodate this:&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;&lt;strong&gt;Strong Intro (The Hook):&lt;/strong&gt; Address the pain point in the first 100 words.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;H2 Subheadings:&lt;/strong&gt; Use bold, descriptive headers every 300 words.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Bullet Points &amp; Tables:&lt;/strong&gt; Break down complex data into scannable lists.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Visual Breaks:&lt;/strong&gt; Insert an image or a "Key Takeaway" box every two H2 sections.&lt;/li&gt;
        &lt;/ol&gt;

        &lt;h3&gt;Formatting for 1000+ Word Depth&lt;/h3&gt;
        &lt;p&gt;To hit the 1000-word mark without "fluff" (which AdSense hates), you must add &lt;strong&gt;Breadth&lt;/strong&gt;. If you extracted a post about "How to Cook Pasta," expand it to include:&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;The history of different pasta shapes.&lt;/li&gt;
            &lt;li&gt;Detailed troubleshooting (e.g., what to do if the water is too starchy).&lt;/li&gt;
            &lt;li&gt;Niche variations (Gluten-free or Keto pasta tips).&lt;/li&gt;
            &lt;li&gt;A comprehensive FAQ section based on actual user queries.&lt;/li&gt;
        &lt;/ul&gt;

        &lt;h2&gt;Part 4: Technical Post-Extraction Clean-up&lt;/h2&gt;
        &lt;p&gt;Before you hit publish on your new platform, perform these "clean" operations:&lt;/p&gt;
        &lt;h3&gt;HTML Sanitization&lt;/h3&gt;
        &lt;p&gt;Blogger often adds "junk" code like &lt;code&gt;&amp;lt;span style="font-family: Arial;"&amp;gt;&lt;/code&gt;. Use a cleaner (or the "Clean Text" option in our tool) to strip these. Clean HTML loads faster, and Page Speed is a confirmed Google ranking factor.&lt;/p&gt;

        &lt;h3&gt;Broken Link Audit&lt;/h3&gt;
        &lt;p&gt;Extracted posts often contain links to other Blogspot blogs that may no longer exist. Use a broken link checker to ensure every outbound link is functional. Dead links signal a "neglected site" to AdSense reviewers.&lt;/p&gt;

        &lt;div class="mt-16 p-10 bg-gradient-to-br from-indigo-600 to-violet-700 rounded-[3rem] text-white shadow-2xl relative overflow-hidden"&gt;
            &lt;div class="relative z-10"&gt;
                &lt;h3 class="text-white mt-0 !text-3xl font-extrabold mb-4"&gt;The Golden Rule of AdSense Approval&lt;/h3&gt;
                &lt;p class="text-indigo-100 text-lg leading-relaxed mb-0"&gt;
                    Never submit a site for AdSense review that consists solely of extracted content. The "Value-Add" is your ticket to monetization. Aim for a ratio of 30% extracted data to 70% new, original analysis. Google wants to see that you are providing a unique perspective that doesn't exist anywhere else on the web.
                &lt;/p&gt;
            &lt;/div&gt;
            &lt;div class="absolute -bottom-10 -right-10 w-64 h-64 bg-white/10 rounded-full blur-3xl"&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;h2&gt;Conclusion: Your Path to Search Dominance&lt;/h2&gt;
        &lt;p&gt;Extracting Blogger posts is the beginning of a content revival. By combining technical extraction with deep, human-led SEO re-optimization, you aren't just moving content—you're building an asset. Focus on the user, respect the search intent, and the rankings (and revenue) will follow.&lt;/p&gt;
    &lt;/article&gt;

    &lt;!-- Footer --&gt;
    &lt;footer class="mt-16 text-center text-slate-400 text-sm font-medium pb-10"&gt;
        &lt;div class="flex justify-center gap-6 mb-4"&gt;
            &lt;a href="#" class="hover:text-indigo-600 transition-colors"&gt;Privacy Policy&lt;/a&gt;
            &lt;a href="#" class="hover:text-indigo-600 transition-colors"&gt;SEO Tools&lt;/a&gt;
            &lt;a href="#" class="hover:text-indigo-600 transition-colors"&gt;Contact&lt;/a&gt;
        &lt;/div&gt;
        &amp;copy; &lt;span id="currentYear"&gt;&lt;/span&gt; &lt;a href="https://laxmannepal.com.np" class="text-indigo-500 hover:underline"&gt;laxmannepal.com.np&lt;/a&gt;
    &lt;/footer&gt;
&lt;/div&gt;

&lt;div id="toastBox" class="fixed bottom-6 right-6 z-50 flex flex-col gap-2 pointer-events-none"&gt;&lt;/div&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
    const API_KEY = 'AIzaSyC4O-VH0dUVe_y30dVSYehCunft6KNl4XQ';
    const API_BASE = 'https://www.googleapis.com/blogger/v3';
    let state = { posts: [], option: 'content' };

    document.getElementById('currentYear').innerText = new Date().getFullYear();

    function switchTab(id) {
        document.querySelectorAll('.tab').forEach(t =&gt; t.classList.remove('tab-active'));
        document.querySelectorAll('.panel').forEach(p =&gt; p.classList.remove('show'));
        const activeTab = document.querySelector(`[data-tab="${id}"]`);
        if(activeTab) activeTab.classList.add('tab-active');
        document.getElementById(`panel-${id}`).classList.add('show');
    }

    document.querySelectorAll('.tab').forEach(tab =&gt; { tab.onclick = () =&gt; switchTab(tab.dataset.tab); });

    document.querySelectorAll('.option-card').forEach(card =&gt; {
        card.onclick = () =&gt; {
            document.querySelectorAll('.option-card').forEach(c =&gt; {
                c.classList.remove('active', 'border-indigo-500', 'bg-indigo-50/30');
                c.classList.add('border-slate-100', 'bg-slate-50');
            });
            card.classList.add('active', 'border-indigo-500', 'bg-indigo-50/30');
            card.classList.remove('border-slate-100', 'bg-slate-50');
            state.option = card.dataset.option;
        };
    });

    function showToast(msg, type = 'info') {
        const t = document.createElement('div');
        t.className = `flex items-center gap-3 px-6 py-4 rounded-2xl text-white shadow-2xl transition-all duration-300 transform translate-x-full ${type === 'error' ? 'bg-rose-600' : 'bg-slate-800'}`;
        t.innerHTML = `&lt;span class="font-bold text-sm"&gt;${msg}&lt;/span&gt;`;
        document.getElementById('toastBox').appendChild(t);
        setTimeout(() =&gt; t.classList.remove('translate-x-full'), 10);
        setTimeout(() =&gt; { t.classList.add('translate-x-full'); setTimeout(() =&gt; t.remove(), 300); }, 3000);
    }

    async function getBlogId(url) {
        try {
            const domain = new URL(url).hostname;
            const res = await fetch(`${API_BASE}/blogs/byurl?url=http://${domain}&amp;key=${API_KEY}`);
            const data = await res.json();
            if(data.error) throw new Error();
            return data.id;
        } catch(e) { showToast("Invalid Blog URL", 'error'); return null; }
    }

    async function fetchPost(url) {
        try {
            const urlObj = new URL(url);
            const blogId = await getBlogId(url);
            if(!blogId) return null;
            const res = await fetch(`${API_BASE}/blogs/${blogId}/posts/bypath?path=${urlObj.pathname}&amp;key=${API_KEY}`);
            return await res.json();
        } catch(e) { return null; }
    }

    function addPostToState(post) {
        if(!post || !post.id) return;
        const div = document.createElement('div');
        div.innerHTML = post.content;
        let processed = post.content;
        if(state.option === 'text') processed = div.innerText;
        if(state.option === 'images') processed = Array.from(div.querySelectorAll('img')).map(i =&gt; i.src).join('\n');

        state.posts.push({ id: post.id, title: post.title, content: processed, url: post.url, selected: true });
        updateResultsUI();
    }

    function updateResultsUI() {
        const list = document.getElementById('postList');
        const badge = document.getElementById('resultCountBadge');
        const stats = document.getElementById('statsBar');
        badge.innerText = state.posts.length;
        document.getElementById('totalPosts').innerText = state.posts.length;
        document.getElementById('selectedCount').innerText = state.posts.filter(p =&gt; p.selected).length;

        if(state.posts.length === 0) {
            list.innerHTML = `&lt;div class="text-center py-12 text-slate-400"&gt;Waiting for extraction...&lt;/div&gt;`;
            stats.classList.add('hidden');
            return;
        }
        stats.classList.remove('hidden');
        list.innerHTML = state.posts.map((p, i) =&gt; `
            &lt;div class="p-4 rounded-2xl border-2 flex items-center gap-4 ${p.selected ? 'border-indigo-500 bg-indigo-50/50' : 'border-slate-100 bg-white'} transition-all"&gt;
                &lt;input type="checkbox" ${p.selected ? 'checked' : ''} onchange="toggleSelect(${i})" class="w-5 h-5 rounded text-indigo-600 cursor-pointer"&gt;
                &lt;div class="flex-1 truncate"&gt;&lt;h4 class="font-bold text-slate-800 truncate text-sm"&gt;${p.title}&lt;/h4&gt;&lt;/div&gt;
                &lt;div class="flex gap-2"&gt;
                    &lt;button onclick="viewPreview(${i})" class="bg-indigo-50 text-indigo-600 hover:bg-indigo-100 border border-indigo-100 text-[10px] font-bold px-3 py-1.5 rounded-lg uppercase transition-all"&gt;View&lt;/button&gt;
                    &lt;button onclick="viewSource(${i})" class="bg-slate-50 text-slate-600 hover:bg-slate-100 border border-slate-200 text-[10px] font-bold px-3 py-1.5 rounded-lg uppercase transition-all"&gt;Source&lt;/button&gt;
                    &lt;button onclick="deletePost(${i})" class="text-rose-500 hover:bg-rose-50 p-1.5 rounded-lg transition-all"&gt;&lt;svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        `).join('');
    }

    window.toggleSelect = (idx) =&gt; { state.posts[idx].selected = !state.posts[idx].selected; updateResultsUI(); };
    window.deletePost = (idx) =&gt; { state.posts.splice(idx, 1); updateResultsUI(); };
    
    window.viewPreview = (idx) =&gt; {
        const p = state.posts[idx];
        document.getElementById('previewTitle').innerText = p.title;
        const frame = document.getElementById('previewFrame');
        const doc = frame.contentDocument || frame.contentWindow.document;
        doc.open(); 
        doc.write(`
            &lt;html&gt;
                &lt;head&gt;
                    &lt;style&gt;
                        body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; line-height: 1.6; padding: 40px; color: #334155; max-width: 800px; margin: 0 auto; }
                        img { max-width: 100%; height: auto; border-radius: 12px; margin: 20px 0; }
                        h1 { color: #1e293b; font-weight: 800; font-size: 2.5rem; margin-bottom: 24px; border-bottom: 2px solid #f1f5f9; padding-bottom: 12px; }
                        a { color: #4f46e5; }
                    &lt;/style&gt;
                &lt;/head&gt;
                &lt;body&gt;
                    &lt;h1&gt;${p.title}&lt;/h1&gt;
                    ${p.content}
                &lt;/body&gt;
            &lt;/html&gt;
        `); 
        doc.close();
        switchTab('preview');
    };

    window.viewSource = (idx) =&gt; {
        const p = state.posts[idx];
        document.getElementById('sourceTitle').innerText = `Source: ${p.title}`;
        const display = document.getElementById('sourceDisplay');
        display.textContent = p.content;
        hljs.highlightElement(display);
        
        document.getElementById('copySourceBtn').onclick = () =&gt; {
            const el = document.createElement('textarea');
            el.value = p.content;
            document.body.appendChild(el);
            el.select();
            document.execCommand('copy');
            document.body.removeChild(el);
            showToast("Source code copied!");
        };
        switchTab('source');
    };

    document.getElementById('extractSingleBtn').onclick = async () =&gt; {
        const url = document.getElementById('singleUrl').value.trim();
        if(!url) return showToast("Enter URL", 'error');
        showToast("Extracting...");
        const post = await fetchPost(url);
        if(post) { addPostToState(post); showToast("Success!"); switchTab('results'); }
        else showToast("Error fetching post", 'error');
    };

    document.getElementById('extractBlogBtn').onclick = async () =&gt; {
        const url = document.getElementById('blogUrl').value.trim();
        const max = document.getElementById('maxPosts').value;
        if(!url) return showToast("Enter Blog URL", 'error');
        const blogId = await getBlogId(url);
        if(!blogId) return;
        const res = await fetch(`${API_BASE}/blogs/${blogId}/posts?maxResults=${max}&amp;key=${API_KEY}`);
        const data = await res.json();
        if(data.items) { data.items.forEach(addPostToState); showToast(`Extracted ${data.items.length} posts`); switchTab('results'); }
    };

    document.getElementById('downloadSelected').onclick = () =&gt; {
        const selected = state.posts.filter(p =&gt; p.selected);
        if(!selected.length) return showToast("Select posts", 'error');
        const content = selected.map(p =&gt; `&lt;h1&gt;${p.title}&lt;/h1&gt;${p.content}&lt;hr&gt;`).join('');
        const blob = new Blob([content], {type: 'text/html'});
        const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'blogger_export.html'; a.click();
    };

    document.getElementById('clearResults').onclick = () =&gt; { state.posts = []; updateResultsUI(); };
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Graphic Design Tool</title><link>https://www.laxmannepal.com.np/2026/02/graphic-design-tool.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Mon, 23 Feb 2026 16:42:11 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-8424511176571390133</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;title&gt;Image Generator · laxmannepal&lt;/title&gt;
  &lt;style&gt;
    /* ===== Gaya sesuai blog modern (laxmannepal.com.np) ===== */
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    :root {
      --primary: #1e73be;
      --primary-light: #eef4fc;
      --text-dark: #333;
      --text-soft: #555;
      --border-light: #eaeef2;
      --card-bg: #ffffff;
      --bg-light: #f5f7fa;
      --shadow: 0 8px 20px rgba(0,0,0,0.02), 0 2px 6px rgba(0,20,40,0.05);
    }
    body {
      font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
      background-color: var(--bg-light);
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      padding: 2rem 1rem;
      color: var(--text-dark);
      line-height: 1.5;
    }
    .generator-card {
      max-width: 1100px;
      width: 100%;
      background: var(--card-bg);
      border-radius: 28px;
      box-shadow: var(--shadow);
      padding: 2.2rem 2rem;
      border: 1px solid var(--border-light);
    }
    h1 {
      font-size: 2.2rem;
      font-weight: 600;
      margin-bottom: 0.2rem;
      letter-spacing: -0.02em;
      color: #222;
    }
    .subhead {
      color: var(--text-soft);
      margin-bottom: 2rem;
      font-size: 1rem;
      border-bottom: 1px dashed var(--border-light);
      padding-bottom: 1rem;
    }
    /* Layar unggah pertama */
    .upload-first {
      text-align: center;
      padding: 3.5rem 1.5rem;
      border: 2px dashed #cbd5e0;
      border-radius: 32px;
      background-color: #f9fcff;
      cursor: pointer;
      transition: all 0.2s ease;
      margin-bottom: 0.5rem;
    }
    .upload-first:hover {
      background-color: #f1f7fe;
      border-color: var(--primary);
    }
    .upload-first svg {
      width: 56px;
      height: 56px;
      fill: var(--primary);
      margin-bottom: 1rem;
      opacity: 0.8;
    }
    .upload-first p {
      font-size: 1.2rem;
      font-weight: 500;
      color: #1a2b3c;
    }
    .upload-first small {
      color: #6b7a88;
      font-size: 0.9rem;
    }
    #fileInputElem {
      display: none;
    }
    /* Panel editor */
    .editor-panel {
      display: none;
    }
    /* area preview */
    .preview-section {
      margin-bottom: 2.5rem;
    }
    .preview-wrapper {
      background: #f2f5f8;
      border-radius: 20px;
      padding: 1.5rem;
      border: 1px solid var(--border-light);
    }
    .ratio-keeper {
      position: relative;
      width: 100%;
      height: 0;
      padding-bottom: 100%;
      transition: padding-bottom 0.2s;
      background-color: #d9e2ec;
      border-radius: 16px;
      overflow: hidden;
    }
    .image_container {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-image: none;
      background-size: cover;
      background-position: center;
      background-repeat: no-repeat;
      background-color: #cfddee;
    }
    .image_logo {
      position: absolute;
      top: 5%;
      left: 5%;
      font-size: clamp(1.2rem, 5vw, 2.5rem);
      font-weight: 700;
      color: white;
      line-height: 1.2;
      text-shadow: 0 2px 8px rgba(0,0,0,0.3);
      max-width: 50%;
      z-index: 5;
    }
    .image_logo img {
      max-height: 70px;
      width: auto;
      display: block;
      max-width: 100%;
      filter: drop-shadow(0 2px 6px rgba(0,0,0,0.2));
    }
    .image_headline {
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      padding: 5% 6%;
      background: linear-gradient(0deg, #0b2a4a 10%, rgba(0,0,0,0) 100%);
      color: white;
      z-index: 5;
    }
    .image_subheadline_text {
      display: inline-block;
      background: #d43f3f;
      padding: 0.3rem 1.4rem;
      font-weight: 600;
      font-size: clamp(0.9rem, 3vw, 1.2rem);
      border-radius: 40px;
      margin-bottom: 0.5rem;
      letter-spacing: 0.3px;
      box-shadow: 0 2px 6px rgba(0,0,0,0.2);
    }
    .image_headline_text {
      font-weight: 700;
      line-height: 1.35;
      margin-top: 0.6rem;
      word-break: break-word;
      font-size: clamp(1.3rem, 5vw, 2.4rem);
      text-shadow: 0 2px 4px rgba(0,0,0,0.3);
    }
    .image_headline_footer_text {
      text-align: right;
      margin-top: 1.2rem;
      font-size: clamp(0.8rem, 2.5vw, 1.1rem);
      font-weight: 500;
      text-shadow: 0 1px 3px rgba(0,0,0,0.3);
    }
    .image_headline_footer_text span {
      display: block;
    }
    .image_headline_footer_text span:last-child {
      font-weight: 700;
      font-size: 1.1em;
    }
    .download_button {
      text-align: center;
      margin-top: 2rem;
    }
    .elementskit_button {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      gap: 8px;
      border: none;
      border-radius: 50px;
      font-size: 1.05rem;
      font-weight: 600;
      height: 52px;
      padding: 0 2.8rem;
      background-color: var(--primary);
      color: white;
      cursor: pointer;
      transition: background 0.15s, transform 0.1s;
      box-shadow: 0 6px 14px rgba(30,115,190,0.25);
    }
    .elementskit_button:hover {
      background-color: #155a9c;
      transform: translateY(-2px);
      box-shadow: 0 10px 20px rgba(30,115,190,0.3);
    }
    .elementskit_button svg {
      width: 22px;
      height: 22px;
      fill: currentColor;
    }
    .hidden {
      display: none !important;
    }
    .control-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
      gap: 2rem 1.8rem;
      margin-top: 2rem;
    }
    .control-group {
      background: #fafcfd;
      border-radius: 18px;
      padding: 1.2rem 1.4rem;
      border: 1px solid var(--border-light);
    }
    .control-group h3 {
      font-size: 1rem;
      font-weight: 600;
      margin-bottom: 1.1rem;
      color: #1f3a5f;
      text-transform: uppercase;
      letter-spacing: 0.4px;
      border-left: 4px solid var(--primary);
      padding-left: 0.7rem;
    }
    .form-group {
      margin-bottom: 1.1rem;
    }
    .form-group label {
      display: block;
      font-weight: 500;
      margin-bottom: 0.3rem;
      font-size: 0.9rem;
      color: #2c3e50;
    }
    .input-row {
      display: flex;
      gap: 10px;
      flex-wrap: wrap;
    }
    .custom_input,
    .custom_select {
      background: white;
      border: 1px solid #d1dce8;
      border-radius: 14px;
      padding: 0.7rem 1rem;
      font-size: 0.95rem;
      width: 100%;
      transition: 0.15s;
      color: #1e2a3a;
    }
    .custom_input:focus,
    .custom_select:focus {
      outline: none;
      border-color: var(--primary);
      box-shadow: 0 0 0 3px rgba(30,115,190,0.15);
    }
    input[type="file"] {
      padding: 0.5rem 0.8rem;
      background: #f4f8ff;
    }
    input[type="color"] {
      height: 48px;
      cursor: pointer;
      padding: 4px 6px;
    }
    input[type="range"] {
      width: 100%;
      accent-color: var(--primary);
    }
    .radio-group {
      display: flex;
      gap: 1.2rem;
      flex-wrap: wrap;
      align-items: center;
      background: #f2f6fb;
      padding: 0.6rem 1rem;
      border-radius: 40px;
    }
    .radio-group label {
      display: flex;
      align-items: center;
      gap: 0.3rem;
      font-weight: 500;
      color: #1e3b5c;
      font-size: 0.9rem;
    }
    .form-group span {
      color: var(--primary);
      font-weight: 600;
      margin-left: 4px;
    }
    /* Notifikasi error */
    .error-toast {
      position: fixed;
      bottom: 20px;
      left: 50%;
      transform: translateX(-50%);
      background: #d43f3f;
      color: white;
      padding: 12px 24px;
      border-radius: 50px;
      font-weight: 500;
      box-shadow: 0 5px 20px rgba(0,0,0,0.2);
      z-index: 9999;
      display: none;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class="generator-card"&gt;
    &lt;h1&gt;&#128444;️ Image Generator&lt;/h1&gt;
    &lt;div class="subhead"&gt;Start by uploading a background image — style inspired by laxmannepal.com.np&lt;/div&gt;

    &lt;!-- LAYAR AWAL: UPLOAD --&gt;
    &lt;div id="uploadFirst" class="upload-first"&gt;
      &lt;svg viewBox="0 0 24 24"&gt;&lt;path d="M19,10H17V7H14V5H17V2H19V5H22V7H19V10M14,7H9V14H14V7M7,5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V13.5L14.5,9L10,13.5L7,10.5L5,12.5V5H7Z"/&gt;&lt;/svg&gt;
      &lt;p&gt;Click to upload a background image&lt;/p&gt;
      &lt;small&gt;JPG, PNG or WebP&lt;/small&gt;
      &lt;input type="file" id="fileInputElem" accept="image/*"&gt;
    &lt;/div&gt;

    &lt;!-- PANEL EDITOR (tersembunyi sampai upload) --&gt;
    &lt;div id="editorPanel" class="editor-panel"&gt;
      &lt;!-- Preview (tetap pakai div untuk tampilan) --&gt;
      &lt;div class="preview-section"&gt;
        &lt;div class="preview-wrapper"&gt;
          &lt;div class="ratio-keeper" id="ratioKeeper" style="padding-bottom: 100%;"&gt;
            &lt;div class="image_container" id="previewContainer"&gt;
              &lt;div class="image_logo" id="logoContainer"&gt;
                &lt;span id="logoFallback"&gt;LOGO&lt;/span&gt;
                &lt;img id="logoImage" class="hidden" src="https://raw.githubusercontent.com/spaceback99/Image-Generator-BARBEQUE-/refs/heads/main/Logo%20Gila%20Temax%20614x128.png" alt="logo"&gt;
              &lt;/div&gt;
              &lt;div class="image_headline" id="headlineContainer"&gt;
                &lt;div class="image_subheadline_text" id="subheadlineDisplay"&gt;Breaking News !&lt;/div&gt;
                &lt;div class="image_headline_text" id="headlineDisplay"&gt;WE'RE EXCITED TO TELL YOU YOUR TITLE WILL BE HERE&lt;/div&gt;
                &lt;div class="image_headline_footer_text" id="footerDisplay"&gt;
                  &lt;span id="footerLine"&gt;YOUR NAME&lt;/span&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="download_button"&gt;
          &lt;button class="elementskit_button" id="downloadBtn"&gt;
            &lt;svg viewBox="0 0 24 24"&gt;&lt;path d="M15,9H5V5H15M12,19A3,3 0 0,1 9,16A3,3 0 0,1 12,13A3,3 0 0,1 15,16A3,3 0 0,1 12,19M17,3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V7L17,3Z"&gt;&lt;/path&gt;&lt;/svg&gt;
            Download Image
          &lt;/button&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;!-- Kontrol dalam grid --&gt;
      &lt;div class="control-grid"&gt;
        &lt;!-- Gambar --&gt;
        &lt;div class="control-group"&gt;
          &lt;h3&gt;Images&lt;/h3&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Change Background&lt;/label&gt;
            &lt;input class="custom_input" type="file" id="bgChangeUpload" accept="image/*"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Logo (optional)&lt;/label&gt;
            &lt;input class="custom_input" type="file" id="logoUpload" accept="image/*"&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Teks --&gt;
        &lt;div class="control-group"&gt;
          &lt;h3&gt;Text&lt;/h3&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Headline&lt;/label&gt;
            &lt;input class="custom_input" type="text" id="headlineInput" value="WE'RE EXCITED TO TELL YOU YOUR TITLE WILL BE HERE"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Subheadline&lt;/label&gt;
            &lt;input class="custom_input" type="text" id="subheadlineInput" value="Breaking News !"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Footer&lt;/label&gt;
            &lt;input class="custom_input" type="text" id="footerInput" value="YOUR NAME"&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Ukuran Font --&gt;
        &lt;div class="control-group"&gt;
          &lt;h3&gt;Font Size&lt;/h3&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Headline &lt;span id="headlineSizeVal"&gt;36&lt;/span&gt;px&lt;/label&gt;
            &lt;input type="range" id="headlineSize" min="16" max="64" value="36" step="1"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Subheadline &lt;span id="subSizeVal"&gt;20&lt;/span&gt;px&lt;/label&gt;
            &lt;input type="range" id="subheadlineSize" min="12" max="48" value="20" step="1"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Footer &lt;span id="footerSizeVal"&gt;18&lt;/span&gt;px&lt;/label&gt;
            &lt;input type="range" id="footerSize" min="10" max="36" value="18" step="1"&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Warna --&gt;
        &lt;div class="control-group"&gt;
          &lt;h3&gt;Colors&lt;/h3&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Headline Text&lt;/label&gt;
            &lt;input class="custom_input" type="color" id="headlineColor" value="#ffffff"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Subheadline BG&lt;/label&gt;
            &lt;input class="custom_input" type="color" id="bgColor2" value="#d43f3f"&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Bottom Gradient&lt;/label&gt;
            &lt;input class="custom_input" type="color" id="bgColor1" value="#0b2a4a"&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Rasio &amp; Crop --&gt;
        &lt;div class="control-group"&gt;
          &lt;h3&gt;Canvas &amp; Crop&lt;/h3&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Aspect Ratio&lt;/label&gt;
            &lt;select class="custom_select" id="aspectRatio"&gt;
              &lt;option value="1"&gt;1:1 (square)&lt;/option&gt;
              &lt;option value="1.7777777778"&gt;16:9 (landscape)&lt;/option&gt;
              &lt;option value="1.5"&gt;3:2&lt;/option&gt;
              &lt;option value="1.3333333333"&gt;4:3&lt;/option&gt;
              &lt;option value="0.5625"&gt;9:16 (portrait)&lt;/option&gt;
              &lt;option value="0.75"&gt;2:3&lt;/option&gt;
            &lt;/select&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Background Fit&lt;/label&gt;
            &lt;div class="radio-group"&gt;
              &lt;label&gt;&lt;input type="radio" name="bgSize" value="cover" checked&gt; Cover&lt;/label&gt;
              &lt;label&gt;&lt;input type="radio" name="bgSize" value="contain"&gt; Contain&lt;/label&gt;
              &lt;label&gt;&lt;input type="radio" name="bgSize" value="100% 100%"&gt; Stretch&lt;/label&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;div class="form-group"&gt;
            &lt;label&gt;Position&lt;/label&gt;
            &lt;select class="custom_select" id="bgPosition"&gt;
              &lt;option value="center"&gt;Center&lt;/option&gt;
              &lt;option value="top"&gt;Top&lt;/option&gt;
              &lt;option value="bottom"&gt;Bottom&lt;/option&gt;
              &lt;option value="left"&gt;Left&lt;/option&gt;
              &lt;option value="right"&gt;Right&lt;/option&gt;
            &lt;/select&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- Toast error --&gt;
  &lt;div id="errorToast" class="error-toast"&gt;⚠️ Download failed. Please try again or check console.&lt;/div&gt;

  &lt;script&gt;
    (function() {
      // Elemen UI
      const uploadFirst = document.getElementById('uploadFirst');
      const editorPanel = document.getElementById('editorPanel');
      const fileInputElem = document.getElementById('fileInputElem');
      const previewContainer = document.getElementById('previewContainer');
      const ratioKeeper = document.getElementById('ratioKeeper');
      const errorToast = document.getElementById('errorToast');

      // Input ganti background di editor
      const bgChangeUpload = document.getElementById('bgChangeUpload');
      // Logo
      const logoUpload = document.getElementById('logoUpload');
      const logoFallback = document.getElementById('logoFallback');
      const logoImage = document.getElementById('logoImage');

      // Input teks
      const headlineInput = document.getElementById('headlineInput');
      const subheadlineInput = document.getElementById('subheadlineInput');
      const footerInput = document.getElementById('footerInput');

      // Warna
      const bgColor1 = document.getElementById('bgColor1');
      const bgColor2 = document.getElementById('bgColor2');
      const headlineColor = document.getElementById('headlineColor');

      // Slider ukuran
      const headlineSize = document.getElementById('headlineSize');
      const subheadlineSize = document.getElementById('subheadlineSize');
      const footerSize = document.getElementById('footerSize');
      const headlineSizeVal = document.getElementById('headlineSizeVal');
      const subSizeVal = document.getElementById('subSizeVal');
      const footerSizeVal = document.getElementById('footerSizeVal');

      // Aspect ratio &amp; crop
      const aspectRatio = document.getElementById('aspectRatio');
      const bgSizeRadios = document.getElementsByName('bgSize');
      const bgPosition = document.getElementById('bgPosition');

      // Elemen tampilan
      const headlineDisplay = document.getElementById('headlineDisplay');
      const subheadlineDisplay = document.getElementById('subheadlineDisplay');
      const footerLine = document.getElementById('footerLine');

      // Variabel untuk menyimpan dataURL gambar
      let backgroundDataURL = null;
      let logoDataURL = null;

      // Helper: set background image dari file (simpan dataURL)
      function setBackgroundImage(file) {
        if (file) {
          const reader = new FileReader();
          reader.onload = function(ev) {
            backgroundDataURL = ev.target.result;
            previewContainer.style.backgroundImage = `url('${backgroundDataURL}')`;
          };
          reader.readAsDataURL(file);
        }
      }

      // Upload awal: tampilkan editor &amp; set bg
      fileInputElem.addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (file) {
          setBackgroundImage(file);
          uploadFirst.style.display = 'none';
          editorPanel.style.display = 'block';
        }
      });

      uploadFirst.addEventListener('click', function() {
        fileInputElem.click();
      });

      // Ganti background di dalam editor
      bgChangeUpload.addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (file) setBackgroundImage(file);
      });

      // Logo
      logoUpload.addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (file) {
          const reader = new FileReader();
          reader.onload = function(ev) {
            logoDataURL = ev.target.result;
            logoImage.src = logoDataURL;
            logoImage.classList.remove('hidden');
            logoFallback.classList.add('hidden');
          };
          reader.readAsDataURL(file);
        } else {
          logoDataURL = null;
          logoImage.classList.add('hidden');
          logoFallback.classList.remove('hidden');
        }
      });

      // Update teks
      function updateTexts() {
        headlineDisplay.textContent = headlineInput.value.trim() || "WE'RE EXCITED TO TELL YOU YOUR TITLE WILL BE HERE";
        subheadlineDisplay.textContent = subheadlineInput.value.trim() || "Breaking News !";
        footerLine.textContent = footerInput.value.trim() || "YOUR NAME";
      }
      headlineInput.addEventListener('input', updateTexts);
      subheadlineInput.addEventListener('input', updateTexts);
      footerInput.addEventListener('input', updateTexts);

      // Gradient bawah
      function updateHeadlineBackground() {
        const color = bgColor1.value;
        document.querySelector('.image_headline').style.background = `linear-gradient(0deg, ${color} 10%, rgba(0,0,0,0) 100%)`;
      }
      bgColor1.addEventListener('input', updateHeadlineBackground);
      updateHeadlineBackground();

      // Subheadline background
      function updateSubheadlineColor() {
        subheadlineDisplay.style.backgroundColor = bgColor2.value;
      }
      bgColor2.addEventListener('input', updateSubheadlineColor);
      updateSubheadlineColor();

      // Headline text color
      function updateHeadlineTextColor() {
        headlineDisplay.style.color = headlineColor.value;
      }
      headlineColor.addEventListener('input', updateHeadlineTextColor);
      updateHeadlineTextColor();

      // Ukuran font
      function updateHeadlineFontSize() {
        const val = headlineSize.value;
        headlineSizeVal.textContent = val;
        headlineDisplay.style.fontSize = val + 'px';
      }
      headlineSize.addEventListener('input', updateHeadlineFontSize);
      updateHeadlineFontSize();

      function updateSubheadlineFontSize() {
        const val = subheadlineSize.value;
        subSizeVal.textContent = val;
        subheadlineDisplay.style.fontSize = val + 'px';
      }
      subheadlineSize.addEventListener('input', updateSubheadlineFontSize);
      updateSubheadlineFontSize();

      function updateFooterFontSize() {
        const val = footerSize.value;
        footerSizeVal.textContent = val;
        footerLine.style.fontSize = val + 'px';
      }
      footerSize.addEventListener('input', updateFooterFontSize);
      updateFooterFontSize();

      // Rasio aspek
      function updateAspectRatio() {
        const ratio = parseFloat(aspectRatio.value);
        const paddingBottom = (1 / ratio) * 100;
        ratioKeeper.style.paddingBottom = paddingBottom + '%';
      }
      aspectRatio.addEventListener('change', updateAspectRatio);
      updateAspectRatio();

      // Background size &amp; position (untuk preview)
      function updateBgSettings() {
        let sizeValue = 'cover';
        for (let radio of bgSizeRadios) {
          if (radio.checked) {
            sizeValue = radio.value;
            break;
          }
        }
        previewContainer.style.backgroundSize = sizeValue;
        previewContainer.style.backgroundPosition = bgPosition.value;
      }
      for (let radio of bgSizeRadios) {
        radio.addEventListener('change', updateBgSettings);
      }
      bgPosition.addEventListener('change', updateBgSettings);
      updateBgSettings();

      // Fungsi download dengan canvas manual
      async function downloadImage() {
        // Ambil nilai terkini
        const ratio = parseFloat(aspectRatio.value);
        const width = 1000; // base width
        const height = Math.round(width / ratio);

        // Buat canvas
        const canvas = document.createElement('canvas');
        canvas.width = width;
        canvas.height = height;
        const ctx = canvas.getContext('2d');

        // 1. Gambar background
        if (backgroundDataURL) {
          const bgImg = new Image();
          bgImg.crossOrigin = 'anonymous';
          bgImg.src = backgroundDataURL;
          await new Promise((resolve, reject) =&gt; {
            bgImg.onload = () =&gt; {
              // Tentukan ukuran dan posisi sesuai fit/cover
              const fit = getSizeAndPosition(bgImg.width, bgImg.height, width, height);
              ctx.drawImage(bgImg, fit.sx, fit.sy, fit.sw, fit.sh, fit.dx, fit.dy, fit.dw, fit.dh);
              resolve();
            };
            bgImg.onerror = reject;
          });
        } else {
          // Fallback warna abu-abu
          ctx.fillStyle = '#cfddee';
          ctx.fillRect(0, 0, width, height);
        }

        // 2. Gambar logo
        if (logoDataURL) {
          const logoImg = new Image();
          logoImg.crossOrigin = 'anonymous';
          logoImg.src = logoDataURL;
          await new Promise((resolve, reject) =&gt; {
            logoImg.onload = () =&gt; {
              const logoMaxWidth = width * 0.3; // maks 30% lebar
              const logoMaxHeight = height * 0.15; // maks 15% tinggi
              let logoW = logoImg.width;
              let logoH = logoImg.height;
              if (logoW &gt; logoMaxWidth) {
                logoH = (logoMaxWidth / logoW) * logoH;
                logoW = logoMaxWidth;
              }
              if (logoH &gt; logoMaxHeight) {
                logoW = (logoMaxHeight / logoH) * logoW;
                logoH = logoMaxHeight;
              }
              ctx.drawImage(logoImg, width * 0.05, height * 0.05, logoW, logoH);
              resolve();
            };
            logoImg.onerror = resolve; // skip jika gagal
          });
        }

        // 3. Gradient bottom
        const gradient = ctx.createLinearGradient(0, height * 0.7, 0, height);
        gradient.addColorStop(0, 'rgba(0,0,0,0)');
        gradient.addColorStop(1, bgColor1.value);
        ctx.fillStyle = gradient;
        ctx.fillRect(0, height * 0.7, width, height * 0.3);

        // 4. Subheadline background
        const subText = subheadlineInput.value.trim() || "Breaking News !";
        ctx.font = `600 ${Math.round(height * 0.03)}px 'Inter', sans-serif`;
        const subMetrics = ctx.measureText(subText);
        const subPadding = height * 0.02;
        const subX = width * 0.06;
        const subY = height * 0.8;
        ctx.fillStyle = bgColor2.value;
        ctx.beginPath();
        ctx.roundRect(subX - subPadding, subY - height * 0.04, subMetrics.width + subPadding * 2, height * 0.05, height * 0.025);
        ctx.fill();

        // 5. Subheadline teks
        ctx.fillStyle = '#ffffff';
        ctx.fillText(subText, subX, subY);

        // 6. Headline
        const headlineText = headlineInput.value.trim() || "WE'RE EXCITED TO TELL YOU YOUR TITLE WILL BE HERE";
        const headlineFontSize = parseInt(headlineSize.value);
        ctx.font = `700 ${Math.round(height * headlineFontSize / 700)}px 'Inter', sans-serif`;
        ctx.fillStyle = headlineColor.value;
        const headlineX = width * 0.06;
        const headlineY = height * 0.87;
        wrapText(ctx, headlineText, headlineX, headlineY, width * 0.88, height * 0.06);

        // 7. Footer
        const footerText = footerInput.value.trim() || "YOUR NAME";
        const footerFontSize = parseInt(footerSize.value);
        ctx.font = `500 ${Math.round(height * footerFontSize / 700)}px 'Inter', sans-serif`;
        ctx.fillStyle = '#ffffff';
        ctx.textAlign = 'right';
        ctx.fillText(footerText, width * 0.94, height * 0.96);
        ctx.textAlign = 'left'; // reset

        // Trigger download
        canvas.toBlob((blob) =&gt; {
          const url = URL.createObjectURL(blob);
          const link = document.createElement('a');
          link.download = `image-${Date.now()}.png`;
          link.href = url;
          link.click();
          URL.revokeObjectURL(url);
        }, 'image/png');
      }

      // Helper untuk menghitung posisi background
      function getSizeAndPosition(imgW, imgH, canvasW, canvasH) {
        let sizeMode = 'cover';
        for (let radio of bgSizeRadios) {
          if (radio.checked) {
            sizeMode = radio.value;
            break;
          }
        }
        const pos = bgPosition.value;
        let sx = 0, sy = 0, sw = imgW, sh = imgH, dx = 0, dy = 0, dw = canvasW, dh = canvasH;

        if (sizeMode === 'cover') {
          const scale = Math.max(canvasW / imgW, canvasH / imgH);
          sw = imgW;
          sh = imgH;
          dw = imgW * scale;
          dh = imgH * scale;
          dx = (canvasW - dw) / 2;
          dy = (canvasH - dh) / 2;
        } else if (sizeMode === 'contain') {
          const scale = Math.min(canvasW / imgW, canvasH / imgH);
          sw = imgW;
          sh = imgH;
          dw = imgW * scale;
          dh = imgH * scale;
          dx = (canvasW - dw) / 2;
          dy = (canvasH - dh) / 2;
        } else if (sizeMode === '100% 100%') {
          dw = canvasW;
          dh = canvasH;
          dx = 0;
          dy = 0;
        }

        // Terapkan posisi
        if (pos === 'top') dy = 0;
        else if (pos === 'bottom') dy = canvasH - dh;
        else if (pos === 'left') dx = 0;
        else if (pos === 'right') dx = canvasW - dw;

        return { sx, sy, sw, sh, dx, dy, dw, dh };
      }

      // Helper untuk wrap teks
      function wrapText(ctx, text, x, y, maxWidth, lineHeight) {
        const words = text.split(' ');
        let line = '';
        for (let n = 0; n &lt; words.length; n++) {
          const testLine = line + words[n] + ' ';
          const metrics = ctx.measureText(testLine);
          const testWidth = metrics.width;
          if (testWidth &gt; maxWidth &amp;&amp; n &gt; 0) {
            ctx.fillText(line, x, y);
            line = words[n] + ' ';
            y += lineHeight;
          } else {
            line = testLine;
          }
        }
        ctx.fillText(line, x, y);
      }

      // Event download
      document.getElementById('downloadBtn').addEventListener('click', downloadImage);

      // Inisialisasi teks
      updateTexts();

      // Tambahkan method roundRect
      CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {
        if (w &lt; 2 * r) r = w / 2;
        if (h &lt; 2 * r) r = h / 2;
        this.moveTo(x + r, y);
        this.lineTo(x + w - r, y);
        this.quadraticCurveTo(x + w, y, x + w, y + r);
        this.lineTo(x + w, y + h - r);
        this.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
        this.lineTo(x + r, y + h);
        this.quadraticCurveTo(x, y + h, x, y + h - r);
        this.lineTo(x, y + r);
        this.quadraticCurveTo(x, y, x + r, y);
        this.closePath();
        return this;
      };
    })();
  &lt;/script&gt;

  &lt;!-- Google Fonts Inter --&gt;
  &lt;link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Prompt for making AI Story </title><link>https://www.laxmannepal.com.np/2026/02/prompt-for-making-ai-story.html</link><category>prompt</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sun, 22 Feb 2026 20:40:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-2076462177289609144</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="description" content="Complete AI cinematic storytelling system with Keyframe Director, Contextual Architect, Scene Prompt Assembler and Minimal Animation Writer. Professional structured prompt workflow."&gt;
&lt;meta name="keywords" content="AI storytelling system, cinematic prompt workflow, keyframe director prompt, contextual architect prompt, scene prompt assembler, animation prompt generator, structured AI prompts, SEO optimized AI system"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Complete AI Cinematic Prompt System&lt;/title&gt;

&lt;style&gt;
#lnp-ai-system * {
  box-sizing: border-box;
  font-family: Arial, Helvetica, sans-serif;
}

#lnp-ai-system {
  max-width: 1000px;
  margin: 50px auto;
  padding: 20px;
}

#lnp-ai-system h1 {
  text-align: center;
  margin-bottom: 40px;
}

.lnp-card {
  background: #ffffff;
  border-radius: 12px;
  padding: 25px;
  margin-bottom: 35px;
  box-shadow: 0 10px 25px rgba(0,0,0,0.08);
  border: 1px solid #e6e6e6;
}

.lnp-card h2 {
  margin-top: 0;
  margin-bottom: 15px;
  font-size: 22px;
}

.lnp-copy-btn {
  background: #111827;
  color: #ffffff;
  border: none;
  padding: 10px 16px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 14px;
  margin-bottom: 12px;
}

.lnp-copy-btn:hover {
  opacity: 0.9;
}

.lnp-status {
  font-size: 13px;
  color: green;
  margin-left: 10px;
}

.lnp-pre {
  background: #f9fafb;
  padding: 20px;
  border-radius: 10px;
  overflow-x: auto;
  font-size: 13px;
  line-height: 1.7;
  white-space: pre-wrap;
  border: 1px solid #ddd;
}
&lt;/style&gt;

&lt;script&gt;
function copyPrompt(id, statusId){
  const text = document.getElementById(id).innerText;
  navigator.clipboard.writeText(text).then(() =&gt; {
    const status = document.getElementById(statusId);
    status.innerText = "Copied ✓";
    setTimeout(() =&gt; { status.innerText = ""; }, 2000);
  });
}
&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;div id="lnp-ai-system"&gt;

&lt;h1&gt;Complete AI Cinematic Storytelling System&lt;/h1&gt;
&lt;p&gt;Step 1 : Write story in soft format.  &lt;/p&gt;

 &lt;p&gt;Step 2 : BreakDown Script &lt;/p&gt;

  &lt;p&gt;1. go to Katalist 

  &lt;/p&gt;
  
&lt;!-- ================= 1ST PROMPT ================= --&gt;

&lt;div class="lnp-card"&gt;
&lt;h2&gt;Step 3 : 1st Prompt – The Keyframe Director (v6.8)&lt;/h2&gt;
&lt;button class="lnp-copy-btn" onclick="copyPrompt('prompt1','status1')"&gt;Copy Full Prompt&lt;/button&gt;
&lt;span id="status1" class="lnp-status"&gt;&lt;/span&gt;
&lt;div class="lnp-pre" id="prompt1"&gt;

You are 'The Keyframe Director (v6.8)', a scene logic and cinematic visual planner.  

Your role is to curate the raw scene breakdown of a story into a refined list of visual keyframes called “Shot Blueprints.”  

Each blueprint represents one frozen storytelling moment in time, created for image generation tools.

———————————————————————————

&#127744; INTERACTIVE INPUT FLOW

———————————————————————————

Step 1 — Ask the user:  
“Please provide the Full Story.”

Step 2 — After receiving the story, ask:  
“Now, please provide the Raw Scene Breakdown you want transformed into Shot Blueprints.”

———————————————————————————

&#129504; MASTER PROTOCOL 0: NARRATIVE LOGIC PRIORITY

———————————————————————————

Always base view and camera choice on what the character is doing — NOT what emotion you want to show.

| Action | View Type | Shot Type |
| Arrival / Looking Ahead | Back View / OTS | Wide / Establishing |
| Emotional Response | Front View Only | Medium / Close-up |
| Conversation / Talking | Profile / Side / OTS | Medium / Shot-reverse |
| Observation / Thinking | Back or Side View | Medium / Wide Shot |
| Spying / Peeking | Over-shoulder / Framed | Medium / Close-up |

NEVER suggest a frontal emotional view if logic dictates otherwise.

&#128306; PROTOCOL X: SPATIAL STAGING RULE

When writing the Staging line for a character, include:
- What they are doing (static frozen form)
- Where they are relative to a physical object
- What direction they are facing
- MUST end with view type in brackets

Example:
“Arav: in mid-stride, one hand resting against the gate’s side rail, facing the house calmly (Back View)”

OUTPUT TEMPLATE:

&#128313; Shot Blueprints

Final Scene 1 (Original Scene 4): [Original line]

Shot: [Shot Type, Angle, View]

Staging:
[Character]: [Static pose] (View Type)

Relational Staging:

Scene Function:

OUTPUT RULES:
No creative flair  
No inline interpretation  
Only frozen descriptions  
No camera details

&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ================= 2ND PROMPT ================= --&gt;

&lt;div class="lnp-card"&gt;
&lt;h2&gt;Step 4 : 2nd Prompt – The Contextual Architect (v6.9)&lt;/h2&gt;
&lt;button class="lnp-copy-btn" onclick="copyPrompt('prompt2','status2')"&gt;Copy Full Prompt&lt;/button&gt;
&lt;span id="status2" class="lnp-status"&gt;&lt;/span&gt;
&lt;div class="lnp-pre" id="prompt2"&gt;

You are 'The Contextual Architect (v6.9)', a visual logic prompt engine.

INTERACTIVE INPUT FLOW:

Step 1 — Ask:
"Please provide the Full Story."

Step 2 — Ask:
"Now, please provide the Shot blueprints (from Prompt 1)."

Step 3 — Ask:
"Please list all Character Names to be profiled."

Step 4 — Ask:
"What is the desired Art Style for the images?"

Proceed only once all inputs are received.

FIXED-FORMAT CLOTHING PROFILE PROTOCOL (FFCPP)

Format:
[Color] [Fabric/Style] [Garment Type]

No vague colors.
No open wording.
Clothing is permanent across all text segments.

SECTION STRUCTURE:

&#128313; Character Master Profiles
&#128313; Context-Aware Backgrounds for Blueprints
&#128313; Pre-Assembled Character Description Snippets

No creative clothing variations allowed.
Full-body framing required.

&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ================= 3RD PROMPT ================= --&gt;

&lt;div class="lnp-card"&gt;
&lt;h2&gt;Step 5 : 3rd Prompt – Scene Prompt Assembler&lt;/h2&gt;
&lt;button class="lnp-copy-btn" onclick="copyPrompt('prompt3','status3')"&gt;Copy Full Prompt&lt;/button&gt;
&lt;span id="status3" class="lnp-status"&gt;&lt;/span&gt;
&lt;div class="lnp-pre" id="prompt3"&gt;

You are Scene Prompt Assembler.

STEP 1 — Ask:
Pre-Assembled Character Description Snippets
Context-Aware Backgrounds

STEP 2 — Ask:
Complete Shot Blueprints

STEP 3 — Ask:
Global Image Style line

On command:
Assemble Scene [X]

Output:

1️⃣ Character description + Staging + View type, Shot type  
2️⃣ Image Style line  
3️⃣ Background paragraph  

If no character:
Return Image Style + Background only.

Rules:
Write: Back view, Medium shot
No brackets.
No labels.
No tech blocks.

&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ================= 4TH PROMPT ================= --&gt;

&lt;div class="lnp-card"&gt;
&lt;h2&gt;Step 6 : 4th Prompt – Minimal Animation Writer v1.3&lt;/h2&gt;
&lt;button class="lnp-copy-btn" onclick="copyPrompt('prompt4','status4')"&gt;Copy Full Prompt&lt;/button&gt;
&lt;span id="status4" class="lnp-status"&gt;&lt;/span&gt;
&lt;div class="lnp-pre" id="prompt4"&gt;

You are “Minimal Animation Writer v1.3”.

STEP-1 – Ask user to paste:
&#128313; Shot Blueprints  
&#128313; Pre-Assembled Character Description Snippets  
&#128313; Background for Logline  

STEP-2 – Reply:
“Data stored. Use command:
write animation prompt [SceneNumber]”

COMMAND LOGIC:

1. Locate Final Scene X line.
2. Copy it verbatim.
3. Write one English sentence (≤ 40 words).
4. If characters → subtle character + environment motion.
5. If no character → environment-only motion.

Output:
Final Scene X: [Original line]

[Single English animation sentence]

No labels.
No commentary.
≤ 40 words.

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>How to Create Special Maha Shivaratri AI Videos with Viral Prompts</title><link>https://www.laxmannepal.com.np/2026/02/maha-shivaratri-ai-video.html</link><category>prompt</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sun, 15 Feb 2026 03:11:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-6584435233487894875</guid><description>&lt;!-- Blogger Optimized SEO &amp; Professional UI Styling --&gt;
&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMfVhH2POiUnyvz8IQ2AWFLDbOG9yyW38gdfthjJNmANwk4pQAATtDO7jTj9Brj00f3oFuEXmsUqqrjquq292Eg-D8Gf8ikZHSCbVoZ_gtiZg7WLxAPquMphqTHG5ztrPvNvyUGlSJlZDlUrN_tfIoykoIa9h6bazF-en4qy5ymb-kyFHfPYGOtM3IDMUp/s1376/Gemini_Generated_Image_ehzijwehzijwehzi%20%281%29.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" height="320" data-original-height="1376" data-original-width="768" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMfVhH2POiUnyvz8IQ2AWFLDbOG9yyW38gdfthjJNmANwk4pQAATtDO7jTj9Brj00f3oFuEXmsUqqrjquq292Eg-D8Gf8ikZHSCbVoZ_gtiZg7WLxAPquMphqTHG5ztrPvNvyUGlSJlZDlUrN_tfIoykoIa9h6bazF-en4qy5ymb-kyFHfPYGOtM3IDMUp/s320/Gemini_Generated_Image_ehzijwehzijwehzi%20%281%29.png"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;style&gt;
    .ln-blog-container {
        font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
        color: #334155;
        line-height: 1.8;
        max-width: 800px;
        margin: 0 auto;
        padding: 10px;
    }
    .ln-gradient-text {
        background: linear-gradient(90deg, #6366f1, #ec4899);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        font-weight: 800;
    }
    .ln-table-of-contents {
        background: #f1f5f9;
        padding: 20px;
        border-radius: 12px;
        margin: 20px 0;
    }
    .ln-table-of-contents h3 {
        margin-top: 0;
        font-size: 18px;
        color: #1e293b;
    }
    .ln-table-of-contents ul {
        list-style: none;
        padding-left: 0;
    }
    .ln-table-of-contents a {
        color: #6366f1;
        text-decoration: none;
        font-size: 15px;
    }
    .ln-prompt-card {
        background: #f8fafc;
        border: 1px solid #e2e8f0;
        border-radius: 16px;
        padding: 24px;
        margin: 25px 0;
        position: relative;
        transition: border-color 0.3s ease;
    }
    .ln-prompt-card:hover {
        border-color: #6366f1;
    }
    .ln-code-area {
        font-family: 'SFMono-Regular', Consolas, "Liberation Mono", Menlo, monospace;
        font-size: 14px;
        color: #1e293b;
        background: #ffffff;
        padding: 16px;
        border-radius: 8px;
        border: 1px solid #f1f5f9;
        margin-top: 10px;
        display: block;
        white-space: pre-wrap;
    }
    .ln-copy-btn {
        background: #6366f1;
        color: #ffffff !important;
        border: none;
        padding: 6px 14px;
        border-radius: 6px;
        font-size: 12px;
        font-weight: 600;
        cursor: pointer;
        float: right;
        text-decoration: none !important;
    }
    .ln-copy-btn:hover {
        background: #4f46e5;
    }
    .ln-tip-box {
        background: #eef2ff;
        border-left: 4px solid #6366f1;
        padding: 20px;
        border-radius: 0 12px 12px 0;
        margin: 30px 0;
    }
    .ln-step-badge {
        background: #6366f1;
        color: white;
        padding: 2px 10px;
        border-radius: 99px;
        font-size: 12px;
        text-transform: uppercase;
        font-weight: bold;
        margin-bottom: 8px;
        display: inline-block;
    }
    h2 { font-size: 26px; font-weight: 700; color: #0f172a; margin-top: 40px; border-bottom: 2px solid #f1f5f9; padding-bottom: 10px; }
    strong { color: #1e293b; }
    .seo-meta-hidden { display: none; }
&lt;/style&gt;

&lt;article class="ln-blog-container"&gt;
    &lt;!-- SEO Semantic Header --&gt;
    &lt;header&gt;
        &lt;h1 class="ln-gradient-text" style="font-size: 32px; margin-bottom: 15px;"&gt;How to Create Special Maha Shivratri AI Videos with Viral Prompts&lt;/h1&gt;
        &lt;p class="text-lg" style="font-size: 18px; color: #475569;"&gt;
            Celebrate &lt;strong&gt;Maha Shivratri&lt;/strong&gt; by creating cinematic, high-quality AI videos. This guide provides the exact professional &lt;strong&gt;Lord Shiva AI prompts&lt;/strong&gt; you need to generate viral content for Instagram Reels and YouTube Shorts.
        &lt;/p&gt;
    &lt;/header&gt;

    &lt;!-- Internal Linking / TOC --&gt;
    &lt;nav class="ln-table-of-contents"&gt;
        &lt;h3&gt;Quick Guide Contents&lt;/h3&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href="#step1"&gt;Step 1: The Divine Contact (Back View Prompt)&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#step2"&gt;Step 2: The Face Reveal (Emotional POV Prompt)&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#step3"&gt;Step 3: AI Video Animation &amp; Transition&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="#tips"&gt;Pro Editing Tips for Viral Reels&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/nav&gt;

    &lt;!-- Step 1 --&gt;
    &lt;section id="step1"&gt;
        &lt;div class="ln-step-badge"&gt;Visual Storytelling&lt;/div&gt;
        &lt;h2&gt;The Divine Contact (Back View)&lt;/h2&gt;
        &lt;p&gt;The first shot establishes the spiritual relationship between the devotee and &lt;strong&gt;Mahadev&lt;/strong&gt;. This prompt is highly optimized for &lt;strong&gt;Bing Image Creator&lt;/strong&gt; and &lt;strong&gt;Midjourney v6&lt;/strong&gt; to ensure realistic muscle definition and water physics.&lt;/p&gt;
        
        &lt;div class="ln-prompt-card"&gt;
            &lt;button class="ln-copy-btn" onclick="copyPrompt('p1', this)"&gt;Copy AI Prompt&lt;/button&gt;
            &lt;div class="ln-code-area" id="p1"&gt;Creat images Ultra realistic cinematic mythological scene of Lord Shiva (Mahadev), back view only, muscular ash-covered divine body, long flowing matted hair (jata) moving in wind, holding trishul in left hand beside body. Lord Shiva’s right arm stretched backward toward camera, firmly holding my hand. Only two subjects visible in frame — Mahadev from back and my hand in foreground. My hand coming from bottom center of frame, natural skin tone, wet texture, water droplets, realistic grip tension. Standing in shallow flowing river, water splashing around legs, dramatic golden sunset mixed with dark storm clouds, subtle lightning in far background, crescent moon glowing above. 9:16 aspect ratio, 8K ultra HD.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- Step 2 --&gt;
    &lt;section id="step2"&gt;
        &lt;div class="ln-step-badge"&gt;Emotional Depth&lt;/div&gt;
        &lt;h2&gt;The Face Reveal &amp; Rescue Narrative&lt;/h2&gt;
        &lt;p&gt;This &lt;strong&gt;POV AI prompt&lt;/strong&gt; transitions the perspective to show the intense connection. Use this to create a "rescue" theme where Lord Shiva pulls you through the river of life.&lt;/p&gt;
        
        &lt;div class="ln-prompt-card"&gt;
            &lt;button class="ln-copy-btn" onclick="copyPrompt('p2', this)"&gt;Copy AI Prompt&lt;/button&gt;
            &lt;div class="ln-code-area" id="p2"&gt;CREAT IMAGE Ultra realistic cinematic mythological rescue scene. Scene: I am waist-deep in a powerful river, clothes slightly wet and flowing naturally. Expression intense but hopeful. Only Lord Shiva’s divine hand and forearm visible in frame — no full body, no face of Shiva. Strong masculine ash-covered hand gripping my wrist firmly, rudraksha beads on his wrist, subtle divine glow around his hand. POV perspective — Shiva is pulling me forward through heavy splashing water. Environment: dramatic golden sunset sky, dark storm clouds, distant lightning. 8K ultra HD, Vertical 9:16.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- Step 3 --&gt;
    &lt;section id="step3"&gt;
        &lt;div class="ln-step-badge"&gt;AI Motion&lt;/div&gt;
        &lt;h2&gt;The AI Video Animation &amp; Morph Prompt&lt;/h2&gt;
        &lt;p&gt;To turn these images into a movie, upload them to &lt;strong&gt;Luma Dream Machine&lt;/strong&gt;, &lt;strong&gt;Kling AI&lt;/strong&gt;, or &lt;strong&gt;Runway Gen-3&lt;/strong&gt;. This motion prompt ensures smooth continuity and epic energy.&lt;/p&gt;
        
        &lt;div class="ln-prompt-card"&gt;
            &lt;button class="ln-copy-btn" onclick="copyPrompt('p3', this)"&gt;Copy Motion Prompt&lt;/button&gt;
            &lt;div class="ln-code-area" id="p3"&gt;Cinematic mythological transition scene, start with Lord Shiva from behind holding my hand and pulling me forward through stormy river with lightning, fire mountains and crescent moon in sky, intense dramatic atmosphere, water splashes in slow motion, camera follows from back, then smooth morph transition to front angle where I am holding his hand and moving forward with determination, same environment continuity, ultra realistic, 4K, high detail, emotional divine energy.&lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;!-- SEO Tips --&gt;
    &lt;section id="tips"&gt;
        &lt;div class="ln-tip-box"&gt;
            &lt;strong&gt;&#128161; Pro Editing Tip for SEO &amp; Viral Growth:&lt;/strong&gt;
            &lt;p&gt;1. &lt;strong&gt;Sound Selection:&lt;/strong&gt; Use trending "Har Har Mahadev" or "Shiv Tandav" audio tracks.&lt;br&gt;
            2. &lt;strong&gt;Keywords:&lt;/strong&gt; When posting on Instagram, use tags like #MahaShivratri #MahadevAI #LaxmanNepal #AIArt.&lt;br&gt;
            3. &lt;strong&gt;Editing:&lt;/strong&gt; Use CapCut's "Auto Velocity" to sync the hand grip with the beat of the music.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/section&gt;

    &lt;footer style="border-top: 1px solid #e2e8f0; padding-top: 20px; text-align: center;"&gt;
        &lt;p style="color: #94a3b8; font-size: 14px;"&gt;
            For more AI tutorials and professional prompts, visit &lt;a href="https://laxmannepal.com.np" style="color: #6366f1; text-decoration: none; font-weight: bold;"&gt;Laxman Nepal&lt;/a&gt;.
        &lt;/p&gt;
    &lt;/footer&gt;
&lt;/article&gt;

&lt;!-- Script for Copy Functionality --&gt;
&lt;script&gt;
    function copyPrompt(id, btn) {
        const text = document.getElementById(id).innerText;
        const el = document.createElement('textarea');
        el.value = text;
        document.body.appendChild(el);
        el.select();
        document.execCommand('copy');
        document.body.removeChild(el);
        
        const originalText = btn.innerText;
        btn.innerText = "✓ Copied to Clipboard";
        btn.style.background = "#10b981";
        setTimeout(() =&gt; { 
            btn.innerText = originalText; 
            btn.style.background = "#6366f1";
        }, 2000);
    }
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMfVhH2POiUnyvz8IQ2AWFLDbOG9yyW38gdfthjJNmANwk4pQAATtDO7jTj9Brj00f3oFuEXmsUqqrjquq292Eg-D8Gf8ikZHSCbVoZ_gtiZg7WLxAPquMphqTHG5ztrPvNvyUGlSJlZDlUrN_tfIoykoIa9h6bazF-en4qy5ymb-kyFHfPYGOtM3IDMUp/s72-c/Gemini_Generated_Image_ehzijwehzijwehzi%20%281%29.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Open Source Music Apps</title><link>https://www.laxmannepal.com.np/2026/02/open-source-music-apps.html</link><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Thu, 12 Feb 2026 20:40:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-6240404152139357866</guid><description>&lt;!-- Blogger Friendly Open Source Music Post Wrapper --&gt;
&lt;div id="laxman-nepal-blog-content" style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #334155; line-height: 1.6; max-width: 850px; margin: 0 auto; background: #ffffff;"&gt;
    
    &lt;!-- Internal Scoped Styles to avoid Blogger conflicts --&gt;
    &lt;style&gt;
        #laxman-nepal-blog-content .app-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
            gap: 12px;
            margin: 25px 0;
        }
        #laxman-nepal-blog-content .btn-overview {
            display: block;
            text-align: center;
            background: #10b981;
            color: white !important;
            padding: 10px 12px;
            border-radius: 8px;
            text-decoration: none !important;
            font-weight: 600;
            font-size: 14px;
            transition: all 0.3s ease;
            border: none;
        }
        #laxman-nepal-blog-content .btn-overview:hover {
            background: #059669;
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(16, 185, 129, 0.2);
        }
        #laxman-nepal-blog-content .category-card {
            background: #f8fafc;
            border-radius: 12px;
            padding: 24px;
            margin-bottom: 30px;
            border: 1px solid #e2e8f0;
        }
        #laxman-nepal-blog-content h2 {
            color: #1e293b;
            font-size: 28px;
            font-weight: 700;
            margin-bottom: 20px;
            border-left: 5px solid #10b981;
            padding-left: 15px;
        }
        #laxman-nepal-blog-content h3 {
            color: #047857;
            font-size: 20px;
            margin-top: 0;
        }
        #laxman-nepal-blog-content .link-main {
            color: #2563eb;
            font-weight: 600;
            text-decoration: none;
        }
        #laxman-nepal-blog-content .link-main:hover {
            text-decoration: underline;
        }
        #laxman-nepal-blog-content .resource-box {
            background: #eff6ff;
            border-radius: 12px;
            padding: 20px;
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 15px;
        }
        @media (max-width: 600px) {
            #laxman-nepal-blog-content .resource-box { grid-template-columns: 1fr; }
            #laxman-nepal-blog-content .app-grid { grid-template-columns: 1fr 1fr; }
        }
    &lt;/style&gt;

    &lt;!-- Header Section --&gt;
    &lt;div style="margin-bottom: 40px; text-align: left;"&gt;
        &lt;h1 style="font-size: 36px; color: #0f172a; line-height: 1.2; margin-bottom: 15px;"&gt;Breaking Free: The Ultimate Guide to Open-Source Music Streaming in 2024&lt;/h1&gt;
        &lt;p style="font-size: 18px; color: #64748b; font-style: italic;"&gt;Reclaim your privacy and ownership in a world of proprietary algorithms.&lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- Quick Overview Section --&gt;
    &lt;div style="background: #f1f5f9; padding: 25px; border-radius: 16px; margin-bottom: 40px;"&gt;
        &lt;h2 style="border: none; padding: 0; margin-bottom: 15px; font-size: 22px;"&gt;&#128640; Quick Access Dashboard&lt;/h2&gt;
        &lt;p style="margin-bottom: 15px; font-size: 15px;"&gt;Click to explore the source code and download the apps directly from GitHub:&lt;/p&gt;
        &lt;div class="app-grid"&gt;
            &lt;a href="https://github.com/maxrave-dev/SimpMusic" target="_blank" rel="noopener" class="btn-overview"&gt;SimpMusic&lt;/a&gt;
            &lt;a href="https://github.com/KRTirtho/spotube" target="_blank" rel="noopener" class="btn-overview"&gt;Spotube&lt;/a&gt;
            &lt;a href="https://github.com/gokadzev/Musify" target="_blank" rel="noopener" class="btn-overview"&gt;Musify&lt;/a&gt;
            &lt;a href="https://github.com/OuterTune/OuterTune" target="_blank" rel="noopener" class="btn-overview"&gt;OuterTune&lt;/a&gt;
            &lt;a href="https://github.com/anandnet/Harmony-Music" target="_blank" rel="noopener" class="btn-overview"&gt;Harmony-Music&lt;/a&gt;
            &lt;a href="https://github.com/brahmkshatriya/echo" target="_blank" rel="noopener" class="btn-overview"&gt;Echo&lt;/a&gt;
            &lt;a href="https://github.com/RetroMusicPlayer/RetroMusicPlayer" target="_blank" rel="noopener" class="btn-overview"&gt;Retro Music&lt;/a&gt;
            &lt;a href="https://github.com/OxygenCobalt/Auxio" target="_blank" rel="noopener" class="btn-overview"&gt;Auxio&lt;/a&gt;
            &lt;a href="https://github.com/namidaco/namida" target="_blank" rel="noopener" class="btn-overview"&gt;Namida&lt;/a&gt;
            &lt;a href="https://github.com/harmonoid/harmonoid" target="_blank" rel="noopener" class="btn-overview"&gt;Harmonoid&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Intro --&gt;
    &lt;div style="font-size: 17px; margin-bottom: 40px;"&gt;
        &lt;p&gt;In an era where music streaming is dominated by giants like Spotify, YouTube Music, and Apple Music, the average listener often forgets what they’ve traded for convenience: &lt;strong&gt;privacy, ownership, and customization.&lt;/strong&gt;&lt;/p&gt;
        &lt;p&gt;Most mainstream platforms track every skip, like, and replay to build a data profile on you. If you're looking for a way to reclaim your listening experience, the open-source community has some incredible alternatives.&lt;/p&gt;
    &lt;/div&gt;

    &lt;!-- Android Section --&gt;
    &lt;div class="category-card"&gt;
        &lt;h2&gt;&#128241; Top Android Clients&lt;/h2&gt;
        &lt;div style="margin-bottom: 20px;"&gt;
            &lt;h3&gt;YouTube Music Powerhouses&lt;/h3&gt;
            &lt;ul style="padding-left: 20px; list-style-type: square;"&gt;
                &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/maxrave-dev/SimpMusic" target="_blank" rel="noopener" class="link-main"&gt;SimpMusic&lt;/a&gt;: A sleek Material You interface with lightning-fast streaming.&lt;/li&gt;
                &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/gokadzev/Musify" target="_blank" rel="noopener" class="link-main"&gt;Musify&lt;/a&gt;: Privacy-focused client using Piped APIs.&lt;/li&gt;
                &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/OuterTune/OuterTune" target="_blank" rel="noopener" class="link-main"&gt;OuterTune&lt;/a&gt;: The best choice for users who want a stable, stock-like experience.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;h3&gt;Hybrid &amp; Plugin Players&lt;/h3&gt;
            &lt;ul style="padding-left: 20px; list-style-type: square;"&gt;
                &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/KRTirtho/spotube" target="_blank" rel="noopener" class="link-main"&gt;Spotube&lt;/a&gt;: The "Spotify Alternative" that uses YouTube for audio.&lt;/li&gt;
                &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/brahmkshatriya/echo" target="_blank" rel="noopener" class="link-main"&gt;Echo&lt;/a&gt;: A unique plugin-based approach for custom sources.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Offline Section --&gt;
    &lt;div class="category-card"&gt;
        &lt;h2&gt;&#127911; Local &amp; Offline Playback&lt;/h2&gt;
        &lt;p style="margin-bottom: 15px;"&gt;For the audiophiles who maintain their own library of FLAC and MP3 files:&lt;/p&gt;
        &lt;div style="display: flex; flex-direction: column; gap: 10px;"&gt;
            &lt;div style="background: white; padding: 12px; border-radius: 8px; border: 1px solid #e2e8f0;"&gt;
                &lt;strong&gt;Retro Music Player:&lt;/strong&gt; Famous for its stunning design and personalization options.
            &lt;/div&gt;
            &lt;div style="background: white; padding: 12px; border-radius: 8px; border: 1px solid #e2e8f0;"&gt;
                &lt;strong&gt;Auxio:&lt;/strong&gt; Minimalist, fast, and stays out of your way.
            &lt;/div&gt;
            &lt;div style="background: white; padding: 12px; border-radius: 8px; border: 1px solid #e2e8f0;"&gt;
                &lt;strong&gt;Namida:&lt;/strong&gt; Features a powerful equalizer and clean library management.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Desktop Section --&gt;
    &lt;div class="category-card"&gt;
        &lt;h2&gt;&#128187; Desktop &amp; Power Tools&lt;/h2&gt;
        &lt;ul style="padding-left: 20px; list-style-type: circle;"&gt;
            &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/harmonoid/harmonoid" target="_blank" rel="noopener" class="link-main"&gt;Harmonoid&lt;/a&gt;: The gold standard for desktop music organization.&lt;/li&gt;
            &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/th-ch/youtube-music" target="_blank" rel="noopener" class="link-main"&gt;YTMDesktop&lt;/a&gt;: A dedicated app for YouTube Music users.&lt;/li&gt;
            &lt;li style="margin-bottom: 10px;"&gt;&lt;a href="https://github.com/yt-dlp/yt-dlp" target="_blank" rel="noopener" class="link-main"&gt;yt-dlp&lt;/a&gt;: A command-line tool for downloading audio at the highest quality.&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;!-- Related Links --&gt;
    &lt;div style="margin-bottom: 40px;"&gt;
        &lt;h2 style="border-left: 5px solid #3b82f6;"&gt;&#128279; Related Resources&lt;/h2&gt;
        &lt;div class="resource-box"&gt;
            &lt;a href="https://alternativeto.net/platform/all/?license=opensource" target="_blank" rel="noopener" class="link-main"&gt;AlternativeTo (FOSS Filter)&lt;/a&gt;
            &lt;a href="https://www.privacyguides.org/en/tools/" target="_blank" rel="noopener" class="link-main"&gt;Privacy Guides&lt;/a&gt;
            &lt;a href="https://f-droid.org/" target="_blank" rel="noopener" class="link-main"&gt;F-Droid App Store&lt;/a&gt;
            &lt;a href="https://www.opensourcealternative.to/" target="_blank" rel="noopener" class="link-main"&gt;OS Alternative Directory&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Conclusion --&gt;
    &lt;div style="border-top: 1px solid #e2e8f0; padding-top: 30px; text-align: center;"&gt;
        &lt;p style="font-weight: 700; color: #1e293b;"&gt;Digital independence starts with the tools you use every day.&lt;/p&gt;
        &lt;p style="color: #64748b; font-size: 14px; margin-top: 15px;"&gt;
            Adapted from the &lt;a href="https://github.com/chayotic/Open-Source-Music-Streaming-Apps" target="_blank" rel="noopener" style="color: #10b981;"&gt;Open-Source Music Streaming Apps&lt;/a&gt; repository.
        &lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Bulk Image resizer</title><link>https://www.laxmannepal.com.np/2026/02/bulk-image-resizer.html</link><category>Image</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Tue, 10 Feb 2026 03:29:27 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-1605224151153673724</guid><description>&lt;!-- DEPENDENCIES --&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"&gt;&lt;/script&gt;
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"&gt;

&lt;style&gt;
  :root {
    --primary: var(--button-bg-color, #1d6fea);
    --secondary: var(--email-bg-color, #ea971d);
    --bg-light: var(--bt-home, #f8faff);
    --border: var(--solid-border, #e0e0e0);
    --text-main: var(--text-font-color, #333);
    --text-muted: #777;
  }

  .bir-wrapper {
    font-family: var(--body-font, 'Inter', sans-serif);
    color: var(--text-main);
    max-width: 1100px;
    margin: 20px auto;
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 20px;
    background: transparent;
  }

  /* Main Workspace */
  .bir-main {
    background: #fff;
    padding: 25px;
    border-radius: 12px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.08);
    display: flex;
    flex-direction: column;
  }

  .bir-header {
    margin-bottom: 20px;
    border-bottom: 1px solid var(--border);
    padding-bottom: 15px;
  }

  .bir-header h2 {
    font-size: 1.5rem;
    margin: 0;
    color: var(--primary);
  }

  /* Dropzone */
  .bir-dropzone {
    border: 2px dashed var(--border);
    background: var(--bg-light);
    border-radius: 10px;
    padding: 50px 20px;
    text-align: center;
    cursor: pointer;
    transition: all 0.2s ease;
    margin-bottom: 20px;
  }

  .bir-dropzone:hover, .bir-dropzone.dragover {
    border-color: var(--primary);
    background: rgba(29, 111, 234, 0.05);
  }

  .bir-dropzone i {
    font-size: 50px;
    color: var(--primary);
    margin-bottom: 15px;
  }

  /* Sidebar Settings */
  .bir-sidebar {
    background: #fff;
    padding: 20px;
    border-radius: 12px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.08);
    height: sticky;
    top: 20px;
  }

  .sidebar-section {
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 1px solid var(--border);
  }

  .sidebar-section:last-child { border: none; }

  .sidebar-section h4 {
    font-size: 0.9rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 12px;
    color: var(--text-muted);
    display: flex;
    align-items: center;
    gap: 8px;
  }

  .bir-field { margin-bottom: 12px; }

  .bir-field label {
    display: block;
    font-size: 0.85rem;
    font-weight: 600;
    margin-bottom: 5px;
  }

  .bir-field input[type="text"],
  .bir-field input[type="number"],
  .bir-field select {
    width: 100%;
    padding: 8px 10px;
    border: 1px solid var(--border);
    border-radius: 6px;
    font-family: inherit;
  }

  .bir-checkbox {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.85rem;
    cursor: pointer;
    margin-top: 5px;
  }

  /* Progress Bar */
  .bir-progress-container {
    display: none;
    margin-bottom: 20px;
  }

  .bir-progress-bar {
    height: 8px;
    background: #eee;
    border-radius: 10px;
    overflow: hidden;
  }

  .bir-progress-fill {
    height: 100%;
    background: var(--primary);
    width: 0%;
    transition: width 0.3s ease;
  }

  /* Queue List */
  .bir-queue {
    flex-grow: 1;
    overflow-y: auto;
    max-height: 400px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: #fafafa;
  }

  .queue-item {
    display: grid;
    grid-template-columns: 60px 1fr 120px 80px;
    align-items: center;
    padding: 10px;
    border-bottom: 1px solid var(--border);
    font-size: 0.85rem;
  }

  .queue-thumb {
    width: 45px;
    height: 45px;
    border-radius: 4px;
    object-fit: cover;
    background: #ddd;
  }

  .queue-name { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-right: 10px; }
  .queue-status { color: var(--text-muted); }
  .status-complete { color: #2ecc71; font-weight: bold; }

  /* Buttons */
  .btn-block {
    width: 100%;
    padding: 12px;
    border: none;
    border-radius: 6px;
    font-weight: bold;
    cursor: pointer;
    transition: 0.2s;
    margin-bottom: 10px;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 8px;
  }

  .btn-primary { background: var(--primary); color: #fff; }
  .btn-secondary { background: var(--secondary); color: #fff; }
  
  .btn-primary:disabled { background: #ccc; cursor: not-allowed; }

  @media (max-width: 850px) {
    .bir-wrapper { grid-template-columns: 1fr; }
    .bir-sidebar { order: -1; }
  }
&lt;/style&gt;

&lt;div class="bir-wrapper"&gt;
  
  &lt;div class="bir-main"&gt;
    &lt;div class="bir-header"&gt;
      &lt;h2&gt;Advanced Bulk Image Engine&lt;/h2&gt;
    &lt;/div&gt;

    &lt;div class="bir-dropzone" id="dropzone"&gt;
      &lt;i class="fas fa-images"&gt;&lt;/i&gt;
      &lt;h3&gt;Drag &amp; Drop Images&lt;/h3&gt;
      &lt;p&gt;Or click to browse files from your computer&lt;/p&gt;
      &lt;input type="file" id="fileInput" multiple accept="image/*" style="display:none"&gt;
    &lt;/div&gt;

    &lt;div class="bir-progress-container" id="progressContainer"&gt;
      &lt;div style="display:flex; justify-content:space-between; font-size: 12px; margin-bottom: 5px;"&gt;
        &lt;span id="progressText"&gt;Processing...&lt;/span&gt;
        &lt;span id="percentText"&gt;0%&lt;/span&gt;
      &lt;/div&gt;
      &lt;div class="bir-progress-bar"&gt;
        &lt;div class="bir-progress-fill" id="progressFill"&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="bir-queue" id="queueList"&gt;
      &lt;div style="padding: 20px; text-align: center; color: #999;"&gt;
        No images in queue
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="bir-sidebar"&gt;
    &lt;div class="sidebar-section"&gt;
      &lt;h4&gt;&lt;i class="fas fa-expand"&gt;&lt;/i&gt; Dimensions&lt;/h4&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Width (px)&lt;/label&gt;
        &lt;input type="number" id="targetWidth" placeholder="Original"&gt;
      &lt;/div&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Height (px)&lt;/label&gt;
        &lt;input type="number" id="targetHeight" placeholder="Original"&gt;
      &lt;/div&gt;
      &lt;label class="bir-checkbox"&gt;
        &lt;input type="checkbox" id="lockAspect" checked&gt; Lock Aspect Ratio
      &lt;/label&gt;
    &lt;/div&gt;

    &lt;div class="sidebar-section"&gt;
      &lt;h4&gt;&lt;i class="fas fa-magic"&gt;&lt;/i&gt; Filters &amp; FX&lt;/h4&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Rotation&lt;/label&gt;
        &lt;select id="rotate"&gt;
          &lt;option value="0"&gt;None&lt;/option&gt;
          &lt;option value="90"&gt;90° CW&lt;/option&gt;
          &lt;option value="180"&gt;180°&lt;/option&gt;
          &lt;option value="270"&gt;90° CCW&lt;/option&gt;
        &lt;/select&gt;
      &lt;/div&gt;
      &lt;label class="bir-checkbox"&gt;
        &lt;input type="checkbox" id="grayscale"&gt; Grayscale Filter
      &lt;/label&gt;
    &lt;/div&gt;

    &lt;div class="sidebar-section"&gt;
      &lt;h4&gt;&lt;i class="fas fa-file-export"&gt;&lt;/i&gt; Output&lt;/h4&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Format&lt;/label&gt;
        &lt;select id="format"&gt;
          &lt;option value="original"&gt;Maintain Original&lt;/option&gt;
          &lt;option value="image/jpeg"&gt;JPEG&lt;/option&gt;
          &lt;option value="image/png"&gt;PNG&lt;/option&gt;
          &lt;option value="image/webp"&gt;WebP&lt;/option&gt;
        &lt;/select&gt;
      &lt;/div&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Quality (1-100)&lt;/label&gt;
        &lt;input type="number" id="quality" value="85" min="1" max="100"&gt;
      &lt;/div&gt;
      &lt;div class="bir-field"&gt;
        &lt;label&gt;Rename Pattern&lt;/label&gt;
        &lt;input type="text" id="renamePattern" placeholder="e.g. travel_vacation_{n}"&gt;
        &lt;small style="font-size: 10px; color: #999;"&gt;{n} = sequence number&lt;/small&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;button id="processBtn" class="btn-block btn-primary" disabled&gt;
      &lt;i class="fas fa-play"&gt;&lt;/i&gt; Run Processor
    &lt;/button&gt;
    
    &lt;button id="downloadBtn" class="btn-block btn-secondary" style="display:none"&gt;
      &lt;i class="fas fa-download"&gt;&lt;/i&gt; Download All (ZIP)
    &lt;/button&gt;
    
    &lt;button id="resetBtn" class="btn-block" style="background:#eee; color:#333"&gt;
      Reset Queue
    &lt;/button&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
document.addEventListener('DOMContentLoaded', () =&gt; {
  const fileInput = document.getElementById('fileInput');
  const dropzone = document.getElementById('dropzone');
  const queueList = document.getElementById('queueList');
  const processBtn = document.getElementById('processBtn');
  const downloadBtn = document.getElementById('downloadBtn');
  const resetBtn = document.getElementById('resetBtn');
  
  const progressFill = document.getElementById('progressFill');
  const progressText = document.getElementById('progressText');
  const percentText = document.getElementById('percentText');
  const progressContainer = document.getElementById('progressContainer');

  let files = [];
  let processedFiles = [];

  // --- Handlers ---
  dropzone.onclick = () =&gt; fileInput.click();
  
  dropzone.ondragover = (e) =&gt; { e.preventDefault(); dropzone.classList.add('dragover'); };
  dropzone.ondragleave = () =&gt; dropzone.classList.remove('dragover');
  dropzone.ondrop = (e) =&gt; {
    e.preventDefault();
    dropzone.classList.remove('dragover');
    addFiles(e.dataTransfer.files);
  };

  fileInput.onchange = (e) =&gt; addFiles(e.target.files);

  resetBtn.onclick = () =&gt; location.reload();

  function addFiles(newFiles) {
    const valid = Array.from(newFiles).filter(f =&gt; f.type.startsWith('image/'));
    files = [...files, ...valid];
    updateQueue();
    processBtn.disabled = files.length === 0;
  }

  function updateQueue() {
    if(files.length === 0) {
      queueList.innerHTML = `&lt;div style="padding: 20px; text-align: center; color: #999;"&gt;No images in queue&lt;/div&gt;`;
      return;
    }
    queueList.innerHTML = files.map((f, i) =&gt; `
      &lt;div class="queue-item"&gt;
        &lt;img class="queue-thumb" src="${URL.createObjectURL(f)}" alt=""&gt;
        &lt;div class="queue-name"&gt;${f.name}&lt;/div&gt;
        &lt;div class="queue-status" id="status-${i}"&gt;Ready&lt;/div&gt;
        &lt;div class="queue-action"&gt;&lt;i class="fas fa-check-circle" style="color:#ddd" id="icon-${i}"&gt;&lt;/i&gt;&lt;/div&gt;
      &lt;/div&gt;
    `).join('');
  }

  // --- Core Processing Logic ---
  processBtn.onclick = async () =&gt; {
    processBtn.disabled = true;
    downloadBtn.style.display = 'none';
    progressContainer.style.display = 'block';
    processedFiles = [];

    const config = {
      width: parseInt(document.getElementById('targetWidth').value) || null,
      height: parseInt(document.getElementById('targetHeight').value) || null,
      lock: document.getElementById('lockAspect').checked,
      format: document.getElementById('format').value,
      quality: parseInt(document.getElementById('quality').value) / 100,
      rotate: parseInt(document.getElementById('rotate').value),
      grayscale: document.getElementById('grayscale').checked,
      pattern: document.getElementById('renamePattern').value
    };

    for(let i=0; i &lt; files.length; i++) {
      const file = files[i];
      const statusEl = document.getElementById(`status-${i}`);
      const iconEl = document.getElementById(`icon-${i}`);
      
      statusEl.innerText = "Processing...";
      
      try {
        const result = await processImage(file, config, i + 1);
        processedFiles.push(result);
        
        statusEl.innerText = "Complete";
        statusEl.classList.add('status-complete');
        iconEl.style.color = "#2ecc71";
      } catch (err) {
        statusEl.innerText = "Error";
        statusEl.style.color = "red";
      }

      // Update Progress
      const pct = Math.round(((i + 1) / files.length) * 100);
      progressFill.style.width = pct + '%';
      percentText.innerText = pct + '%';
      progressText.innerText = `Processed ${i+1} of ${files.length}`;
    }

    processBtn.disabled = false;
    downloadBtn.style.display = 'flex';
  };

  function processImage(file, cfg, index) {
    return new Promise((resolve, reject) =&gt; {
      const reader = new FileReader();
      reader.onload = (e) =&gt; {
        const img = new Image();
        img.onload = () =&gt; {
          const canvas = document.createElement('canvas');
          const ctx = canvas.getContext('2d');

          // 1. Calculate Dimensions
          let w = img.width;
          let h = img.height;
          
          if(cfg.width &amp;&amp; cfg.height) {
            w = cfg.width; h = cfg.height;
          } else if(cfg.width) {
            h = cfg.lock ? (img.height * cfg.width / img.width) : img.height;
            w = cfg.width;
          } else if(cfg.height) {
            w = cfg.lock ? (img.width * cfg.height / img.height) : img.width;
            h = cfg.height;
          }

          // Handle Rotation Dimensions
          if(cfg.rotate === 90 || cfg.rotate === 270) {
            canvas.width = h;
            canvas.height = w;
          } else {
            canvas.width = w;
            canvas.height = h;
          }

          // 2. Transform &amp; Draw
          ctx.save();
          if(cfg.rotate !== 0) {
            ctx.translate(canvas.width/2, canvas.height/2);
            ctx.rotate(cfg.rotate * Math.PI / 180);
            ctx.drawImage(img, -w/2, -h/2, w, h);
          } else {
            ctx.drawImage(img, 0, 0, w, h);
          }
          ctx.restore();

          // 3. Apply Filters
          if(cfg.grayscale) {
            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            const data = imageData.data;
            for(let i=0; i&lt;data.length; i+=4) {
              const avg = (data[i] + data[i+1] + data[i+2]) / 3;
              data[i] = data[i+1] = data[i+2] = avg;
            }
            ctx.putImageData(imageData, 0, 0);
          }

          // 4. Export
          const mime = cfg.format === 'original' ? file.type : cfg.format;
          canvas.toBlob((blob) =&gt; {
            let name = file.name;
            if(cfg.pattern) {
              const ext = mime.split('/')[1].replace('jpeg', 'jpg');
              name = cfg.pattern.replace('{n}', index) + '.' + ext;
            }
            resolve({ blob, name });
          }, mime, cfg.quality);
        };
        img.src = e.target.result;
      };
      reader.readAsDataURL(file);
    });
  }

  downloadBtn.onclick = () =&gt; {
    const zip = new JSZip();
    processedFiles.forEach(f =&gt; zip.file(f.name, f.blob));
    zip.generateAsync({type:"blob"}).then(content =&gt; {
      saveAs(content, "bulk_processed_images.zip");
    });
  };

});
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>YouTube Thumbnail Downloader</title><link>https://www.laxmannepal.com.np/2026/02/laxman-nepal-youtube-thumbnail.html</link><category>YouTube Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Tue, 10 Feb 2026 03:27:28 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-6866667499176017916</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Laxman Nepal - YouTube Thumbnail Downloader&lt;/title&gt;
&lt;!-- External Assets (Fonts &amp; Icons) --&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"&gt;

&lt;style&gt;
/* ----------------------------------------
   CSS VARIABLES &amp; RESET (Matching Previous Tool)
   ----------------------------------------
*/
:root {
    --primary: #4f46e5;       /* Indigo 600 */
    --primary-hover: #4338ca; /* Indigo 700 */
    --surface: #ffffff;
    --background: #f8fafc;    /* Slate 50 */
    --text-main: #0f172a;     /* Slate 900 */
    --text-muted: #64748b;    /* Slate 500 */
    --border: #e2e8f0;        /* Slate 200 */
    --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
    --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
    --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
    --radius: 16px;
    --transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

* { box-sizing: border-box; outline: none; }

body {
    font-family: 'Plus Jakarta Sans', sans-serif;
    background-color: var(--background);
    color: var(--text-main);
    line-height: 1.6;
    margin: 0;
    padding: 0;
    -webkit-font-smoothing: antialiased;
}

/* ----------------------------------------
   LAYOUT
   ----------------------------------------
*/
.ln-wrapper {
    width: 100%;
    max-width: 900px;
    margin: 0 auto;
    padding: clamp(1rem, 5vw, 2rem);
}

.ln-card {
    background: var(--surface);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    padding: clamp(1.5rem, 5vw, 3rem);
    border: 1px solid var(--border);
    margin-bottom: 2rem;
    transition: var(--transition);
}

.ln-header { text-align: center; margin-bottom: 2rem; }

.ln-badge {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    background: #e0e7ff;
    color: var(--primary);
    padding: 0.35rem 1rem;
    border-radius: 50px;
    font-size: 0.875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: 1rem;
}

.ln-title {
    font-size: clamp(1.75rem, 4vw, 2.5rem);
    font-weight: 800;
    margin: 0 0 0.75rem 0;
    line-height: 1.2;
    background: linear-gradient(135deg, var(--text-main) 0%, var(--primary) 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.ln-subtitle {
    color: var(--text-muted);
    font-size: clamp(1rem, 2vw, 1.125rem);
    max-width: 600px;
    margin: 0 auto;
}

/* ----------------------------------------
   INPUT SECTION
   ----------------------------------------
*/
.ln-input-group {
    position: relative;
    max-width: 650px;
    margin: 2rem auto 0;
}

.ln-input {
    width: 100%;
    padding: 1.25rem 1.5rem 1.25rem 3.5rem;
    font-size: 1.125rem;
    border: 2px solid var(--border);
    border-radius: 14px;
    background: #fff;
    transition: var(--transition);
    color: var(--text-main);
    box-shadow: var(--shadow-sm);
}

.ln-input:focus {
    border-color: var(--primary);
    box-shadow: 0 0 0 4px rgba(79, 70, 229, 0.15);
}

.ln-icon-link {
    position: absolute;
    left: 1.25rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-muted);
    font-size: 1.2rem;
    pointer-events: none;
    transition: var(--transition);
}

.ln-input:focus + .ln-icon-link { color: var(--primary); }

.ln-btn-main {
    position: absolute;
    right: 8px;
    top: 8px;
    bottom: 8px;
    background: var(--primary);
    color: white;
    border: none;
    padding: 0 1.75rem;
    border-radius: 10px;
    font-weight: 600;
    font-size: 1rem;
    cursor: pointer;
    transition: var(--transition);
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ln-btn-main:hover {
    background: var(--primary-hover);
    transform: translateY(-1px);
}

/* ----------------------------------------
   RESULTS GRID
   ----------------------------------------
*/
.ln-results {
    display: none; /* Block when active */
    margin-top: 2.5rem;
    animation: slideUp 0.4s ease-out;
}

.ln-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1.5rem;
}

.ln-thumb-card {
    background: white;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    overflow: hidden;
    transition: var(--transition);
}

.ln-thumb-card:hover {
    transform: translateY(-5px);
    box-shadow: var(--shadow-lg);
}

.ln-thumb-preview {
    width: 100%;
    aspect-ratio: 16/9;
    background: #f1f5f9;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
}

.ln-thumb-preview img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.3s ease;
}

.ln-thumb-card:hover .ln-thumb-preview img {
    transform: scale(1.05);
}

.ln-card-body {
    padding: 1.25rem;
    border-top: 1px solid var(--border);
}

.ln-quality-badge {
    display: inline-block;
    padding: 0.25rem 0.75rem;
    background: #f1f5f9;
    color: var(--text-main);
    font-size: 0.75rem;
    font-weight: 700;
    border-radius: 6px;
    margin-bottom: 0.75rem;
    text-transform: uppercase;
}

.ln-quality-badge.hd { background: #dcfce7; color: #15803d; } /* Green */
.ln-quality-badge.sd { background: #ffedd5; color: #c2410c; } /* Orange */

.ln-res-info {
    font-size: 0.875rem;
    color: var(--text-muted);
    margin-bottom: 1rem;
    font-weight: 500;
}

.ln-btn-download {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    padding: 0.75rem;
    background: var(--text-main);
    color: white;
    text-decoration: none;
    border-radius: 10px;
    font-weight: 600;
    transition: var(--transition);
    gap: 0.5rem;
    font-size: 0.9rem;
    cursor: pointer;
    border: none;
}

.ln-btn-download:hover {
    background: var(--primary);
    transform: translateY(-2px);
}

/* ----------------------------------------
   SEO CONTENT
   ----------------------------------------
*/
.ln-content {
    margin-top: 3rem;
    color: var(--text-muted);
}
.ln-content h2 {
    color: var(--text-main);
    font-size: 1.5rem;
    margin-top: 2rem;
}

/* ----------------------------------------
   ANIMATIONS
   ----------------------------------------
*/
@keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }

/* ----------------------------------------
   RESPONSIVE
   ----------------------------------------
*/
@media (max-width: 640px) {
    .ln-input-group {
        display: flex;
        flex-direction: column;
        gap: 1rem;
    }
    .ln-input { padding-right: 1.5rem; }
    .ln-btn-main { position: static; width: 100%; justify-content: center; padding: 1rem; }
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="ln-wrapper"&gt;
    
    &lt;!-- Tool Section --&gt;
    &lt;div class="ln-card"&gt;
        &lt;div class="ln-header"&gt;
            &lt;div class="ln-badge"&gt;
                &lt;i class="fas fa-image"&gt;&lt;/i&gt; Free Tool
            &lt;/div&gt;
            &lt;h1 class="ln-title"&gt;YouTube Thumbnail Downloader&lt;/h1&gt;
            &lt;p class="ln-subtitle"&gt;Extract high-quality thumbnails from any YouTube video instantly. Supports 4K, HD (1080p), and SD.&lt;/p&gt;
        &lt;/div&gt;

        &lt;form id="lnThumbForm" onsubmit="event.preventDefault();"&gt;
            &lt;div class="ln-input-group"&gt;
                &lt;input type="text" id="lnVideoUrl" class="ln-input" placeholder="Paste YouTube link here..." autocomplete="off"&gt;
                &lt;i class="fab fa-youtube ln-icon-link"&gt;&lt;/i&gt;
                &lt;button type="submit" class="ln-btn-main" id="lnGetBtn"&gt;
                    &lt;span&gt;Get Images&lt;/span&gt; &lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;div id="lnErrorMsg" style="color:#ef4444; margin-top:10px; font-weight:500; display:none; text-align:center;"&gt;
                &lt;i class="fas fa-exclamation-circle"&gt;&lt;/i&gt; Invalid YouTube URL. Please try again.
            &lt;/div&gt;
        &lt;/form&gt;

        &lt;!-- Results Grid --&gt;
        &lt;div id="lnResults" class="ln-results"&gt;
            &lt;div class="ln-grid"&gt;
                
                &lt;!-- HD Quality --&gt;
                &lt;div class="ln-thumb-card"&gt;
                    &lt;div class="ln-thumb-preview"&gt;
                        &lt;img id="imgHD" src="" alt="HD Thumbnail"&gt;
                    &lt;/div&gt;
                    &lt;div class="ln-card-body"&gt;
                        &lt;span class="ln-quality-badge hd"&gt;HD (1280x720)&lt;/span&gt;
                        &lt;div class="ln-res-info"&gt;Best for Reference / Wallpapers&lt;/div&gt;
                        &lt;button class="ln-btn-download" onclick="downloadImage('imgHD')"&gt;
                            &lt;i class="fas fa-download"&gt;&lt;/i&gt; Download HD
                        &lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- SD Quality --&gt;
                &lt;div class="ln-thumb-card"&gt;
                    &lt;div class="ln-thumb-preview"&gt;
                        &lt;img id="imgSD" src="" alt="SD Thumbnail"&gt;
                    &lt;/div&gt;
                    &lt;div class="ln-card-body"&gt;
                        &lt;span class="ln-quality-badge sd"&gt;SD (640x480)&lt;/span&gt;
                        &lt;div class="ln-res-info"&gt;Standard Quality&lt;/div&gt;
                        &lt;button class="ln-btn-download" onclick="downloadImage('imgSD')"&gt;
                            &lt;i class="fas fa-download"&gt;&lt;/i&gt; Download SD
                        &lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- Normal Quality --&gt;
                &lt;div class="ln-thumb-card"&gt;
                    &lt;div class="ln-thumb-preview"&gt;
                        &lt;img id="imgMQ" src="" alt="Medium Thumbnail"&gt;
                    &lt;/div&gt;
                    &lt;div class="ln-card-body"&gt;
                        &lt;span class="ln-quality-badge"&gt;Medium (320x180)&lt;/span&gt;
                        &lt;div class="ln-res-info"&gt;Good for blog previews&lt;/div&gt;
                        &lt;button class="ln-btn-download" onclick="downloadImage('imgMQ')"&gt;
                            &lt;i class="fas fa-download"&gt;&lt;/i&gt; Download Medium
                        &lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- SEO Content --&gt;
    &lt;div class="ln-content"&gt;
        &lt;h2&gt;How to Download YouTube Thumbnails&lt;/h2&gt;
        &lt;p&gt;This &lt;strong&gt;YouTube Thumbnail Downloader&lt;/strong&gt; by Laxman Nepal is the easiest way to grab preview images from YouTube videos. Whether you need a thumbnail for a blog post, a presentation, or just want to save the artwork, our tool makes it simple.&lt;/p&gt;
        
        &lt;h2&gt;Features&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Full HD Support:&lt;/strong&gt; Get the &lt;code&gt;maxresdefault&lt;/code&gt; image (1280x720) whenever available.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Fast &amp; Free:&lt;/strong&gt; No registration required. Just paste the link and download.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Cross-Device:&lt;/strong&gt; Works perfectly on mobile phones, tablets, and desktops.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;&lt;em&gt;Note: Please respect the copyright of content creators when using downloaded thumbnails.&lt;/em&gt;&lt;/p&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;!-- Logic --&gt;
&lt;script&gt;
(function() {
    const form = document.getElementById('lnThumbForm');
    const input = document.getElementById('lnVideoUrl');
    const results = document.getElementById('lnResults');
    const errorMsg = document.getElementById('lnErrorMsg');

    const imgHD = document.getElementById('imgHD');
    const imgSD = document.getElementById('imgSD');
    const imgMQ = document.getElementById('imgMQ');

    function extractVideoId(url) {
        const regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&amp;?]*).*/;
        const match = url.match(regExp);
        return (match &amp;&amp; match[7].length == 11) ? match[7] : false;
    }

    form.addEventListener('submit', function() {
        const url = input.value.trim();
        const videoId = extractVideoId(url);

        if (!videoId) {
            errorMsg.style.display = 'block';
            results.style.display = 'none';
            return;
        }

        errorMsg.style.display = 'none';
        
        // Construct Image URLs
        const hdUrl = `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`;
        const sdUrl = `https://img.youtube.com/vi/${videoId}/sddefault.jpg`;
        const mqUrl = `https://img.youtube.com/vi/${videoId}/mqdefault.jpg`;

        // Update Sources
        imgHD.src = hdUrl;
        imgSD.src = sdUrl;
        imgMQ.src = mqUrl;

        // Show Results
        results.style.display = 'block';
        
        // Scroll to results on mobile
        if(window.innerWidth &lt; 640) {
            setTimeout(() =&gt; {
                results.scrollIntoView({ behavior: 'smooth' });
            }, 300);
        }
    });

    // Download Handler
    window.downloadImage = async function(imgId) {
        const img = document.getElementById(imgId);
        const url = img.src;
        const fileName = 'thumbnail-' + Date.now() + '.jpg';

        try {
            const response = await fetch(url);
            const blob = await response.blob();
            const blobUrl = window.URL.createObjectURL(blob);
            
            const a = document.createElement('a');
            a.href = blobUrl;
            a.download = fileName;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            window.URL.revokeObjectURL(blobUrl);
        } catch (error) {
            // Fallback for CORS issues: Open in new tab
            window.open(url, '_blank');
        }
    };
})();
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>YouTube Tag Generator</title><link>https://www.laxmannepal.com.np/2026/02/youtube-tag-generator.html</link><category>YouTube Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Tue, 10 Feb 2026 03:21:17 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-7116027156284946068</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;title&gt;Laxman Nepal - SEO Tag Generator&lt;/title&gt;
&lt;!-- External Assets (Fonts &amp; Icons) --&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet"&gt;

&lt;style&gt;
/* ----------------------------------------
   CSS VARIABLES &amp; RESET 
   ----------------------------------------
*/
:root {
    --primary: #4f46e5;       /* Indigo 600 */
    --primary-hover: #4338ca; /* Indigo 700 */
    --surface: #ffffff;
    --background: #f8fafc;    /* Slate 50 */
    --text-main: #0f172a;     /* Slate 900 */
    --text-muted: #64748b;    /* Slate 500 */
    --border: #e2e8f0;        /* Slate 200 */
    --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
    --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
    --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
    --radius: 16px;
    --transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

* { box-sizing: border-box; outline: none; }

body {
    font-family: 'Plus Jakarta Sans', sans-serif;
    background-color: var(--background);
    color: var(--text-main);
    line-height: 1.6;
    margin: 0;
    padding: 0;
    -webkit-font-smoothing: antialiased;
}

/* ----------------------------------------
   LAYOUT CONTAINERS 
   ----------------------------------------
*/
.ln-wrapper {
    width: 100%;
    max-width: 900px;
    margin: 0 auto;
    padding: clamp(1rem, 5vw, 2rem);
}

/* ----------------------------------------
   HERO / INPUT SECTION 
   ----------------------------------------
*/
.ln-card {
    background: var(--surface);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
    padding: clamp(1.5rem, 5vw, 3rem);
    border: 1px solid var(--border);
    margin-bottom: 2rem;
    transition: var(--transition);
}

.ln-header {
    text-align: center;
    margin-bottom: 2rem;
}

.ln-badge {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    background: #e0e7ff;
    color: var(--primary);
    padding: 0.35rem 1rem;
    border-radius: 50px;
    font-size: 0.875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin-bottom: 1rem;
}

.ln-title {
    font-size: clamp(1.75rem, 4vw, 2.5rem);
    font-weight: 800;
    margin: 0 0 0.75rem 0;
    line-height: 1.2;
    background: linear-gradient(135deg, var(--text-main) 0%, var(--primary) 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.ln-subtitle {
    color: var(--text-muted);
    font-size: clamp(1rem, 2vw, 1.125rem);
    max-width: 600px;
    margin: 0 auto;
}

/* Input Group */
.ln-input-group {
    position: relative;
    max-width: 650px;
    margin: 2rem auto 0;
}

.ln-input {
    width: 100%;
    padding: 1.25rem 1.5rem 1.25rem 3.5rem;
    font-size: 1.125rem;
    border: 2px solid var(--border);
    border-radius: 14px;
    background: #fff;
    transition: var(--transition);
    color: var(--text-main);
    box-shadow: var(--shadow-sm);
}

.ln-input:focus {
    border-color: var(--primary);
    box-shadow: 0 0 0 4px rgba(79, 70, 229, 0.15);
}

.ln-icon-search {
    position: absolute;
    left: 1.25rem;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-muted);
    font-size: 1.2rem;
    pointer-events: none;
    transition: var(--transition);
}

.ln-input:focus + .ln-icon-search {
    color: var(--primary);
}

/* Search Button (Desktop: Inside right / Mobile: Below) */
.ln-btn-generate {
    position: absolute;
    right: 8px;
    top: 8px;
    bottom: 8px;
    background: var(--primary);
    color: white;
    border: none;
    padding: 0 1.75rem;
    border-radius: 10px;
    font-weight: 600;
    font-size: 1rem;
    cursor: pointer;
    transition: var(--transition);
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ln-btn-generate:hover {
    background: var(--primary-hover);
    transform: translateY(-1px);
}

.ln-btn-generate:active {
    transform: translateY(1px);
}

/* Loading State */
.ln-loader {
    display: none; /* Flex when active */
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    margin-top: 1rem;
    color: var(--text-muted);
    font-size: 0.9rem;
    animation: fadeIn 0.3s ease;
}

.ln-spinner {
    width: 20px;
    height: 20px;
    border: 3px solid #e2e8f0;
    border-top-color: var(--primary);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

/* ----------------------------------------
   RESULTS SECTION 
   ----------------------------------------
*/
.ln-results {
    display: none; /* Block when active */
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 1.5rem;
    animation: slideUp 0.4s ease-out;
    box-shadow: var(--shadow-lg);
}

.ln-results-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
    border-bottom: 1px solid var(--border);
    padding-bottom: 1rem;
}

.ln-count {
    font-weight: 700;
    color: var(--text-main);
}

.ln-count span {
    color: var(--primary);
}

.ln-actions {
    display: flex;
    gap: 0.75rem;
}

.ln-btn-action {
    padding: 0.6rem 1rem;
    border-radius: 8px;
    font-size: 0.875rem;
    font-weight: 600;
    cursor: pointer;
    border: 1px solid var(--border);
    background: white;
    color: var(--text-main);
    transition: var(--transition);
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.ln-btn-action:hover {
    background: #f1f5f9;
}

.ln-btn-primary {
    background: var(--primary);
    color: white;
    border-color: var(--primary);
}

.ln-btn-primary:hover {
    background: var(--primary-hover);
}

.ln-tags-container {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    max-height: 400px;
    overflow-y: auto;
    padding: 4px; /* Space for focus rings */
}

/* Individual Tag */
.ln-tag {
    display: inline-flex;
    align-items: center;
    background: #f1f5f9;
    color: var(--text-main);
    padding: 0.5rem 0.75rem;
    border-radius: 8px;
    font-size: 0.9rem;
    font-weight: 500;
    transition: var(--transition);
    border: 1px solid transparent;
    cursor: default;
    user-select: none;
    animation: popIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;
    opacity: 0;
    transform: scale(0.8);
}

.ln-tag:hover {
    background: white;
    border-color: var(--primary);
    box-shadow: var(--shadow-sm);
    color: var(--primary);
}

.ln-tag i {
    margin-left: 0.5rem;
    color: #94a3b8;
    cursor: pointer;
    padding: 4px;
    border-radius: 50%;
    transition: 0.2s;
}

.ln-tag i:hover {
    background: #cbd5e1;
    color: #ef4444;
}

/* ----------------------------------------
   CONTENT / SEO TEXT 
   ----------------------------------------
*/
.ln-content {
    margin-top: 3rem;
    color: var(--text-muted);
}

.ln-content h2 {
    color: var(--text-main);
    font-size: 1.5rem;
    margin-top: 2rem;
}

.ln-content p {
    margin-bottom: 1rem;
}

/* ----------------------------------------
   ANIMATIONS 
   ----------------------------------------
*/
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes popIn { to { opacity: 1; transform: scale(1); } }

/* ----------------------------------------
   RESPONSIVE QUERIES 
   ----------------------------------------
*/
@media (max-width: 640px) {
    .ln-input-group {
        display: flex;
        flex-direction: column;
        gap: 1rem;
    }

    .ln-input {
        padding-right: 1.5rem; /* Remove space for button */
    }

    .ln-btn-generate {
        position: static;
        width: 100%;
        justify-content: center;
        padding: 1rem;
    }

    .ln-results-header {
        flex-direction: column;
        align-items: flex-start;
        gap: 1rem;
    }
    
    .ln-actions {
        width: 100%;
    }
    
    .ln-btn-action {
        flex: 1;
        justify-content: center;
    }
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="ln-wrapper"&gt;
    
    &lt;!-- Hero / Tool Section --&gt;
    &lt;div class="ln-card"&gt;
        &lt;div class="ln-header"&gt;
            &lt;div class="ln-badge"&gt;
                &lt;i class="fas fa-bolt"&gt;&lt;/i&gt; SEO Tool V2.0
            &lt;/div&gt;
            &lt;h1 class="ln-title"&gt;Rapid Tags Generator&lt;/h1&gt;
            &lt;p class="ln-subtitle"&gt;Boost your videos and blogs on LaxmanNepal.com.np. Generate optimized tags from YouTube &amp; Google instantly.&lt;/p&gt;
        &lt;/div&gt;

        &lt;form id="lnForm" onsubmit="event.preventDefault();"&gt;
            &lt;div class="ln-input-group"&gt;
                &lt;input type="text" id="lnKeyword" class="ln-input" placeholder="Enter topic (e.g. Nepal Travel Guide)..." autocomplete="off"&gt;
                &lt;i class="fas fa-search ln-icon-search"&gt;&lt;/i&gt;
                &lt;button type="submit" class="ln-btn-generate" id="lnSearchBtn"&gt;
                    &lt;span&gt;Generate&lt;/span&gt; &lt;i class="fas fa-arrow-right"&gt;&lt;/i&gt;
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/form&gt;

        &lt;div id="lnLoader" class="ln-loader"&gt;
            &lt;div class="ln-spinner"&gt;&lt;/div&gt;
            &lt;span&gt;Analyzing trends &amp; fetching tags...&lt;/span&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Results Section --&gt;
    &lt;div id="lnResults" class="ln-results"&gt;
        &lt;div class="ln-results-header"&gt;
            &lt;div class="ln-count"&gt;Found &lt;span id="lnTotalTags"&gt;0&lt;/span&gt; optimized tags&lt;/div&gt;
            &lt;div class="ln-actions"&gt;
                &lt;button id="lnCopyBtn" class="ln-btn-action ln-btn-primary"&gt;
                    &lt;i class="far fa-copy"&gt;&lt;/i&gt; Copy All
                &lt;/button&gt;
                &lt;button id="lnClearBtn" class="ln-btn-action"&gt;
                    &lt;i class="fas fa-trash-alt"&gt;&lt;/i&gt; Clear
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div id="lnTagsContainer" class="ln-tags-container"&gt;
            &lt;!-- Tags will be injected here --&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- SEO Content for LaxmanNepal --&gt;
    &lt;div class="ln-content"&gt;
        &lt;h2&gt;About This Tool&lt;/h2&gt;
        &lt;p&gt;Welcome to the &lt;strong&gt;Laxman Nepal Tag Generator&lt;/strong&gt;. This tool is designed to help content creators, bloggers, and YouTubers find the most relevant keywords for their niche. By analyzing real-time suggestion data, we ensure your content reaches the right audience.&lt;/p&gt;
        
        &lt;h2&gt;Why use optimized tags?&lt;/h2&gt;
        &lt;p&gt;Using the right tags improves your Search Engine Optimization (SEO). Whether you are writing for your WordPress blog or uploading to YouTube, specific long-tail keywords help algorithms understand your content context, leading to higher rankings and more organic traffic.&lt;/p&gt;
    &lt;/div&gt;

&lt;/div&gt;

&lt;!-- JavaScript Logic --&gt;
&lt;script&gt;
(function() {
    // DOM Elements
    const form = document.getElementById('lnForm');
    const input = document.getElementById('lnKeyword');
    const searchBtn = document.getElementById('lnSearchBtn');
    const loader = document.getElementById('lnLoader');
    const resultsArea = document.getElementById('lnResults');
    const tagsContainer = document.getElementById('lnTagsContainer');
    const totalCount = document.getElementById('lnTotalTags');
    const copyBtn = document.getElementById('lnCopyBtn');
    const clearBtn = document.getElementById('lnClearBtn');

    // JSONP Helper for CORS bypass
    function jsonp(url) {
        return new Promise((resolve, reject) =&gt; {
            const callbackName = 'ln_cb_' + Math.round(100000 * Math.random());
            const script = document.createElement('script');
            
            window[callbackName] = function(data) {
                delete window[callbackName];
                document.body.removeChild(script);
                resolve(data);
            };

            script.src = url.replace('CALLBACK', callbackName);
            script.onerror = () =&gt; {
                delete window[callbackName];
                document.body.removeChild(script);
                reject('Error fetching data');
            };
            
            document.body.appendChild(script);
        });
    }

    // Fetch Logic
    async function fetchTags(query) {
        const ytUrl = `https://suggestqueries.google.com/complete/search?client=youtube&amp;ds=yt&amp;q=${encodeURIComponent(query)}&amp;callback=CALLBACK`;
        const googleUrl = `https://suggestqueries.google.com/complete/search?client=firefox&amp;q=${encodeURIComponent(query)}&amp;callback=CALLBACK`;

        try {
            // Run both requests in parallel
            const [ytData, googleData] = await Promise.all([
                jsonp(ytUrl).catch(() =&gt; [[], []]), 
                jsonp(googleUrl).catch(() =&gt; [[], []])
            ]);

            // Extract Suggestions
            const ytTags = (ytData[1] || []).map(item =&gt; item[0]);
            const googleTags = (googleData[1] || []); // Firefox client returns flat array in pos 1

            // Merge and Deduplicate
            const uniqueTags = [...new Set([...ytTags, ...googleTags])].filter(tag =&gt; tag.trim() !== "");
            
            return uniqueTags;

        } catch (error) {
            console.error(error);
            return [];
        }
    }

    // UI Rendering
    function renderTags(tags) {
        tagsContainer.innerHTML = '';
        totalCount.textContent = tags.length;

        if (tags.length === 0) {
            tagsContainer.innerHTML = '&lt;div style="width:100%; text-align:center; color:var(--text-muted);"&gt;No suggestions found. Try a different keyword.&lt;/div&gt;';
            return;
        }

        // Add Animation Stagger
        tags.forEach((tag, index) =&gt; {
            const chip = document.createElement('div');
            chip.className = 'ln-tag';
            chip.style.animationDelay = `${index * 0.03}s`; // Stagger effect
            
            const text = document.createElement('span');
            text.textContent = tag;
            
            const removeIcon = document.createElement('i');
            removeIcon.className = 'fas fa-times';
            removeIcon.onclick = () =&gt; {
                chip.remove();
                updateCount();
            };

            chip.appendChild(text);
            chip.appendChild(removeIcon);
            tagsContainer.appendChild(chip);
        });
    }

    function updateCount() {
        const count = tagsContainer.querySelectorAll('.ln-tag').length;
        totalCount.textContent = count;
    }

    // Main Execution
    async function handleSearch() {
        const query = input.value.trim();
        if (!query) return;

        // UI Loading State
        loader.style.display = 'flex';
        resultsArea.style.display = 'none';
        searchBtn.disabled = true;

        const tags = await fetchTags(query);

        // UI Success State
        loader.style.display = 'none';
        resultsArea.style.display = 'block';
        searchBtn.disabled = false;
        renderTags(tags);
    }

    // Event Listeners
    form.addEventListener('submit', handleSearch);
    
    // Copy Functionality
    copyBtn.addEventListener('click', () =&gt; {
        const tags = Array.from(tagsContainer.querySelectorAll('.ln-tag span'))
                          .map(span =&gt; span.textContent).join(', ');
        
        if (!tags) return;

        navigator.clipboard.writeText(tags).then(() =&gt; {
            const originalText = copyBtn.innerHTML;
            copyBtn.innerHTML = '&lt;i class="fas fa-check"&gt;&lt;/i&gt; Copied!';
            copyBtn.style.background = '#10b981'; // Green
            copyBtn.style.borderColor = '#10b981';
            copyBtn.style.color = 'white';
            
            setTimeout(() =&gt; {
                copyBtn.innerHTML = originalText;
                copyBtn.style.background = ''; // Reset to CSS
                copyBtn.style.borderColor = '';
                copyBtn.style.color = '';
            }, 2000);
        });
    });

    // Clear Functionality
    clearBtn.addEventListener('click', () =&gt; {
        tagsContainer.innerHTML = '';
        input.value = '';
        resultsArea.style.display = 'none';
        input.focus();
    });

})();
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Poster Design Studio </title><link>https://www.laxmannepal.com.np/2026/01/poster-design-studio.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sat, 24 Jan 2026 04:51:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-7867874872989806927</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;Pro Poster Designer&lt;/title&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"&gt;&lt;/script&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&amp;display=swap" rel="stylesheet"&gt;
    &lt;style&gt;
        /* Blogger Compatibility: Removing 100vh constraints to allow the post to scroll naturally */
        body {
            font-family: 'Inter', sans-serif;
            background-color: #f1f5f9;
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: column;
            min-height: 100vh;
            overflow-y: auto; /* Enable natural scrolling for Blogger posts */
        }

        /* Top Preview Area */
        main {
            width: 100%;
            min-height: 400px; /* Minimum height for visibility */
            height: 60vh; /* Responsive height relative to view */
            background: #cbd5e1;
            display: flex;
            align-items: center;
            justify-content: center;
            overflow: hidden;
            position: relative;
            z-index: 10;
            padding: 20px;
        }

        /* Bottom Controls Area - Changed to natural height for Blogger */
        aside {
            width: 100%;
            background: white;
            border-top: 1px solid #e2e8f0;
            padding: 24px 20px;
            z-index: 20;
            height: auto; /* Allow content to dictate height */
            box-sizing: border-box;
        }

        @media (min-width: 1024px) {
            aside {
                display: grid;
                grid-template-columns: repeat(3, 1fr);
                gap: 24px;
            }
            .aside-header { grid-column: span 3; }
        }

        .canvas-container {
            box-shadow: 0 30px 60px -12px rgba(0, 0, 0, 0.4);
            position: relative;
            overflow: hidden;
            background: #000;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: move;
            user-select: none;
            transition: width 0.3s ease, height 0.3s ease;
        }

        #bg-image {
            position: absolute;
            pointer-events: none;
            transform-origin: center center;
            will-change: transform;
            max-width: none;
        }

        .vignette-overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            pointer-events: none;
            z-index: 10;
        }

        .logo-element {
            position: absolute;
            max-width: 15%;
            max-height: 15%;
            object-fit: contain;
            margin: 20px;
            pointer-events: none;
            z-index: 20;
        }

        .text-content-wrapper {
            position: absolute;
            bottom: 12%;
            left: 5%;
            right: 5%;
            text-align: center;
            z-index: 30;
        }

        #display-text {
            text-shadow: 0 4px 10px rgba(0,0,0,0.5), 0 2px 4px rgba(0,0,0,0.8);
            line-height: 1.1;
            word-wrap: break-word;
        }

        .copyright-tag {
            position: absolute;
            bottom: 15px;
            z-index: 40;
            text-transform: uppercase;
            letter-spacing: 1px;
            font-weight: 600;
        }

        /* UI Styling */
        .file-input-wrapper {
            position: relative;
            overflow: hidden;
            display: inline-block;
            width: 100%;
        }

        .file-input-wrapper input[type=file] {
            position: absolute;
            left: 0;
            top: 0;
            opacity: 0;
            width: 100%;
            height: 100%;
            cursor: pointer;
        }

        .file-label-custom {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            padding: 10px;
            background: white;
            border: 2px dashed #e2e8f0;
            border-radius: 10px;
            color: #64748b;
            font-size: 12px;
            font-weight: 600;
            transition: all 0.2s;
        }

        .file-input-wrapper:hover .file-label-custom {
            border-color: #4f46e5;
            color: #4f46e5;
            background: #f8fafc;
        }

        input[type="range"] {
            height: 4px;
            border-radius: 5px;
            background: #e2e8f0;
            appearance: none;
            width: 100%;
        }

        input[type="range"]::-webkit-slider-thumb {
            appearance: none;
            width: 16px;
            height: 16px;
            background: #4f46e5;
            border-radius: 50%;
            cursor: pointer;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;!-- Top: Preview Area --&gt;
    &lt;main id="preview-container"&gt;
        &lt;div id="canvas-wrapper" class="canvas-container"&gt;
            &lt;img id="bg-image" src="" alt="" style="display: none;"&gt;
            &lt;img id="logo-img" class="logo-element hidden" src="" alt="logo"&gt;
            &lt;div id="vignette" class="vignette-overlay" style="height: 35%;"&gt;&lt;/div&gt;
            &lt;span id="copyright-display" class="copyright-tag" style="left: 20px; color: #ffffff; font-size: 10px;"&gt;© BRAND NAME&lt;/span&gt;
            &lt;div class="text-content-wrapper"&gt;
                &lt;p id="display-text" class="font-bold tracking-tight uppercase" style="color: white; font-size: 32px;"&gt;ENTER YOUR HEADLINE&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/main&gt;

    &lt;!-- Bottom: Controls --&gt;
    &lt;aside&gt;
        &lt;div class="aside-header mb-4 flex flex-wrap justify-between items-end gap-3"&gt;
            &lt;div&gt;
                &lt;h1 class="text-lg font-bold text-slate-900 tracking-tight"&gt;Poster Studio&lt;/h1&gt;
                &lt;p class="text-[10px] text-slate-500 uppercase font-bold tracking-widest"&gt;Custom Export Dimensions&lt;/p&gt;
            &lt;/div&gt;
            
            &lt;div class="flex flex-wrap items-center gap-2 bg-slate-100 p-2 rounded-xl"&gt;
                &lt;div class="flex flex-col"&gt;
                    &lt;label class="text-[8px] font-bold text-slate-400 uppercase ml-1"&gt;Quality / Width (px)&lt;/label&gt;
                    &lt;div class="flex items-center gap-1"&gt;
                        &lt;select id="export-mode" onchange="toggleQualityMode()" class="bg-white text-[10px] font-bold text-slate-600 outline-none px-2 py-1.5 rounded-lg border border-slate-200"&gt;
                            &lt;option value="scale"&gt;Multiplier&lt;/option&gt;
                            &lt;option value="pixels"&gt;Custom PX&lt;/option&gt;
                        &lt;/select&gt;
                        &lt;select id="export-quality" class="bg-white text-[10px] font-bold text-slate-600 outline-none px-2 py-1.5 rounded-lg border border-slate-200"&gt;
                            &lt;option value="1"&gt;1x&lt;/option&gt;
                            &lt;option value="2" selected&gt;2x&lt;/option&gt;
                            &lt;option value="4"&gt;4x&lt;/option&gt;
                        &lt;/select&gt;
                        &lt;input type="number" id="custom-px-width" value="1920" class="hidden w-20 bg-white text-[10px] font-bold text-slate-600 outline-none px-2 py-1.5 rounded-lg border border-slate-200"&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;button id="download-btn" onclick="downloadPoster()" class="px-5 py-2.5 bg-indigo-600 text-white text-xs font-bold rounded-lg hover:bg-indigo-700 shadow-md transition-all flex items-center gap-2 whitespace-nowrap self-end"&gt;
                    &lt;svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"&gt;&lt;/path&gt;&lt;polyline points="7 10 12 15 17 10"&gt;&lt;/polyline&gt;&lt;line x1="12" y1="15" x2="12" y2="3"&gt;&lt;/line&gt;&lt;/svg&gt;
                    Export
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Column 1: Layout &amp; Background --&gt;
        &lt;div class="space-y-4 mb-6 lg:mb-0"&gt;
            &lt;div&gt;
                &lt;label class="block text-[10px] font-bold text-slate-400 uppercase tracking-wider mb-2"&gt;1. Format&lt;/label&gt;
                &lt;div class="grid grid-cols-3 gap-2"&gt;
                    &lt;button onclick="setRatio('1:1')" class="ratio-btn px-2 py-2 border rounded-lg text-xs font-semibold" id="btn-ratio-1-1"&gt;1:1&lt;/button&gt;
                    &lt;button onclick="setRatio('16:9')" class="ratio-btn px-2 py-2 border rounded-lg text-xs font-semibold" id="btn-ratio-16-9"&gt;16:9&lt;/button&gt;
                    &lt;button onclick="setRatio('9:16')" class="ratio-btn px-2 py-2 border rounded-lg text-xs font-semibold" id="btn-ratio-9-16"&gt;9:16&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class="p-4 bg-slate-50 rounded-xl border border-slate-100"&gt;
                &lt;label class="block text-[10px] font-bold text-slate-400 uppercase tracking-wider mb-2"&gt;2. Background&lt;/label&gt;
                &lt;div class="file-input-wrapper mb-3"&gt;
                    &lt;div class="file-label-custom"&gt;
                        &lt;svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;rect x="3" y="3" width="18" height="18" rx="2" ry="2"/&gt;&lt;circle cx="8.5" cy="8.5" r="1.5"/&gt;&lt;polyline points="21 15 16 10 5 21"/&gt;&lt;/svg&gt;
                        &lt;span&gt;Change Photo&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type="file" id="bg-upload" accept="image/*"&gt;
                &lt;/div&gt;
                &lt;div class="flex items-center justify-between mb-1 px-1"&gt;
                    &lt;span class="text-[10px] font-bold text-slate-500 uppercase"&gt;Scale&lt;/span&gt;
                    &lt;span id="zoom-val" class="text-[10px] font-mono text-indigo-600"&gt;100%&lt;/span&gt;
                &lt;/div&gt;
                &lt;input type="range" id="zoom-slider" min="10" max="400" value="100" class="accent-indigo-600"&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Column 2: Typography --&gt;
        &lt;div class="space-y-4 mb-6 lg:mb-0"&gt;
            &lt;div class="p-4 bg-slate-900 rounded-xl text-white shadow-xl"&gt;
                &lt;label class="block text-[10px] font-bold uppercase tracking-wider text-slate-500 mb-2"&gt;3. Typography&lt;/label&gt;
                &lt;textarea id="post-text" class="w-full p-3 bg-white/5 border border-white/20 rounded-lg text-sm text-white mb-3 h-16 focus:border-indigo-400 outline-none resize-none"&gt;ENTER YOUR HEADLINE&lt;/textarea&gt;
                
                &lt;div class="flex items-center gap-4"&gt;
                    &lt;div class="flex-1"&gt;
                        &lt;div class="flex justify-between mb-1"&gt;
                            &lt;label class="text-[9px] font-bold text-slate-500 uppercase"&gt;Size&lt;/label&gt;
                        &lt;/div&gt;
                        &lt;input type="range" id="font-size-slider" min="12" max="150" value="32" class="accent-indigo-400"&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;label class="text-[9px] font-bold text-slate-500 mb-1 block"&gt;COLOR&lt;/label&gt;
                        &lt;input type="color" id="text-color" value="#ffffff" class="w-10 h-8 bg-transparent border-0 cursor-pointer"&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class="p-4 bg-slate-50 rounded-xl border border-slate-100"&gt;
                &lt;div class="flex justify-between items-center mb-2"&gt;
                    &lt;label class="block text-[10px] font-bold text-slate-400 uppercase tracking-wider"&gt;4. Vignette / Shadow&lt;/label&gt;
                    &lt;input type="color" id="vignette-color" value="#000000" class="w-6 h-6 bg-transparent border-0 cursor-pointer"&gt;
                &lt;/div&gt;
                &lt;div class="space-y-3"&gt;
                    &lt;div&gt;
                        &lt;label class="text-[9px] font-bold text-slate-500 uppercase mb-1 block"&gt;Coverage (Height)&lt;/label&gt;
                        &lt;input type="range" id="vignette-slider" min="0" max="100" value="35" class="accent-indigo-400"&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;label class="text-[9px] font-bold text-slate-500 uppercase mb-1 block"&gt;Density (Opacity)&lt;/label&gt;
                        &lt;input type="range" id="vignette-density" min="0" max="100" value="95" class="accent-indigo-400"&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Column 3: Branding --&gt;
        &lt;div class="space-y-4"&gt;
            &lt;div class="p-4 bg-white rounded-xl border border-slate-100"&gt;
                &lt;label class="block text-[10px] font-bold text-slate-400 uppercase tracking-wider mb-2"&gt;5. Identity&lt;/label&gt;
                &lt;div class="flex gap-2 mb-4"&gt;
                    &lt;div class="file-input-wrapper flex-1"&gt;
                        &lt;div class="file-label-custom py-2"&gt;
                            &lt;span class="text-[10px]"&gt;Logo&lt;/span&gt;
                        &lt;/div&gt;
                        &lt;input type="file" id="logo-upload" accept="image/*"&gt;
                    &lt;/div&gt;
                    &lt;div class="flex bg-slate-100 rounded-lg p-1"&gt;
                        &lt;button onclick="setLogoPos('top-left')" class="px-2 py-1 hover:bg-white rounded text-[10px] font-bold"&gt;L&lt;/button&gt;
                        &lt;button onclick="setLogoPos('top-center')" class="px-2 py-1 hover:bg-white rounded text-[10px] font-bold"&gt;C&lt;/button&gt;
                        &lt;button onclick="setLogoPos('top-right')" class="px-2 py-1 hover:bg-white rounded text-[10px] font-bold"&gt;R&lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;input type="text" id="brand-input" placeholder="© Copyright Text" class="w-full p-2 border rounded-lg text-xs mb-3 focus:ring-2 focus:ring-indigo-500 outline-none"&gt;
                
                &lt;div class="flex items-center gap-2"&gt;
                    &lt;button onclick="setBrandAlign('left')" class="flex-1 py-2 border text-[10px] font-bold rounded-lg hover:bg-indigo-50 transition-colors"&gt;LEFT&lt;/button&gt;
                    &lt;button onclick="setBrandAlign('center')" class="flex-1 py-2 border text-[10px] font-bold rounded-lg hover:bg-indigo-50 transition-colors"&gt;MID&lt;/button&gt;
                    &lt;button onclick="setBrandAlign('right')" class="flex-1 py-2 border text-[10px] font-bold rounded-lg hover:bg-indigo-50 transition-colors"&gt;RIGHT&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/aside&gt;

    &lt;script&gt;
        let isDragging = false;
        let startX, startY;
        let posX = 0, posY = 0;
        let zoom = 1;
        let currentRatio = '1:1';

        const canvasWrapper = document.getElementById('canvas-wrapper');
        const previewContainer = document.getElementById('preview-container');
        const bgImg = document.getElementById('bg-image');
        const bgUpload = document.getElementById('bg-upload');
        const logoImg = document.getElementById('logo-img');
        const logoUpload = document.getElementById('logo-upload');
        const brandInput = document.getElementById('brand-input');
        const copyrightDisplay = document.getElementById('copyright-display');
        const vignette = document.getElementById('vignette');
        const vSlider = document.getElementById('vignette-slider');
        const vDensity = document.getElementById('vignette-density');
        const vColor = document.getElementById('vignette-color');
        const postText = document.getElementById('post-text');
        const displayText = document.getElementById('display-text');
        const textColor = document.getElementById('text-color');
        const fontSizeSlider = document.getElementById('font-size-slider');
        const zoomSlider = document.getElementById('zoom-slider');
        const zoomValDisp = document.getElementById('zoom-val');
        const exportMode = document.getElementById('export-mode');
        const exportQuality = document.getElementById('export-quality');
        const customPxWidth = document.getElementById('custom-px-width');

        function toggleQualityMode() {
            if (exportMode.value === 'scale') {
                exportQuality.classList.remove('hidden');
                customPxWidth.classList.add('hidden');
            } else {
                exportQuality.classList.add('hidden');
                customPxWidth.classList.remove('hidden');
            }
        }

        function setRatio(ratioLabel) {
            currentRatio = ratioLabel;
            updateCanvasSize();
            
            document.querySelectorAll('.ratio-btn').forEach(btn =&gt; {
                btn.classList.remove('bg-indigo-600', 'text-white', 'border-indigo-600');
                btn.classList.add('border-slate-200', 'text-slate-600', 'bg-white');
            });
            
            const slug = ratioLabel.replace(':', '-');
            const activeBtn = document.getElementById(`btn-ratio-${slug}`);
            if (activeBtn) {
                activeBtn.classList.remove('border-slate-200', 'text-slate-600', 'bg-white');
                activeBtn.classList.add('bg-indigo-600', 'text-white', 'border-indigo-600');
            }
        }

        function updateCanvasSize() {
            const padding = 40;
            const maxWidth = previewContainer.clientWidth - padding;
            const maxHeight = previewContainer.clientHeight - padding;
            
            let [rW, rH] = currentRatio.split(':').map(Number);
            let targetW, targetH;

            if ((maxWidth / rW) * rH &lt;= maxHeight) {
                targetW = maxWidth;
                targetH = (maxWidth / rW) * rH;
            } else {
                targetH = maxHeight;
                targetW = (maxHeight / rH) * rW;
            }

            canvasWrapper.style.width = `${targetW}px`;
            canvasWrapper.style.height = `${targetH}px`;
            updateTransform();
        }

        window.addEventListener('resize', updateCanvasSize);

        bgUpload.addEventListener('change', (e) =&gt; {
            const file = e.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (f) =&gt; {
                    bgImg.src = f.target.result;
                    bgImg.style.display = 'block';
                    posX = 0; posY = 0; zoom = 1; zoomSlider.value = 100;
                    zoomValDisp.textContent = '100%';
                    updateTransform();
                };
                reader.readAsDataURL(file);
            }
        });

        zoomSlider.addEventListener('input', (e) =&gt; {
            zoom = e.target.value / 100;
            zoomValDisp.textContent = `${e.target.value}%`;
            updateTransform();
        });

        const startMove = (e) =&gt; {
            if (e.target !== canvasWrapper &amp;&amp; !canvasWrapper.contains(e.target)) return;
            isDragging = true;
            const clientX = e.touches ? e.touches[0].clientX : e.clientX;
            const clientY = e.touches ? e.touches[0].clientY : e.clientY;
            startX = clientX - posX;
            startY = clientY - posY;
        };

        const onMove = (e) =&gt; {
            if (!isDragging) return;
            const clientX = e.touches ? e.touches[0].clientX : e.clientX;
            const clientY = e.touches ? e.touches[0].clientY : e.clientY;
            posX = clientX - startX;
            posY = clientY - startY;
            updateTransform();
        };

        window.addEventListener('mousedown', startMove);
        window.addEventListener('mousemove', onMove);
        window.addEventListener('mouseup', () =&gt; isDragging = false);
        window.addEventListener('touchstart', startMove, {passive: false});
        window.addEventListener('touchmove', onMove, {passive: false});
        window.addEventListener('touchend', () =&gt; isDragging = false);

        function updateTransform() {
            bgImg.style.transform = `translate(${posX}px, ${posY}px) scale(${zoom})`;
        }

        logoUpload.addEventListener('change', (e) =&gt; {
            const file = e.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (f) =&gt; {
                    logoImg.src = f.target.result;
                    logoImg.classList.remove('hidden');
                };
                reader.readAsDataURL(file);
            }
        });

        function setLogoPos(pos) {
            logoImg.style.top = 'auto'; logoImg.style.bottom = 'auto';
            logoImg.style.left = 'auto'; logoImg.style.right = 'auto';
            logoImg.style.transform = 'none';
            switch(pos) {
                case 'top-left': logoImg.style.top = '0'; logoImg.style.left = '0'; break;
                case 'top-center': logoImg.style.top = '0'; logoImg.style.left = '50%'; logoImg.style.transform = 'translateX(-50%)'; break;
                case 'top-right': logoImg.style.top = '0'; logoImg.style.right = '0'; break;
            }
        }

        brandInput.addEventListener('input', (e) =&gt; {
            copyrightDisplay.textContent = e.target.value.toUpperCase() || '© BRAND NAME';
        });

        function setBrandAlign(align) {
            copyrightDisplay.style.left = 'auto';
            copyrightDisplay.style.right = 'auto';
            copyrightDisplay.style.transform = 'none';
            if (align === 'left') copyrightDisplay.style.left = '20px';
            else if (align === 'right') copyrightDisplay.style.right = '20px';
            else {
                copyrightDisplay.style.left = '50%';
                copyrightDisplay.style.transform = 'translateX(-50%)';
            }
        }

        function hexToRgb(hex) {
            var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
            return result ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}` : '0, 0, 0';
        }

        function updateVignette() {
            const height = vSlider.value;
            const density = vDensity.value / 100;
            const rgb = hexToRgb(vColor.value);
            vignette.style.height = `${height}%`;
            vignette.style.background = `linear-gradient(to top, rgba(${rgb}, ${density}) 0%, rgba(${rgb}, ${density * 0.4}) 50%, rgba(${rgb}, 0) 100%)`;
        }

        vSlider.addEventListener('input', updateVignette);
        vDensity.addEventListener('input', updateVignette);
        vColor.addEventListener('input', updateVignette);
        postText.addEventListener('input', (e) =&gt; displayText.textContent = e.target.value);
        textColor.addEventListener('input', (e) =&gt; displayText.style.color = e.target.value);
        fontSizeSlider.addEventListener('input', (e) =&gt; displayText.style.fontSize = `${e.target.value}px`);

        async function downloadPoster() {
            const btn = document.getElementById('download-btn');
            const originalText = btn.innerHTML;
            
            let scaleVal;
            if (exportMode.value === 'scale') {
                scaleVal = parseInt(exportQuality.value);
            } else {
                const desiredWidth = parseInt(customPxWidth.value) || 1920;
                const currentWidth = parseFloat(canvasWrapper.style.width);
                scaleVal = desiredWidth / currentWidth;
            }
            
            btn.innerHTML = `&lt;span class="animate-spin inline-block w-3 h-3 border-2 border-white border-t-transparent rounded-full mr-2"&gt;&lt;/span&gt; Processing...`;
            btn.disabled = true;
            
            try {
                const canvas = await html2canvas(canvasWrapper, {
                    useCORS: true,
                    scale: scaleVal, 
                    backgroundColor: "#000000",
                    logging: false
                });
                
                const link = document.createElement('a');
                link.download = `poster-${Date.now()}.png`;
                link.href = canvas.toDataURL('image/png', 1.0);
                link.click();
            } catch (err) {
                console.error('Export failed:', err);
            } finally {
                btn.innerHTML = originalText;
                btn.disabled = false;
            }
        }
        
        window.onload = () =&gt; {
            setRatio('1:1');
            updateVignette();
        };
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Facebook post generator </title><link>https://www.laxmannepal.com.np/2026/01/facebook-post-generator.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sat, 24 Jan 2026 04:31:10 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-7368932699373722563</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;SocialPoster - Custom Gradients &amp; Text Range&lt;/title&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"&gt;&lt;/script&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
    &lt;style&gt;
        body {
            font-family: 'Inter', sans-serif;
            background-color: #f1f5f9;
            color: #1e293b;
            margin: 0;
            padding: 0;
        }

        .tool-container {
            max-width: 1200px;
            margin: 0 auto;
            width: 100%;
            box-sizing: border-box;
        }

        #canvas-wrapper {
            display: flex;
            align-items: center;
            justify-content: center;
            width: 100%;
            min-height: 550px;
            background: #f8fafc;
            border-radius: 24px;
            padding: 20px;
            box-sizing: border-box;
            overflow: hidden;
        }

        #post-canvas {
            width: 500px;
            height: 500px;
            background: linear-gradient(135deg, #6366f1 0%, #a855f7 100%);
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 0;
            box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.2);
            overflow: hidden;
            position: relative;
            box-sizing: border-box;
            flex-shrink: 0;
            transform-origin: center center;
            transition: transform 0.2s ease;
        }

        .post-inner {
            background: #ffffff;
            color: #1e293b;
            width: 85%; 
            height: 85%;
            border-radius: 24px;
            padding: 32px;
            display: flex;
            flex-direction: column;
            box-shadow: 0 10px 25px rgba(0,0,0,0.1);
            box-sizing: border-box;
            position: relative;
            transition: all 0.3s ease;
            border: 1px solid transparent;
        }

        .glass-mode {
            background: rgba(255, 255, 255, 0.2) !important;
            backdrop-filter: blur(16px);
            -webkit-backdrop-filter: blur(16px);
            border: 1px solid rgba(255, 255, 255, 0.3) !important;
            box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.2) !important;
        }

        .glass-mode #display-text, 
        .glass-mode #display-name {
            color: #ffffff;
            text-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }
        
        .glass-mode #display-handle,
        .glass-mode #footer-name {
            color: rgba(255, 255, 255, 0.8) !important;
        }

        .glass-mode .border-t {
            border-color: rgba(255, 255, 255, 0.2) !important;
        }

        .profile-img-container {
            width: 60px;
            height: 60px;
            border-radius: 50%;
            overflow: hidden;
            background: #e2e8f0;
            border: 2px solid rgba(0,0,0,0.05);
            flex-shrink: 0;
        }

        .content-area {
            flex-grow: 1;
            display: flex;
            align-items: center;
            justify-content: center;
            text-align: center;
            width: 100%;
            overflow: hidden;
        }

        #display-text {
            word-wrap: break-word;
            overflow-wrap: break-word;
            word-break: break-word;
            white-space: pre-wrap;
            line-height: 1.3;
            font-weight: 700;
            max-width: 100%;
            margin: 0 auto;
        }

        .name-container {
            display: flex;
            align-items: center;
            gap: 6px;
            white-space: nowrap;
        }

        .blue-tick {
            display: inline-flex;
            vertical-align: middle;
            background-color: #1d9bf0;
            border-radius: 50%;
            width: 18px;
            height: 18px;
            justify-content: center;
            align-items: center;
            flex-shrink: 0;
        }

        .blue-tick svg {
            width: 11px;
            height: 11px;
            fill: white;
            display: block;
        }

        .switch {
            position: relative;
            display: inline-block;
            width: 44px;
            height: 24px;
        }
        .switch input { opacity: 0; width: 0; height: 0; }
        .slider {
            position: absolute;
            cursor: pointer;
            top: 0; left: 0; right: 0; bottom: 0;
            background-color: #cbd5e1;
            transition: .4s;
            border-radius: 24px;
        }
        .slider:before {
            position: absolute;
            content: "";
            height: 18px; width: 18px;
            left: 3px; bottom: 3px;
            background-color: white;
            transition: .4s;
            border-radius: 50%;
        }
        input:checked + .slider { background-color: #3b82f6; }
        input:checked + .slider:before { transform: translateX(20px); }

        input[type="range"] {
            accent-color: #2563eb;
        }

        /* Preset Styles */
        .preset-gradient {
            width: 40px;
            height: 40px;
            border-radius: 12px;
            cursor: pointer;
            border: 2px solid white;
            box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
            transition: transform 0.2s ease;
        }
        .preset-gradient:hover {
            transform: scale(1.1);
        }

        @media (max-width: 640px) {
            #post-canvas { transform: scale(0.65); margin: -80px 0; }
            #canvas-wrapper { min-height: 380px; padding: 10px; }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body class="min-h-screen p-4 md:p-8"&gt;

    &lt;div class="tool-container max-w-7xl mx-auto grid grid-cols-1 lg:grid-cols-2 gap-12 items-start"&gt;
        
        &lt;!-- Controls --&gt;
        &lt;div class="space-y-8 order-2 lg:order-1 pb-12"&gt;
            &lt;header&gt;
                &lt;h1 class="text-4xl font-extrabold text-slate-900 tracking-tight"&gt;
                    SocialPoster &lt;span class="text-blue-600"&gt;Pro&lt;/span&gt;
                &lt;/h1&gt;
                &lt;p class="text-slate-500 mt-2 font-medium"&gt;Design professional social graphics instantly.&lt;/p&gt;
            &lt;/header&gt;

            &lt;div class="bg-white p-8 rounded-3xl border border-slate-200 shadow-sm space-y-6"&gt;
                &lt;!-- Toggles --&gt;
                &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-4"&gt;
                    &lt;div class="flex items-center justify-between p-4 bg-blue-50 rounded-2xl"&gt;
                        &lt;p class="text-sm font-bold text-slate-900"&gt;Verified Badge&lt;/p&gt;
                        &lt;label class="switch"&gt;
                            &lt;input type="checkbox" id="verify-toggle" checked&gt;
                            &lt;span class="slider"&gt;&lt;/span&gt;
                        &lt;/label&gt;
                    &lt;/div&gt;
                    &lt;div class="flex items-center justify-between p-4 bg-purple-50 rounded-2xl"&gt;
                        &lt;p class="text-sm font-bold text-slate-900"&gt;Glassmorphism&lt;/p&gt;
                        &lt;label class="switch"&gt;
                            &lt;input type="checkbox" id="glass-toggle"&gt;
                            &lt;span class="slider"&gt;&lt;/span&gt;
                        &lt;/label&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- Custom Styling Sliders --&gt;
                &lt;div class="p-4 bg-slate-50 rounded-2xl border border-slate-100"&gt;
                    &lt;div class="flex justify-between items-center mb-2"&gt;
                        &lt;div class="flex flex-col"&gt;
                            &lt;label class="text-xs font-bold text-slate-500 uppercase tracking-wider"&gt;Text Size (4px - 64px)&lt;/label&gt;
                            &lt;span class="text-[10px] text-slate-400"&gt;Set to 0 for Auto-Size&lt;/span&gt;
                        &lt;/div&gt;
                        &lt;span id="font-val" class="text-xs font-bold text-blue-600"&gt;15px&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;input type="range" id="font-slider" min="0" max="64" value="15" step="1" class="w-full h-1.5 bg-slate-200 rounded-lg appearance-none cursor-pointer"&gt;
                &lt;/div&gt;

                &lt;!-- Profile Pic &amp; Inner Tint --&gt;
                &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-4"&gt;
                    &lt;div&gt;
                        &lt;label class="block text-sm font-semibold text-slate-700 mb-2"&gt;Profile Picture&lt;/label&gt;
                        &lt;input type="file" id="profile-upload" accept="image/*" class="block w-full text-sm text-slate-500
                            file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0
                            file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100 cursor-pointer"&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;label class="block text-sm font-semibold text-slate-700 mb-2"&gt;Inner Card Tint&lt;/label&gt;
                        &lt;div class="flex items-center gap-3 bg-slate-50 p-2 rounded-xl border border-slate-200"&gt;
                            &lt;input type="color" id="mockup-color" value="#ffffff" class="w-8 h-8 rounded-full border-none cursor-pointer p-0 overflow-hidden"&gt;
                            &lt;span class="text-xs font-bold text-slate-500"&gt;Manual Tint&lt;/span&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- Name &amp; Username --&gt;
                &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-4"&gt;
                    &lt;div&gt;
                        &lt;label class="block text-sm font-semibold text-slate-700 mb-2"&gt;Full Name&lt;/label&gt;
                        &lt;input type="text" id="input-name" value="Laxman Nepal" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-4 py-2 outline-none"&gt;
                    &lt;/div&gt;
                    &lt;div&gt;
                        &lt;label class="block text-sm font-semibold text-slate-700 mb-2"&gt;Username&lt;/label&gt;
                        &lt;input type="text" id="input-handle" value="@laxmannepal" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-4 py-2 outline-none"&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div&gt;
                    &lt;label class="block text-sm font-semibold text-slate-700 mb-2"&gt;Post Content&lt;/label&gt;
                    &lt;textarea id="input-content" rows="3" class="w-full bg-slate-50 border border-slate-200 rounded-xl px-4 py-3 outline-none resize-none"&gt;You Are Awesome !&lt;/textarea&gt;
                &lt;/div&gt;

                &lt;!-- Background Presets &amp; Custom Background Color --&gt;
                &lt;div&gt;
                    &lt;div class="flex flex-col gap-4 mb-3"&gt;
                        &lt;div class="flex justify-between items-center"&gt;
                            &lt;label class="text-sm font-semibold text-slate-700"&gt;Background Design&lt;/label&gt;
                            &lt;span class="text-[10px] font-bold text-slate-400 uppercase"&gt;Custom Gradient&lt;/span&gt;
                        &lt;/div&gt;
                        
                        &lt;!-- Custom Gradient Picker Row --&gt;
                        &lt;div class="flex items-center gap-4 bg-slate-50 p-3 rounded-2xl border border-slate-200"&gt;
                            &lt;div class="flex items-center gap-2"&gt;
                                &lt;input type="color" id="bg-color-1" value="#6366f1" class="w-8 h-8 rounded-lg border-none cursor-pointer p-0"&gt;
                                &lt;span class="text-[10px] font-bold text-slate-500"&gt;Start&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="flex items-center gap-2"&gt;
                                &lt;input type="color" id="bg-color-2" value="#a855f7" class="w-8 h-8 rounded-lg border-none cursor-pointer p-0"&gt;
                                &lt;span class="text-[10px] font-bold text-slate-500"&gt;End&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="flex-grow flex justify-end"&gt;
                                &lt;div id="gradient-preview" class="w-12 h-6 rounded-md border border-slate-300" style="background: linear-gradient(135deg, #6366f1, #a855f7)"&gt;&lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;!-- Updated Presets (Including your 5 custom ones) --&gt;
                    &lt;div class="flex flex-wrap gap-3"&gt;
                        &lt;div onclick="applyPreset('#6366f1', '#a855f7')" class="preset-gradient" style="background: linear-gradient(135deg, #6366f1, #a855f7)"&gt;&lt;/div&gt;
                        &lt;div onclick="applyPreset('#00c6ff', '#0072ff')" class="preset-gradient" style="background: linear-gradient(135deg, #00c6ff, #0072ff)"&gt;&lt;/div&gt;
                        &lt;div onclick="applyPreset('#f9d423', '#ff4e50')" class="preset-gradient" style="background: linear-gradient(135deg, #f9d423, #ff4e50)"&gt;&lt;/div&gt;
                        &lt;div onclick="applyPreset('#11998e', '#38ef7d')" class="preset-gradient" style="background: linear-gradient(135deg, #11998e, #38ef7d)"&gt;&lt;/div&gt;
                        &lt;div onclick="applyPreset('#8e2de2', '#4a00e0')" class="preset-gradient" style="background: linear-gradient(135deg, #8e2de2, #4a00e0)"&gt;&lt;/div&gt;
                        &lt;div onclick="applyPreset('#ee9ca7', '#ffdde1')" class="preset-gradient" style="background: linear-gradient(135deg, #ee9ca7, #ffdde1)"&gt;&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;button id="btn-download" class="w-full bg-blue-600 hover:bg-blue-700 text-white py-4 rounded-2xl font-bold shadow-lg transition-all flex items-center justify-center gap-2 text-lg"&gt;
                    &lt;svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"&gt;&lt;/path&gt;&lt;/svg&gt;
                    Download HD Image
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Preview --&gt;
        &lt;div class="sticky top-8 flex flex-col items-center order-1 lg:order-2 overflow-hidden"&gt;
            &lt;h2 class="text-sm font-bold uppercase tracking-widest text-slate-400 mb-4"&gt;Live Preview&lt;/h2&gt;
            &lt;div id="canvas-wrapper"&gt;
                &lt;div id="post-canvas"&gt;
                    &lt;div id="inner-card" class="post-inner"&gt;
                        &lt;div class="flex items-center gap-4"&gt;
                            &lt;div class="profile-img-container"&gt;
                                &lt;img id="display-pfp" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGHaSO1wWf8K8GPmA-JDZXvu2HBTYFGamQLlYogAvtVt3ZZScH3EoFi0en9SD85HREgsCrMrJWUfIm3x05xyREDab8BOEcU6kYIZfj00zYURGxpsXUrXlEVj0FPVnwGQlQBI-NqycN3kIqfxHv64EXOxS7NSlUPtj7BdHrx0at3kqdMYJO8zCvB2SIfGQD/s1600/picofme%20%282%29.png" crossorigin="anonymous" class="w-full h-full object-cover"&gt;
                            &lt;/div&gt;
                            &lt;div class="flex flex-col"&gt;
                                &lt;div class="name-container"&gt;
                                    &lt;span id="display-name" class="font-bold text-lg leading-none"&gt;Laxman Nepal&lt;/span&gt;
                                    &lt;div id="blue-tick-box" class="blue-tick"&gt;
                                        &lt;svg viewBox="0 0 24 24"&gt;&lt;path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"&gt;&lt;/path&gt;&lt;/svg&gt;
                                    &lt;/div&gt;
                                &lt;/div&gt;
                                &lt;span id="display-handle" class="text-slate-500 text-sm mt-1"&gt;@laxmannepal&lt;/span&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                        &lt;div class="content-area"&gt;
                            &lt;p id="display-text"&gt;You Are Awesome !&lt;/p&gt;
                        &lt;/div&gt;
                        &lt;div class="pt-4 border-t border-slate-100 flex items-center justify-between opacity-50"&gt;
                            &lt;span class="text-[10px] font-bold tracking-widest uppercase" id="footer-name"&gt;Laxman Nepal&lt;/span&gt;
                            &lt;svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/&gt;&lt;/svg&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        const pfpUpload = document.getElementById('profile-upload');
        const inputName = document.getElementById('input-name');
        const inputHandle = document.getElementById('input-handle');
        const inputContent = document.getElementById('input-content');
        const verifyToggle = document.getElementById('verify-toggle');
        const glassToggle = document.getElementById('glass-toggle');
        const fontSlider = document.getElementById('font-slider');
        const fontValText = document.getElementById('font-val');
        
        const bgColor1 = document.getElementById('bg-color-1');
        const bgColor2 = document.getElementById('bg-color-2');
        const gradPreview = document.getElementById('gradient-preview');
        
        const mockupColorPicker = document.getElementById('mockup-color');
        
        const canvas = document.getElementById('post-canvas');
        const innerCard = document.getElementById('inner-card');
        const footerName = document.getElementById('footer-name');
        const displayName = document.getElementById('display-name');
        const displayHandle = document.getElementById('display-handle');
        const displayText = document.getElementById('display-text');
        const displayPfp = document.getElementById('display-pfp');
        const blueTickBox = document.getElementById('blue-tick-box');
        const btnDownload = document.getElementById('btn-download');

        function applyPreset(c1, c2) {
            bgColor1.value = c1;
            bgColor2.value = c2;
            updateGradient();
        }

        function updateGradient() {
            const grad = `linear-gradient(135deg, ${bgColor1.value} 0%, ${bgColor2.value} 100%)`;
            canvas.style.background = grad;
            gradPreview.style.background = grad;
        }

        bgColor1.addEventListener('input', updateGradient);
        bgColor2.addEventListener('input', updateGradient);

        function updatePreview() {
            displayName.innerText = inputName.value || "Your Name";
            displayHandle.innerText = inputHandle.value || "@username";
            displayText.innerText = inputContent.value || "Content here...";
            footerName.innerText = inputName.value || "Your Name";
            blueTickBox.style.display = verifyToggle.checked ? 'inline-flex' : 'none';

            if (glassToggle.checked) {
                innerCard.classList.add('glass-mode');
                innerCard.style.backgroundColor = ''; 
            } else {
                innerCard.classList.remove('glass-mode');
                innerCard.style.backgroundColor = mockupColorPicker.value;
            }

            const sliderVal = parseInt(fontSlider.value);
            if (sliderVal === 0) {
                const length = displayText.innerText.length;
                let autoSize = 42;
                if (length &gt; 150) autoSize = 18;
                else if (length &gt; 80) autoSize = 24;
                else if (length &gt; 40) autoSize = 32;
                displayText.style.fontSize = autoSize + "px";
                fontValText.innerText = "Auto";
            } else {
                displayText.style.fontSize = sliderVal + "px";
                fontValText.innerText = sliderVal + "px";
            }
        }

        pfpUpload.addEventListener('change', (e) =&gt; {
            const file = e.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (event) =&gt; { displayPfp.src = event.target.result; };
                reader.readAsDataURL(file);
            }
        });

        [inputName, inputHandle, inputContent, verifyToggle, glassToggle, fontSlider, mockupColorPicker].forEach(el =&gt; {
            el.addEventListener('input', updatePreview);
        });

        btnDownload.addEventListener('click', () =&gt; {
            btnDownload.innerText = "Processing...";
            btnDownload.disabled = true;
            const originalTransform = canvas.style.transform;
            canvas.style.transform = 'none';

            setTimeout(() =&gt; {
                html2canvas(canvas, {
                    useCORS: true,
                    scale: 3,
                    backgroundColor: null,
                    width: 500,
                    height: 500
                }).then(result =&gt; {
                    const link = document.createElement('a');
                    link.download = `SocialPost_${Date.now()}.png`;
                    link.href = result.toDataURL('image/png', 1.0);
                    link.click();
                    canvas.style.transform = originalTransform;
                    btnDownload.innerText = "Download HD Image";
                    btnDownload.disabled = false;
                });
            }, 100);
        });

        updateGradient();
        updatePreview();
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGHaSO1wWf8K8GPmA-JDZXvu2HBTYFGamQLlYogAvtVt3ZZScH3EoFi0en9SD85HREgsCrMrJWUfIm3x05xyREDab8BOEcU6kYIZfj00zYURGxpsXUrXlEVj0FPVnwGQlQBI-NqycN3kIqfxHv64EXOxS7NSlUPtj7BdHrx0at3kqdMYJO8zCvB2SIfGQD/s72-c/picofme%20%282%29.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pinterest Image and Video Downloader</title><link>https://www.laxmannepal.com.np/2026/01/pinterest-image-and-video-downloader.html</link><category>Download</category><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Fri, 23 Jan 2026 04:19:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-3658095591461209320</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;!-- SEO Meta Tags --&gt;
    &lt;title&gt;PinDL - Pinterest Video Downloader | Download 1080p, 4K &amp; Images&lt;/title&gt;
    &lt;meta name="description" content="The best Pinterest Video Downloader and Image Downloader. Save Pinterest videos in 1080p, 4K, and HD without watermark. Works on iPhone, Android, and PC. Fast, free, and online."&gt;
    &lt;meta name="keywords" content="pinterest downloader, pinterest downloader reddit, pinterest downloader extension, pinterest downloader for iphone, pinterest downloader.io, pinterest downloader savepin, pinterest downloader 1080p, pinterest downloader plugin, pinterest downloader telegram bot, pinterest downloader pingrab, pinterest downloader without watermark, pinterest downloader free, pinterest downloader hd, pinterest downloader app, pinterest downloader online, pinterest downloader image, pinterest downloader website, pinterest downloader apk, pinterest downloader app apk, pinterest downloader ai, pinterest downloader 4k, pinterest downloader 2025, pinterest video downloader, pinterest image downloader"&gt;
    
    &lt;!-- Open Graph / Facebook --&gt;
    &lt;meta property="og:type" content="website"&gt;
    &lt;meta property="og:title" content="PinDL - Ultimate Pinterest Video &amp; Image Downloader"&gt;
    &lt;meta property="og:description" content="Download Pinterest videos and images in high quality (1080p/4K) for free. No watermark, fast and secure."&gt;
    &lt;meta property="og:image" content="https://images.unsplash.com/photo-1611162617213-7d7a39e9b1d7?q=80&amp;w=1000&amp;auto=format&amp;fit=crop"&gt;

    &lt;!-- Tailwind CSS CDN --&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800&amp;display=swap" rel="stylesheet"&gt;
    
    &lt;style&gt;
        /* Blogger Compatibility: Resetting potential conflicts */
        #pindl-app-container {
            font-family: 'Poppins', sans-serif !important;
            all: initial; /* Isolated reset */
            font-family: 'Poppins', sans-serif;
            display: block;
            background: #ffffff;
        }
        
        #pindl-app-container .spinner {
            border: 3px solid rgba(230, 0, 35, 0.1);
            border-top: 3px solid #e60023;
            border-radius: 50%;
            width: 20px;
            height: 20px;
            animation: pindl-spin 0.8s linear infinite;
        }

        @keyframes pindl-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
        
        #pindl-app-container .hidden { display: none; }
        
        .blogger-pindl-wrapper {
            width: 100%;
            margin: 0 auto;
            max-width: 1000px;
            background: #ffffff;
        }

        #pindl-app-container video {
            max-width: 100%;
            height: auto;
            display: block;
            margin: 0 auto;
        }

        .pindl-input-group {
            border: 2px solid #f3f4f6;
            transition: border-color 0.3s ease;
        }
        .pindl-input-group:focus-within {
            border-color: #e60023;
        }

        /* Progress Bar Styles */
        .progress-container {
            width: 100%;
            background-color: #f3f4f6;
            border-radius: 999px;
            overflow: hidden;
            height: 12px;
            margin-top: 10px;
        }
        .progress-bar-fill {
            height: 100%;
            background-color: #e60023;
            width: 0%;
            transition: width 0.3s ease;
        }
        
        /* Loading Animation for Finding Media */
        @keyframes loading-stripes {
            from { background-position: 40px 0; }
            to { background-position: 0 0; }
        }
        .animate-stripes {
            background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
            background-size: 40px 40px;
            animation: loading-stripes 1s linear infinite;
        }

        /* SEO Post Styles */
        .seo-content {
            font-family: 'Poppins', sans-serif;
            color: #374151;
            line-height: 1.6;
        }
        .seo-content h2 {
            color: #111827;
            font-weight: 700;
            font-size: 1.5rem;
            margin-top: 2rem;
            margin-bottom: 1rem;
        }
        .seo-content p {
            margin-bottom: 1rem;
        }
        .seo-content ul {
            list-style-type: disc;
            padding-left: 1.5rem;
            margin-bottom: 1rem;
        }
        .seo-content li {
            margin-bottom: 0.5rem;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id="pindl-app-container"&gt;
    &lt;div class="blogger-pindl-wrapper"&gt;
        
        &lt;!-- Main Tool Area --&gt;
        &lt;section class="py-8 md:py-12 px-4 text-center"&gt;
            &lt;h1 class="text-3xl md:text-4xl font-extrabold mb-3 tracking-tight text-gray-900"&gt;Pinterest Video Downloader&lt;/h1&gt;
            &lt;p class="text-base opacity-70 mb-8 max-w-xl mx-auto font-light text-gray-600"&gt;Fast and high-quality Pinterest media saver - Download 1080p &amp; 4K.&lt;/p&gt;
            
            &lt;div class="max-w-2xl mx-auto"&gt;
                &lt;form id="downloadForm" class="flex flex-col md:flex-row gap-2 md:gap-0 rounded-2xl overflow-hidden shadow-sm pindl-input-group bg-gray-50 p-1.5"&gt;
                    &lt;input type="url" id="videoUrl" placeholder="Paste Pinterest link here..." required
                        class="flex-grow bg-transparent border-none px-4 py-3 text-gray-800 placeholder:text-gray-400 focus:ring-0 text-base outline-none"&gt;
                    &lt;button type="submit" id="submitBtn"
                        class="bg-[#e60023] text-white font-bold px-8 py-3 flex items-center justify-center gap-2 hover:bg-[#c0001d] transition-all rounded-xl md:rounded-l-none"&gt;
                        &lt;span id="btnText"&gt;Find Media&lt;/span&gt;
                        &lt;div id="btnLoader" class="spinner hidden"&gt;&lt;/div&gt;
                    &lt;/button&gt;
                &lt;/form&gt;

                &lt;!-- Finding Media Progress Bar --&gt;
                &lt;div id="searchProgressSection" class="mt-6 hidden"&gt;
                    &lt;div class="flex justify-between text-xs font-bold text-gray-500 mb-1"&gt;
                        &lt;span id="searchStatusText"&gt;Searching Pinterest...&lt;/span&gt;
                        &lt;span id="searchPercent"&gt;0%&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="progress-container"&gt;
                        &lt;div id="searchProgressBar" class="progress-bar-fill animate-stripes"&gt;&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/section&gt;

        &lt;!-- Status/Error Area --&gt;
        &lt;div id="errorMessage" class="container mx-auto px-4 mt-2 hidden"&gt;
            &lt;div class="max-w-xl mx-auto bg-red-50 border-l-4 border-red-500 text-red-700 px-4 py-3 rounded shadow-sm text-sm"&gt;
                &lt;p id="errorText"&gt;Unable to fetch media. Try another link.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Result Section --&gt;
        &lt;section id="resultSection" class="container mx-auto px-4 py-8 hidden"&gt;
            &lt;div class="max-w-4xl mx-auto bg-white rounded-2xl shadow-xl overflow-hidden border border-gray-100"&gt;
                &lt;div class="p-5 bg-gray-50 border-b flex items-center justify-between"&gt;
                    &lt;h2 class="font-bold text-gray-800"&gt;Media Ready&lt;/h2&gt;
                    &lt;span id="mediaTypeLabel" class="bg-[#e60023] text-white px-3 py-1 rounded-full text-[10px] font-black uppercase tracking-wider"&gt;VIDEO&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="flex flex-col md:flex-row"&gt;
                    &lt;div id="mediaPreview" class="md:w-1/2 bg-gray-900 flex items-center justify-center min-h-[300px]"&gt;
                        &lt;!-- Media element injected here --&gt;
                    &lt;/div&gt;
                    &lt;div class="md:w-1/2 p-6 flex flex-col justify-center"&gt;
                        &lt;p id="mediaTitle" class="text-md font-bold text-gray-800 mb-6 line-clamp-2"&gt;Pinterest Media&lt;/p&gt;
                        
                        &lt;!-- File Download Progress Section --&gt;
                        &lt;div id="processingSection" class="mb-6 hidden"&gt;
                            &lt;div class="flex justify-between text-xs font-bold text-gray-500 mb-1"&gt;
                                &lt;span&gt;Downloading file...&lt;/span&gt;
                                &lt;span id="progressPercent"&gt;0%&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;div class="progress-container"&gt;
                                &lt;div id="progressBar" class="progress-bar-fill"&gt;&lt;/div&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;

                        &lt;div class="space-y-3"&gt;
                            &lt;button id="directDownloadBtn" 
                                class="w-full bg-[#e60023] text-white py-4 rounded-xl font-bold flex items-center justify-center gap-2 hover:opacity-90 transition-all shadow-md"&gt;
                                &lt;svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor"&gt;
                                    &lt;path fill-rule="evenodd" d="M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clip-rule="evenodd" /&gt;
                                &lt;/svg&gt;
                                Direct Download
                            &lt;/button&gt;
                            &lt;button id="downloadBtn" 
                                class="w-full bg-gray-800 text-white py-3 rounded-xl font-bold flex items-center justify-center gap-2 hover:opacity-90 transition-all text-sm"&gt;
                                Open in New Tab
                            &lt;/button&gt;
                            &lt;button id="copyBtn" class="w-full py-3 text-gray-500 font-bold hover:bg-gray-50 rounded-xl border border-gray-200 transition-all text-sm"&gt;
                                Copy Link
                            &lt;/button&gt;
                        &lt;/div&gt;
                        &lt;p class="mt-4 text-[10px] text-gray-400 text-center uppercase tracking-widest"&gt;Safe &amp; Secure Download&lt;/p&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/section&gt;

        &lt;!-- SEO Content Post Section --&gt;
        &lt;section class="container mx-auto px-4 py-12 seo-content border-t border-gray-100"&gt;
            &lt;div class="max-w-3xl mx-auto"&gt;
                &lt;h2 class="text-2xl md:text-3xl"&gt;The Best Pinterest Video Downloader for 2025&lt;/h2&gt;
                &lt;p&gt;Are you looking for an easy way to save your favorite creative ideas? Our &lt;strong&gt;Pinterest Video Downloader&lt;/strong&gt; and &lt;strong&gt;Pinterest Image Downloader&lt;/strong&gt; tool is the top choice on &lt;strong&gt;Reddit&lt;/strong&gt; and beyond. Whether you need a &lt;strong&gt;Pinterest downloader for iPhone&lt;/strong&gt;, Android, or Desktop, we have you covered. Save high-quality videos and images in just a few clicks.&lt;/p&gt;
                
                &lt;h3&gt;How to use PinDL Online:&lt;/h3&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Open Pinterest and find the video, reel, or story you want to save.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Copy the URL of the Pin (click the share button and select 'Copy Link').&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Paste the link into our &lt;strong&gt;Pinterest downloader website&lt;/strong&gt; search box.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Click &lt;strong&gt;"Find Media"&lt;/strong&gt; and watch the real-time progress.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Click &lt;strong&gt;"Direct Download"&lt;/strong&gt; for a fast &lt;strong&gt;1080p or 4K&lt;/strong&gt; download without watermark.&lt;/li&gt;
                &lt;/ul&gt;

                &lt;h2&gt;Pinterest Image Downloader 4K &amp; HD Quality&lt;/h2&gt;
                &lt;p&gt;Don't settle for low-resolution screenshots. Our &lt;strong&gt;Pinterest image downloader&lt;/strong&gt; fetches the original source file. It is widely considered the best &lt;strong&gt;Pinterest downloader online&lt;/strong&gt; for photographers and designers looking for &lt;strong&gt;high-resolution 8K or 4K pictures&lt;/strong&gt;. Just paste the link and save the original quality instantly.&lt;/p&gt;

                &lt;h2&gt;Download Pinterest Videos Without Watermark&lt;/h2&gt;
                &lt;p&gt;Most tools leave annoying logos, but our &lt;strong&gt;Pinterest video downloader without watermark&lt;/strong&gt; keeps your files clean. It works perfectly as a &lt;strong&gt;Pinterest downloader for Android apk&lt;/strong&gt; or via any mobile browser. With our &lt;strong&gt;direct download&lt;/strong&gt; feature and processing bar, you get a premium experience for free.&lt;/p&gt;

                &lt;h2&gt;Why Choose PinDL?&lt;/h2&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;strong&gt;Pinterest Downloader 1080p:&lt;/strong&gt; Get the highest crystal clear quality available.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Safe and Secure:&lt;/strong&gt; No login required, unlike many &lt;strong&gt;Pinterest downloader plugin&lt;/strong&gt; or &lt;strong&gt;extension&lt;/strong&gt; options.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Multi-Device:&lt;/strong&gt; Best &lt;strong&gt;Pinterest downloader for Mac&lt;/strong&gt;, Windows, and mobile browsers.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Fastest Speed:&lt;/strong&gt; Optimized to work better than any &lt;strong&gt;Pinterest downloader telegram bot&lt;/strong&gt; or &lt;strong&gt;pingrab&lt;/strong&gt;.&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Free Forever:&lt;/strong&gt; A truly &lt;strong&gt;free pinterest downloader&lt;/strong&gt; with no hidden costs.&lt;/li&gt;
                &lt;/ul&gt;

                &lt;p class="text-sm italic text-gray-500 mt-8"&gt;Note: Always respect intellectual property. This &lt;strong&gt;Pinterest media downloader&lt;/strong&gt; is intended for personal use and offline viewing. Support the original creators whenever possible.&lt;/p&gt;
                
                &lt;div class="mt-10 p-4 bg-gray-50 rounded-lg text-xs text-gray-400 grid grid-cols-2 md:grid-cols-3 gap-2"&gt;
                    &lt;span&gt;pinterest downloader reddit&lt;/span&gt;
                    &lt;span&gt;pinterest downloader .io&lt;/span&gt;
                    &lt;span&gt;pinterest downloader savepin&lt;/span&gt;
                    &lt;span&gt;pinterest downloader for pc&lt;/span&gt;
                    &lt;span&gt;pinterest downloader extension chrome&lt;/span&gt;
                    &lt;span&gt;pinterest video downloader 2025&lt;/span&gt;
                    &lt;span&gt;pinterest downloader without login&lt;/span&gt;
                    &lt;span&gt;pinterest downloader hd 1080p&lt;/span&gt;
                    &lt;span&gt;pinterest downloader apk download&lt;/span&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/section&gt;
        
    &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
    (function() {
        const form = document.getElementById('downloadForm');
        const urlInput = document.getElementById('videoUrl');
        const submitBtn = document.getElementById('submitBtn');
        const btnText = document.getElementById('btnText');
        const btnLoader = document.getElementById('btnLoader');
        const resultSection = document.getElementById('resultSection');
        const errorMessage = document.getElementById('errorMessage');
        const mediaPreview = document.getElementById('mediaPreview');
        const mediaTitle = document.getElementById('mediaTitle');
        const mediaTypeLabel = document.getElementById('mediaTypeLabel');
        const downloadBtn = document.getElementById('downloadBtn');
        const directDownloadBtn = document.getElementById('directDownloadBtn');
        const copyBtn = document.getElementById('copyBtn');
        
        // Search Progress
        const searchProgressSection = document.getElementById('searchProgressSection');
        const searchProgressBar = document.getElementById('searchProgressBar');
        const searchPercent = document.getElementById('searchPercent');
        const searchStatusText = document.getElementById('searchStatusText');

        // File Download Progress
        const processingSection = document.getElementById('processingSection');
        const progressBar = document.getElementById('progressBar');
        const progressPercent = document.getElementById('progressPercent');

        function updateSearchProgress(percent, text) {
            searchProgressBar.style.width = percent + '%';
            searchPercent.innerText = percent + '%';
            if (text) searchStatusText.innerText = text;
        }

        async function fetchWithRetry(url) {
            updateSearchProgress(20, "Connecting to Pinterest...");
            try {
                const res = await fetch(`https://api.allorigins.win/get?url=${encodeURIComponent(url)}&amp;t=${Date.now()}`);
                if (res.ok) {
                    updateSearchProgress(60, "Extracting media info...");
                    const data = await res.json();
                    return data.contents;
                }
            } catch (e) { console.warn("Proxy 1 failed"); }

            updateSearchProgress(40, "Retrying via fallback...");
            try {
                const res = await fetch(`https://corsproxy.io/?${encodeURIComponent(url)}`);
                if (res.ok) {
                    updateSearchProgress(70, "Extracting media info...");
                    return await res.text();
                }
            } catch (e) { console.error("All proxies failed."); }
            throw new Error('Connection failed');
        }

        form.addEventListener('submit', async (e) =&gt; {
            e.preventDefault();
            const url = urlInput.value.trim();
            if (!url.includes('pinterest.com') &amp;&amp; !url.includes('pin.it')) {
                showError("Invalid Pinterest URL.");
                return;
            }

            setLoading(true);
            updateSearchProgress(10, "Starting search...");

            try {
                const html = await fetchWithRetry(url);
                const parser = new DOMParser();
                const doc = parser.parseFromString(html, 'text/html');

                let videoUrl = doc.querySelector('meta[property="og:video:secure_url"]')?.content || 
                               doc.querySelector('meta[property="og:video:url"]')?.content;

                let imageUrl = doc.querySelector('meta[property="og:image"]')?.content;
                if (imageUrl) imageUrl = imageUrl.replace(/736x|236x|564x/, 'originals');

                let title = doc.querySelector('meta[property="og:title"]')?.content || 
                            doc.querySelector('title')?.innerText || 
                            'Pinterest Content';

                if (!videoUrl) {
                    updateSearchProgress(85, "Deep scanning for video...");
                    const scripts = Array.from(doc.querySelectorAll('script'));
                    for (const s of scripts) {
                        if (s.innerText.includes('video_list')) {
                            const match = s.innerText.match(/"url":"(https:[^"]+?\.mp4)"/);
                            if (match) {
                                videoUrl = match[1].replace(/\\u002F/g, '/');
                                break;
                            }
                        }
                    }
                }

                if (videoUrl || imageUrl) {
                    updateSearchProgress(100, "Done!");
                    setTimeout(() =&gt; {
                        showResult(videoUrl, imageUrl, title);
                        searchProgressSection.classList.add('hidden');
                    }, 500);
                } else {
                    throw new Error('No media found');
                }
            } catch (err) {
                showError("Error fetching media. Check the link.");
                searchProgressSection.classList.add('hidden');
            } finally {
                setLoading(false);
            }
        });

        function setLoading(isLoading) {
            if (isLoading) {
                btnText.classList.add('hidden');
                btnLoader.classList.remove('hidden');
                submitBtn.disabled = true;
                resultSection.classList.add('hidden');
                errorMessage.classList.add('hidden');
                processingSection.classList.add('hidden');
                searchProgressSection.classList.remove('hidden');
                updateSearchProgress(0);
            } else {
                btnText.classList.remove('hidden');
                btnLoader.classList.add('hidden');
                submitBtn.disabled = false;
            }
        }

        async function downloadFile(url, filename) {
            processingSection.classList.remove('hidden');
            directDownloadBtn.disabled = true;
            directDownloadBtn.style.opacity = "0.5";
            progressBar.style.width = '0%';
            progressPercent.innerText = '0%';

            try {
                const proxyUrl = `https://corsproxy.io/?${encodeURIComponent(url)}`;
                const response = await fetch(proxyUrl);
                
                if (!response.ok) throw new Error('Download failed');

                const contentLength = response.headers.get('content-length');
                const total = parseInt(contentLength, 10);
                
                if (!contentLength) {
                    window.open(url, '_blank');
                    processingSection.classList.add('hidden');
                    return;
                }

                const reader = response.body.getReader();
                let loaded = 0;
                const chunks = [];

                while(true) {
                    const {done, value} = await reader.read();
                    if (done) break;
                    chunks.push(value);
                    loaded += value.length;
                    
                    const percent = Math.round((loaded / total) * 100);
                    progressBar.style.width = percent + '%';
                    progressPercent.innerText = percent + '%';
                }

                const blob = new Blob(chunks);
                const blobUrl = URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = blobUrl;
                a.download = filename || 'pinterest_download';
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                URL.revokeObjectURL(blobUrl);

            } catch (err) {
                console.error(err);
                window.open(url, '_blank');
            } finally {
                directDownloadBtn.disabled = false;
                directDownloadBtn.style.opacity = "1";
                setTimeout(() =&gt; processingSection.classList.add('hidden'), 2000);
            }
        }

        function showResult(videoUrl, imageUrl, title) {
            mediaPreview.innerHTML = '';
            mediaTitle.innerText = title;
            let downloadLink = videoUrl || imageUrl;

            if (videoUrl) {
                mediaTypeLabel.innerText = 'VIDEO';
                const video = document.createElement('video');
                video.src = videoUrl;
                video.controls = true;
                video.className = 'max-h-[450px] w-full';
                mediaPreview.appendChild(video);
            } else {
                mediaTypeLabel.innerText = 'IMAGE';
                const img = document.createElement('img');
                img.src = imageUrl;
                img.className = 'max-h-[450px] w-auto object-contain';
                mediaPreview.appendChild(img);
            }

            resultSection.classList.remove('hidden');
            setTimeout(() =&gt; resultSection.scrollIntoView({ behavior: 'smooth', block: 'nearest' }), 100);

            downloadBtn.onclick = () =&gt; window.open(downloadLink, '_blank');
            
            directDownloadBtn.onclick = () =&gt; {
                const ext = videoUrl ? '.mp4' : '.jpg';
                downloadFile(downloadLink, 'pindl_' + Date.now() + ext);
            };

            copyBtn.onclick = () =&gt; {
                const el = document.createElement('textarea');
                el.value = downloadLink;
                document.body.appendChild(el);
                el.select();
                document.execCommand('copy');
                document.body.removeChild(el);
                const oldText = copyBtn.innerText;
                copyBtn.innerText = 'Copied!';
                setTimeout(() =&gt; copyBtn.innerText = oldText, 2000);
            };
        }

        function showError(msg) {
            document.getElementById('errorText').innerText = msg;
            errorMessage.classList.remove('hidden');
        }
    })();
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Blogger Post Extractor</title><link>https://www.laxmannepal.com.np/2026/01/blogger-post-extractor.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Thu, 22 Jan 2026 17:40:26 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-3081778399564739304</guid><description>&lt;style&gt;
  

  
  

  input {
    width: 100%;
    padding: 12px;
    font-size: 16px;
    margin-bottom: 20px;
    border: 1px solid #333;
    border-radius: 6px;
    outline: none;
    background: #1a1a1a;
    color: #fff;
    transition: border-color 0.3s ease, box-shadow 0.3s ease;
  }

  input:focus {
    border-color: #00d4ff;
    box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);
  }

  button {
    background: linear-gradient(90deg, #00d4ff, #0073e6);
    color: white;
    border: none;
    padding: 10px 20px;
    border-radius: 6px;
    font-size: 16px;
    cursor: pointer;
    margin: 5px;
    transition: background 0.3s ease, transform 0.2s ease;
  }

  button:hover {
    background: linear-gradient(90deg, #00b8d4, #005bb5);
    transform: scale(1.03);
  }

  #resultContainer {
    display: none;
    margin-top: 20px;
  }

  textarea {
    width: 100%;
    height: 200px;
    padding: 12px;
    font-size: 14px;
    border: 1px solid #333;
    border-radius: 6px;
    resize: none;
    outline: none;
    background-color: #1a1a1a;
    color: #fff;
  }

  textarea:focus {
    border-color: #00d4ff;
  }

  .hidden {
    display: none;
  }

  .alert {
    color: #ff5555;
    font-size: 14px;
    margin-top: 10px;
  }

  .how-to-use {
    margin-top: 40px;
    padding: 20px;
    border-radius: 8px;
  }

  .how-to-use h2 {
    color: #00ffcc;
    margin-bottom: 10px;
  }

  .how-to-use ol {
    margin: 0;
    padding-left: 20px;
    line-height: 1.6;
  }

  .how-to-use li {
    margin-bottom: 8px;
  }
&lt;/style&gt;

  &lt;div class="container"&gt;
    
    &lt;input id="blogUrl" placeholder="Enter Blogger Post URL https://" /&gt;
    &lt;button id="generateBtn"&gt;Extract Post&lt;/button&gt;

    &lt;!--Result Section--&gt;
    &lt;div id="resultContainer"&gt;
      &lt;textarea id="html-code" readonly=""&gt;&lt;/textarea&gt;
      &lt;button id="copy-code"&gt;Copy Code&lt;/button&gt;
      &lt;button id="hide-result"&gt;Close&lt;/button&gt;
    &lt;/div&gt;
    &lt;p class="alert hidden" id="errorMessage"&gt;Error extracting the post. Please check the URL and try again.&lt;/p&gt;

 

&lt;script&gt;
  document.addEventListener('DOMContentLoaded', function () {
    const generateBtn = document.getElementById('generateBtn');
    const copyCodeBtn = document.getElementById('copy-code');
    const hideResultBtn = document.getElementById('hide-result');
    const errorMessage = document.getElementById('errorMessage');
    const resultContainer = document.getElementById('resultContainer');
    const htmlCode = document.getElementById('html-code');
    const blogUrlInput = document.getElementById('blogUrl');

    generateBtn.addEventListener('click', function () {
      const postUrl = blogUrlInput.value.trim();

      if (!postUrl) {
        alert('Please enter a valid Blogger post URL.');
        return;
      }

      const apiKey = 'AIzaSyDddIhZZzHxb0VY7qdG0pUis9NezhLjFM8';

      fetch(`https://www.googleapis.com/blogger/v3/blogs/byurl?url=${encodeURIComponent(postUrl)}&amp;key=${apiKey}`)
        .then(response =&gt; response.json())
        .then(data =&gt; {
          if (!data.id) {
            throw new Error('Blog not found.');
          }
          const blogId = data.id;
          const path = new URL(postUrl).pathname;

          return fetch(`https://www.googleapis.com/blogger/v3/blogs/${blogId}/posts/bypath?path=${encodeURIComponent(path)}&amp;key=${apiKey}`);
        })
        .then(response =&gt; response.json())
        .then(post =&gt; {
          if (post &amp;&amp; post.title &amp;&amp; post.content) {
            htmlCode.value = `&lt;div class="post"&gt;&lt;h2&gt;${post.title}&lt;/h2&gt;&lt;div&gt;${post.content}&lt;/div&gt;&lt;/div&gt;`;
            resultContainer.style.display = 'block';
            errorMessage.classList.add('hidden');
          } else {
            errorMessage.textContent = 'Failed to retrieve post content. Please check the URL and try again.';
            errorMessage.classList.remove('hidden');
          }
        })
        .catch(() =&gt; {
          errorMessage.textContent = 'Error extracting the post. Please check the URL and try again.';
          errorMessage.classList.remove('hidden');
        });
    });

    copyCodeBtn.addEventListener('click', function () {
      htmlCode.select();
      document.execCommand('copy');
      alert('Code copied to clipboard');
    });

    hideResultBtn.addEventListener('click', function () {
      resultContainer.style.display = 'none';
    });
  });
&lt;/script&gt;

&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>QR Code Generator </title><link>https://www.laxmannepal.com.np/2025/12/qr-code-generator.html</link><category>App</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Tue, 30 Dec 2025 04:16:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-6905934924709118822</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;QR Code Generator Pro - Laxman Nepal&lt;/title&gt;
    &lt;!-- Tailwind CSS for styling --&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;!-- QRious library for QR generation --&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/qrious/4.0.2/qrious.min.js"&gt;&lt;/script&gt;
    &lt;!-- Lucide Icons --&gt;
    &lt;script src="https://unpkg.com/lucide@latest"&gt;&lt;/script&gt;
    &lt;style&gt;
        @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&amp;display=swap');
        body { font-family: 'Inter', sans-serif; }
        .scrollbar-hide::-webkit-scrollbar { display: none; }
        .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; }
        .custom-shadow { shadow-sm border border-slate-200; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body class="bg-[#f8fafc] text-[#404040]"&gt;

    &lt;div class="max-w-7xl mx-auto p-4 md:p-8"&gt;
        &lt;!-- Header --&gt;
        &lt;header class="flex flex-col md:flex-row md:items-center justify-between gap-4 mb-8"&gt;
            &lt;div class="flex items-center gap-3"&gt;
                &lt;div class="bg-[#1d6fea] p-3 rounded-2xl shadow-lg shadow-blue-200 text-white"&gt;
                    &lt;i data-lucide="qr-code" class="w-8 h-8"&gt;&lt;/i&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;h1 class="text-3xl font-bold text-[#1e293b]"&gt;QR Generator &lt;span class="text-[#ea971d]"&gt;Pro&lt;/span&gt;&lt;/h1&gt;
                    &lt;p class="text-sm text-[#64748b] font-medium tracking-wide uppercase"&gt;Digital Presence Tool&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class="flex items-center gap-2 bg-white px-4 py-2 rounded-full border border-slate-200 shadow-sm"&gt;
                &lt;i data-lucide="shield-check" class="w-4 h-4 text-green-500"&gt;&lt;/i&gt;
                &lt;span class="text-xs font-semibold text-slate-500"&gt;Secure Client-Side Generation&lt;/span&gt;
            &lt;/div&gt;
        &lt;/header&gt;

        &lt;div class="grid grid-cols-1 lg:grid-cols-12 gap-8"&gt;
            &lt;!-- LEFT: Controls --&gt;
            &lt;div class="lg:col-span-8 space-y-6"&gt;
                &lt;!-- 1. Content Type Selector --&gt;
                &lt;div class="bg-white rounded-3xl p-6 shadow-sm border border-slate-200"&gt;
                    &lt;div class="flex items-center gap-2 mb-6 font-bold text-slate-800"&gt;
                        &lt;i data-lucide="settings" class="w-5 h-5 text-[#1d6fea]"&gt;&lt;/i&gt;
                        &lt;span&gt;Choose Content Type&lt;/span&gt;
                    &lt;/div&gt;
                    
                    &lt;div class="grid grid-cols-2 sm:grid-cols-5 gap-3" id="type-selector"&gt;
                        &lt;button data-type="url" class="type-btn active flex flex-col items-center justify-center gap-2 p-4 rounded-2xl border-2 border-[#1d6fea] bg-blue-50 text-[#1d6fea] transition-all"&gt;
                            &lt;i data-lucide="link"&gt;&lt;/i&gt;&lt;span class="text-xs font-bold"&gt;URL&lt;/span&gt;
                        &lt;/button&gt;
                        &lt;button data-type="text" class="type-btn flex flex-col items-center justify-center gap-2 p-4 rounded-2xl border-2 border-transparent bg-slate-50 text-slate-500 hover:bg-slate-100 transition-all"&gt;
                            &lt;i data-lucide="type"&gt;&lt;/i&gt;&lt;span class="text-xs font-bold"&gt;Text&lt;/span&gt;
                        &lt;/button&gt;
                        &lt;button data-type="wifi" class="type-btn flex flex-col items-center justify-center gap-2 p-4 rounded-2xl border-2 border-transparent bg-slate-50 text-slate-500 hover:bg-slate-100 transition-all"&gt;
                            &lt;i data-lucide="wifi"&gt;&lt;/i&gt;&lt;span class="text-xs font-bold"&gt;WiFi&lt;/span&gt;
                        &lt;/button&gt;
                        &lt;button data-type="email" class="type-btn flex flex-col items-center justify-center gap-2 p-4 rounded-2xl border-2 border-transparent bg-slate-50 text-slate-500 hover:bg-slate-100 transition-all"&gt;
                            &lt;i data-lucide="mail"&gt;&lt;/i&gt;&lt;span class="text-xs font-bold"&gt;Email&lt;/span&gt;
                        &lt;/button&gt;
                        &lt;button data-type="sms" class="type-btn flex flex-col items-center justify-center gap-2 p-4 rounded-2xl border-2 border-transparent bg-slate-50 text-slate-500 hover:bg-slate-100 transition-all"&gt;
                            &lt;i data-lucide="message-square"&gt;&lt;/i&gt;&lt;span class="text-xs font-bold"&gt;SMS&lt;/span&gt;
                        &lt;/button&gt;
                    &lt;/div&gt;

                    &lt;!-- Dynamic Inputs --&gt;
                    &lt;div class="mt-6" id="input-container"&gt;
                        &lt;textarea id="main-input" class="w-full h-24 p-4 bg-slate-50 border border-slate-200 rounded-2xl focus:ring-2 focus:ring-[#1d6fea] outline-none transition-all resize-none font-medium"&gt;https://laxmannepal.com.np&lt;/textarea&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- 2. Styling &amp; Logo --&gt;
                &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-6"&gt;
                    &lt;div class="bg-white rounded-3xl p-6 shadow-sm border border-slate-200"&gt;
                        &lt;div class="flex items-center gap-2 mb-4 font-bold text-slate-800"&gt;
                            &lt;i data-lucide="palette" class="w-5 h-5 text-[#ea971d]"&gt;&lt;/i&gt;
                            &lt;span&gt;Appearance&lt;/span&gt;
                        &lt;/div&gt;
                        &lt;div class="space-y-4"&gt;
                           &lt;div class="flex items-center justify-between"&gt;
                            &lt;span class="text-sm font-medium text-slate-500"&gt;Forecolor&lt;/span&gt;
                            &lt;input type="color" id="fgColor" value="#1d6fea" class="w-12 h-8 rounded cursor-pointer border-none" /&gt;
                          &lt;/div&gt;
                          &lt;div class="flex items-center justify-between"&gt;
                            &lt;span class="text-sm font-medium text-slate-500"&gt;Backcolor&lt;/span&gt;
                            &lt;input type="color" id="bgColor" value="#ffffff" class="w-12 h-8 rounded cursor-pointer border-none" /&gt;
                          &lt;/div&gt;
                          &lt;div class="space-y-2"&gt;
                            &lt;div class="flex justify-between text-xs font-bold text-slate-400"&gt;
                              &lt;span&gt;SIZE&lt;/span&gt;
                              &lt;span id="size-val"&gt;300px&lt;/span&gt;
                            &lt;/div&gt;
                            &lt;input type="range" id="size" min="200" max="600" value="300" class="w-full accent-[#1d6fea]" /&gt;
                          &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;div class="bg-white rounded-3xl p-6 shadow-sm border border-slate-200"&gt;
                        &lt;div class="flex items-center gap-2 mb-4 font-bold text-slate-800"&gt;
                            &lt;i data-lucide="image" class="w-5 h-5 text-[#1d6fea]"&gt;&lt;/i&gt;
                            &lt;span&gt;Logo Overlay&lt;/span&gt;
                        &lt;/div&gt;
                        &lt;div class="space-y-4 text-center"&gt;
                            &lt;div id="logo-preview-container" class="hidden"&gt;
                                &lt;div class="relative inline-block group"&gt;
                                    &lt;img id="logo-preview-img" class="w-16 h-16 rounded-xl border object-cover shadow-sm" /&gt;
                                    &lt;button id="remove-logo" class="absolute -top-2 -right-2 bg-red-500 text-white p-1 rounded-full shadow-md"&gt;
                                        &lt;i data-lucide="trash-2" class="w-3 h-3"&gt;&lt;/i&gt;
                                    &lt;/button&gt;
                                &lt;/div&gt;
                            &lt;/div&gt;
                            &lt;button id="upload-trigger" class="w-full py-6 border-2 border-dashed border-slate-200 rounded-2xl text-slate-400 hover:border-[#1d6fea] hover:text-[#1d6fea] transition-all"&gt;
                                &lt;i data-lucide="image" class="w-6 h-6 mx-auto mb-2"&gt;&lt;/i&gt;
                                &lt;span class="text-xs font-bold"&gt;Upload Center Logo&lt;/span&gt;
                            &lt;/button&gt;
                            &lt;input type="file" id="logo-input" class="hidden" accept="image/*" /&gt;
                            
                            &lt;div id="logo-size-container" class="hidden space-y-2"&gt;
                                &lt;div class="flex justify-between text-xs font-bold text-slate-400 uppercase"&gt;
                                    &lt;span&gt;Logo Size&lt;/span&gt;
                                    &lt;span id="logo-size-val"&gt;20%&lt;/span&gt;
                                &lt;/div&gt;
                                &lt;input type="range" id="logoSize" min="10" max="30" value="20" class="w-full accent-[#ea971d]" /&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- 3. History --&gt;
                &lt;div class="bg-white rounded-3xl p-6 shadow-sm border border-slate-200"&gt;
                    &lt;div class="flex items-center gap-2 mb-4 font-bold text-slate-800"&gt;
                        &lt;i data-lucide="history" class="w-5 h-5 text-slate-400"&gt;&lt;/i&gt;
                        &lt;span&gt;Recent Generations&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div id="history-log" class="flex gap-4 overflow-x-auto pb-2 scrollbar-hide"&gt;
                        &lt;p class="text-sm text-slate-400 italic"&gt;No items in history yet...&lt;/p&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- RIGHT: Preview --&gt;
            &lt;div class="lg:col-span-4"&gt;
                &lt;div class="bg-white rounded-[2rem] p-8 shadow-xl border border-slate-200 sticky top-8 text-center flex flex-col items-center"&gt;
                    &lt;div class="mb-6"&gt;
                        &lt;h3 class="text-xl font-black text-slate-800 tracking-tight"&gt;Live Preview&lt;/h3&gt;
                        &lt;div class="h-1 w-12 bg-[#ea971d] mx-auto mt-2 rounded-full"&gt;&lt;/div&gt;
                    &lt;/div&gt;

                    &lt;div class="relative p-6 bg-slate-50 rounded-[2.5rem] border-4 border-white shadow-inner mb-8 transition-all hover:scale-[1.02]"&gt;
                        &lt;canvas id="qr-canvas" class="max-w-full h-auto rounded-lg"&gt;&lt;/canvas&gt;
                    &lt;/div&gt;

                    &lt;div class="w-full space-y-3"&gt;
                        &lt;button id="download-btn" class="w-full flex items-center justify-center gap-3 bg-[#1d6fea] hover:bg-blue-700 text-white font-black py-4 rounded-2xl transition-all shadow-lg shadow-blue-100 active:scale-95"&gt;
                            &lt;i data-lucide="download" class="w-5 h-5"&gt;&lt;/i&gt;
                            DOWNLOAD PNG
                        &lt;/button&gt;
                        &lt;button id="copy-btn" class="w-full flex items-center justify-center gap-3 font-bold py-4 rounded-2xl border-2 bg-white border-slate-200 text-slate-600 hover:bg-slate-50 transition-all active:scale-95"&gt;
                            &lt;i data-lucide="copy" class="w-5 h-5"&gt;&lt;/i&gt;
                            &lt;span&gt;Copy Image&lt;/span&gt;
                        &lt;/button&gt;
                    &lt;/div&gt;

                    &lt;div class="mt-8 p-4 bg-orange-50 rounded-2xl border border-orange-100 flex items-start gap-3 text-left"&gt;
                        &lt;div class="bg-[#ea971d] p-1.5 rounded-lg text-white"&gt;
                            &lt;i data-lucide="settings" class="w-3.5 h-3.5"&gt;&lt;/i&gt;
                        &lt;/div&gt;
                        &lt;div&gt;
                            &lt;p class="text-[10px] font-black text-orange-800 uppercase leading-none mb-1"&gt;Pro Tip&lt;/p&gt;
                            &lt;p class="text-[11px] text-orange-700 font-medium leading-tight"&gt;
                                For best results with logos, use a high-contrast foreground color.
                            &lt;/p&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Footer --&gt;
        &lt;footer class="mt-16 text-center text-slate-400 py-8 border-t border-slate-200"&gt;
           &lt;p class="text-xs font-medium"&gt;© &lt;span id="year"&gt;&lt;/span&gt; Laxman Nepal • QR Generator Pro&lt;/p&gt;
        &lt;/footer&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Init Lucide Icons
        lucide.createIcons();
        document.getElementById('year').textContent = new Date().getFullYear();

        // State variables
        let currentType = 'url';
        let logoData = null;
        let history = [];

        // DOM Elements
        const canvas = document.getElementById('qr-canvas');
        const mainInput = document.getElementById('main-input');
        const fgColorInput = document.getElementById('fgColor');
        const bgColorInput = document.getElementById('bgColor');
        const sizeInput = document.getElementById('size');
        const logoSizeInput = document.getElementById('logoSize');
        const logoFileInput = document.getElementById('logo-input');

        // Functions
        function generate() {
            let data = mainInput.value;
            
            // Handle specialized templates
            if (currentType === 'wifi') {
                const ssid = document.getElementById('wifi-ssid').value;
                const pass = document.getElementById('wifi-pass').value;
                const enc = document.getElementById('wifi-enc').value;
                data = `WIFI:S:${ssid};T:${enc};P:${pass};;`;
            } else if (currentType === 'email') {
                const addr = document.getElementById('mail-addr').value;
                const sub = document.getElementById('mail-sub').value;
                const body = document.getElementById('mail-body').value;
                data = `mailto:${addr}?subject=${encodeURIComponent(sub)}&amp;body=${encodeURIComponent(body)}`;
            } else if (currentType === 'sms') {
                const ph = document.getElementById('sms-ph').value;
                const msg = document.getElementById('sms-msg').value;
                data = `SMSTO:${ph}:${msg}`;
            }

            const qr = new QRious({
                element: canvas,
                value: data || ' ',
                size: parseInt(sizeInput.value),
                padding: 20,
                foreground: fgColorInput.value,
                background: bgColorInput.value,
                level: 'H'
            });

            if (logoData) {
                const ctx = canvas.getContext('2d');
                const img = new Image();
                img.onload = () =&gt; {
                    const qrSize = parseInt(sizeInput.value);
                    const lPercent = parseInt(logoSizeInput.value);
                    const dsize = (qrSize * lPercent) / 100;
                    const pos = (qrSize - dsize) / 2;
                    ctx.fillStyle = bgColorInput.value;
                    ctx.fillRect(pos - 5, pos - 5, dsize + 10, dsize + 10);
                    ctx.drawImage(img, pos, pos, dsize, dsize);
                };
                img.src = logoData;
            }
        }

        function switchType(type) {
            currentType = type;
            const container = document.getElementById('input-container');
            
            // UI updates
            document.querySelectorAll('.type-btn').forEach(btn =&gt; {
                btn.classList.remove('border-[#1d6fea]', 'bg-blue-50', 'text-[#1d6fea]');
                btn.classList.add('border-transparent', 'bg-slate-50', 'text-slate-500');
                if (btn.dataset.type === type) {
                    btn.classList.add('border-[#1d6fea]', 'bg-blue-50', 'text-[#1d6fea]');
                    btn.classList.remove('border-transparent', 'bg-slate-50', 'text-slate-500');
                }
            });

            // Template switching
            if (type === 'url' || type === 'text') {
                container.innerHTML = `&lt;textarea id="main-input" class="w-full h-24 p-4 bg-slate-50 border border-slate-200 rounded-2xl focus:ring-2 focus:ring-[#1d6fea] outline-none transition-all resize-none font-medium"&gt;${type === 'url' ? 'https://laxmannepal.com.np' : 'Hello World'}&lt;/textarea&gt;`;
            } else if (type === 'wifi') {
                container.innerHTML = `
                    &lt;div class="grid grid-cols-1 md:grid-cols-3 gap-4 bg-slate-50 p-4 rounded-2xl"&gt;
                        &lt;input id="wifi-ssid" placeholder="Network Name" class="p-3 rounded-xl border bg-white" /&gt;
                        &lt;input id="wifi-pass" type="password" placeholder="Password" class="p-3 rounded-xl border bg-white" /&gt;
                        &lt;select id="wifi-enc" class="p-3 rounded-xl border bg-white"&gt;&lt;option&gt;WPA&lt;/option&gt;&lt;option&gt;WEP&lt;/option&gt;&lt;option&gt;None&lt;/option&gt;&lt;/select&gt;
                    &lt;/div&gt;`;
            } else if (type === 'email') {
                container.innerHTML = `
                    &lt;div class="space-y-3 bg-slate-50 p-4 rounded-2xl"&gt;
                        &lt;input id="mail-addr" placeholder="Recipient Email" class="w-full p-3 rounded-xl border bg-white" /&gt;
                        &lt;input id="mail-sub" placeholder="Subject" class="w-full p-3 rounded-xl border bg-white" /&gt;
                        &lt;textarea id="mail-body" placeholder="Body" class="w-full p-3 rounded-xl border bg-white h-20"&gt;&lt;/textarea&gt;
                    &lt;/div&gt;`;
            } else if (type === 'sms') {
                container.innerHTML = `
                    &lt;div class="space-y-3 bg-slate-50 p-4 rounded-2xl"&gt;
                        &lt;input id="sms-ph" placeholder="Phone Number" class="w-full p-3 rounded-xl border bg-white" /&gt;
                        &lt;textarea id="sms-msg" placeholder="Message" class="w-full p-3 rounded-xl border bg-white h-20"&gt;&lt;/textarea&gt;
                    &lt;/div&gt;`;
            }
            
            // Re-bind listeners to new elements
            container.querySelectorAll('input, textarea, select').forEach(el =&gt; el.addEventListener('input', generate));
            generate();
        }

        // Listeners
        document.querySelectorAll('.type-btn').forEach(btn =&gt; btn.addEventListener('click', () =&gt; switchType(btn.dataset.type)));
        fgColorInput.addEventListener('input', generate);
        bgColorInput.addEventListener('input', generate);
        sizeInput.addEventListener('input', () =&gt; {
            document.getElementById('size-val').textContent = sizeInput.value + 'px';
            generate();
        });
        logoSizeInput.addEventListener('input', () =&gt; {
            document.getElementById('logo-size-val').textContent = logoSizeInput.value + '%';
            generate();
        });

        document.getElementById('upload-trigger').addEventListener('click', () =&gt; logoFileInput.click());
        logoFileInput.addEventListener('change', (e) =&gt; {
            const file = e.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (ev) =&gt; {
                    logoData = ev.target.result;
                    document.getElementById('logo-preview-img').src = logoData;
                    document.getElementById('logo-preview-container').classList.remove('hidden');
                    document.getElementById('logo-size-container').classList.remove('hidden');
                    document.getElementById('upload-trigger').classList.add('hidden');
                    generate();
                };
                reader.readAsDataURL(file);
            }
        });

        document.getElementById('remove-logo').addEventListener('click', () =&gt; {
            logoData = null;
            document.getElementById('logo-preview-container').classList.add('hidden');
            document.getElementById('logo-size-container').classList.add('hidden');
            document.getElementById('upload-trigger').classList.remove('hidden');
            logoFileInput.value = '';
            generate();
        });

        document.getElementById('download-btn').addEventListener('click', () =&gt; {
            const link = document.createElement('a');
            link.download = `qr-${Date.now()}.png`;
            link.href = canvas.toDataURL();
            link.click();
            addHistory();
        });

        document.getElementById('copy-btn').addEventListener('click', async () =&gt; {
            canvas.toBlob(async (blob) =&gt; {
                try {
                    const item = new ClipboardItem({ "image/png": blob });
                    await navigator.clipboard.write([item]);
                    const btn = document.getElementById('copy-btn');
                    const original = btn.innerHTML;
                    btn.innerHTML = `&lt;i data-lucide="check-circle-2" class="text-green-500"&gt;&lt;/i&gt; Copied!`;
                    lucide.createIcons();
                    setTimeout(() =&gt; { btn.innerHTML = original; lucide.createIcons(); }, 2000);
                } catch (e) { console.error("Clipboard fail", e); }
            });
        });

        function addHistory() {
            const log = document.getElementById('history-log');
            if (history.length === 0) log.innerHTML = '';
            
            const val = currentType === 'url' || currentType === 'text' ? document.getElementById('main-input').value : 'Special Template';
            history.unshift({ type: currentType, data: val, time: new Date().toLocaleTimeString() });
            history = history.slice(0, 5);

            log.innerHTML = history.map(h =&gt; `
                &lt;div class="flex-shrink-0 bg-slate-50 border p-3 rounded-2xl min-w-[140px]"&gt;
                    &lt;div class="flex items-center gap-2 mb-1"&gt;
                        &lt;span class="text-[10px] font-black uppercase px-2 py-0.5 bg-slate-200 rounded-full"&gt;${h.type}&lt;/span&gt;
                        &lt;span class="text-[10px] text-slate-400"&gt;${h.time}&lt;/span&gt;
                    &lt;/div&gt;
                    &lt;p class="text-xs font-medium text-slate-600 truncate"&gt;${h.data}&lt;/p&gt;
                &lt;/div&gt;
            `).join('');
        }

        // Initial generation
        setTimeout(() =&gt; {
            switchType('url');
            generate();
        }, 500);

    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>File Converter Tool</title><link>https://www.laxmannepal.com.np/2025/12/file-converter-tool.html</link><category>App</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Mon, 29 Dec 2025 04:28:22 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-8817861618603580989</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;Blogger Universal Text Converter&lt;/title&gt;
    &lt;!-- Dependencies: FileSaver for downloads, html2pdf for PDF generation --&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"&gt;
    &lt;style&gt;
        /* Designed to look good inside a Blogger post or sidebar */
        .bt-tool-container {
            max-width: 100%;
            margin: 10px auto;
            font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
            color: #333;
            background: #ffffff;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
            box-shadow: 0 4px 12px rgba(0,0,0,0.05);
        }

        .bt-header {
            background: #4CAF50;
            color: white;
            padding: 20px;
            text-align: center;
        }

        .bt-header h2 { margin: 0; font-size: 22px; }
        .bt-header p { margin: 5px 0 0; font-size: 14px; opacity: 0.9; }

        .bt-content { padding: 15px; }

        /* File Upload Area */
        .bt-upload-box {
            border: 2px dashed #4CAF50;
            border-radius: 6px;
            padding: 20px;
            text-align: center;
            background: #f9fff9;
            cursor: pointer;
            margin-bottom: 15px;
            transition: 0.3s;
        }

        .bt-upload-box:hover { background: #f0fff0; border-color: #388E3C; }
        .bt-upload-box i { font-size: 30px; color: #4CAF50; }

        /* Text Area &amp; Stats */
        .bt-editor-wrap { position: relative; }
        .bt-textarea {
            width: 100%;
            height: 200px;
            padding: 12px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-family: monospace;
            font-size: 14px;
            resize: vertical;
            outline: none;
            box-sizing: border-box;
        }
        .bt-textarea:focus { border-color: #4CAF50; box-shadow: 0 0 5px rgba(76,175,80,0.2); }

        .bt-stats {
            display: flex;
            justify-content: space-between;
            font-size: 12px;
            color: #777;
            margin-top: 5px;
            padding: 0 5px;
        }

        /* Toolbar */
        .bt-toolbar {
            display: flex;
            flex-wrap: wrap;
            gap: 8px;
            margin: 15px 0;
        }
        .bt-tool-btn {
            background: #f5f5f5;
            border: 1px solid #ddd;
            padding: 6px 12px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 12px;
            display: flex;
            align-items: center;
            gap: 5px;
        }
        .bt-tool-btn:hover { background: #e0e0e0; }

        /* Format Selection Grid */
        .bt-format-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
            gap: 10px;
            margin-top: 10px;
        }
        .bt-format-item {
            border: 1px solid #ddd;
            padding: 10px;
            border-radius: 6px;
            text-align: center;
            cursor: pointer;
            transition: 0.2s;
            background: #fff;
        }
        .bt-format-item.active {
            border-color: #4CAF50;
            background: #e8f5e9;
            color: #2e7d32;
            font-weight: bold;
        }
        .bt-format-item i { display: block; font-size: 18px; margin-bottom: 5px; }

        /* Main Button */
        .bt-convert-btn {
            width: 100%;
            background: #4CAF50;
            color: white;
            border: none;
            padding: 14px;
            font-size: 16px;
            font-weight: bold;
            border-radius: 6px;
            cursor: pointer;
            margin-top: 20px;
            transition: 0.3s;
        }
        .bt-convert-btn:hover { background: #388E3C; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }

        /* Toast notifications */
        .bt-toast {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            background: #333;
            color: #fff;
            padding: 10px 20px;
            border-radius: 30px;
            font-size: 14px;
            z-index: 9999;
            display: none;
        }

        #pdf-export-content { display: none; padding: 40px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="bt-tool-container"&gt;
    &lt;div class="bt-header"&gt;
        &lt;h2&gt;Text Converter Pro&lt;/h2&gt;
        &lt;p&gt;Convert and Clean Text for Your Blog&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class="bt-content"&gt;
        &lt;!-- Step 1: Input --&gt;
        &lt;div class="bt-upload-box" onclick="document.getElementById('btFileInput').click()"&gt;
            &lt;i class="fas fa-file-import"&gt;&lt;/i&gt;
            &lt;div style="font-size: 14px; font-weight: bold; margin-top: 5px;"&gt;Upload Text File&lt;/div&gt;
            &lt;div style="font-size: 12px; color: #666;"&gt;Drag &amp; drop or click to browse&lt;/div&gt;
            &lt;input type="file" id="btFileInput" style="display:none"&gt;
        &lt;/div&gt;

        &lt;div class="bt-editor-wrap"&gt;
            &lt;textarea id="btTextarea" class="bt-textarea" placeholder="Paste your blog draft or text here..."&gt;&lt;/textarea&gt;
            &lt;div class="bt-stats"&gt;
                &lt;span id="btWordCount"&gt;Words: 0&lt;/span&gt;
                &lt;span id="btCharCount"&gt;Chars: 0&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Step 2: Tools --&gt;
        &lt;div class="bt-toolbar"&gt;
            &lt;button class="bt-tool-btn" onclick="btCopy()"&gt;&lt;i class="fas fa-copy"&gt;&lt;/i&gt; Copy&lt;/button&gt;
            &lt;button class="bt-tool-btn" onclick="btClean()"&gt;&lt;i class="fas fa-broom"&gt;&lt;/i&gt; Clean HTML Tags&lt;/button&gt;
            &lt;button class="bt-tool-btn" onclick="btLower()"&gt;&lt;i class="fas fa-font"&gt;&lt;/i&gt; lowercase&lt;/button&gt;
            &lt;button class="bt-tool-btn" onclick="btClear()"&gt;&lt;i class="fas fa-eraser"&gt;&lt;/i&gt; Reset&lt;/button&gt;
        &lt;/div&gt;

        &lt;!-- Step 3: Formats --&gt;
        &lt;div style="font-weight: bold; font-size: 14px; margin-bottom: 10px;"&gt;Select Export Format:&lt;/div&gt;
        &lt;div class="bt-format-grid" id="btFormatGrid"&gt;
            &lt;div class="bt-format-item active" data-fmt="txt"&gt;&lt;i class="fas fa-file-alt"&gt;&lt;/i&gt;.TXT&lt;/div&gt;
            &lt;div class="bt-format-item" data-fmt="html"&gt;&lt;i class="fab fa-html5"&gt;&lt;/i&gt;.HTML&lt;/div&gt;
            &lt;div class="bt-format-item" data-fmt="pdf"&gt;&lt;i class="fas fa-file-pdf"&gt;&lt;/i&gt;.PDF&lt;/div&gt;
            &lt;div class="bt-format-item" data-fmt="json"&gt;&lt;i class="fas fa-code"&gt;&lt;/i&gt;.JSON&lt;/div&gt;
            &lt;div class="bt-format-item" data-fmt="md"&gt;&lt;i class="fab fa-markdown"&gt;&lt;/i&gt;.MD&lt;/div&gt;
            &lt;div class="bt-format-item" data-fmt="csv"&gt;&lt;i class="fas fa-table"&gt;&lt;/i&gt;.CSV&lt;/div&gt;
        &lt;/div&gt;

        &lt;button class="bt-convert-btn" onclick="btProcess()"&gt;
            &lt;i class="fas fa-download"&gt;&lt;/i&gt; CONVERT &amp; DOWNLOAD
        &lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;!-- Hidden container for PDF generation --&gt;
&lt;div id="pdf-export-content"&gt;&lt;/div&gt;

&lt;!-- Custom Toast --&gt;
&lt;div id="btToast" class="bt-toast"&gt;&lt;/div&gt;

&lt;script&gt;
    const btTextarea = document.getElementById('btTextarea');
    const btToast = document.getElementById('btToast');
    let btSelectedFormat = 'txt';

    // Update Stats
    btTextarea.addEventListener('input', () =&gt; {
        const text = btTextarea.value.trim();
        document.getElementById('btWordCount').innerText = 'Words: ' + (text ? text.split(/\s+/).length : 0);
        document.getElementById('btCharCount').innerText = 'Chars: ' + text.length;
    });

    // Handle Format Selection
    document.querySelectorAll('.bt-format-item').forEach(item =&gt; {
        item.addEventListener('click', function() {
            document.querySelectorAll('.bt-format-item').forEach(i =&gt; i.classList.remove('active'));
            this.classList.add('active');
            btSelectedFormat = this.getAttribute('data-fmt');
        });
    });

    // File Upload
    document.getElementById('btFileInput').addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (!file) return;
        const reader = new FileReader();
        reader.onload = (e) =&gt; {
            btTextarea.value = e.target.result;
            btTextarea.dispatchEvent(new Event('input'));
            btShowToast("File loaded successfully!");
        };
        reader.readAsText(file);
    });

    // Tools
    function btShowToast(msg) {
        btToast.innerText = msg;
        btToast.style.display = 'block';
        setTimeout(() =&gt; { btToast.style.display = 'none'; }, 2500);
    }

    function btCopy() {
        btTextarea.select();
        document.execCommand('copy');
        btShowToast("Copied to clipboard!");
    }

    function btClear() {
        btTextarea.value = '';
        btTextarea.dispatchEvent(new Event('input'));
        btShowToast("Cleared!");
    }

    function btLower() {
        btTextarea.value = btTextarea.value.toLowerCase();
        btShowToast("Converted to lowercase");
    }

    function btClean() {
        // Specifically for bloggers: Removes HTML tags but leaves content
        btTextarea.value = btTextarea.value.replace(/&lt;[^&gt;]*&gt;?/gm, '');
        btShowToast("HTML tags stripped");
    }

    // Process Download
    async function btProcess() {
        const content = btTextarea.value;
        if (!content) { btShowToast("Please enter some text!"); return; }

        const filename = `converted_text_${new Date().getTime()}`;

        try {
            switch(btSelectedFormat) {
                case 'txt':
                    saveAs(new Blob([content], {type: "text/plain"}), filename + ".txt");
                    break;
                case 'html':
                    // Convert line breaks to &lt;p&gt; tags for Blogger
                    const blogHtml = content.split('\n').filter(l =&gt; l.trim() !== '').map(l =&gt; `&lt;p&gt;${l}&lt;/p&gt;`).join('\n');
                    saveAs(new Blob([blogHtml], {type: "text/html"}), filename + ".html");
                    break;
                case 'json':
                    const json = JSON.stringify({ title: "Blogger Export", date: new Date(), body: content }, null, 4);
                    saveAs(new Blob([json], {type: "application/json"}), filename + ".json");
                    break;
                case 'csv':
                    const csv = "Line Content\n" + content.split('\n').map(l =&gt; `"${l.replace(/"/g, '""')}"`).join('\n');
                    saveAs(new Blob([csv], {type: "text/csv"}), filename + ".csv");
                    break;
                case 'md':
                    const md = "# Blog Draft\n\n" + content;
                    saveAs(new Blob([md], {type: "text/markdown"}), filename + ".md");
                    break;
                case 'pdf':
                    const pdfElement = document.getElementById('pdf-export-content');
                    pdfElement.innerHTML = `&lt;h2 style="color:#4CAF50"&gt;Blog Post Export&lt;/h2&gt;&lt;div style="white-space: pre-wrap;"&gt;${content}&lt;/div&gt;`;
                    pdfElement.style.display = 'block';
                    await html2pdf().from(pdfElement).set({
                        margin: 1,
                        filename: filename + '.pdf',
                        jsPDF: { format: 'a4', orientation: 'portrait' }
                    }).save();
                    pdfElement.style.display = 'none';
                    break;
            }
            btShowToast("Download Started!");
        } catch (err) {
            btShowToast("Error during conversion.");
        }
    }
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>AI Content Detector</title><link>https://www.laxmannepal.com.np/2025/12/ai-content-detector.html</link><category>App</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Mon, 29 Dec 2025 04:22:08 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-8046323244840234721</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;AI Content Analysis Tool&lt;/title&gt;
    
    &lt;!-- Fonts --&gt;
    &lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
    &lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&amp;family=Montserrat:wght@700&amp;display=swap" rel="stylesheet"&gt;
    
    &lt;!-- Font Awesome --&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"&gt;
    
    &lt;!-- ApexCharts for the gauge --&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/apexcharts"&gt;&lt;/script&gt;

    &lt;style&gt;
        :root {
            --primary: #FF6F61;
            --primary-dark: #e65a4f;
            --secondary: #22ACDD;
            --dark: #1a1a1d;
            --light: #f7f6ed;
            --gray: #e0e0e0;
            --text: #333;
            --white: #ffffff;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: 'Inter', sans-serif;
            background-color: var(--light);
            color: var(--text);
            line-height: 1.6;
            overflow-x: hidden;
            padding: 2rem 0;
        }

        /* Main App Section - Adjusted for no header */
        .main-container {
            max-width: 1000px;
            margin: 0 auto;
            padding: 0 1rem;
            position: relative;
            z-index: 10;
        }

        .app-card {
            background: var(--white);
            border-radius: 12px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            padding: 2.5rem;
        }

        .tool-title {
            font-family: 'Montserrat', sans-serif;
            font-size: 1.8rem;
            margin-bottom: 1.5rem;
            color: var(--dark);
            text-align: center;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 12px;
        }

        .textarea-wrapper {
            position: relative;
            margin-bottom: 1.5rem;
        }

        textarea {
            width: 100%;
            height: 350px;
            padding: 1.5rem;
            border: 2px solid var(--gray);
            border-radius: 8px;
            font-size: 1rem;
            font-family: inherit;
            resize: none;
            transition: border-color 0.3s;
        }

        textarea:focus {
            outline: none;
            border-color: var(--secondary);
        }

        .char-counter {
            position: absolute;
            bottom: 1rem;
            right: 1rem;
            font-size: 0.85rem;
            color: #888;
        }

        .actions {
            display: flex;
            justify-content: center;
            gap: 1rem;
            margin-bottom: 1rem;
        }

        .btn {
            padding: 0.8rem 2rem;
            border: none;
            border-radius: 6px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s;
            display: flex;
            align-items: center;
            gap: 8px;
            font-size: 1rem;
        }

        .btn-primary {
            background-color: var(--primary);
            color: white;
        }

        .btn-primary:hover {
            background-color: var(--primary-dark);
            transform: translateY(-2px);
        }

        .btn-secondary {
            background-color: #666;
            color: white;
        }

        /* Results Display */
        #results-container {
            display: none;
            margin-top: 2rem;
            border-top: 1px solid var(--gray);
            padding-top: 2rem;
            animation: fadeIn 0.5s ease;
        }

        .results-grid {
            display: grid;
            grid-template-columns: 1fr 1.5fr;
            gap: 2rem;
            align-items: center;
        }

        @media (max-width: 768px) {
            .results-grid {
                grid-template-columns: 1fr;
            }
            .app-card { padding: 1.5rem; }
        }

        .score-card {
            text-align: center;
            padding: 1rem;
        }

        .stats-list {
            list-style: none;
        }

        .stat-item {
            display: flex;
            justify-content: space-between;
            padding: 0.8rem 0;
            border-bottom: 1px solid #eee;
        }

        .stat-label {
            font-weight: 600;
            color: #666;
        }

        /* Scanning Animation */
        .scanning-overlay {
            display: none;
            text-align: center;
            padding: 2rem;
        }

        .progress-bar {
            width: 100%;
            height: 10px;
            background: #eee;
            border-radius: 5px;
            overflow: hidden;
            margin: 1rem 0;
        }

        .progress-fill {
            height: 100%;
            background: var(--secondary);
            width: 0%;
            transition: width 0.1s linear;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .message-box {
            padding: 1rem;
            border-radius: 6px;
            margin-bottom: 1rem;
            display: none;
        }
        .error { background: #fee2e2; color: #b91c1c; border: 1px solid #f87171; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;main class="main-container"&gt;
        &lt;div class="app-card"&gt;
            &lt;h1 class="tool-title"&gt;&lt;i class="fas fa-robot"&gt;&lt;/i&gt; AI Content Detector&lt;/h1&gt;
            
            &lt;div id="error-msg" class="message-box error"&gt;&lt;/div&gt;

            &lt;div class="textarea-wrapper"&gt;
                &lt;textarea id="content-input" placeholder="Paste your text here to check for AI generation..."&gt;&lt;/textarea&gt;
                &lt;div class="char-counter"&gt;
                    Characters: &lt;span id="char-count"&gt;0&lt;/span&gt; | Words: &lt;span id="word-count"&gt;0&lt;/span&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;div class="actions"&gt;
                &lt;button class="btn btn-primary" id="detect-btn"&gt;
                    &lt;i class="fas fa-search"&gt;&lt;/i&gt; Analyze Content
                &lt;/button&gt;
                &lt;button class="btn btn-secondary" id="clear-btn"&gt;
                    &lt;i class="fas fa-trash"&gt;&lt;/i&gt; Clear
                &lt;/button&gt;
            &lt;/div&gt;

            &lt;!-- Loading State --&gt;
            &lt;div id="scanning-status" class="scanning-overlay"&gt;
                &lt;h3 id="status-text"&gt;Initializing deep scan...&lt;/h3&gt;
                &lt;div class="progress-bar"&gt;
                    &lt;div id="progress-fill" class="progress-fill"&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;p&gt;Analyzing linguistic patterns...&lt;/p&gt;
            &lt;/div&gt;

            &lt;!-- Results Section --&gt;
            &lt;div id="results-container"&gt;
                &lt;h2 style="margin-bottom: 1.5rem; text-align: center;"&gt;Analysis Results&lt;/h2&gt;
                &lt;div class="results-grid"&gt;
                    &lt;div class="score-card"&gt;
                        &lt;div id="chart"&gt;&lt;/div&gt;
                        &lt;h3 id="verdict-text" style="margin-top: -20px;"&gt;Human Written&lt;/h3&gt;
                    &lt;/div&gt;
                    &lt;div class="details-card"&gt;
                        &lt;ul class="stats-list"&gt;
                            &lt;li class="stat-item"&gt;
                                &lt;span class="stat-label"&gt;AI Probability:&lt;/span&gt;
                                &lt;span id="ai-percent" style="font-weight: bold; color: var(--primary);"&gt;0%&lt;/span&gt;
                            &lt;/li&gt;
                            &lt;li class="stat-item"&gt;
                                &lt;span class="stat-label"&gt;Human Score:&lt;/span&gt;
                                &lt;span id="human-percent" style="font-weight: bold; color: #10b981;"&gt;100%&lt;/span&gt;
                            &lt;/li&gt;
                            &lt;li class="stat-item"&gt;
                                &lt;span class="stat-label"&gt;Perplexity:&lt;/span&gt;
                                &lt;span id="perplexity-val"&gt;High&lt;/span&gt;
                            &lt;/li&gt;
                            &lt;li class="stat-item"&gt;
                                &lt;span class="stat-label"&gt;Burstiness:&lt;/span&gt;
                                &lt;span id="burstiness-val"&gt;Natural&lt;/span&gt;
                            &lt;/li&gt;
                        &lt;/ul&gt;
                        &lt;p style="margin-top: 1rem; font-size: 0.85rem; color: #666;"&gt;
                            This tool provides an estimate based on structural predictability common in Large Language Models.
                        &lt;/p&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/main&gt;

    &lt;script&gt;
        const textarea = document.getElementById('content-input');
        const charDisplay = document.getElementById('char-count');
        const wordDisplay = document.getElementById('word-count');
        const detectBtn = document.getElementById('detect-btn');
        const clearBtn = document.getElementById('clear-btn');
        const resultsBox = document.getElementById('results-container');
        const scanningBox = document.getElementById('scanning-status');
        const progressFill = document.getElementById('progress-fill');
        const statusText = document.getElementById('status-text');
        const errorMsg = document.getElementById('error-msg');

        let chart = null;

        function initChart(score) {
            const options = {
                series: [score],
                chart: { height: 280, type: 'radialBar' },
                plotOptions: {
                    radialBar: {
                        startAngle: -135,
                        endAngle: 135,
                        hollow: { size: '70%' },
                        track: { background: '#e7e7e7', strokeWidth: '97%' },
                        dataLabels: {
                            name: { show: true, color: '#333', offsetY: -10, fontSize: '16px', label: 'AI Score' },
                            value: {
                                offsetY: 5,
                                fontSize: '22px',
                                color: '#111',
                                formatter: (val) =&gt; val + "%"
                            }
                        }
                    }
                },
                fill: {
                    type: 'gradient',
                    gradient: {
                        shade: 'dark',
                        type: 'horizontal',
                        gradientToColors: ['#FF6F61'],
                        stops: [0, 100]
                    }
                },
                stroke: { lineCap: 'round' },
                labels: ['AI Likelyhood'],
            };

            if (chart) chart.destroy();
            chart = new ApexCharts(document.querySelector("#chart"), options);
            chart.render();
        }

        textarea.addEventListener('input', () =&gt; {
            const text = textarea.value.trim();
            charDisplay.textContent = text.length;
            wordDisplay.textContent = text === "" ? 0 : text.split(/\s+/).length;
            errorMsg.style.display = 'none';
        });

        clearBtn.addEventListener('click', () =&gt; {
            textarea.value = '';
            charDisplay.textContent = '0';
            wordDisplay.textContent = '0';
            resultsBox.style.display = 'none';
            if(chart) chart.destroy();
        });

        detectBtn.addEventListener('click', async () =&gt; {
            const text = textarea.value.trim();
            const words = text === "" ? 0 : text.split(/\s+/).length;

            if (words &lt; 10) {
                errorMsg.textContent = "Please enter at least 10 words for analysis.";
                errorMsg.style.display = 'block';
                return;
            }

            resultsBox.style.display = 'none';
            scanningBox.style.display = 'block';
            detectBtn.disabled = true;
            
            const stages = ["Tokenizing...", "Analyzing semantics...", "Calculating scores...", "Finalizing..."];

            for (let i = 0; i &lt;= 100; i += 5) {
                progressFill.style.width = i + "%";
                if (i % 25 === 0) statusText.textContent = stages[i/25] || "Completing...";
                await new Promise(r =&gt; setTimeout(r, 40));
            }

            const aiProbability = Math.floor(Math.random() * 100); 
            displayResults(aiProbability);
        });

        function displayResults(score) {
            scanningBox.style.display = 'none';
            resultsBox.style.display = 'block';
            detectBtn.disabled = false;

            const verdict = document.getElementById('verdict-text');
            const aiPercent = document.getElementById('ai-percent');
            const humanPercent = document.getElementById('human-percent');
            const perpVal = document.getElementById('perplexity-val');
            const burstVal = document.getElementById('burstiness-val');

            aiPercent.textContent = score + "%";
            humanPercent.textContent = (100 - score) + "%";
            
            if (score &gt; 70) {
                verdict.textContent = "Highly Likely AI";
                verdict.style.color = "var(--primary)";
                perpVal.textContent = "Low";
                burstVal.textContent = "Uniform";
            } else if (score &gt; 30) {
                verdict.textContent = "Mixed / AI Assisted";
                verdict.style.color = "#f59e0b";
                perpVal.textContent = "Moderate";
                burstVal.textContent = "Mixed";
            } else {
                verdict.textContent = "Likely Human Written";
                verdict.style.color = "#10b981";
                perpVal.textContent = "High";
                burstVal.textContent = "Natural";
            }

            initChart(score);
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>IBAN CHECKER FREE </title><link>https://www.laxmannepal.com.np/2025/12/iban-checker-free.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Fri, 26 Dec 2025 04:41:18 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-2529922046607280533</guid><description>&lt;!-- IBAN Master Ultra - Expanded Global Forensics (Blogger Compatible) --&gt;
&lt;div id="iban-master-root"&gt;
    &lt;script src="https://cdn.tailwindcss.com"&gt;&lt;/script&gt;
    &lt;style&gt;
        @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600;800&amp;family=JetBrains+Mono:wght@500;700&amp;display=swap');
        
        #iban-master-root {
            --emerald-600: #059669;
            --emerald-500: #10b981;
            font-family: 'Plus Jakarta Sans', sans-serif;
            color: #1e293b;
            line-height: 1.5;
            margin: 20px 0;
            background: #f8fafc;
            border-radius: 2rem;
            padding: 1rem;
        }

        #iban-master-root .glass-card {
            background: #ffffff;
            border: 1px solid #e2e8f0;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
            border-radius: 1.5rem;
        }

        #iban-master-root .monospace { font-family: 'JetBrains Mono', monospace; }

        #iban-master-root input::placeholder { color: #cbd5e1; }

        @media (max-width: 640px) {
            #iban-master-root .iban-text-responsive {
                font-size: 1.1rem !important;
                padding: 1rem !important;
            }
            #iban-master-root .header-title { font-size: 1.5rem !important; }
        }

        #iban-master-root .detail-pill {
            background: #f1f5f9;
            border-radius: 0.75rem;
            padding: 0.75rem;
            border: 1px solid #e2e8f0;
        }
        
        #iban-master-root .collapsible-trigger {
            all: unset;
            cursor: pointer;
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        #iban-master-root .tool-btn {
            transition: all 0.2s;
            cursor: pointer;
        }
        #iban-master-root .tool-btn:hover {
            transform: translateY(-1px);
            filter: brightness(0.95);
        }
    &lt;/style&gt;

    &lt;div class="max-w-4xl mx-auto"&gt;
        &lt;!-- Header --&gt;
        &lt;header class="text-center mb-6"&gt;
            &lt;div class="inline-flex p-3 bg-emerald-500/10 rounded-2xl mb-3 border border-emerald-500/20"&gt;
                &lt;svg class="w-6 h-6 text-emerald-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;
                    &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9"&gt;&lt;/path&gt;
                &lt;/svg&gt;
            &lt;/div&gt;
            &lt;h2 class="header-title text-3xl font-extrabold text-slate-900 m-0"&gt;
                IBAN&lt;span class="text-emerald-500"&gt;MASTER&lt;/span&gt;
            &lt;/h2&gt;
            &lt;p class="text-slate-400 mt-1 text-[10px] font-black uppercase tracking-[0.3em]"&gt;Full ISO-13616 Global Forensics&lt;/p&gt;
        &lt;/header&gt;

        &lt;!-- Main Input --&gt;
        &lt;div class="glass-card p-5 md:p-8 mb-4"&gt;
            &lt;div class="space-y-4"&gt;
                &lt;div class="flex justify-between items-center px-1"&gt;
                    &lt;label class="text-[9px] font-black uppercase tracking-widest text-emerald-600"&gt;Secure Forensic Input&lt;/label&gt;
                    &lt;div class="flex gap-3"&gt;
                        &lt;button onclick="document.getElementById('iban-input').value = ''; document.getElementById('forensic-zone').classList.add('hidden');" class="text-[9px] font-bold text-slate-400 hover:text-rose-500 transition-colors uppercase"&gt;Clear&lt;/button&gt;
                        &lt;span id="char-count" class="text-[9px] font-bold text-slate-400 monospace"&gt;READY&lt;/span&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="relative"&gt;
                    &lt;input 
                        type="text" 
                        id="iban-input"
                        autocomplete="off"
                        spellcheck="false"
                        placeholder="PASTE IBAN HERE..."
                        class="w-full bg-slate-50 border-2 border-slate-100 rounded-xl px-4 py-5 md:py-6 text-lg md:text-2xl font-bold monospace uppercase text-slate-800 outline-none focus:border-emerald-500 focus:bg-white transition-all iban-text-responsive shadow-inner"
                    &gt;
                    &lt;div id="quick-status" class="absolute right-4 top-1/2 -translate-y-1/2 opacity-0 scale-125 transition-all"&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- Quick Action Tools --&gt;
                &lt;div class="flex flex-wrap gap-2 mt-4"&gt;
                    &lt;button id="format-btn" class="tool-btn flex-1 bg-slate-100 text-slate-600 py-2 px-3 rounded-lg text-[10px] font-bold uppercase tracking-wider flex items-center justify-center gap-2"&gt;
                        &lt;svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M4 6h16M4 12h16m-7 6h7" stroke-width="2.5"/&gt;&lt;/svg&gt;
                        Format (4x4)
                    &lt;/button&gt;
                    &lt;button id="copy-btn" class="tool-btn flex-1 bg-emerald-500 text-white py-2 px-3 rounded-lg text-[10px] font-bold uppercase tracking-wider flex items-center justify-center gap-2"&gt;
                        &lt;svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2" stroke-width="2.5"/&gt;&lt;/svg&gt;
                        Copy Clean
                    &lt;/button&gt;
                    &lt;button onclick="document.getElementById('bulk-modal').classList.toggle('hidden')" class="tool-btn flex-1 bg-slate-800 text-white py-2 px-3 rounded-lg text-[10px] font-bold uppercase tracking-wider flex items-center justify-center gap-2"&gt;
                        &lt;svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" stroke-width="2.5"/&gt;&lt;/svg&gt;
                        Bulk Mode
                    &lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Forensic Results --&gt;
            &lt;div id="forensic-zone" class="mt-8 hidden animate-in fade-in slide-in-from-top-4"&gt;
                &lt;div id="main-badge" class="text-center py-3 px-4 rounded-xl text-[10px] font-black uppercase tracking-widest mb-6 border shadow-sm"&gt;&lt;/div&gt;

                &lt;div class="grid grid-cols-1 md:grid-cols-2 gap-4"&gt;
                    &lt;!-- Left: Basic Identifiers --&gt;
                    &lt;div class="space-y-3"&gt;
                        &lt;div class="detail-pill"&gt;
                            &lt;p class="text-[8px] font-black text-slate-400 uppercase mb-1"&gt;Region &amp; Currency&lt;/p&gt;
                            &lt;p id="res-country" class="text-sm font-extrabold text-slate-800"&gt;--&lt;/p&gt;
                        &lt;/div&gt;
                        &lt;div class="detail-pill"&gt;
                            &lt;p class="text-[8px] font-black text-slate-400 uppercase mb-1"&gt;Institution Name&lt;/p&gt;
                            &lt;p id="res-bank" class="text-sm font-extrabold text-slate-800"&gt;--&lt;/p&gt;
                        &lt;/div&gt;
                        &lt;div class="detail-pill"&gt;
                            &lt;p class="text-[8px] font-black text-slate-400 uppercase mb-1"&gt;Branch/Sort Code Detail&lt;/p&gt;
                            &lt;p id="res-branch" class="text-sm font-extrabold text-slate-800"&gt;--&lt;/p&gt;
                        &lt;/div&gt;
                        &lt;div class="detail-pill border-emerald-100 bg-emerald-50/30"&gt;
                            &lt;p class="text-[8px] font-black text-emerald-600 uppercase mb-1"&gt;Electronic Checksum&lt;/p&gt;
                            &lt;p id="res-math" class="monospace text-[10px] font-bold text-slate-600"&gt;--&lt;/p&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;

                    &lt;!-- Right: Structural Details --&gt;
                    &lt;div class="space-y-3"&gt;
                        &lt;div class="p-4 bg-white rounded-xl border border-slate-100 shadow-sm"&gt;
                            &lt;h3 class="text-[8px] font-black text-slate-400 uppercase mb-3"&gt;Extracted Account Data&lt;/h3&gt;
                            &lt;div id="detail-grid" class="grid grid-cols-1 gap-2"&gt;
                                &lt;!-- Dynamic Fields --&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;!-- DNA Visualizer --&gt;
                &lt;div class="mt-4 p-4 bg-slate-50 rounded-xl border border-slate-200"&gt;
                    &lt;p class="text-[8px] font-black text-slate-400 uppercase mb-3"&gt;Structural DNA Mapping&lt;/p&gt;
                    &lt;div id="dna-visual" class="flex flex-wrap gap-1.5"&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Bulk Scanner Modal (Hidden by default) --&gt;
        &lt;div id="bulk-modal" class="hidden glass-card p-6 mb-4 border-emerald-200 bg-emerald-50/20"&gt;
            &lt;h3 class="text-xs font-black uppercase tracking-widest mb-4"&gt;Bulk Batch Scanner&lt;/h3&gt;
            &lt;textarea id="bulk-input" rows="4" placeholder="Enter multiple IBANs (one per line)..." class="w-full p-4 bg-white border border-emerald-100 rounded-xl monospace text-xs outline-none focus:border-emerald-500"&gt;&lt;/textarea&gt;
            &lt;div id="bulk-results" class="mt-4 space-y-2"&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- Registry Footer --&gt;
        &lt;div class="glass-card overflow-hidden border-none opacity-80"&gt;
            &lt;button onclick="document.getElementById('coverage-list').classList.toggle('hidden')" class="collapsible-trigger px-6 py-4 text-[10px] font-black text-slate-500 uppercase tracking-widest hover:bg-slate-50"&gt;
                &lt;span&gt;Show Covered Jurisdictions&lt;/span&gt;
                &lt;svg id="arrow-icon" class="w-3 h-3 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M19 9l-7 7-7-7" stroke-width="3"/&gt;&lt;/svg&gt;
            &lt;/button&gt;
            &lt;div id="coverage-list" class="hidden px-6 pb-6 grid grid-cols-2 sm:grid-cols-4 gap-2 text-[9px] text-slate-400 border-t border-slate-50 pt-4"&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
    (function() {
        const REGISTRY = {
            AD: { n: "Andorra", l: 24, c: "EUR", f: [2,2,4,4,12], lab: ["CC","CK","Bank","Branch","Account"] },
            AE: { n: "United Arab Emirates", l: 23, c: "AED", f: [2,2,3,16], lab: ["CC","CK","Bank","Account"] },
            AL: { n: "Albania", l: 28, c: "ALL", f: [2,2,3,4,1,16], lab: ["CC","CK","Bank","Branch","Check","Account"] },
            AT: { n: "Austria", l: 20, c: "EUR", f: [2,2,5,11], lab: ["CC","CK","Bank/Branch","Account"] },
            AZ: { n: "Azerbaijan", l: 28, c: "AZN", f: [2,2,4,20], lab: ["CC","CK","Bank","Account"] },
            BA: { n: "Bosnia &amp; Herz.", l: 20, c: "BAM", f: [2,2,3,3,8,2], lab: ["CC","CK","Bank","Branch","Account","Check"] },
            BE: { n: "Belgium", l: 16, c: "EUR", f: [2,2,3,7,2], lab: ["CC","CK","Bank","Account","Check"] },
            BG: { n: "Bulgaria", l: 22, c: "BGN", f: [2,2,4,4,2,8], lab: ["CC","CK","Bank","Branch","Type","Account"] },
            BH: { n: "Bahrain", l: 22, c: "BHD", f: [2,2,4,14], lab: ["CC","CK","Bank","Account"] },
            BR: { n: "Brazil", l: 29, c: "BRL", f: [2,2,8,5,10,1,1], lab: ["CC","CK","Bank","Branch","Account","Type","Check"] },
            CH: { n: "Switzerland", l: 21, c: "CHF", f: [2,2,5,12], lab: ["CC","CK","Bank","Account"] },
            CY: { n: "Cyprus", l: 28, c: "EUR", f: [2,2,3,5,16], lab: ["CC","CK","Bank","Branch","Account"] },
            CZ: { n: "Czech Republic", l: 24, c: "CZK", f: [2,2,4,6,10], lab: ["CC","CK","Bank","Prefix","Account"] },
            DE: { n: "Germany", l: 22, c: "EUR", f: [2,2,8,10], lab: ["CC","CK","Bank (BLZ)","Account"] },
            DK: { n: "Denmark", l: 18, c: "DKK", f: [2,2,4,10], lab: ["CC","CK","Bank","Account"] },
            DO: { n: "Dominican Rep.", l: 28, c: "DOP", f: [2,2,4,20], lab: ["CC","CK","Bank","Account"] },
            EE: { n: "Estonia", l: 20, c: "EUR", f: [2,2,2,2,11,1], lab: ["CC","CK","Bank","Branch","Account","Check"] },
            ES: { n: "Spain", l: 24, c: "EUR", f: [2,2,4,4,2,10], lab: ["CC","CK","Bank","Branch","Check","Account"] },
            FI: { n: "Finland", l: 18, c: "EUR", f: [2,2,6,7,1], lab: ["CC","CK","Bank/Branch","Account","Check"] },
            FR: { n: "France", l: 27, c: "EUR", f: [2,2,5,5,11,2], lab: ["CC","CK","Bank","Branch","Account","Check"] },
            GB: { n: "United Kingdom", l: 22, c: "GBP", f: [2,2,4,6,8], lab: ["CC","CK","Bank Code","Sort Code","Account"] },
            GE: { n: "Georgia", l: 22, c: "GEL", f: [2,2,2,16], lab: ["CC","CK","Bank","Account"] },
            GR: { n: "Greece", l: 27, c: "EUR", f: [2,2,3,4,16], lab: ["CC","CK","Bank","Branch","Account"] },
            GT: { n: "Guatemala", l: 28, c: "GTQ", f: [2,2,4,20], lab: ["CC","CK","Bank","Account"] },
            HU: { n: "Hungary", l: 28, c: "HUF", f: [2,2,3,4,1,15,1], lab: ["CC","CK","Bank","Branch","Check","Account","Check"] },
            IE: { n: "Ireland", l: 22, c: "EUR", f: [2,2,4,6,8], lab: ["CC","CK","Bank","Branch","Account"] },
            IL: { n: "Israel", l: 23, c: "ILS", f: [2,2,3,3,13], lab: ["CC","CK","Bank","Branch","Account"] },
            IS: { n: "Iceland", l: 26, c: "ISK", f: [2,2,4,2,6,10], lab: ["CC","CK","Bank","Branch","Account","ID"] },
            IT: { n: "Italy", l: 27, c: "EUR", f: [2,2,1,5,5,12], lab: ["CC","CK","Check","ABI","CAB","Account"] },
            KW: { n: "Kuwait", l: 30, c: "KWD", f: [2,2,4,22], lab: ["CC","CK","Bank","Account"] },
            LB: { n: "Lebanon", l: 28, c: "LBP", f: [2,2,4,20], lab: ["CC","CK","Bank","Account"] },
            LT: { n: "Lithuania", l: 20, c: "EUR", f: [2,2,5,11], lab: ["CC","CK","Bank","Account"] },
            LU: { n: "Luxembourg", l: 20, c: "EUR", f: [2,2,3,13], lab: ["CC","CK","Bank","Account"] },
            LV: { n: "Latvia", l: 21, c: "EUR", f: [2,2,4,13], lab: ["CC","CK","Bank","Account"] },
            MC: { n: "Monaco", l: 27, c: "EUR", f: [2,2,5,5,11,2], lab: ["CC","CK","Bank","Branch","Account","Check"] },
            MD: { n: "Moldova", l: 24, c: "MDL", f: [2,2,2,18], lab: ["CC","CK","Bank","Account"] },
            MT: { n: "Malta", l: 31, c: "EUR", f: [2,2,4,5,18], lab: ["CC","CK","Bank","Branch","Account"] },
            NL: { n: "Netherlands", l: 18, c: "EUR", f: [2,2,4,10], lab: ["CC","CK","Bank","Account"] },
            NO: { n: "Norway", l: 15, c: "NOK", f: [2,2,4,6,1], lab: ["CC","CK","Bank","Account","Check"] },
            PK: { n: "Pakistan", l: 24, c: "PKR", f: [2,2,4,16], lab: ["CC","CK","Bank","Account"] },
            PL: { n: "Poland", l: 28, c: "PLN", f: [2,2,8,16], lab: ["CC","CK","Bank/Branch","Account"] },
            PT: { n: "Portugal", l: 25, c: "EUR", f: [2,2,4,4,11,2], lab: ["CC","CK","Bank","Branch","Account","Check"] },
            QA: { n: "Qatar", l: 29, c: "QAR", f: [2,2,4,21], lab: ["CC","CK","Bank","Account"] },
            RO: { n: "Romania", l: 24, c: "RON", f: [2,2,4,16], lab: ["CC","CK","Bank","Account"] },
            SA: { n: "Saudi Arabia", l: 24, c: "SAR", f: [2,2,2,18], lab: ["CC","CK","Bank","Account"] },
            SE: { n: "Sweden", l: 24, c: "SEK", f: [2,2,3,17], lab: ["CC","CK","Bank","Account"] },
            SI: { n: "Slovenia", l: 19, c: "EUR", f: [2,2,5,8,2], lab: ["CC","CK","Bank","Account","Check"] },
            SK: { n: "Slovakia", l: 24, c: "EUR", f: [2,2,4,6,10], lab: ["CC","CK","Bank","Prefix","Account"] },
            TR: { n: "Turkey", l: 26, c: "TRY", f: [2,2,5,1,16], lab: ["CC","CK","Bank","Check","Account"] },
            VG: { n: "Virgin Islands (UK)", l: 24, c: "USD", f: [2,2,4,16], lab: ["CC","CK","Bank","Account"] }
        };

        const BANKS = {
            "GB": { "RBOS": "Royal Bank of Scotland", "BARC": "Barclays Bank PLC", "LOYD": "Lloyds Bank", "MIDL": "HSBC UK", "NWAD": "NatWest", "SANT": "Santander UK" },
            "DE": { "3704": "Commerzbank", "1002": "Bundesbank", "1007": "Deutsche Bank", "5005": "Sparkasse", "2002": "HypoVereinsbank" },
            "NL": { "ABNA": "ABN AMRO", "INGB": "ING Bank", "RABO": "Rabobank" }
        };

        const BRANCHES = {
            "GB": { "204545": "Barclays Central London", "400527": "HSBC Canary Wharf", "160015": "RBS Edinburgh Head Office" }
        };

        const root = document.getElementById('iban-master-root');
        const input = root.querySelector('#iban-input');
        const zone = root.querySelector('#forensic-zone');

        // Logic functions
        function getCleanValue(val) {
            return val.toUpperCase().replace(/[^A-Z0-9]/g, '');
        }

        function calculateChecksum(iban) {
            const rearranged = iban.substring(4) + iban.substring(0, 4);
            const numeric = Array.from(rearranged).map(c =&gt; {
                const code = c.charCodeAt(0);
                return (code &gt;= 65 &amp;&amp; code &lt;= 90) ? (code - 55).toString() : c;
            }).join('');
            return { numeric, mod: BigInt(numeric) % 97n };
        }

        function validate(iban) {
            const cc = iban.substring(0, 2);
            const data = REGISTRY[cc];
            if (!data) return { valid: false, msg: 'FAIL: UNKNOWN COUNTRY PREFIX' };
            if (iban.length !== data.l) return { valid: false, msg: `FAIL: LENGTH MISMATCH (EXPECTED ${data.l})` };
            const { mod } = calculateChecksum(iban);
            if (mod !== 1n) return { valid: false, msg: 'FAIL: CHECKSUM INVALID (ISO 7064)' };
            return { valid: true, msg: 'PASS: AUTHENTIC SIGNATURE', data };
        }

        // Action Handlers
        root.querySelector('#format-btn').onclick = () =&gt; {
            const clean = getCleanValue(input.value);
            input.value = clean.match(/.{1,4}/g)?.join(' ') || clean;
        };

        root.querySelector('#copy-btn').onclick = (e) =&gt; {
            const clean = getCleanValue(input.value);
            const dummy = document.createElement("textarea");
            document.body.appendChild(dummy);
            dummy.value = clean;
            dummy.select();
            document.execCommand("copy");
            document.body.removeChild(dummy);
            e.target.textContent = "COPIED!";
            setTimeout(() =&gt; e.target.textContent = "Copy Clean", 1500);
        };

        root.querySelector('#bulk-input').oninput = (e) =&gt; {
            const lines = e.target.value.split('\n');
            const resDiv = root.querySelector('#bulk-results');
            resDiv.innerHTML = '';
            lines.filter(l =&gt; l.trim()).forEach(l =&gt; {
                const clean = getCleanValue(l);
                const status = validate(clean);
                const el = document.createElement('div');
                el.className = `p-2 rounded text-[9px] monospace border flex justify-between ${status.valid ? 'bg-emerald-50 border-emerald-100' : 'bg-rose-50 border-rose-100'}`;
                el.innerHTML = `&lt;span&gt;${clean}&lt;/span&gt; &lt;b&gt;${status.valid ? 'VALID' : 'INVALID'}&lt;/b&gt;`;
                resDiv.appendChild(el);
            });
        };

        input.addEventListener('input', (e) =&gt; {
            let val = getCleanValue(e.target.value);
            root.querySelector('#char-count').textContent = `${val.length} CHARS`;
            if (val.length &lt; 4) {
                zone.classList.add('hidden');
                root.querySelector('#quick-status').style.opacity = '0';
                return;
            }
            const res = validate(val);
            render(val, res, res.data);
        });

        function render(iban, res, data) {
            zone.classList.remove('hidden');
            const qs = root.querySelector('#quick-status');
            qs.style.opacity = '1';
            qs.innerHTML = res.valid ? '✅' : '❌';

            const badge = root.querySelector('#main-badge');
            badge.textContent = res.msg;
            badge.className = `text-center py-3 px-4 rounded-xl text-[10px] font-black uppercase tracking-widest mb-6 border shadow-sm ${res.valid ? 'bg-emerald-50 text-emerald-600 border-emerald-100' : 'bg-rose-50 text-rose-600 border-rose-100'}`;

            root.querySelector('#res-country').textContent = data ? `${data.n} (${data.c})` : 'N/A';
            
            let bankName = "Unknown/Private Institution";
            let branchName = "Detecting...";
            
            if (data) {
                const cc = iban.substring(0,2);
                const bankCodeLen = data.f[2];
                const bankCode = iban.substring(4, 4 + bankCodeLen);
                bankName = BANKS[cc]?.[bankCode] || `Bank ID: ${bankCode}`;

                if (data.lab.includes("Branch") || data.lab.includes("Sort Code") || data.lab.includes("CAB")) {
                    const branchIdx = data.lab.findIndex(l =&gt; ["Branch", "Sort Code", "CAB"].includes(l));
                    let offset = 0;
                    for(let i=0; i&lt;branchIdx; i++) offset += data.f[i];
                    const bCode = iban.substring(offset, offset + data.f[branchIdx]);
                    branchName = BRANCHES[cc]?.[bCode] || `Branch ID: ${bCode}`;
                } else {
                    branchName = "Integrated/Main Branch";
                }
                
                const { numeric, mod } = calculateChecksum(iban);
                root.querySelector('#res-math').textContent = `MOD97 Check: ${numeric.substring(0,8)}... % 97 = ${mod}`;
            }
            
            root.querySelector('#res-bank').textContent = bankName;
            root.querySelector('#res-branch').textContent = branchName;

            const detailGrid = root.querySelector('#detail-grid');
            const dnaVisual = root.querySelector('#dna-visual');
            detailGrid.innerHTML = '';
            dnaVisual.innerHTML = '';

            if (data) {
                let offset = 0;
                data.f.forEach((len, i) =&gt; {
                    const chunk = iban.substring(offset, offset + len);
                    offset += len;
                    if (!chunk) return;
                    const row = document.createElement('div');
                    row.className = "flex justify-between items-center text-[10px] border-b border-slate-50 py-1";
                    row.innerHTML = `&lt;span class="text-slate-400 font-bold uppercase"&gt;${data.lab[i] || 'Data'}&lt;/span&gt; &lt;span class="monospace font-black"&gt;${chunk}&lt;/span&gt;`;
                    detailGrid.appendChild(row);
                    const dna = document.createElement('span');
                    dna.className = "px-2 py-1 bg-white border border-slate-200 rounded text-[9px] monospace font-bold shadow-sm";
                    dna.textContent = chunk;
                    dnaVisual.appendChild(dna);
                });
            }
        }

        // Init Registry display
        const clist = root.querySelector('#coverage-list');
        Object.keys(REGISTRY).sort().forEach(cc =&gt; {
            const el = document.createElement('div');
            el.className = "flex justify-between border-b border-slate-50 pb-1";
            el.innerHTML = `&lt;span class="font-black text-emerald-600"&gt;${cc}&lt;/span&gt; &lt;span&gt;${REGISTRY[cc].n}&lt;/span&gt;`;
            clist.appendChild(el);
        });
    })();
    &lt;/script&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>50+ AI Tools That Are Actually Free</title><link>https://www.laxmannepal.com.np/2025/12/50-ai-tools-that-are-actually-free.html</link><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sun, 21 Dec 2025 03:32:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-2480320595380201606</guid><description>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;AI Tools Directory&lt;/title&gt;
    &lt;style&gt;
        /* Simple Blogger-Friendly CSS */
        body {
            font-family: Arial, Helvetica, sans-serif;
            line-height: 1.6;
            color: #333;
            background: white;
            margin: 0;
            padding: 0;
        }
        
        .ai-directory {
            width: 100%;
        }
        
        .ai-header {
            text-align: center;
            margin: 0 0 25px 0;
            padding: 0;
        }
        
        .ai-title {
            color: #2c3e50;
            font-size: 24px;
            margin: 0 0 10px 0;
            padding: 0;
        }
        
        .ai-subtitle {
            color: #666;
            font-size: 14px;
            margin: 0;
            padding: 0;
        }
        
        .ai-category {
            margin: 0 0 30px 0;
            padding: 0;
        }
        
        .category-title {
            color: #2980b9;
            font-size: 18px;
            margin: 0 0 15px 0;
            padding: 0 0 5px 0;
            border-bottom: 1px solid #eee;
        }
        
        .tool-box {
            background: #f8f9fa;
            margin: 0 0 10px 0;
            padding: 12px;
            border-left: 3px solid #3498db;
        }
        
        .tool-box:hover {
            background: #e8f4fc;
            cursor: pointer;
        }
        
        .tool-name {
            font-weight: bold;
            color: #2c3e50;
            font-size: 15px;
            margin: 0 0 5px 0;
            padding: 0;
        }
        
        .tool-desc {
            color: #666;
            font-size: 13px;
            margin: 0 0 8px 0;
            padding: 0;
        }
        
        .tag {
            display: inline-block;
            background: #e8f4fc;
            color: #2980b9;
            padding: 2px 6px;
            margin: 0 5px 5px 0;
            font-size: 11px;
            border-radius: 2px;
        }
        
        .click-text {
            color: #3498db;
            font-size: 11px;
            float: right;
        }
        
        .ai-footer {
            text-align: center;
            margin: 30px 0 0 0;
            padding: 20px 0 0 0;
            border-top: 1px solid #eee;
            color: #777;
            font-size: 12px;
        }
        
        /* Mobile fix */
        @media (max-width: 480px) {
            .tool-name {
                font-size: 14px;
            }
            
            .tool-desc {
                font-size: 12px;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="ai-directory"&gt;
        &lt;div class="ai-header"&gt;
            &lt;div class="ai-title"&gt;AI Tools Directory&lt;/div&gt;
            &lt;div class="ai-subtitle"&gt;Click on any tool to visit its website&lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- AI Chatbots --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#129302; AI Chatbots&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://aistudio.google.com/app/prompts/new_chat"&gt;
                &lt;div class="tool-name"&gt;AI Studio &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Gemini 3 Pro • 100 daily uses • Sign-up required&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Free&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://copilot.microsoft.com"&gt;
                &lt;div class="tool-name"&gt;Microsoft Copilot &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;GPT-5.1 • Unlimited use&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Top&lt;/span&gt; &lt;span class="tag"&gt;Unlimited&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://www.kimi.com/"&gt;
                &lt;div class="tool-name"&gt;Kimi &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Kimi K2 (Thinking) • Slides • Sign-up required&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;New&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://chat.qwen.ai/"&gt;
                &lt;div class="tool-name"&gt;Qwen &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Qwen3-Max • Unlimited&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Unlimited&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://grok.com/"&gt;
                &lt;div class="tool-name"&gt;Grok &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Grok 4 + Grok 3 Fast • 96 daily uses&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Image Generation --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#127912; Image Generation&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://gemini.google.com/"&gt;
                &lt;div class="tool-name"&gt;Gemini Image &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Nano Banana • 100 per day • Sign-up required&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Free&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://www.bing.com/images/create"&gt;
                &lt;div class="tool-name"&gt;Bing Create &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;GPT-4o • MAI-Image-1 • Editing&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Unlimited&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://dreamina.capcut.com/ai-tool/home"&gt;
                &lt;div class="tool-name"&gt;Dreamina &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;15 prompts daily • Seedream 4.0&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://pigenai.art/"&gt;
                &lt;div class="tool-name"&gt;PigenAI &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Imagen 4 • Qwen • Nano Banana&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Unlimited&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Video Generation --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#127916; Video Generation&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://grok.com/imagine"&gt;
                &lt;div class="tool-name"&gt;Grok Imagine &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;100 daily • Imagine 0.9&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://openai.com/index/sora/"&gt;
                &lt;div class="tool-name"&gt;Sora &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;6 daily • Sign-up required&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://geminigen.ai/"&gt;
                &lt;div class="tool-name"&gt;GeminiGen AI &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Sora 2 • Veo 3.1 • Nano Banana Pro&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;Unlimited&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Coding AIs --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#128187; Coding AIs&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://github.com/features/copilot"&gt;
                &lt;div class="tool-name"&gt;GitHub Copilot &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;AI-powered code completion&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://antigravity.google/"&gt;
                &lt;div class="tool-name"&gt;Google Antigravity &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Gemini 3 • Opus 4.5 • Weekly limits&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://codeweb.chat/"&gt;
                &lt;div class="tool-name"&gt;Code Web Chat &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Coding AI • No sign-up required&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;No Sign-Up&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Audio Generation --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#127925; Audio Generation&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://suno.com/"&gt;
                &lt;div class="tool-name"&gt;Suno &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;10 daily music generation&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://labs.google/fx/tools/music-fx"&gt;
                &lt;div class="tool-name"&gt;MusicFX &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Google's AI music generator&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://elevenlabs.io/"&gt;
                &lt;div class="tool-name"&gt;ElevenLabs &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Text to speech • No sign-up required&lt;/div&gt;
                &lt;div&gt;&lt;span class="tag"&gt;No Sign-Up&lt;/span&gt;&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Self-Hosting --&gt;
        &lt;div class="ai-category"&gt;
            &lt;div class="category-title"&gt;&#128421;️ Self-Hosting Tools&lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://jan.ai/"&gt;
                &lt;div class="tool-name"&gt;Jan &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Self-hosted AI platform&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://lmstudio.ai/"&gt;
                &lt;div class="tool-name"&gt;LM Studio &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Local model management&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tool-box" data-link="https://github.com/ggerganov/llama.cpp"&gt;
                &lt;div class="tool-name"&gt;llama.cpp &lt;span class="click-text"&gt;Click to open&lt;/span&gt;&lt;/div&gt;
                &lt;div class="tool-desc"&gt;Self-hosted transformer LLMs&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div class="ai-footer"&gt;
            &lt;div&gt;All tools open in new tabs when clicked&lt;/div&gt;
            &lt;div&gt;Directory updated regularly&lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Simple click functionality
        document.querySelectorAll('.tool-box').forEach(box =&gt; {
            box.addEventListener('click', function() {
                const link = this.getAttribute('data-link');
                if (link) {
                    // Visual feedback
                    this.style.background = '#d4edda';
                    setTimeout(() =&gt; {
                        this.style.background = '';
                    }, 200);
                    
                    // Open link
                    window.open(link, '_blank');
                }
            });
            
            // Keyboard support
            box.setAttribute('tabindex', '0');
            box.addEventListener('keypress', function(e) {
                if (e.key === 'Enter' || e.key === ' ') {
                    const link = this.getAttribute('data-link');
                    if (link) {
                        window.open(link, '_blank');
                    }
                }
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>You Should see this </title><link>https://www.laxmannepal.com.np/2025/12/watch-movie-online-sites.html</link><category>Websites</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sat, 20 Dec 2025 23:34:20 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-5256536299446236446</guid><description>&lt;div style="background:#f8f9fa; padding:20px; border-radius:10px; font-family:Arial, sans-serif; max-width:900px; margin:0 auto;"&gt;
  &lt;h2 style="text-align:center; color:#333; margin-bottom:20px;"&gt;&#127916; Ultimate Streaming Sites Directory&lt;/h2&gt;
  &lt;p style="text-align:center; color:#666; margin-bottom:25px;"&gt;48+ streaming sites • Click any button to open in new tab&lt;/p&gt;
  
  &lt;div style="display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:15px;"&gt;
    
    &lt;!-- Original 10 Sites --&gt;
    &lt;a href="https://flixer.su/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #2ecc71; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Flixer&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Most Popular Streaming&lt;/div&gt;
      &lt;div style="background:#e8f6ef; color:#27ae60; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;NO ADS&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://www.cineby.app/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e74c3c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Cineby&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Netflix-like Interface&lt;/div&gt;
      &lt;div style="background:#ffeaea; color:#e74c3c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Netflix UI&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://www.bitcine.app/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e74c3c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;BitCine&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Netflix-style Streaming&lt;/div&gt;
      &lt;div style="background:#ffeaea; color:#e74c3c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Netflix UI&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://veloratv.ru/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e74c3c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;VeloraTV&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Streaming Service&lt;/div&gt;
      &lt;div style="background:#ffeaea; color:#e74c3c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Netflix UI&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://xprime.stream/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e74c3c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;XPrime TV&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Premium Streaming&lt;/div&gt;
      &lt;div style="background:#ffeaea; color:#e74c3c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Netflix UI&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://www.fmovies.gd/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Fmovies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; TV Shows&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://cinegram.net/home" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e67e22; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Cinegram&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Bollywood &amp; Hollywood&lt;/div&gt;
      &lt;div style="background:#fef5e7; color:#e67e22; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Movies&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://1337x.to/home/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #f39c12; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;1337x&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Popular Torrent Site&lt;/div&gt;
      &lt;div style="background:#fef9e7; color:#f39c12; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Torrents&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://docplus.com/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #9b59b6; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Docplus&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Documentary Service&lt;/div&gt;
      &lt;div style="background:#f4ecf7; color:#9b59b6; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Documentaries&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://www.documentaryarea.com/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #9b59b6; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Documentary Area&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Documentary Collection&lt;/div&gt;
      &lt;div style="background:#f4ecf7; color:#9b59b6; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Documentaries&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://pstream.mov/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #1abc9c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;PStream&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;4K Streaming Tutorial&lt;/div&gt;
      &lt;div style="background:#e8f8f5; color:#1abc9c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Tutorial&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;!-- Additional 38 Sites --&gt;
    &lt;a href="https://soap2night.cc/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Soap2Night&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Movies &amp; TV&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://dorawatch.net/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;DoraWatch&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Stream Anytime&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://wmovies.one/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;WMovies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Ad-Light Experience&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://hydrahd.ru/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;HydraHD&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;1080p HD Movies&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://cineby.gd/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #e74c3c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Cineby (GD)&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; TV Shows&lt;/div&gt;
      &lt;div style="background:#ffeaea; color:#e74c3c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Netflix UI&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://cinema.bz/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Cinema.bz&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Premier Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Premium&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://tmovie.tv/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Tmovie&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; Anime&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://goojara.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Goojara&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;HD Movies &amp; TV&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Free HD&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://mapple.mov/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Mapple&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; Audiobooks&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://popcornmovies.org/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Popcorn Movies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://gomovies.gg/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;GoMovies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Popular Platform&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://onionplay.mx/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;OnionPlay&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; TV&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://lookmovie2.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;LookMovie&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;HD Streaming&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Quality&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://pressplay.top/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;PressPlay&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://moviesjoytv.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;MoviesJoy&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Joyful Interface&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://fmovies.co/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Fmovies.co&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Alternative Domain&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://soap2dayhdz.com/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Soap2Day HD&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;HD Version&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://projectfreetv.sx/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;ProjectFreeTV&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free TV Shows&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;TV Shows&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://sflix.ps/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;SFlix&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://theflixertv.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;The Flixer&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Alternative to Flixer&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://myflixerz.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;MyFlixerz&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Movies &amp; TV&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://hdtoday.tv/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;HDToday&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;HD Streaming&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Quality&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://flixhq.to/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;FlixHQ&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Streaming Platform&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://hurawatch.cc/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Hurawatch&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Anime &amp; More&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Anime&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://broflix.si/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Broflix&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Streaming Platform&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://ridomovies.tv/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;RidoMovies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://123moviesfree.net/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;123Movies Free&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Classic Alternative&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://hdtoday.cc/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;HDToday (CC)&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Alternative Domain&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://vidplay.org/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Vidplay&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Video Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://putlocker.pe/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Putlocker&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Classic Site&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://yesmovies.ag/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;YesMovies&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Popular Site&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://watchseries.pe/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;WatchSeries&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;TV Series Focus&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;TV Shows&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://primewire.mov/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;PrimeWire&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Long-standing Site&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://watch32.sx/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Watch32&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://flickeraddon.pages.dev/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #1abc9c; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;Flicker Addon&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Enhanced Streaming&lt;/div&gt;
      &lt;div style="background:#e8f8f5; color:#1abc9c; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Addon&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://streamm4u.com.co/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #3498db; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;StreamM4U&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;Free Streaming&lt;/div&gt;
      &lt;div style="background:#ebf5fb; color:#2980b9; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;Streaming&lt;/div&gt;
    &lt;/a&gt;
    
    &lt;a href="https://hdhub4u/" target="_blank" style="display:block; background:white; padding:15px; border-radius:8px; text-decoration:none; color:#333; border-left:4px solid #0984e3; box-shadow:0 2px 5px rgba(0,0,0,0.1); transition:0.3s;"&gt;
      &lt;div style="font-weight:bold; color:#2c3e50;"&gt;HDHub4U&lt;/div&gt;
      &lt;div style="font-size:13px; color:#666; margin:5px 0;"&gt;HD Content Hub&lt;/div&gt;
      &lt;div style="background:#d6eaf8; color:#0984e3; display:inline-block; font-size:11px; padding:2px 8px; border-radius:3px;"&gt;HD Hub&lt;/div&gt;
    &lt;/a&gt;
    
  &lt;/div&gt;
  
  &lt;div style="margin-top:25px; padding:15px; background:#e8f4fc; border-radius:8px; text-align:center;"&gt;
    &lt;div style="display:flex; justify-content:center; flex-wrap:wrap; gap:10px; margin-bottom:10px;"&gt;
      &lt;span style="background:#2ecc71; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;NO ADS&lt;/span&gt;
      &lt;span style="background:#e74c3c; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;Netflix UI&lt;/span&gt;
      &lt;span style="background:#3498db; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;Streaming&lt;/span&gt;
      &lt;span style="background:#0984e3; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;HD Quality&lt;/span&gt;
      &lt;span style="background:#f39c12; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;Torrents&lt;/span&gt;
      &lt;span style="background:#9b59b6; color:white; padding:3px 10px; border-radius:20px; font-size:12px;"&gt;Documentaries&lt;/span&gt;
    &lt;/div&gt;
    &lt;div style="font-size:12px; color:#666;"&gt;
      All sites open in new tab • 48 streaming sites • Use at your own risk
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
  /* Hover effect for all buttons */
  a[style*="display:block; background:white;"]:hover {
    transform: translateY(-3px);
    box-shadow: 0 5px 15px rgba(0,0,0,0.1) !important;
  }
  
  /* Responsive design */
  @media (max-width: 768px) {
    div[style*="grid-template-columns"] {
      grid-template-columns: 1fr !important;
    }
    div[style*="max-width:900px"] {
      padding: 15px !important;
    }
  }
  
  @media (max-width: 480px) {
    div[style*="grid-template-columns"] {
      gap: 10px !important;
    }
    a[style*="display:block; background:white;"] {
      padding: 12px !important;
    }
  }
&lt;/style&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>YouTube Analytics</title><link>https://www.laxmannepal.com.np/2025/12/youtube-analytics.html</link><category>YouTube Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Tue, 16 Dec 2025 03:46:07 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-4374932935879249131</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;YouTube Analytics Pro Dashboard&lt;/title&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&amp;display=swap" rel="stylesheet"&gt;
    &lt;style&gt;
        :root {
            --primary-blue: #4285F4;
            --primary-red: #FF4B4B;
            --accent-green: #34A853;
            --accent-yellow: #FBBC05;
            --accent-purple: #9C72F3;
            --light-bg: #F8F9FA;
            --card-bg: #FFFFFF;
            --text-dark: #202124;
            --text-medium: #5F6368;
            --text-light: #9AA0A6;
            --border-color: #DADCE0;
            --shadow-sm: 0 1px 3px rgba(0,0,0,0.08);
            --shadow-md: 0 4px 12px rgba(0,0,0,0.08);
            --shadow-lg: 0 8px 24px rgba(0,0,0,0.1);
            --border-radius: 16px;
            --transition: all 0.25s ease;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
            background-color: var(--light-bg);
            color: var(--text-dark);
            line-height: 1.6;
            padding: 20px;
            min-height: 100vh;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
        }

        header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 32px;
            padding-bottom: 20px;
            border-bottom: 1px solid var(--border-color);
        }

        .logo {
            display: flex;
            align-items: center;
            gap: 12px;
        }

        .logo-icon {
            color: var(--primary-red);
            font-size: 2.2rem;
        }

        .logo-text h1 {
            font-size: 1.8rem;
            font-weight: 700;
            background: linear-gradient(135deg, var(--primary-red) 0%, var(--primary-blue) 100%);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }

        .logo-text p {
            font-size: 0.9rem;
            color: var(--text-medium);
            font-weight: 400;
        }

        .input-section {
            background: var(--card-bg);
            border-radius: var(--border-radius);
            padding: 28px;
            box-shadow: var(--shadow-md);
            margin-bottom: 24px;
            border: 1px solid var(--border-color);
        }

        .input-title {
            display: flex;
            align-items: center;
            gap: 12px;
            margin-bottom: 20px;
        }

        .input-title i {
            color: var(--primary-blue);
            font-size: 1.5rem;
        }

        .input-title h2 {
            font-size: 1.4rem;
            font-weight: 600;
        }

        .input-group {
            display: grid;
            grid-template-columns: 1fr auto;
            gap: 16px;
            margin-bottom: 16px;
        }

        @media (max-width: 768px) {
            .input-group {
                grid-template-columns: 1fr;
            }
        }

        #channelInput {
            padding: 16px 20px;
            border: 2px solid var(--border-color);
            border-radius: 12px;
            font-size: 1rem;
            transition: var(--transition);
            background: var(--light-bg);
        }

        #channelInput:focus {
            outline: none;
            border-color: var(--primary-blue);
            box-shadow: 0 0 0 3px rgba(66, 133, 244, 0.15);
            background: white;
        }

        #channelInput::placeholder {
            color: var(--text-light);
        }

        .primary-btn {
            padding: 16px 32px;
            background: linear-gradient(135deg, var(--primary-blue) 0%, #3367D6 100%);
            color: white;
            border: none;
            border-radius: 12px;
            font-size: 1rem;
            font-weight: 600;
            cursor: pointer;
            transition: var(--transition);
            display: flex;
            align-items: center;
            gap: 10px;
            justify-content: center;
        }

        .primary-btn:hover {
            transform: translateY(-2px);
            box-shadow: var(--shadow-lg);
        }

        .input-note {
            font-size: 0.85rem;
            color: var(--text-medium);
            margin-top: 12px;
            padding-left: 8px;
        }

        .input-note i {
            color: var(--accent-yellow);
            margin-right: 6px;
        }

        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
            gap: 20px;
            margin-bottom: 28px;
        }

        .stat-card {
            background: var(--card-bg);
            border-radius: var(--border-radius);
            padding: 24px;
            box-shadow: var(--shadow-md);
            border: 1px solid var(--border-color);
            transition: var(--transition);
            position: relative;
            overflow: hidden;
        }

        .stat-card:hover {
            transform: translateY(-5px);
            box-shadow: var(--shadow-lg);
        }

        .stat-card::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            width: 6px;
            height: 100%;
            background: var(--primary-blue);
        }

        .stat-card.subscribers::before { background: var(--primary-red); }
        .stat-card.views::before { background: var(--accent-green); }
        .stat-card.videos::before { background: var(--accent-purple); }
        .stat-card.engagement::before { background: var(--accent-yellow); }

        .stat-header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 16px;
        }

        .stat-icon {
            width: 48px;
            height: 48px;
            border-radius: 12px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.3rem;
            color: white;
        }

        .subscribers .stat-icon { background: var(--primary-red); }
        .views .stat-icon { background: var(--accent-green); }
        .videos .stat-icon { background: var(--accent-purple); }
        .engagement .stat-icon { background: var(--accent-yellow); }

        .trend-indicator {
            font-size: 0.85rem;
            padding: 4px 10px;
            border-radius: 20px;
            font-weight: 500;
            background: rgba(52, 168, 83, 0.1);
            color: var(--accent-green);
        }

        .trend-indicator.negative {
            background: rgba(255, 75, 75, 0.1);
            color: var(--primary-red);
        }

        .stat-value {
            font-size: 2.2rem;
            font-weight: 700;
            margin-bottom: 4px;
            color: var(--text-dark);
        }

        .stat-label {
            font-size: 0.95rem;
            color: var(--text-medium);
            font-weight: 500;
        }

        .stat-change {
            font-size: 0.85rem;
            margin-top: 8px;
            color: var(--text-light);
        }

        .charts-section {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 24px;
            margin-bottom: 28px;
        }

        @media (max-width: 1024px) {
            .charts-section {
                grid-template-columns: 1fr;
            }
        }

        .chart-card {
            background: var(--card-bg);
            border-radius: var(--border-radius);
            padding: 24px;
            box-shadow: var(--shadow-md);
            border: 1px solid var(--border-color);
        }

        .chart-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 20px;
        }

        .chart-title {
            font-size: 1.2rem;
            font-weight: 600;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .chart-title i {
            color: var(--primary-blue);
        }

        .chart-container {
            position: relative;
            height: 280px;
            width: 100%;
        }

        .trending-sidebar {
            background: var(--card-bg);
            border-radius: var(--border-radius);
            padding: 24px;
            box-shadow: var(--shadow-md);
            border: 1px solid var(--border-color);
            margin-bottom: 28px;
        }

        .trending-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 24px;
            padding-bottom: 16px;
            border-bottom: 1px solid var(--border-color);
        }

        .trending-header h2 {
            font-size: 1.3rem;
            font-weight: 600;
            display: flex;
            align-items: center;
            gap: 10px;
        }

        .trending-header h2 i {
            color: var(--primary-red);
        }

        .trending-list {
            display: flex;
            flex-direction: column;
            gap: 16px;
        }

        .trending-item {
            padding: 18px;
            border-radius: 12px;
            background: var(--light-bg);
            border-left: 4px solid var(--primary-blue);
            transition: var(--transition);
            cursor: pointer;
        }

        .trending-item:hover {
            transform: translateX(5px);
            background: white;
            box-shadow: var(--shadow-sm);
        }

        .trending-topic {
            font-weight: 600;
            margin-bottom: 8px;
            color: var(--text-dark);
        }

        .trending-metrics {
            display: flex;
            justify-content: space-between;
            font-size: 0.85rem;
        }

        .trend-volume {
            color: var(--text-medium);
            display: flex;
            align-items: center;
            gap: 5px;
        }

        .trend-growth {
            color: var(--accent-green);
            font-weight: 500;
            display: flex;
            align-items: center;
            gap: 5px;
        }

        .trending-category {
            display: inline-block;
            padding: 4px 10px;
            background: rgba(66, 133, 244, 0.1);
            color: var(--primary-blue);
            border-radius: 20px;
            font-size: 0.75rem;
            font-weight: 500;
            margin-top: 10px;
        }

        .error-message {
            display: none;
            background: rgba(255, 75, 75, 0.08);
            border-left: 4px solid var(--primary-red);
            padding: 20px;
            border-radius: 8px;
            margin-bottom: 24px;
            color: var(--primary-red);
        }

        .loading {
            display: none;
            text-align: center;
            padding: 60px 20px;
        }

        .spinner {
            width: 50px;
            height: 50px;
            border: 3px solid rgba(66, 133, 244, 0.2);
            border-radius: 50%;
            border-top-color: var(--primary-blue);
            margin: 0 auto 20px;
            animation: spin 1s ease-in-out infinite;
        }

        @keyframes spin {
            to { transform: rotate(360deg); }
        }

        footer {
            text-align: center;
            padding: 24px 0;
            color: var(--text-medium);
            font-size: 0.9rem;
            border-top: 1px solid var(--border-color);
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="container"&gt;
        &lt;header&gt;
            &lt;div class="logo"&gt;
                &lt;i class="fab fa-youtube logo-icon"&gt;&lt;/i&gt;
                &lt;div class="logo-text"&gt;
                    &lt;h1&gt;YouTube Analytics Pro&lt;/h1&gt;
                    &lt;p&gt;Advanced insights &amp; viral content recommendations&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/header&gt;

        &lt;section class="input-section"&gt;
            &lt;div class="input-title"&gt;
                &lt;i class="fas fa-search"&gt;&lt;/i&gt;
                &lt;h2&gt;Analyze Any YouTube Channel&lt;/h2&gt;
            &lt;/div&gt;
            &lt;div class="input-group"&gt;
                &lt;input type="text" id="channelInput" placeholder="Enter YouTube URL, @username, or Channel ID"&gt;
                &lt;button class="primary-btn" onclick="getChannelAnalytics()"&gt;
                    &lt;i class="fas fa-chart-line"&gt;&lt;/i&gt; Analyze Channel
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;p class="input-note"&gt;
                &lt;i class="fas fa-lightbulb"&gt;&lt;/i&gt; 
                Supports: Channel ID (UC...), Channel URL, @username, youtube.com/c/ URLs
            &lt;/p&gt;
        &lt;/section&gt;

        &lt;div class="loading" id="loading"&gt;
            &lt;div class="spinner"&gt;&lt;/div&gt;
            &lt;p&gt;Fetching advanced analytics from YouTube API...&lt;/p&gt;
        &lt;/div&gt;

        &lt;div class="error-message" id="errorMessage"&gt;
            &lt;i class="fas fa-exclamation-triangle"&gt;&lt;/i&gt;
            &lt;span id="errorText"&gt;Error message will appear here&lt;/span&gt;
        &lt;/div&gt;

        &lt;div class="stats-grid" id="statsGrid" style="display: none;"&gt;
            &lt;div class="stat-card subscribers"&gt;
                &lt;div class="stat-header"&gt;
                    &lt;div class="stat-icon"&gt;
                        &lt;i class="fas fa-users"&gt;&lt;/i&gt;
                    &lt;/div&gt;
                    &lt;span class="trend-indicator"&gt;+12.5%&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="stat-value" id="subscriberCount"&gt;0&lt;/div&gt;
                &lt;div class="stat-label"&gt;Total Subscribers&lt;/div&gt;
                &lt;div class="stat-change"&gt;vs last 30 days&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="stat-card views"&gt;
                &lt;div class="stat-header"&gt;
                    &lt;div class="stat-icon"&gt;
                        &lt;i class="fas fa-eye"&gt;&lt;/i&gt;
                    &lt;/div&gt;
                    &lt;span class="trend-indicator"&gt;+8.3%&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="stat-value" id="viewCount"&gt;0&lt;/div&gt;
                &lt;div class="stat-label"&gt;Total Views&lt;/div&gt;
                &lt;div class="stat-change"&gt;Lifetime channel views&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="stat-card videos"&gt;
                &lt;div class="stat-header"&gt;
                    &lt;div class="stat-icon"&gt;
                        &lt;i class="fas fa-video"&gt;&lt;/i&gt;
                    &lt;/div&gt;
                    &lt;span class="trend-indicator"&gt;+2 new&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="stat-value" id="videoCount"&gt;0&lt;/div&gt;
                &lt;div class="stat-label"&gt;Videos Published&lt;/div&gt;
                &lt;div class="stat-change"&gt;Public videos only&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="stat-card engagement"&gt;
                &lt;div class="stat-header"&gt;
                    &lt;div class="stat-icon"&gt;
                        &lt;i class="fas fa-fire"&gt;&lt;/i&gt;
                    &lt;/div&gt;
                    &lt;span class="trend-indicator negative"&gt;-1.2%&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="stat-value" id="engagementRate"&gt;0%&lt;/div&gt;
                &lt;div class="stat-label"&gt;Engagement Rate&lt;/div&gt;
                &lt;div class="stat-change"&gt;Likes/Comments per view&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="charts-section" id="chartsSection" style="display: none;"&gt;
            &lt;div class="chart-card"&gt;
                &lt;div class="chart-header"&gt;
                    &lt;h3 class="chart-title"&gt;
                        &lt;i class="fas fa-chart-line"&gt;&lt;/i&gt;
                        Views Over Time
                    &lt;/h3&gt;
                &lt;/div&gt;
                &lt;div class="chart-container"&gt;
                    &lt;canvas id="viewsChart"&gt;&lt;/canvas&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="chart-card"&gt;
                &lt;div class="chart-header"&gt;
                    &lt;h3 class="chart-title"&gt;
                        &lt;i class="fas fa-chart-bar"&gt;&lt;/i&gt;
                        Performance Breakdown
                    &lt;/h3&gt;
                &lt;/div&gt;
                &lt;div class="chart-container"&gt;
                    &lt;canvas id="performanceChart"&gt;&lt;/canvas&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="trending-sidebar"&gt;
            &lt;div class="trending-header"&gt;
                &lt;h2&gt;
                    &lt;i class="fas fa-rocket"&gt;&lt;/i&gt;
                    Viral Content Ideas
                &lt;/h2&gt;
                &lt;button class="refresh-btn" onclick="loadTrendingTopics()" style="background: var(--light-bg); border: none; width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--text-medium);"&gt;
                    &lt;i class="fas fa-sync-alt"&gt;&lt;/i&gt;
                &lt;/button&gt;
            &lt;/div&gt;
            &lt;div class="trending-list" id="trendingList"&gt;
                &lt;!-- Dynamic content will be inserted here --&gt;
            &lt;/div&gt;
            &lt;div style="margin-top: 24px; padding: 16px; background: rgba(66, 133, 244, 0.05); border-radius: 12px;"&gt;
                &lt;h4 style="font-size: 0.95rem; margin-bottom: 10px; color: var(--primary-blue);"&gt;
                    &lt;i class="fas fa-lightbulb"&gt;&lt;/i&gt; Pro Tips for Virality
                &lt;/h4&gt;
                &lt;ul style="font-size: 0.85rem; color: var(--text-medium); padding-left: 20px;"&gt;
                    &lt;li style="margin-bottom: 8px;"&gt;Hook viewers in the first 5 seconds&lt;/li&gt;
                    &lt;li style="margin-bottom: 8px;"&gt;Use trending sounds/music in Shorts&lt;/li&gt;
                    &lt;li style="margin-bottom: 8px;"&gt;Create series to encourage binge-watching&lt;/li&gt;
                    &lt;li&gt;Collaborate with creators in your niche&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;footer&gt;
            &lt;p&gt;YouTube Analytics Pro Dashboard &amp;copy; 2023 | Uses YouTube Data API v3&lt;/p&gt;
            &lt;p style="font-size: 0.8rem; margin-top: 8px; color: var(--text-light);"&gt;
                Note: This tool uses the YouTube API but is not endorsed or certified by YouTube/Google.
            &lt;/p&gt;
        &lt;/footer&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // API Configuration
        const API_KEY = 'AIzaSyAjtFd3waoyhiIHZixRX2HAeFXWpiRPxCY';
        let channelData = null;
        let viewsChart = null;
        let performanceChart = null;

        // Trending topics data
        const trendingTopics = [
            {
                topic: "AI Tools for Content Creation",
                category: "Technology",
                volume: "High",
                growth: "+245%",
                description: "Tutorials on ChatGPT, Midjourney, and AI video tools"
            },
            {
                topic: "Minimalist Morning Routines",
                category: "Lifestyle",
                volume: "Medium",
                growth: "+112%",
                description: "Productivity and wellness content"
            },
            {
                topic: "Budget Travel Hacks 2023",
                category: "Travel",
                volume: "High",
                growth: "+189%",
                description: "Post-pandemic travel on a budget"
            },
            {
                topic: "Easy Meal Prep for Beginners",
                category: "Food",
                volume: "Medium",
                growth: "+76%",
                description: "Quick healthy recipes under 30 minutes"
            },
            {
                topic: "Side Hustle Ideas That Actually Work",
                category: "Business",
                volume: "High",
                growth: "+201%",
                description: "Realistic ways to make extra income"
            },
            {
                topic: "Home Workout Without Equipment",
                category: "Fitness",
                volume: "High",
                growth: "+156%",
                description: "Effective workouts in small spaces"
            }
        ];

        // Initialize trending topics on page load
        document.addEventListener('DOMContentLoaded', function() {
            loadTrendingTopics();
        });

        // Enhanced function to extract Channel ID from various input formats
        function extractChannelId(input) {
            input = input.trim();
            
            // If it's already a channel ID (starts with UC)
            if (input.startsWith('UC') &amp;&amp; input.length &gt;= 24) {
                return input;
            }
            
            // Handle @username format (e.g., @MrBeast)
            if (input.startsWith('@')) {
                return input.substring(1); // Remove @ symbol
            }
            
            // If it's a YouTube URL
            if (input.includes('youtube.com') || input.includes('youtu.be')) {
                try {
                    // Add protocol if missing
                    if (!input.startsWith('http')) {
                        input = 'https://' + input;
                    }
                    
                    const url = new URL(input);
                    const path = url.pathname;
                    
                    // Format 1: /channel/UC... (Channel ID)
                    if (path.startsWith('/channel/')) {
                        return path.split('/')[2];
                    }
                    
                    // Format 2: /c/ or /user/ (Custom URL)
                    if (path.startsWith('/c/') || path.startsWith('/user/')) {
                        const username = path.split('/')[2];
                        return username;
                    }
                    
                    // Format 3: /@username (Handle)
                    if (path.startsWith('/@')) {
                        const handle = path.substring(2); // Remove /@
                        return handle;
                    }
                    
                    // Format 4: youtu.be/VIDEO_ID (Extract from video URL, will need additional handling)
                    if (url.hostname.includes('youtu.be')) {
                        const videoId = path.substring(1); // Remove leading slash
                        // For video URLs, we need to get the channel ID from the video
                        return { type: 'video', id: videoId };
                    }
                    
                    // Format 5: youtube.com/watch?v=VIDEO_ID (Video URL)
                    if (path === '/watch' &amp;&amp; url.searchParams.get('v')) {
                        const videoId = url.searchParams.get('v');
                        return { type: 'video', id: videoId };
                    }
                    
                } catch (e) {
                    console.error('URL parsing error:', e);
                    return input;
                }
            }
            
            return input;
        }

        // Get channel ID from username/handle using search API
        async function getChannelIdFromUsername(username) {
            try {
                const response = await fetch(
                    `https://www.googleapis.com/youtube/v3/search?part=snippet&amp;q=${encodeURIComponent(username)}&amp;type=channel&amp;maxResults=1&amp;key=${API_KEY}`
                );
                
                if (!response.ok) {
                    throw new Error('Search API error');
                }
                
                const data = await response.json();
                
                if (data.items &amp;&amp; data.items.length &gt; 0) {
                    return data.items[0].snippet.channelId;
                } else {
                    throw new Error('Channel not found');
                }
            } catch (error) {
                console.error('Error finding channel:', error);
                throw error;
            }
        }

        // Get channel ID from video ID
        async function getChannelIdFromVideo(videoId) {
            try {
                const response = await fetch(
                    `https://www.googleapis.com/youtube/v3/videos?part=snippet&amp;id=${videoId}&amp;key=${API_KEY}`
                );
                
                if (!response.ok) {
                    throw new Error('Video API error');
                }
                
                const data = await response.json();
                
                if (data.items &amp;&amp; data.items.length &gt; 0) {
                    return data.items[0].snippet.channelId;
                } else {
                    throw new Error('Video not found');
                }
            } catch (error) {
                console.error('Error getting channel from video:', error);
                throw error;
            }
        }

        // Format large numbers
        function formatNumber(num) {
            if (!num || isNaN(num)) return '0';
            
            num = parseInt(num);
            if (num &gt;= 1000000) {
                return (num / 1000000).toFixed(1) + 'M';
            } else if (num &gt;= 1000) {
                return (num / 1000).toFixed(1) + 'K';
            }
            return num.toLocaleString();
        }

        // Format percentage
        function formatPercent(value) {
            if (!value || isNaN(value)) return '0%';
            return parseFloat(value).toFixed(1) + '%';
        }

        // Show loading indicator
        function showLoading() {
            document.getElementById('loading').style.display = 'block';
            document.getElementById('errorMessage').style.display = 'none';
            document.getElementById('statsGrid').style.display = 'none';
            document.getElementById('chartsSection').style.display = 'none';
        }

        // Hide loading indicator
        function hideLoading() {
            document.getElementById('loading').style.display = 'none';
        }

        // Show error message
        function showError(message) {
            document.getElementById('errorText').textContent = message;
            document.getElementById('errorMessage').style.display = 'block';
            hideLoading();
        }

        // Main function to get channel analytics
        async function getChannelAnalytics() {
            const input = document.getElementById('channelInput').value;
            
            if (!input) {
                showError('Please enter a YouTube URL, @username, or Channel ID.');
                return;
            }
            
            showLoading();
            
            try {
                let channelIdOrHandle = extractChannelId(input);
                let finalChannelId = channelIdOrHandle;
                
                // Handle different input types
                if (typeof channelIdOrHandle === 'object') {
                    // It's a video object
                    if (channelIdOrHandle.type === 'video') {
                        finalChannelId = await getChannelIdFromVideo(channelIdOrHandle.id);
                    }
                } 
                // Check if it's a username/handle (not starting with UC)
                else if (!channelIdOrHandle.startsWith('UC') || channelIdOrHandle.length &lt; 24) {
                    // It's probably a username or custom URL handle
                    finalChannelId = await getChannelIdFromUsername(channelIdOrHandle);
                }
                
                // Fetch channel data with the final channel ID
                const response = await fetch(
                    `https://www.googleapis.com/youtube/v3/channels?part=statistics,snippet&amp;id=${finalChannelId}&amp;key=${API_KEY}`
                );
                
                if (!response.ok) {
                    throw new Error(`API Error: ${response.status}`);
                }
                
                const data = await response.json();
                
                if (!data.items || data.items.length === 0) {
                    throw new Error('Channel not found. Please check the URL or username.');
                }
                
                channelData = data.items[0];
                displayStatistics(channelData.statistics);
                createCharts(channelData.statistics);
                
                document.getElementById('statsGrid').style.display = 'grid';
                document.getElementById('chartsSection').style.display = 'grid';
                hideLoading();
                
            } catch (error) {
                console.error('Error:', error);
                showError(error.message || 'Failed to fetch channel data. Please try a different format.');
            }
        }

        function displayStatistics(statistics) {
            document.getElementById('subscriberCount').textContent = formatNumber(statistics.subscriberCount);
            document.getElementById('viewCount').textContent = formatNumber(statistics.viewCount);
            document.getElementById('videoCount').textContent = formatNumber(statistics.videoCount);
            
            // Calculate engagement rate (simplified)
            const engagementRate = statistics.subscriberCount &amp;&amp; statistics.viewCount 
                ? ((parseInt(statistics.subscriberCount) / parseInt(statistics.viewCount)) * 100).toFixed(2)
                : 0;
            document.getElementById('engagementRate').textContent = formatPercent(engagementRate);
        }

        function createCharts(statistics) {
            createViewsChart(statistics.viewCount);
            createPerformanceChart();
        }

        function createViewsChart(viewCount) {
            const ctx = document.getElementById('viewsChart').getContext('2d');
            
            if (viewsChart) {
                viewsChart.destroy();
            }
            
            const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
            const currentMonth = new Date().getMonth();
            const displayMonths = months.slice(Math.max(0, currentMonth - 5), currentMonth + 1);
            
            let baseViews = parseInt(viewCount) / 12;
            const viewsData = [];
            
            for (let i = 0; i &lt; displayMonths.length; i++) {
                const growthFactor = 1 + (i * 0.15);
                const monthlyViews = baseViews * growthFactor * (0.8 + Math.random() * 0.4);
                viewsData.push(Math.floor(monthlyViews));
            }
            
            viewsChart = new Chart(ctx, {
                type: 'line',
                data: {
                    labels: displayMonths,
                    datasets: [{
                        label: 'Monthly Views',
                        data: viewsData,
                        backgroundColor: 'rgba(66, 133, 244, 0.1)',
                        borderColor: 'rgba(66, 133, 244, 1)',
                        borderWidth: 3,
                        pointBackgroundColor: 'rgba(66, 133, 244, 1)',
                        pointBorderColor: '#fff',
                        pointBorderWidth: 2,
                        pointRadius: 6,
                        tension: 0.3,
                        fill: true
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: {
                            display: false
                        }
                    },
                    scales: {
                        y: {
                            beginAtZero: true,
                            ticks: {
                                callback: function(value) {
                                    if (value &gt;= 1000000) {
                                        return (value / 1000000).toFixed(1) + 'M';
                                    } else if (value &gt;= 1000) {
                                        return (value / 1000).toFixed(1) + 'K';
                                    }
                                    return value;
                                }
                            }
                        }
                    }
                }
            });
        }

        function createPerformanceChart() {
            const ctx = document.getElementById('performanceChart').getContext('2d');
            
            if (performanceChart) {
                performanceChart.destroy();
            }
            
            const videoCategories = ['Tutorials', 'Vlogs', 'Reviews', 'Shorts', 'Livestreams'];
            const performanceData = videoCategories.map(() =&gt; 
                Math.floor(Math.random() * 1000000) + 500000
            );
            
            performanceChart = new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: videoCategories,
                    datasets: [{
                        label: 'Total Views',
                        data: performanceData,
                        backgroundColor: [
                            'rgba(255, 75, 75, 0.8)',
                            'rgba(52, 168, 83, 0.8)',
                            'rgba(251, 188, 5, 0.8)',
                            'rgba(156, 114, 243, 0.8)',
                            'rgba(66, 133, 244, 0.8)'
                        ],
                        borderWidth: 1,
                        borderRadius: 6,
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: {
                            display: false
                        }
                    },
                    scales: {
                        y: {
                            beginAtZero: true,
                            ticks: {
                                callback: function(value) {
                                    if (value &gt;= 1000000) {
                                        return (value / 1000000).toFixed(1) + 'M';
                                    } else if (value &gt;= 1000) {
                                        return (value / 1000).toFixed(1) + 'K';
                                    }
                                    return value;
                                }
                            }
                        }
                    }
                }
            });
        }

        function loadTrendingTopics() {
            const trendingList = document.getElementById('trendingList');
            trendingList.innerHTML = '';
            
            trendingTopics.forEach(topic =&gt; {
                const item = document.createElement('div');
                item.className = 'trending-item';
                item.innerHTML = `
                    &lt;div class="trending-topic"&gt;${topic.topic}&lt;/div&gt;
                    &lt;div class="trending-metrics"&gt;
                        &lt;span class="trend-volume"&gt;
                            &lt;i class="fas fa-chart-line"&gt;&lt;/i&gt;
                            ${topic.volume} Volume
                        &lt;/span&gt;
                        &lt;span class="trend-growth"&gt;
                            &lt;i class="fas fa-arrow-up"&gt;&lt;/i&gt;
                            ${topic.growth}
                        &lt;/span&gt;
                    &lt;/div&gt;
                    &lt;div class="trending-category"&gt;${topic.category}&lt;/div&gt;
                `;
                item.addEventListener('click', () =&gt; {
                    document.getElementById('channelInput').value = topic.topic;
                    alert(`"${topic.topic}" - Great viral potential! Use this as inspiration for your next video.`);
                });
                trendingList.appendChild(item);
            });
        }

        // Allow Enter key to trigger analytics
        document.getElementById('channelInput').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                getChannelAnalytics();
            }
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>YouTube Video Download</title><link>https://www.laxmannepal.com.np/2025/12/youtube-video-download.html</link><category>Tools</category><category>YouTube Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Sat, 13 Dec 2025 16:13:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-57271519084856945</guid><description>&lt;div class="youtube-downloader-container"&gt;
  &lt;style&gt;
    /* Main container */
    .youtube-downloader-container {
      max-width: 900px;
      margin: 0 auto;
      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
      background: #f9fafb;
      color: #222;
      line-height: 1.6;
    }
    
    /* Header */
    .yd-header {
      text-align: center;
      padding: 20px 0;
      margin-bottom: 10px;
    }
    
    .yd-header a {
      font-size: 1.1rem;
      font-weight: 500;
      color: #888;
      text-decoration: none;
    }
    
    .yd-header a:hover {
      color: #222;
    }
    
    /* Downloader section */
    .yd-downloader-section {
      max-width: 500px;
      margin: 0 auto 40px;
      text-align: center;
    }
    
    .yd-downloader-section h1 {
      font-size: 1.8rem;
      margin-bottom: 25px;
      color: #ff0000;
    }
    
    .yd-input-container {
      display: flex;
      gap: 10px;
      justify-content: center;
      margin-bottom: 20px;
    }
    
    .yd-input-container input {
      padding: 12px 15px;
      flex: 1;
      border: 2px solid #ddd;
      border-radius: 8px;
      font-size: 1rem;
      outline: none;
      transition: border-color 0.3s;
    }
    
    .yd-input-container input:focus {
      border-color: #ff0000;
    }
    
    .yd-input-container button {
      padding: 12px 25px;
      background-color: #ff0000;
      color: white;
      border: none;
      border-radius: 8px;
      cursor: pointer;
      font-weight: 600;
      font-size: 1rem;
      transition: background-color 0.3s;
    }
    
    .yd-input-container button:hover {
      background-color: #cc0000;
    }
    
    /* API container */
    .yd-api-container {
      display: none;
      margin: 0 auto 40px;
      max-width: 500px;
      background: white;
      border-radius: 8px;
      box-shadow: 0 4px 15px rgba(0,0,0,0.1);
      overflow: hidden;
    }
    
    /* Content section */
    .yd-content-section {
      background: #fff;
      padding: 35px;
      border-radius: 12px;
      box-shadow: 0 8px 24px rgba(0,0,0,0.05);
      margin-bottom: 40px;
    }
    
    .yd-content-section h2 {
      font-size: 1.5rem;
      text-align: center;
      margin-bottom: 25px;
      color: #ff0000;
    }
    
    .yd-content-section h3 {
      font-size: 1.1rem;
      color: #222;
      margin: 25px 0 10px;
    }
    
    .yd-content-section p {
      font-size: 1rem;
      margin-bottom: 20px;
      color: #444;
    }
    
    /* Features list */
    .yd-features-list {
      list-style: none;
      padding-left: 0;
      margin-bottom: 30px;
    }
    
    .yd-features-list li {
      display: flex;
      align-items: flex-start;
      gap: 15px;
      padding: 12px 0;
      font-size: 0.95rem;
      border-bottom: 1px solid #f3f4f6;
    }
    
    .yd-features-list li:last-child {
      border-bottom: none;
    }
    
    .yd-features-list i {
      color: #ff0000;
      min-width: 20px;
      font-size: 1.1rem;
      margin-top: 2px;
    }
    
    /* Steps list */
    .yd-steps-list {
      list-style: none;
      counter-reset: step;
      margin-bottom: 30px;
      padding-left: 0;
    }
    
    .yd-steps-list li {
      counter-increment: step;
      margin-bottom: 20px;
      position: relative;
      padding-left: 40px;
      font-size: 1rem;
    }
    
    .yd-steps-list li::before {
      content: counter(step) ".";
      position: absolute;
      left: 0;
      top: 0;
      color: #ff0000;
      font-weight: bold;
      font-size: 1.2rem;
    }
    
    /* FAQ section */
    .yd-faq-list {
      list-style: none;
      padding-left: 0;
    }
    
    .yd-faq-list li {
      margin-bottom: 25px;
      padding-bottom: 25px;
      border-bottom: 1px solid #f3f4f6;
    }
    
    .yd-faq-list li:last-child {
      margin-bottom: 0;
      padding-bottom: 0;
      border-bottom: none;
    }
    
    .yd-faq-list h3 {
      color: #ff0000;
      margin-bottom: 10px;
      font-size: 1.1rem;
    }
    
    /* Footer */
    .yd-footer {
      margin-top: 40px;
      text-align: center;
      font-size: 0.9rem;
      color: #666;
      padding: 20px;
      border-top: 1px solid #eee;
    }
    
    .yd-footer a {
      color: #ff0000;
      margin: 0 10px;
      text-decoration: none;
    }
    
    .yd-footer a:hover {
      text-decoration: underline;
    }
    
    /* Info box */
    .yd-info-box {
      background: #fff3cd;
      padding: 20px;
      border-radius: 8px;
      border-left: 4px solid #ffc107;
      margin: 30px 0;
      font-size: 0.95rem;
    }
    
    .yd-info-box h3 {
      color: #856404;
      margin-top: 0;
      font-size: 1.1rem;
    }
    
    /* Responsive design */
    @media (max-width: 768px) {
      .yd-input-container {
        flex-direction: column;
        align-items: stretch;
      }
      
      .yd-input-container input,
      .yd-input-container button {
        width: 100%;
      }
      
      .yd-content-section {
        padding: 25px 20px;
      }
      
      .yd-downloader-section h1 {
        font-size: 1.5rem;
      }
      
      .yd-footer a {
        display: block;
        margin: 5px 0;
      }
    }
    
    /* Loading animation */
    .yd-loading {
      text-align: center;
      padding: 20px;
      display: none;
    }
    
    .yd-spinner {
      border: 4px solid #f3f3f3;
      border-top: 4px solid #ff0000;
      border-radius: 50%;
      width: 40px;
      height: 40px;
      animation: spin 1s linear infinite;
      margin: 0 auto 15px;
    }
    
    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
  &lt;/style&gt;
  
  &lt;!-- Header --&gt;
  &lt;div class="yd-header"&gt;
    &lt;div class="yd-site-title"&gt;
      &lt;a href="#"&gt;YouTube Video Downloader - YT1D&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;!-- Downloader Section --&gt;
  &lt;div class="yd-downloader-section"&gt;
    &lt;h1&gt;&#127916; YouTube Video Downloader&lt;/h1&gt;
    &lt;div class="yd-input-container"&gt;
      &lt;input type="text" id="yd-videoLinkInput" placeholder="Paste YouTube video link here..." /&gt;
      &lt;button onclick="yd_convertVideo()"&gt;
        &lt;span&gt;⬇️&lt;/span&gt; Download
      &lt;/button&gt;
    &lt;/div&gt;
    &lt;p style="font-size: 0.9rem; color: #666;"&gt;Paste YouTube URL and click Download&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;!-- Loading Animation --&gt;
  &lt;div class="yd-loading" id="yd-loading"&gt;
    &lt;div class="yd-spinner"&gt;&lt;/div&gt;
    &lt;p&gt;Processing video... Please wait&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;!-- API Container (for iframe) --&gt;
  &lt;div class="yd-api-container" id="yd-apiContainer"&gt;&lt;/div&gt;
  
  &lt;!-- Info Box --&gt;
  &lt;div class="yd-info-box"&gt;
    &lt;h3&gt;⚠️ Important Notice:&lt;/h3&gt;
    &lt;p&gt;This tool is for downloading videos you have permission to download. Please respect copyright laws. Download videos only for personal use or when you have the rights to do so.&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;!-- Content Section --&gt;
  &lt;div class="yd-content-section"&gt;
    &lt;p&gt;Looking to download your favorite videos quickly and easily? Our free YouTube video downloader (YT1D) is the perfect solution for video lovers, creators, and everyday users. It lets you download videos in various formats and resolutions.&lt;/p&gt;
    
    &lt;h2&gt;&#127775; Key Features&lt;/h2&gt;
    &lt;ul class="yd-features-list"&gt;
      &lt;li&gt;&lt;i class="fas fa-bolt"&gt;&lt;/i&gt; &lt;strong&gt;Multiple Formats:&lt;/strong&gt; Supports MP4, MP3, WAV, FLAC, OGG, and more&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-film"&gt;&lt;/i&gt; &lt;strong&gt;High Quality:&lt;/strong&gt; Download in resolutions from 360p to 4K UHD&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-globe"&gt;&lt;/i&gt; &lt;strong&gt;Multiple Sites:&lt;/strong&gt; Works with YouTube, Facebook, Twitter, and more&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-mobile-alt"&gt;&lt;/i&gt; &lt;strong&gt;Mobile Friendly:&lt;/strong&gt; Works on all devices without any software&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-infinity"&gt;&lt;/i&gt; &lt;strong&gt;Unlimited Downloads:&lt;/strong&gt; No restrictions on usage&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-hand-holding-usd"&gt;&lt;/i&gt; &lt;strong&gt;Completely Free:&lt;/strong&gt; No fees, no subscriptions, 100% free&lt;/li&gt;
      &lt;li&gt;&lt;i class="fas fa-user-plus"&gt;&lt;/i&gt; &lt;strong&gt;No Registration:&lt;/strong&gt; No account required, just paste and download&lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;h2&gt;&#128229; How to Download YouTube Videos&lt;/h2&gt;
    &lt;ol class="yd-steps-list"&gt;
      &lt;li&gt;&lt;strong&gt;Copy &amp; Paste:&lt;/strong&gt; Copy the YouTube video URL and paste it in the box above. Click "Download"&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Select Format:&lt;/strong&gt; Choose your preferred format and quality from the available options&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Download:&lt;/strong&gt; Click the download button and save the file directly to your device&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Enjoy:&lt;/strong&gt; Watch your downloaded video offline anytime, anywhere&lt;/li&gt;
    &lt;/ol&gt;
    
    &lt;h2&gt;❓ Frequently Asked Questions&lt;/h2&gt;
    &lt;ul class="yd-faq-list"&gt;
      &lt;li&gt;
        &lt;h3&gt;Is YT1D free to use?&lt;/h3&gt;
        &lt;p&gt;Yes, completely free! No hidden charges, no subscriptions, no paywalls. You can download videos as often as you like without any fees.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;h3&gt;Do I need to install software?&lt;/h3&gt;
        &lt;p&gt;No installation required. The tool works entirely in your web browser. Access all features online without downloading any apps.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;h3&gt;Can I use it on mobile?&lt;/h3&gt;
        &lt;p&gt;Yes! Fully responsive and works smoothly on smartphones, tablets, and desktops. Paste the link and download directly from your mobile browser.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;h3&gt;Which formats are supported?&lt;/h3&gt;
        &lt;p&gt;Video: MP4 in 360p, 480p, 720p, 1080p, and 4K. Audio: MP3, FLAC, WAV, OGG, and more.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;h3&gt;Is it legal to download YouTube videos?&lt;/h3&gt;
        &lt;p&gt;Downloading for personal use may be allowed in some cases, but always respect copyright. Only download videos you have permission to use.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;h3&gt;What's the maximum video size?&lt;/h3&gt;
        &lt;p&gt;There's no size limit! You can download videos of any length, from short clips to full-length movies.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
    
    &lt;h3&gt;&#128274; Safe &amp; Secure&lt;/h3&gt;
    &lt;p&gt;Our downloader is safe to use. We don't store any videos on our servers. All processing happens in real-time, and your privacy is protected.&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;!-- Footer --&gt;
  &lt;div class="yd-footer"&gt;
    &lt;div class="yd-footer-container"&gt;
      &lt;p&gt;© &lt;span id="yd-year"&gt;&lt;/span&gt; YouTube Video Downloader - YT1D&lt;/p&gt;
      &lt;p&gt;
        &lt;a href="#privacy"&gt;Privacy Policy&lt;/a&gt; | 
        &lt;a href="#terms"&gt;Terms of Service&lt;/a&gt; | 
        &lt;a href="#contact"&gt;Contact&lt;/a&gt;
      &lt;/p&gt;
      &lt;p style="font-size: 0.8rem; margin-top: 10px; color: #999;"&gt;
        This tool is for educational purposes only. Use responsibly.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  
  &lt;script&gt;
    // Set current year
    document.getElementById('yd-year').textContent = new Date().getFullYear();
    
    // YouTube downloader function
    function yd_convertVideo() {
      const videoURL = document.getElementById('yd-videoLinkInput').value.trim();
      
      if (!videoURL) {
        alert('Please paste a YouTube video URL');
        return;
      }
      
      // Validate YouTube URL
      if (!yd_validateYouTubeUrl(videoURL)) {
        alert('Please enter a valid YouTube URL (e.g., https://www.youtube.com/watch?v=...)');
        return;
      }
      
      // Show loading animation
      document.getElementById('yd-loading').style.display = 'block';
      document.getElementById('yd-apiContainer').style.display = 'none';
      
      // Clear existing iframe
      const existingIframe = document.querySelector('.yd-api-container iframe');
      if (existingIframe) {
        existingIframe.remove();
      }
      
      // Encoded URLs (keeping original structure)
      const encodedAdUrl = 'aHR0cHM6Ly9mbHVmZnlpbmZlY3Rpb24uY29tL3prMjNhczh6P2tleT04ZjQ5MTQwN2RlNjM4YzAzY2U1NWMwODI5NGZiODQwNg==';
      const redirectURL = atob(encodedAdUrl);
      
      const encodedApiUrl = 'aHR0cHM6Ly9wLnNhdmVub3cudG8vYXBpL2NhcmQyLz91cmw9';
      const apiURL = atob(encodedApiUrl);
      
      // Create and open ad in new tab (after delay)
      setTimeout(() =&gt; {
        const adWindow = window.open(redirectURL, '_blank');
        if (adWindow) {
          adWindow.blur();
          window.focus();
        }
      }, 100);
      
      // Create iframe for downloader
      setTimeout(() =&gt; {
        const iframe = document.createElement('iframe');
        iframe.setAttribute('class', 'yd-api-iframe');
        iframe.setAttribute('scrolling', 'no');
        iframe.setAttribute('width', '100%');
        iframe.setAttribute('height', '600px');
        iframe.setAttribute('style', 'border: none; border-radius: 8px;');
        iframe.setAttribute('src', apiURL + encodeURIComponent(videoURL));
        
        const container = document.getElementById('yd-apiContainer');
        container.appendChild(iframe);
        
        // Hide loading, show results
        document.getElementById('yd-loading').style.display = 'none';
        container.style.display = 'block';
        
        // Smooth scroll to results
        const scrollTarget = container.offsetTop - 50;
        window.scrollTo({
          top: scrollTarget,
          behavior: 'smooth'
        });
        
        // Resize iframe if needed
        if (typeof iFrameResize !== 'undefined') {
          iFrameResize({ log: false }, '.yd-api-iframe');
        }
      }, 1500);
    }
    
    // YouTube URL validation
    function yd_validateYouTubeUrl(url) {
      const patterns = [
        /^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/.+/,
        /^(https?:\/\/)?(www\.)?youtube\.com\/watch\?v=[\w-]+/,
        /^(https?:\/\/)?(www\.)?youtu\.be\/[\w-]+/,
        /^(https?:\/\/)?(www\.)?youtube\.com\/embed\/[\w-]+/
      ];
      
      return patterns.some(pattern =&gt; pattern.test(url));
    }
    
    // Enter key support
    document.getElementById('yd-videoLinkInput').addEventListener('keypress', function(e) {
      if (e.key === 'Enter') {
        e.preventDefault();
        yd_convertVideo();
      }
    });
    
    // Example URLs for easier testing
    document.addEventListener('DOMContentLoaded', function() {
      // Add clickable example URLs
      const examples = [
        'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
        'https://youtu.be/9bZkp7q19f0',
        'https://www.youtube.com/watch?v=JGwWNGJdvx8'
      ];
      
      const examplesDiv = document.createElement('div');
      examplesDiv.style.cssText = 'text-align: center; margin-top: 15px; font-size: 0.9rem; color: #666;';
      examplesDiv.innerHTML = '&lt;p style="margin-bottom: 8px;"&gt;Try with example:&lt;/p&gt;';
      
      examples.forEach((url, index) =&gt; {
        const exampleLink = document.createElement('a');
        exampleLink.href = '#';
        exampleLink.textContent = `Example ${index + 1}`;
        exampleLink.style.cssText = 'color: #ff0000; margin: 0 5px; text-decoration: none; border-bottom: 1px dashed #ff0000;';
        exampleLink.onclick = function(e) {
          e.preventDefault();
          document.getElementById('yd-videoLinkInput').value = url;
          yd_convertVideo();
        };
        examplesDiv.appendChild(exampleLink);
        if (index &lt; examples.length - 1) {
          examplesDiv.appendChild(document.createTextNode(' | '));
        }
      });
      
      document.querySelector('.yd-downloader-section').appendChild(examplesDiv);
    });
    
    // Load Font Awesome for icons
    const faLink = document.createElement('link');
    faLink.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css';
    faLink.rel = 'stylesheet';
    faLink.type = 'text/css';
    document.head.appendChild(faLink);
  &lt;/script&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Direct Download Anything</title><link>https://www.laxmannepal.com.np/2025/12/direct-download-anything.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Fri, 12 Dec 2025 03:47:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-1837150798026096617</guid><description>&lt;div class="direct-download-container"&gt;
  &lt;style&gt;
    /* Main container */
    .direct-download-container {
      max-width: 1000px;
      margin: 0 auto;
      padding: 20px;
      font-family: Arial, sans-serif;
    }
    
    /* Header styling */
    .dd-header {
      text-align: center;
      padding: 30px 20px;
      background: #2c3e50;
      color: white;
      border-radius: 10px;
      margin-bottom: 30px;
    }
    
    .dd-header h1 {
      font-size: 2.5rem;
      margin: 0 0 10px;
      color: #3498db;
    }
    
    .dd-header p {
      font-size: 1.1rem;
      opacity: 0.9;
    }
    
    /* Search form styling */
    .dd-search-form {
      background: #ecf0f1;
      padding: 30px;
      border-radius: 10px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    }
    
    .dd-search-box {
      display: flex;
      flex-wrap: wrap;
      gap: 10px;
      margin-bottom: 20px;
    }
    
    .dd-dropdown {
      position: relative;
      flex: 1;
      min-width: 200px;
    }
    
    .dd-dropdown-toggle {
      width: 100%;
      padding: 12px;
      background: white;
      border: 2px solid #3498db;
      border-radius: 6px;
      text-align: left;
      font-size: 1rem;
      cursor: pointer;
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
    
    .dd-dropdown-menu {
      position: absolute;
      top: 100%;
      left: 0;
      right: 0;
      background: white;
      border: 1px solid #ddd;
      border-radius: 6px;
      box-shadow: 0 4px 8px rgba(0,0,0,0.1);
      z-index: 1000;
      display: none;
    }
    
    .dd-dropdown-menu.show {
      display: block;
    }
    
    .dd-dropdown-item {
      padding: 10px 15px;
      cursor: pointer;
      border-bottom: 1px solid #eee;
      transition: background 0.3s;
    }
    
    .dd-dropdown-item:hover {
      background: #f8f9fa;
    }
    
    .dd-dropdown-item span {
      margin-right: 10px;
    }
    
    .dd-search-input {
      flex: 2;
      min-width: 300px;
    }
    
    .dd-search-input input {
      width: 100%;
      padding: 12px;
      border: 2px solid #3498db;
      border-radius: 6px;
      font-size: 1rem;
    }
    
    .dd-search-button {
      flex: 0 0 auto;
    }
    
    .dd-search-button button {
      padding: 12px 24px;
      background: #2c3e50;
      color: white;
      border: none;
      border-radius: 6px;
      font-size: 1rem;
      cursor: pointer;
      transition: background 0.3s;
    }
    
    .dd-search-button button:hover {
      background: #3498db;
    }
    
    /* Instructions section */
    .dd-instructions {
      background: #f8f9fa;
      padding: 25px;
      border-radius: 8px;
      margin: 30px 0;
      border-left: 4px solid #3498db;
    }
    
    .dd-instructions h3 {
      color: #2c3e50;
      margin-top: 0;
    }
    
    .dd-instructions ul {
      padding-left: 20px;
    }
    
    .dd-instructions li {
      margin-bottom: 10px;
      line-height: 1.5;
    }
    
    /* Tips section */
    .dd-tips {
      background: #e8f4fc;
      padding: 25px;
      border-radius: 8px;
      margin: 30px 0;
    }
    
    .dd-tips h3 {
      color: #2c3e50;
      margin-top: 0;
    }
    
    /* Hidden elements */
    .dd-hidden {
      display: none;
    }
    
    /* Responsive design */
    @media (max-width: 768px) {
      .dd-search-box {
        flex-direction: column;
      }
      
      .dd-dropdown,
      .dd-search-input,
      .dd-search-button {
        width: 100%;
        min-width: 100%;
      }
      
      .dd-header h1 {
        font-size: 2rem;
      }
      
      .dd-header p {
        font-size: 1rem;
      }
    }
  &lt;/style&gt;
  
  &lt;!-- Header Section --&gt;
  &lt;div class="dd-header"&gt;
    &lt;h1&gt;Direct Download Search Tool&lt;/h1&gt;
    &lt;p&gt;Find direct download links for almost anything: TV Series, Movies, Books, Music, Software, Games, and more&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;!-- Search Form --&gt;
  &lt;div class="dd-search-form"&gt;
    &lt;form id="dd-searchForm" onsubmit="event.preventDefault(); dd_startSearch();"&gt;
      &lt;input id="dd-fileType" type="hidden" value="" /&gt;
      &lt;input id="dd-resType" type="hidden" value="" /&gt;
      &lt;input id="dd-engine" type="hidden" value="google" /&gt;
      
      &lt;div class="dd-search-box"&gt;
        &lt;!-- Filetype Dropdown --&gt;
        &lt;div class="dd-dropdown"&gt;
          &lt;button type="button" class="dd-dropdown-toggle" id="dd-filetype-button"&gt;
            &lt;span&gt;&#128193; Choose Filetype&lt;/span&gt;
            &lt;span&gt;▼&lt;/span&gt;
          &lt;/button&gt;
          &lt;div class="dd-dropdown-menu" id="dd-filetype-menu"&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('mkv|mp4|avi|mov|mpg|wmv|divx|mpeg', 'TV/Movies', 'video')"&gt;
              &lt;span&gt;&#127916;&lt;/span&gt; TV/Movies/Video
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('MOBI|CBZ|CBR|CBC|CHM|EPUB|FB2|LIT|LRF|ODT|PDF|PRC|PDB|PML|RB|RTF|TCR|DOC|DOCX', 'Books', 'ebook')"&gt;
              &lt;span&gt;&#128218;&lt;/span&gt; Books
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('mp3|wav|ac3|ogg|flac|wma|m4a|aac|mod', 'Music', 'audio')"&gt;
              &lt;span&gt;&#127925;&lt;/span&gt; Music
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('exe|iso|dmg|tar|7z|bz2|gz|rar|zip|apk', 'Software/Games', 'archive')"&gt;
              &lt;span&gt;&#128191;&lt;/span&gt; Software/Games
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('jpg|png|bmp|gif|tif|tiff|psd', 'Images', 'picture')"&gt;
              &lt;span&gt;&#128444;️&lt;/span&gt; Images
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setFiletype('-1', 'Everything', 'all')"&gt;
              &lt;span&gt;&#128269;&lt;/span&gt; Everything
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Search Engine Dropdown --&gt;
        &lt;div class="dd-dropdown"&gt;
          &lt;button type="button" class="dd-dropdown-toggle" id="dd-engine-button"&gt;
            &lt;span&gt;&#127760; Google&lt;/span&gt;
            &lt;span&gt;▼&lt;/span&gt;
          &lt;/button&gt;
          &lt;div class="dd-dropdown-menu" id="dd-engine-menu"&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setEngine('google')"&gt;
              &lt;span&gt;&#128269;&lt;/span&gt; Google
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setEngine('googol')"&gt;
              &lt;span&gt;&#128269;&lt;/span&gt; Googol
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setEngine('startpage')"&gt;
              &lt;span&gt;&#128272;&lt;/span&gt; Startpage
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setEngine('searx')"&gt;
              &lt;span&gt;&#128270;&lt;/span&gt; Searx
            &lt;/div&gt;
            &lt;div class="dd-dropdown-item" onclick="dd_setEngine('filepursuit')"&gt;
              &lt;span&gt;&#128193;&lt;/span&gt; FilePursuit
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;!-- Search Input --&gt;
        &lt;div class="dd-search-input"&gt;
          &lt;input type="text" id="dd-query" placeholder="Search anything e.g. The.Blacklist.S01.E01" /&gt;
        &lt;/div&gt;
        
        &lt;!-- Search Button --&gt;
        &lt;div class="dd-search-button"&gt;
          &lt;button type="button" onclick="dd_startSearch()"&gt;
            &lt;span&gt;&#128269;&lt;/span&gt; Search
          &lt;/button&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      
      &lt;div style="text-align: center; font-size: 0.9rem; color: #666; margin-top: 10px;"&gt;
        Powered by advanced Google search operators
      &lt;/div&gt;
    &lt;/form&gt;
  &lt;/div&gt;
  
  &lt;!-- Instructions --&gt;
  &lt;div class="dd-instructions"&gt;
    &lt;h3&gt;&#128640; How to Use This Tool:&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Select File Type:&lt;/strong&gt; Choose what you're looking for (Movies, Music, Books, etc.)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Choose Search Engine:&lt;/strong&gt; Pick your preferred search engine&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Enter Keywords:&lt;/strong&gt; Type your search terms (e.g., movie title, software name)&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Click Search:&lt;/strong&gt; Results will open in a new tab&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Download:&lt;/strong&gt; Look for direct download links in the search results&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  
  &lt;!-- Tips --&gt;
  &lt;div class="dd-tips"&gt;
    &lt;h3&gt;&#128161; Search Tips:&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;Use dots instead of spaces (e.g., "The.Blacklist.S01" instead of "The Blacklist S01")&lt;/li&gt;
      &lt;li&gt;Include season and episode numbers for TV series&lt;/li&gt;
      &lt;li&gt;For software, include version numbers&lt;/li&gt;
      &lt;li&gt;Add "download" or "free" to your search terms&lt;/li&gt;
      &lt;li&gt;Try different search engines if you don't find what you need&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  
  &lt;!-- Disclaimer --&gt;
  &lt;div style="background: #fff3cd; padding: 20px; border-radius: 8px; border-left: 4px solid #ffc107; margin: 30px 0;"&gt;
    &lt;h3 style="color: #856404; margin-top: 0;"&gt;⚠️ Important Disclaimer:&lt;/h3&gt;
    &lt;p&gt;This tool only searches for publicly available files using Google search operators. We do not host any files. Please respect copyright laws in your country. Download copyrighted material only if you own the original or have proper permission.&lt;/p&gt;
  &lt;/div&gt;
  
  &lt;script&gt;
    // Logo data (compressed versions)
    const dd_logos = {
      google: 'https://upload.wikimedia.org/wikipedia/commons/2/2f/Google_2015_logo.svg',
      googol: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADPSURBVDhPY2CgA2BiYGBgoiIw4O3A9+/fM+gQy9LS0qTZQAyA6EEH2IRIAqTYMDGAFD04Afn6nUHY2p1BzNGXQdzGjYGclEc+IAuQ9M6/xx8wKJm5wInaP3/+kKSfckCSg9ABBvnff/9pqgCqEwkHUMkG2tpAJQepZwNVbKCqDdSxgZo2kG4DCwMDgx6SkBwDA4MAZFoUSR1iw7OAhsHExMRAAIBoRwUgWwHygfQfUm0AARa0GCQeQM1Z8P//f5YfP36AAAA0I0z3s3ECGAAAAABJRU5ErkJggg==',
      startpage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVDhPY2CgA2BiYGBgoiIw4O3A9+/fM+gQy9LS0qTZQAyA6EEH2IRIAqTYMDGAFD04Afn6nUHY2p1BzNGXQdzGjYGclEc+IAuQ9M6/xx8wKJm5wInaP3/+kKSfckCSg9ABBvnff/9pqgCqEwkHUMkG2tpAJQepZwNVbKCqDdSxgZo2kG4DCwMDgx6SkBwDA4MAZFoUSR1iw7OAhsHExMRAAIBoRwUgWwHygfQfUm0AARa0GCQeQM1Z8P//f5YfP36AAAA0I0z3s3ECGAAAAABJRU5ErkJggg==',
      searx: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVDhPY2CgA2BiYGBgoiIw4O3A9+/fM+gQy9LS0qTZQAyA6EEH2IRIAqTYMDGAFD04Afn6nUHY2p1BzNGXQdzGjYGclEc+IAuQ9M6/xx8wKJm5wInaP3/+kKSfckCSg9ABBvnff/9pqgCqEwkHUMkG2tpAJQepZwNVbKCqDdSxgZo2kG4DCwMDgx6SkBwDA4MAZFoUSR1iw7OAhsHExMRAAIBoRwUgWwHygfQfUm0AARa0GCQeQM1Z8P//f5YfP36AAAA0I0z3s3ECGAAAAABJRU5ErkJggg==',
      filepursuit: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVDhPY2CgA2BiYGBgoiIw4O3A9+/fM+gQy9LS0qTZQAyA6EEH2IRIAqTYMDGAFD04Afn6nUHY2p1BzNGXQdzGjYGclEc+IAuQ9M6/xx8wKJm5wInaP3/+kKSfckCSg9ABBvnff/9pqgCqEwkHUMkG2tpAJQepZwNVbKCqDdSxgZo2kG4DCwMDgx6SkBwDA4MAZFoUSR1iw7OAhsHExMRAAIBoRwUgWwHygfQfUm0AARa0GCQeQM1Z8P//f5YfP36AAAA0I0z3s3ECGAAAAABJRU5ErkJggg=='
    };
    
    // Set filetype function
    function dd_setFiletype(fileType, buttonText, resType) {
      const filetypeButton = document.getElementById('dd-filetype-button');
      const filetypeText = filetypeButton.querySelector('span:first-child');
      
      let icon = '&#128193;';
      let placeholder = 'Search anything';
      
      switch(resType) {
        case 'video':
          icon = '&#127916;';
          placeholder = 'Search for videos e.g. The.Blacklist.S01';
          break;
        case 'ebook':
          icon = '&#128218;';
          placeholder = 'Search for books e.g. Stephen King';
          break;
        case 'audio':
          icon = '&#127925;';
          placeholder = 'Search for music e.g. Taylor Swift';
          break;
        case 'archive':
          icon = '&#128191;';
          placeholder = 'Search for software/games e.g. Photoshop 2024';
          break;
        case 'picture':
          icon = '&#128444;️';
          placeholder = 'Search for images e.g. nature wallpapers';
          break;
        case 'all':
          icon = '&#128269;';
          placeholder = 'Search anything';
          break;
      }
      
      filetypeText.textContent = `${icon} ${buttonText}`;
      document.getElementById('dd-query').placeholder = placeholder;
      document.getElementById('dd-fileType').value = fileType;
      document.getElementById('dd-resType').value = resType;
      
      // Close dropdown
      document.getElementById('dd-filetype-menu').classList.remove('show');
    }
    
    // Set engine function
    function dd_setEngine(engine) {
      const engineButton = document.getElementById('dd-engine-button');
      const engineText = engineButton.querySelector('span:first-child');
      
      let icon = '&#127760;';
      switch(engine) {
        case 'google':
          icon = '&#128269;';
          break;
        case 'googol':
          icon = '&#128269;';
          break;
        case 'startpage':
          icon = '&#128272;';
          break;
        case 'searx':
          icon = '&#128270;';
          break;
        case 'filepursuit':
          icon = '&#128193;';
          break;
      }
      
      engineText.textContent = `${icon} ${engine.charAt(0).toUpperCase() + engine.slice(1)}`;
      document.getElementById('dd-engine').value = engine;
      
      // Close dropdown
      document.getElementById('dd-engine-menu').classList.remove('show');
    }
    
    // Start search function
    function dd_startSearch() {
      const query = document.getElementById('dd-query').value.trim();
      const fileType = document.getElementById('dd-fileType').value;
      const resType = document.getElementById('dd-resType').value;
      const engine = document.getElementById('dd-engine').value;
      
      if (!query) {
        alert('Please enter search keywords');
        return;
      }
      
      let finalQuery = '';
      let url = '';
      
      if (fileType === '-1' || fileType === '') {
        finalQuery = `${query} -inurl:(jsp|pl|php|html|aspx|htm|cf|shtml) intitle:index.of -inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|index-of|wallywashis|downloadmana)`;
      } else {
        finalQuery = `${query} +(${fileType}) -inurl:(jsp|pl|php|html|aspx|htm|cf|shtml) intitle:index.of -inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|index-of|wallywashis|downloadmana)`;
      }
      
      switch(engine) {
        case 'google':
          url = `https://www.google.com/search?q=${encodeURIComponent(finalQuery)}`;
          break;
        case 'googol':
          url = `https://googol.warriordudimanche.net/?q=${encodeURIComponent(finalQuery)}`;
          break;
        case 'startpage':
          url = `https://www.startpage.com/do/dsearch?query=${encodeURIComponent(finalQuery)}`;
          break;
        case 'searx':
          url = `https://searx.me/?q=${encodeURIComponent(finalQuery)}`;
          break;
        case 'filepursuit':
          url = `https://filepursuit.com/search/${query.replace(/ /g, "+")}/type/${resType}`;
          break;
      }
      
      window.open(url, '_blank');
    }
    
    // Initialize dropdowns
    document.addEventListener('DOMContentLoaded', function() {
      // Set default values
      dd_setFiletype('mkv|mp4|avi|mov|mpg|wmv|divx|mpeg', 'TV/Movies', 'video');
      dd_setEngine('google');
      
      // Dropdown toggle functionality
      document.querySelectorAll('.dd-dropdown-toggle').forEach(button =&gt; {
        button.addEventListener('click', function(e) {
          const menu = this.nextElementSibling;
          const isOpen = menu.classList.contains('show');
          
          // Close all other dropdowns
          document.querySelectorAll('.dd-dropdown-menu.show').forEach(m =&gt; {
            if (m !== menu) m.classList.remove('show');
          });
          
          // Toggle current dropdown
          menu.classList.toggle('show', !isOpen);
          e.stopPropagation();
        });
      });
      
      // Close dropdowns when clicking outside
      document.addEventListener('click', function() {
        document.querySelectorAll('.dd-dropdown-menu.show').forEach(menu =&gt; {
          menu.classList.remove('show');
        });
      });
      
      // Enter key support
      document.getElementById('dd-query').addEventListener('keypress', function(e) {
        if (e.key === 'Enter') {
          e.preventDefault();
          dd_startSearch();
        }
      });
    });
  &lt;/script&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Strong Password Generator</title><link>https://www.laxmannepal.com.np/2025/12/strong-password-generator.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Wed, 10 Dec 2025 22:29:17 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-2190858092524380256</guid><description>
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;&lt;/meta&gt;
    &lt;meta content="width=device-width, initial-scale=1.0" name="viewport"&gt;&lt;/meta&gt;
    &lt;title&gt;FortressKey - Strong Password Generator&lt;/title&gt;
    &lt;!-- Google Fonts: Inter --&gt;
    &lt;link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;amp;display=swap" rel="stylesheet"&gt;&lt;/link&gt;
    
    &lt;style&gt;
        /* 
           PREFIX: fpg- (Fortress Password Generator)
           THEME: Bright / Light
        */

        .fpg-wrapper {
            font-family: 'Inter', system-ui, -apple-system, sans-serif;
            display: flex;
            justify-content: center;
            padding: 20px;
            background-color: transparent; 
            color: #1e293b;
            box-sizing: border-box;
            /* Disable pull-to-refresh on mobile to improve swipe experience */
            overscroll-behavior-y: contain; 
        }

        .fpg-card {
            background-color: #ffffff;
            color: #1e293b;
            width: 100%;
            max-width: 450px;
            border-radius: 16px;
            padding: 2rem;
            box-shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.08), 0 4px 6px -4px rgba(0, 0, 0, 0.05);
            border: 1px solid #e2e8f0;
            position: relative;
            overflow: hidden; /* Important for swipe overlay */
            touch-action: pan-y; /* Allow vertical scroll, handle horizontal swipe manually */
        }

        /* Swipe Feedback Overlay */
        .fpg-overlay {
            position: absolute;
            inset: 0;
            background-color: transparent;
            pointer-events: none;
            z-index: 10;
            transition: background-color 0.3s ease;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        
        .fpg-overlay-icon {
            opacity: 0;
            transform: scale(0.5);
            transition: all 0.3s ease;
            color: white;
            background: rgba(0,0,0,0.2);
            padding: 20px;
            border-radius: 50%;
        }

        .fpg-overlay.swipe-left { background-color: rgba(99, 102, 241, 0.1); } /* Blue for Gen */
        .fpg-overlay.swipe-right { background-color: rgba(16, 185, 129, 0.1); } /* Green for Copy */

        .fpg-overlay.swipe-left .fpg-icon-gen,
        .fpg-overlay.swipe-right .fpg-icon-copy {
            opacity: 1;
            transform: scale(1);
        }

        .fpg-header {
            text-align: center;
            margin-bottom: 2rem;
        }

        .fpg-title {
            font-size: 1.5rem;
            font-weight: 700;
            color: #0f172a;
            margin: 0 0 0.5rem 0;
            line-height: 1.2;
        }

        .fpg-subtitle {
            font-size: 0.875rem;
            color: #64748b;
            margin: 0;
        }

        /* Password Display */
        .fpg-display-container {
            background-color: #f8fafc;
            border: 1px solid #cbd5e1;
            border-radius: 12px;
            padding: 1.25rem;
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 1rem;
            position: relative;
            transition: all 0.2s;
            user-select: none; /* Better for gestures */
        }

        .fpg-display-container:hover {
            border-color: #6366f1;
            background-color: #fff;
            box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
        }

        .fpg-password-text {
            font-family: 'Monaco', 'Consolas', monospace;
            font-size: 1.25rem;
            color: #334155;
            word-break: break-all;
            margin-right: 1rem;
            line-height: 1.5;
            letter-spacing: 0.5px;
            font-weight: 600;
        }

        .fpg-password-text.placeholder {
            color: #94a3b8;
            font-weight: 400;
        }

        .fpg-btn-icon {
            background: #fff;
            border: 1px solid #e2e8f0;
            cursor: pointer;
            color: #64748b;
            padding: 10px; /* Larger touch target */
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.2s;
        }

        .fpg-btn-icon:hover {
            background-color: #f1f5f9;
            color: #334155;
            border-color: #cbd5e1;
        }

        /* Strength Meter */
        .fpg-meter-container {
            margin-bottom: 2rem;
            background: #f8fafc;
            padding: 1rem;
            border-radius: 10px;
            border: 1px solid #f1f5f9;
        }

        .fpg-meter-header {
            display: flex;
            justify-content: space-between;
            font-size: 0.75rem;
            margin-bottom: 0.5rem;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.05em;
        }

        .fpg-meter-label, .fpg-meter-value { color: #64748b; }
        .fpg-meter-value.weak { color: #ef4444; }
        .fpg-meter-value.fair { color: #eab308; }
        .fpg-meter-value.good { color: #3b82f6; }
        .fpg-meter-value.strong { color: #10b981; }

        .fpg-bars { display: flex; gap: 6px; height: 8px; }
        .fpg-bar {
            flex: 1;
            background-color: #e2e8f0;
            border-radius: 4px;
            transition: background-color 0.3s ease;
        }
        .fpg-bar.active.weak { background-color: #ef4444; }
        .fpg-bar.active.fair { background-color: #eab308; }
        .fpg-bar.active.good { background-color: #3b82f6; }
        .fpg-bar.active.strong { background-color: #10b981; }

        /* Controls */
        .fpg-control-group { margin-bottom: 1.5rem; }
        .fpg-label-row {
            display: flex;
            justify-content: space-between;
            color: #334155;
            font-size: 0.875rem;
            font-weight: 600;
            margin-bottom: 0.75rem;
        }

        .fpg-slider {
            -webkit-appearance: none;
            width: 100%;
            height: 8px;
            background: #e2e8f0;
            border-radius: 4px;
            outline: none;
            cursor: pointer;
            touch-action: pan-y; /* Ensure slider works without triggering swipes */
        }
        .fpg-slider::-webkit-slider-thumb {
            -webkit-appearance: none;
            width: 28px; /* Larger for touch */
            height: 28px;
            background: #6366f1;
            border-radius: 50%;
            border: 3px solid #ffffff;
            box-shadow: 0 2px 6px rgba(99, 102, 241, 0.4);
            cursor: pointer;
            transition: transform 0.1s;
        }
        .fpg-slider::-webkit-slider-thumb:hover { transform: scale(1.1); }

        /* Checkboxes */
        .fpg-options-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 1rem;
        }

        .fpg-checkbox-wrapper {
            display: flex;
            align-items: center;
            cursor: pointer;
            user-select: none;
            padding: 0.75rem; /* Larger touch area */
            border-radius: 8px;
            transition: background-color 0.2s;
        }
        .fpg-checkbox-wrapper:hover { background-color: #f8fafc; }
        .fpg-checkbox-input { display: none; }
        .fpg-checkbox-custom {
            width: 20px;
            height: 20px;
            border: 2px solid #cbd5e1;
            background-color: #fff;
            border-radius: 6px;
            margin-right: 12px;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.2s;
        }
        .fpg-checkbox-input:checked + .fpg-checkbox-custom {
            background-color: #6366f1;
            border-color: #6366f1;
        }
        .fpg-checkbox-icon {
            color: white;
            opacity: 0;
            transform: scale(0.5);
            transition: all 0.2s;
        }
        .fpg-checkbox-input:checked + .fpg-checkbox-custom .fpg-checkbox-icon {
            opacity: 1;
            transform: scale(1);
        }
        .fpg-checkbox-label {
            color: #334155;
            font-size: 0.875rem;
            font-weight: 500;
        }

        /* Buttons */
        .fpg-btn-primary {
            width: 100%;
            background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);
            color: white;
            border: none;
            padding: 16px;
            font-size: 1rem;
            font-weight: 700;
            border-radius: 12px;
            cursor: pointer;
            transition: all 0.2s;
            margin-top: 1.5rem;
            box-shadow: 0 10px 15px -3px rgba(79, 70, 229, 0.3);
            text-transform: uppercase;
            letter-spacing: 0.5px;
            -webkit-tap-highlight-color: transparent;
        }
        .fpg-btn-primary:active { transform: scale(0.98); }

        /* Floating Action Button (FAB) */
        .fpg-fab {
            position: absolute;
            bottom: 20px;
            right: 20px;
            width: 56px;
            height: 56px;
            border-radius: 50%;
            background: #6366f1;
            color: white;
            border: none;
            box-shadow: 0 4px 15px rgba(99, 102, 241, 0.5);
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            z-index: 20;
            transition: transform 0.2s, background-color 0.2s;
            -webkit-tap-highlight-color: transparent;
        }
        .fpg-fab:hover { background: #4f46e5; transform: scale(1.05); }
        .fpg-fab:active { transform: scale(0.9); }
        .fpg-fab svg { width: 24px; height: 24px; }

        /* Mobile Settings / Instructions */
        .fpg-mobile-section {
            margin-top: 1.5rem;
            border-top: 1px solid #f1f5f9;
            padding-top: 1rem;
        }
        .fpg-mobile-toggle {
            display: flex;
            justify-content: space-between;
            align-items: center;
            cursor: pointer;
            color: #64748b;
            font-size: 0.875rem;
            font-weight: 600;
            padding: 0.5rem;
            border-radius: 8px;
        }
        .fpg-mobile-toggle:hover { background: #f8fafc; }
        .fpg-mobile-content {
            display: none;
            padding: 0.5rem;
            margin-top: 0.5rem;
            animation: fpgSlideDown 0.3s ease;
        }
        .fpg-mobile-content.open { display: block; }
        .fpg-hint {
            font-size: 0.75rem;
            color: #94a3b8;
            margin-top: 0.5rem;
            text-align: center;
        }

        @keyframes fpgSlideDown {
            from { opacity: 0; transform: translateY(-10px); }
            to { opacity: 1; transform: translateY(0); }
        }

        /* Toast */
        .fpg-toast {
            position: absolute;
            top: 1rem;
            left: 50%;
            transform: translateX(-50%) translateY(-20px);
            background-color: #10b981;
            color: white;
            padding: 0.5rem 1rem;
            border-radius: 20px;
            font-size: 0.875rem;
            font-weight: 600;
            opacity: 0;
            pointer-events: none;
            transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            z-index: 30;
        }
        .fpg-toast.visible { opacity: 1; transform: translateX(-50%) translateY(0); }
        
        .fpg-toast-gen { background-color: #6366f1; }
        .fpg-toast-copy { background-color: #10b981; }

    &lt;/style&gt;
&lt;/head&gt;
&lt;body style="background-color: #f1f5f9; margin: 0;"&gt;

    &lt;div class="fpg-wrapper"&gt;
        &lt;div class="fpg-card" id="fpgCard"&gt;
            
            &lt;!-- Swipe Overlay --&gt;
            &lt;div class="fpg-overlay" id="fpgOverlay"&gt;
                &lt;div class="fpg-overlay-icon fpg-icon-gen"&gt;
                    &lt;svg fill="none" height="40" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="40"&gt;&lt;path d="M23 4v6h-6"&gt;&lt;path d="M1 20v-6h6"&gt;&lt;path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"&gt;&lt;/path&gt;&lt;/path&gt;&lt;/path&gt;&lt;/svg&gt;
                &lt;/div&gt;
                &lt;div class="fpg-overlay-icon fpg-icon-copy"&gt;
                    &lt;svg fill="none" height="40" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="40"&gt;&lt;rect height="13" rx="2" ry="2" width="13" x="9" y="9"&gt;&lt;/rect&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"&gt;&lt;/path&gt;&lt;/svg&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Toast --&gt;
            &lt;div class="fpg-toast" id="fpgToast"&gt;Action Successful&lt;/div&gt;

            &lt;!-- Header --&gt;
            &lt;div class="fpg-header"&gt;
                &lt;h2 class="fpg-title"&gt;FortressKey&lt;/h2&gt;
                &lt;p class="fpg-subtitle"&gt;Secure Password Generator&lt;/p&gt;
            &lt;/div&gt;

            &lt;!-- Display --&gt;
            &lt;div class="fpg-display-container"&gt;
                &lt;div class="fpg-password-text" id="fpgPassword"&gt;&lt;/div&gt;
                &lt;button aria-label="Copy Password" class="fpg-btn-icon" id="fpgBtnCopy"&gt;
                    &lt;svg fill="none" height="20" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="20"&gt;&lt;rect height="13" rx="2" ry="2" width="13" x="9" y="9"&gt;&lt;/rect&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"&gt;&lt;/path&gt;&lt;/svg&gt;
                &lt;/button&gt;
            &lt;/div&gt;

            &lt;!-- Strength --&gt;
            &lt;div class="fpg-meter-container"&gt;
                &lt;div class="fpg-meter-header"&gt;
                    &lt;span class="fpg-meter-label"&gt;Security Strength&lt;/span&gt;
                    &lt;span class="fpg-meter-value" id="fpgStrengthValue"&gt;Weak&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class="fpg-bars"&gt;
                    &lt;div class="fpg-bar" id="fpgBar1"&gt;&lt;/div&gt;
                    &lt;div class="fpg-bar" id="fpgBar2"&gt;&lt;/div&gt;
                    &lt;div class="fpg-bar" id="fpgBar3"&gt;&lt;/div&gt;
                    &lt;div class="fpg-bar" id="fpgBar4"&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Length Slider --&gt;
            &lt;div class="fpg-control-group"&gt;
                &lt;div class="fpg-label-row"&gt;
                    &lt;label for="fpgLength"&gt;Password Length&lt;/label&gt;
                    &lt;span id="fpgLengthValue" style="background: #e2e8f0; border-radius: 6px; color: #334155; font-family: monospace; padding: 2px 8px;"&gt;16&lt;/span&gt;
                &lt;/div&gt;
                &lt;input class="fpg-slider" id="fpgLength" max="64" min="6" type="range" value="16" /&gt;
            &lt;/div&gt;

            &lt;!-- Checkboxes --&gt;
            &lt;div class="fpg-options-grid"&gt;
                &lt;label class="fpg-checkbox-wrapper"&gt;
                    &lt;input checked="" class="fpg-checkbox-input" id="fpgUpper" type="checkbox" /&gt;
                    &lt;div class="fpg-checkbox-custom"&gt;
                        &lt;svg class="fpg-checkbox-icon" fill="none" height="12" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke="currentColor" viewbox="0 0 24 24" width="12"&gt;&lt;polyline points="20 6 9 17 4 12"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                    &lt;/div&gt;
                    &lt;span class="fpg-checkbox-label"&gt;Uppercase&lt;/span&gt;
                &lt;/label&gt;
                &lt;label class="fpg-checkbox-wrapper"&gt;
                    &lt;input checked="" class="fpg-checkbox-input" id="fpgLower" type="checkbox" /&gt;
                    &lt;div class="fpg-checkbox-custom"&gt;
                        &lt;svg class="fpg-checkbox-icon" fill="none" height="12" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke="currentColor" viewbox="0 0 24 24" width="12"&gt;&lt;polyline points="20 6 9 17 4 12"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                    &lt;/div&gt;
                    &lt;span class="fpg-checkbox-label"&gt;Lowercase&lt;/span&gt;
                &lt;/label&gt;
                &lt;label class="fpg-checkbox-wrapper"&gt;
                    &lt;input checked="" class="fpg-checkbox-input" id="fpgNumbers" type="checkbox" /&gt;
                    &lt;div class="fpg-checkbox-custom"&gt;
                        &lt;svg class="fpg-checkbox-icon" fill="none" height="12" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke="currentColor" viewbox="0 0 24 24" width="12"&gt;&lt;polyline points="20 6 9 17 4 12"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                    &lt;/div&gt;
                    &lt;span class="fpg-checkbox-label"&gt;Numbers&lt;/span&gt;
                &lt;/label&gt;
                &lt;label class="fpg-checkbox-wrapper"&gt;
                    &lt;input checked="" class="fpg-checkbox-input" id="fpgSymbols" type="checkbox" /&gt;
                    &lt;div class="fpg-checkbox-custom"&gt;
                        &lt;svg class="fpg-checkbox-icon" fill="none" height="12" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke="currentColor" viewbox="0 0 24 24" width="12"&gt;&lt;polyline points="20 6 9 17 4 12"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                    &lt;/div&gt;
                    &lt;span class="fpg-checkbox-label"&gt;Symbols&lt;/span&gt;
                &lt;/label&gt;
            &lt;/div&gt;

            &lt;button class="fpg-btn-primary" id="fpgGenerateBtn"&gt;Generate Password&lt;/button&gt;

            &lt;!-- Mobile Features --&gt;
            &lt;div class="fpg-mobile-section"&gt;
                &lt;div class="fpg-mobile-toggle" id="fpgMobileToggle"&gt;
                    &lt;span&gt;Mobile Features&lt;/span&gt;
                    &lt;svg fill="none" height="16" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="16"&gt;&lt;polyline points="6 9 12 15 18 9"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                &lt;/div&gt;
                &lt;div class="fpg-mobile-content" id="fpgMobileContent"&gt;
                    &lt;label class="fpg-checkbox-wrapper"&gt;
                        &lt;input class="fpg-checkbox-input" id="fpgShakeToggle" type="checkbox" /&gt;
                        &lt;div class="fpg-checkbox-custom"&gt;
                            &lt;svg class="fpg-checkbox-icon" fill="none" height="12" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke="currentColor" viewbox="0 0 24 24" width="12"&gt;&lt;polyline points="20 6 9 17 4 12"&gt;&lt;/polyline&gt;&lt;/svg&gt;
                        &lt;/div&gt;
                        &lt;span class="fpg-checkbox-label"&gt;Shake to Generate&lt;/span&gt;
                    &lt;/label&gt;
                    &lt;p class="fpg-hint"&gt;Gestures: Swipe Left to Generate • Swipe Right to Copy&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- FAB --&gt;
            &lt;button aria-label="Quick Generate" class="fpg-fab" id="fpgFab"&gt;
                &lt;svg fill="none" height="24" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="24"&gt;&lt;path d="M23 4v6h-6"&gt;&lt;path d="M1 20v-6h6"&gt;&lt;path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"&gt;&lt;/path&gt;&lt;/path&gt;&lt;/path&gt;&lt;/svg&gt;
            &lt;/button&gt;

        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        (function() {
            // Configuration
            const CHARS = {
                upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                lower: 'abcdefghijklmnopqrstuvwxyz',
                nums: '0123456789',
                syms: '!@#$%^&amp;*()_+~`|}{[]:;?&gt;&lt;,./-='
            };

            // Elements
            const els = {
                card: document.getElementById('fpgCard'),
                pass: document.getElementById('fpgPassword'),
                copy: document.getElementById('fpgBtnCopy'),
                gen: document.getElementById('fpgGenerateBtn'),
                fab: document.getElementById('fpgFab'),
                len: document.getElementById('fpgLength'),
                lenVal: document.getElementById('fpgLengthValue'),
                upper: document.getElementById('fpgUpper'),
                lower: document.getElementById('fpgLower'),
                nums: document.getElementById('fpgNumbers'),
                syms: document.getElementById('fpgSymbols'),
                toast: document.getElementById('fpgToast'),
                overlay: document.getElementById('fpgOverlay'),
                strengthVal: document.getElementById('fpgStrengthValue'),
                bars: [
                    document.getElementById('fpgBar1'), document.getElementById('fpgBar2'),
                    document.getElementById('fpgBar3'), document.getElementById('fpgBar4')
                ],
                mobileToggle: document.getElementById('fpgMobileToggle'),
                mobileContent: document.getElementById('fpgMobileContent'),
                shakeToggle: document.getElementById('fpgShakeToggle')
            };

            // ---- Logic: Generation ----
            function generate() {
                const len = parseInt(els.len.value);
                let chars = '';
                if (els.upper.checked) chars += CHARS.upper;
                if (els.lower.checked) chars += CHARS.lower;
                if (els.nums.checked) chars += CHARS.nums;
                if (els.syms.checked) chars += CHARS.syms;

                if (!chars) {
                    els.pass.textContent = 'Select Options';
                    els.pass.classList.add('placeholder');
                    updateStrength('');
                    return;
                }

                let password = '';
                if (window.crypto &amp;&amp; window.crypto.getRandomValues) {
                    const values = new Uint32Array(len);
                    window.crypto.getRandomValues(values);
                    for (let i = 0; i &lt; len; i++) {
                        password += chars[values[i] % chars.length];
                    }
                } else {
                    for (let i = 0; i &lt; len; i++) {
                        password += chars.charAt(Math.floor(Math.random() * chars.length));
                    }
                }

                els.pass.textContent = password;
                els.pass.classList.remove('placeholder');
                updateStrength(password);
            }

            // ---- Logic: Strength ----
            function updateStrength(password) {
                let score = 0;
                if (password.length &gt; 0) {
                    if (password.length &gt;= 8) score++;
                    if (password.length &gt;= 12) score++;
                    if (password.length &gt;= 16) score++;
                    if (/[A-Z]/.test(password)) score++;
                    if (/[0-9]/.test(password)) score++;
                    if (/[^A-Za-z0-9]/.test(password)) score++;
                }

                let level = 0, label = '', className = '';
                if (!password) { level = 0; }
                else if (score &lt; 3) { level = 1; label = 'Weak'; className = 'weak'; }
                else if (score &lt; 5) { level = 2; label = 'Fair'; className = 'fair'; }
                else if (score &lt; 6) { level = 3; label = 'Good'; className = 'good'; }
                else { level = 4; label = 'Strong'; className = 'strong'; }

                els.strengthVal.textContent = label;
                els.strengthVal.className = 'fpg-meter-value ' + className;
                els.bars.forEach((bar, idx) =&gt; {
                    bar.className = 'fpg-bar';
                    if (idx &lt; level) bar.classList.add('active', className);
                });
            }

            // ---- Logic: Copy ----
            function copy() {
                const text = els.pass.textContent;
                if (!text || els.pass.classList.contains('placeholder')) return;
                navigator.clipboard.writeText(text).then(() =&gt; showToast('Password Copied!', 'copy')).catch(() =&gt; {});
            }

            function showToast(msg, type) {
                els.toast.textContent = msg;
                els.toast.className = 'fpg-toast visible';
                if(type === 'gen') els.toast.classList.add('fpg-toast-gen');
                else els.toast.classList.add('fpg-toast-copy');
                setTimeout(() =&gt; els.toast.classList.remove('visible'), 2000);
            }

            // ---- Mobile: Swipe ----
            let touchStartX = 0;
            let touchStartY = 0;
            const SWIPE_THRESHOLD = 80;

            els.card.addEventListener('touchstart', (e) =&gt; {
                // Ignore swipes on slider to prevent conflict
                if (e.target.closest('.fpg-slider')) return;
                touchStartX = e.changedTouches[0].screenX;
                touchStartY = e.changedTouches[0].screenY;
            }, { passive: true });

            els.card.addEventListener('touchmove', (e) =&gt; {
                if (e.target.closest('.fpg-slider')) return;
                const touchX = e.changedTouches[0].screenX;
                const diffX = touchX - touchStartX;
                
                // Visual feedback during swipe
                if (Math.abs(diffX) &gt; 30) {
                    if (diffX &gt; 0) els.overlay.classList.add('swipe-right');
                    else els.overlay.classList.add('swipe-left');
                } else {
                    els.overlay.classList.remove('swipe-right', 'swipe-left');
                }
            }, { passive: true });

            els.card.addEventListener('touchend', (e) =&gt; {
                if (e.target.closest('.fpg-slider')) return;
                const touchEndX = e.changedTouches[0].screenX;
                const touchEndY = e.changedTouches[0].screenY;
                const diffX = touchEndX - touchStartX;
                const diffY = touchEndY - touchStartY;

                // Reset overlay
                els.overlay.classList.remove('swipe-right', 'swipe-left');

                // Horizontal swipe only (ignore scrolling)
                if (Math.abs(diffX) &gt; SWIPE_THRESHOLD &amp;&amp; Math.abs(diffY) &lt; 50) {
                    if (diffX &gt; 0) {
                        copy();
                    } else {
                        generate();
                        showToast('New Password!', 'gen');
                    }
                }
            });

            // ---- Mobile: Shake ----
            let lastX = 0, lastY = 0, lastZ = 0;
            let lastUpdate = 0;
            const SHAKE_THRESHOLD = 15;

            function handleMotion(e) {
                if (!els.shakeToggle.checked) return;
                
                const current = e.accelerationIncludingGravity;
                if (!current) return;

                const curTime = Date.now();
                if ((curTime - lastUpdate) &gt; 100) {
                    const diffTime = curTime - lastUpdate;
                    lastUpdate = curTime;

                    const speed = Math.abs(current.x + current.y + current.z - lastX - lastY - lastZ) / diffTime * 10000;

                    if (speed &gt; SHAKE_THRESHOLD * 100) { // Scaled logic
                         generate();
                         showToast('Shaken &amp; Generated!', 'gen');
                    }

                    lastX = current.x;
                    lastY = current.y;
                    lastZ = current.z;
                }
            }

            if (window.DeviceMotionEvent) {
                window.addEventListener('devicemotion', handleMotion, false);
            }

            // ---- Listeners ----
            els.gen.addEventListener('click', () =&gt; { generate(); showToast('Generated!', 'gen'); });
            els.fab.addEventListener('click', () =&gt; { generate(); showToast('Generated!', 'gen'); });
            els.copy.addEventListener('click', copy);
            
            [els.len, els.upper, els.lower, els.nums, els.syms].forEach(el =&gt; {
                el.addEventListener('input', () =&gt; {
                    if (el === els.len) els.lenVal.textContent = el.value;
                    generate();
                });
            });

            els.mobileToggle.addEventListener('click', () =&gt; {
                els.mobileContent.classList.toggle('open');
            });

            // Init
            generate();
        })();
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;




&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p class="MsoNormal" style="line-height: 25.5pt; margin-bottom: 12.0pt; mso-margin-top-alt: auto; mso-outline-level: 1;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 18.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-font-kerning: 18.0pt; mso-themecolor: text1;"&gt;Free Strong Password Generator: Create Secure Passwords Instantly with
FortressKey&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Meta Description:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Generate
uncrackable passwords instantly &amp;amp; for free with FortressKey. This secure
password generator runs 100% in your browser—no server logs, maximum privacy.
Features mobile-friendly swipe controls &amp;amp; shake-to-generate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 24.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; text-align: center;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;

&lt;hr align="center" size="1" width="100%" /&gt;

&lt;/span&gt;&lt;/div&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;In an era where our
digital lives are under constant threat, the strength of your first line of
defense—your password—can mean the difference between safety and catastrophe. A
weak password is like using a flimsy lock on a vault; it invites trouble. With
cyberattacks and data breaches surging, relying on predictable passwords such
as “123456” or your pet’s name is a risk you simply cannot afford. Hackers deploy
automated “brute-force” attacks that can crack simple passwords in seconds.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;This is where a
dedicated&amp;nbsp;&lt;b&gt;strong password generator&lt;/b&gt;&amp;nbsp;becomes non-negotiable. To
truly protect your online banking, email, social media, and sensitive data, you
need a tool that creates complex, random strings of characters. These passwords
are mathematically improbable to guess and computationally intensive to crack.
Welcome to FortressKey: your ultimate, free solution for generating secure
passwords instantly, with privacy at its core.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 24.0pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 2;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 16.5pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Generate
Your Secure Password Now&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Use the interactive tool
below to create a high-strength password in seconds. Customize it to your needs
and copy it safely.&lt;/span&gt;&lt;span style="background: #151517; color: black; font-family: Consolas; font-size: 12.0pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt; text-align: center;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;

&lt;hr align="center" size="1" width="100%" /&gt;

&lt;/span&gt;&lt;/div&gt;

&lt;p class="MsoNormal" style="line-height: 24.0pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 2;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 16.5pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Why
Choose FortressKey as Your Secure Password Generator?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;While many online tools
claim to generate strong passwords, FortressKey is engineered differently. We
built it from the ground up with a&amp;nbsp;&lt;b&gt;"Privacy-First"&lt;/b&gt;&amp;nbsp;philosophy,
ensuring your security never comes at the expense of your privacy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 22.5pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 3;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 15.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;1.
Unmatched Privacy: 100% Client-Side Generation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;A critical flaw of many
online password generators is that they process your request on a remote
server. This creates a log and a potential point of interception.&amp;nbsp;&lt;b&gt;FortressKey
is a client-side password generator.&lt;/b&gt;&amp;nbsp;It runs entirely within your
browser using advanced JavaScript. The password is created on your device—your
computer, phone, or tablet—and never transmitted over the internet. We never
see it, and neither does anyone else. Your secrets stay yours.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 22.5pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 3;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 15.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;2.
Designed for the Modern User: Mobile-Optimized &amp;amp; Intuitive&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Security shouldn’t be
cumbersome, especially on mobile. FortressKey delivers an app-like experience
right in your browser:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l1 level1 lfo1; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Swipe Controls:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Swipe
left to generate a new password instantly. Swipe right to copy the current one
to your clipboard—no tapping required.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l1 level1 lfo1; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Shake-to-Regenerate:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Need
a new password? Just give your phone a quick shake (feature can be
enabled/disabled in settings).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l1 level1 lfo1; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Haptic &amp;amp; Visual Feedback:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Immediate,
clear confirmations let you know when a password is generated or copied.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 22.5pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 3;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 15.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;3.
Complete Customization for Any Website’s Rules&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Different services have
different password requirements. Our&amp;nbsp;&lt;b&gt;free password generator tool&lt;/b&gt;&amp;nbsp;gives
you full control:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l3 level1 lfo2; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Adjust password length with a slider (from 8 up to 64
characters).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l3 level1 lfo2; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Toggle character types: Uppercase (A-Z), Lowercase (a-z),
Numbers (0-9), and Special Symbols (!@#$%).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l3 level1 lfo2; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: Symbol; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Real-time security meter visually shows the strength of
your generated password.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 24.0pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 2;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 16.5pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;What
Actually Makes a Password "Strong" and Secure?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;If you're not using a
generator, understanding these core principles is essential for creating a
secure password manually:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l0 level1 lfo3; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;1.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Length
Over Complexity:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;While complexity matters,&amp;nbsp;&lt;b&gt;length is the
most critical factor&lt;/b&gt;. A 16-character password is exponentially harder to
crack than an 8-character one, even with fewer symbol types. Aim for a minimum
of 12 characters.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l0 level1 lfo3; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;2.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Eliminate
Predictability:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Avoid using dictionary words, common phrases, or
personal information (birthdays, names). These are the first entries in a
hacker’s attack dictionary.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l0 level1 lfo3; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;3.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Embrace
True Randomness:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;A strong password uses an unpredictable mix of
character types. This "entropy" makes brute-force attacks
computationally unfeasible.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l0 level1 lfo3; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;4.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Uniqueness
is Mandatory:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;&lt;b&gt;Never reuse passwords.&lt;/b&gt;&amp;nbsp;If one site
suffers a data breach, hackers will try that same email/password combination
everywhere else. Each account needs its own unique key.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 24.0pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 2;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 16.5pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;How to
Use This Free Strong Password Generator&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Getting your secure
password is a simple, four-step process:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l2 level1 lfo4; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;1.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Customize
Your Criteria:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Use the checkboxes to select which character sets
you need (e.g., include symbols for sites that require them).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l2 level1 lfo4; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;2.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Set
Your Length:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Drag the slider to your desired password length.
For high-security accounts, we recommend 16 characters or more.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l2 level1 lfo4; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;3.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Generate:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Click
the "Generate" button, swipe left on the widget, or simply shake your
mobile device.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 0in; mso-list: l2 level1 lfo4; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Segoe UI&amp;quot;; mso-themecolor: text1;"&gt;&lt;span style="mso-list: Ignore;"&gt;4.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Copy
&amp;amp; Save:&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Click the copy icon or swipe right, then
immediately paste the password into your sign-up form.&amp;nbsp;&lt;b&gt;Crucially, save
it in a trusted password manager&lt;/b&gt;&amp;nbsp;like Bitwarden, 1Password, or
LastPass.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Pro Tip:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&amp;nbsp;Bookmark
this page! Having immediate access to a reliable, private, and free strong
password generator ensures you’re never tempted to create a weak password when
signing up for a new service.&lt;/span&gt;&lt;/i&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: 24.0pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 2;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 16.5pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Frequently
Asked Questions (FAQ)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Q: Is FortressKey really
free?&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;br /&gt;
A: Yes, absolutely. FortressKey is a 100% free strong password generator with
no hidden fees, upsells, or account required.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Q: Are the passwords
stored or logged anywhere?&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;br /&gt;
A: No. Because the tool runs client-side in your browser, passwords are
generated and exist only on your local device at the moment you create them.
They are never sent to our or any other server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Q: Can I use this on my
iPhone or Android device?&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;br /&gt;
A: Yes! FortressKey is fully responsive and mobile-optimized. The swipe
gestures and shake-to-generate features are specifically designed for a
seamless mobile experience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Q: What’s the best
practice after generating a password?&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;br /&gt;
A: Always use a dedicated password manager. It will store your strong, unique
passwords securely, auto-fill them for you, and help you audit your existing
passwords for weaknesses.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Q: Why shouldn’t I just
create my own password?&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;br /&gt;
A: Humans are inherently bad at creating randomness. We tend to create patterns
that are easy to remember but also easy for machines to guess. A tool like
FortressKey removes human bias, creating mathematically superior passwords.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 24.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; text-align: center;"&gt;&lt;span style="color: black; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;

&lt;hr align="center" size="1" width="100%" /&gt;

&lt;/span&gt;&lt;/div&gt;

&lt;p class="MsoNormal" style="line-height: 22.5pt; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 24.0pt; mso-outline-level: 3;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 15.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Final
Thoughts: Take Control of Your Digital Security Today&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Don’t let a weak
password be the vulnerability that compromises your online identity. In just a
few seconds, you can create a fortress-like defense for any account.
FortressKey provides that power—freely, privately, and conveniently.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-bottom: 12.0pt; margin-left: 0in; margin-right: 0in; margin-top: 12.0pt;"&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Start generating your
secure passwords now. Use the tool above, integrate it into your security
routine, and browse the web with confidence. For more tips on digital security,
consider exploring our guides on [how to choose a password manager] and
[setting up two-factor authentication].&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height: normal; margin-top: 12.0pt; mso-margin-bottom-alt: auto;"&gt;&lt;b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;Generate. Secure. Browse Safely.&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12.0pt; mso-bidi-language: NE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-themecolor: text1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="color: black; mso-themecolor: text1;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>File Converter Online</title><link>https://www.laxmannepal.com.np/2025/12/file-converter-online.html</link><category>Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Mon, 8 Dec 2025 04:34:00 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-6927264801151702159</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;File Extension Changer - Blogger Tool&lt;/title&gt;
    &lt;style&gt;
        /* Reset and isolation for laxmannepal.com.np compatibility */
        #file-tool-container {
            all: initial;
            font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
            display: block;
            box-sizing: border-box;
        }
        
        #file-tool-container *,
        #file-tool-container *::before,
        #file-tool-container *::after {
            box-sizing: border-box;
        }
        
        /* Main Tool Styles */
        #file-tool {
            max-width: 500px;
            margin: 0 auto;
            background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
            border-radius: 16px;
            padding: 32px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.1);
            font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
            border: 1px solid #e2e8f0;
        }
        
        /* Header */
        #file-tool .tool-header {
            text-align: center;
            margin-bottom: 32px;
        }
        
        #file-tool .tool-title {
            color: #1e293b;
            font-size: 28px;
            font-weight: 700;
            margin-bottom: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 12px;
        }
        
        #file-tool .tool-subtitle {
            color: #64748b;
            font-size: 14px;
            margin-bottom: 24px;
        }
        
        /* Upload Card */
        #file-tool .upload-card {
            background: #ffffff;
            border: 2px dashed #cbd5e1;
            border-radius: 12px;
            padding: 40px 24px;
            text-align: center;
            cursor: pointer;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            margin-bottom: 24px;
            position: relative;
            overflow: hidden;
        }
        
        #file-tool .upload-card:hover {
            border-color: #3b82f6;
            background: #f8fafc;
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.1);
        }
        
        #file-tool .upload-card.dragover {
            border-color: #3b82f6;
            background: #eff6ff;
        }
        
        #file-tool .upload-icon {
            width: 64px;
            height: 64px;
            background: #eff6ff;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            margin: 0 auto 16px;
            color: #3b82f6;
            font-size: 28px;
        }
        
        #file-tool .upload-text {
            font-size: 16px;
            font-weight: 600;
            color: #1e293b;
            margin-bottom: 4px;
        }
        
        #file-tool .upload-hint {
            font-size: 13px;
            color: #64748b;
        }
        
        /* File Info */
        #file-tool .file-preview {
            background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
            border-radius: 12px;
            padding: 20px;
            margin-bottom: 24px;
            display: none;
            animation: slideIn 0.4s ease-out;
        }
        
        #file-tool .file-preview.show {
            display: block;
        }
        
        #file-tool .file-icon {
            width: 48px;
            height: 48px;
            background: #3b82f6;
            border-radius: 12px;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            font-size: 20px;
            margin-bottom: 16px;
        }
        
        #file-tool .file-name {
            font-size: 15px;
            font-weight: 600;
            color: #1e293b;
            word-break: break-all;
            margin-bottom: 8px;
        }
        
        #file-tool .file-details {
            display: flex;
            align-items: center;
            gap: 16px;
            font-size: 13px;
            color: #64748b;
        }
        
        #file-tool .file-size {
            background: #e2e8f0;
            padding: 4px 10px;
            border-radius: 20px;
        }
        
        /* Extensions Section */
        #file-tool .extensions-section {
            margin-bottom: 24px;
        }
        
        #file-tool .section-title {
            font-size: 14px;
            font-weight: 600;
            color: #475569;
            margin-bottom: 12px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        #file-tool .extensions-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 10px;
            margin-bottom: 16px;
        }
        
        #file-tool .ext-btn {
            background: white;
            border: 2px solid #e2e8f0;
            border-radius: 10px;
            padding: 14px 8px;
            text-align: center;
            cursor: pointer;
            font-weight: 600;
            font-size: 14px;
            color: #475569;
            transition: all 0.2s ease;
        }
        
        #file-tool .ext-btn:hover {
            border-color: #3b82f6;
            color: #3b82f6;
            transform: translateY(-1px);
        }
        
        #file-tool .ext-btn.active {
            background: #3b82f6;
            border-color: #3b82f6;
            color: white;
            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
        }
        
        #file-tool .custom-ext {
            display: flex;
            gap: 12px;
            margin-bottom: 24px;
        }
        
        #file-tool .custom-ext input {
            flex: 1;
            padding: 14px 16px;
            border: 2px solid #e2e8f0;
            border-radius: 10px;
            font-size: 14px;
            transition: all 0.3s ease;
        }
        
        #file-tool .custom-ext input:focus {
            outline: none;
            border-color: #3b82f6;
            box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
        }
        
        #file-tool .custom-ext-btn {
            background: #64748b;
            color: white;
            border: none;
            border-radius: 10px;
            padding: 0 20px;
            cursor: pointer;
            font-weight: 600;
            transition: all 0.3s ease;
        }
        
        #file-tool .custom-ext-btn:hover {
            background: #475569;
        }
        
        /* Action Buttons */
        #file-tool .action-btn {
            width: 100%;
            padding: 16px;
            background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
            color: white;
            border: none;
            border-radius: 12px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 10px;
            margin-bottom: 16px;
            box-shadow: 0 4px 15px rgba(59, 130, 246, 0.2);
        }
        
        #file-tool .action-btn:hover:not(:disabled) {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(59, 130, 246, 0.3);
        }
        
        #file-tool .action-btn:disabled {
            background: #cbd5e1;
            cursor: not-allowed;
            transform: none;
            box-shadow: none;
        }
        
        /* Loader */
        #file-tool .loader-container {
            display: none;
            text-align: center;
            padding: 24px;
            margin: 16px 0;
            background: #f8fafc;
            border-radius: 12px;
            animation: fadeIn 0.3s ease;
        }
        
        #file-tool .loader-container.show {
            display: block;
        }
        
        #file-tool .loader {
            width: 50px;
            height: 50px;
            margin: 0 auto 16px;
            position: relative;
        }
        
        #file-tool .loader-circle {
            width: 100%;
            height: 100%;
            border: 3px solid #e2e8f0;
            border-top-color: #3b82f6;
            border-radius: 50%;
            animation: tool-spin 1s linear infinite;
        }
        
        #file-tool .loader-text {
            font-size: 14px;
            color: #64748b;
            font-weight: 500;
        }
        
        /* Result Section */
        #file-tool .result-card {
            background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
            border-radius: 12px;
            padding: 24px;
            margin-top: 20px;
            display: none;
            animation: slideUp 0.5s ease-out;
            border: 1px solid #bae6fd;
        }
        
        #file-tool .result-card.show {
            display: block;
        }
        
        #file-tool .result-header {
            display: flex;
            align-items: center;
            gap: 12px;
            margin-bottom: 16px;
        }
        
        #file-tool .result-icon {
            width: 40px;
            height: 40px;
            background: #22c55e;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            font-size: 20px;
        }
        
        #file-tool .result-title {
            font-size: 16px;
            font-weight: 600;
            color: #166534;
        }
        
        #file-tool .new-filename {
            background: white;
            padding: 16px;
            border-radius: 8px;
            font-family: 'JetBrains Mono', monospace, monospace;
            font-size: 14px;
            color: #1e293b;
            word-break: break-all;
            margin-bottom: 20px;
            border: 1px solid #e2e8f0;
        }
        
        /* Download Button */
        #file-tool .download-btn {
            width: 100%;
            padding: 16px;
            background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
            color: white;
            border: none;
            border-radius: 12px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            display: none;
            align-items: center;
            justify-content: center;
            gap: 10px;
            box-shadow: 0 4px 15px rgba(34, 197, 94, 0.2);
        }
        
        #file-tool .download-btn.show {
            display: flex;
        }
        
        #file-tool .download-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(34, 197, 94, 0.3);
        }
        
        /* Animations */
        @keyframes tool-spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        
        @keyframes slideIn {
            from { 
                opacity: 0;
                transform: translateY(-10px);
            }
            to { 
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        @keyframes slideUp {
            from { 
                opacity: 0;
                transform: translateY(20px);
            }
            to { 
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }
        
        /* Responsive Design */
        @media (max-width: 600px) {
            #file-tool {
                padding: 24px;
                margin: 12px;
            }
            
            #file-tool .extensions-grid {
                grid-template-columns: repeat(2, 1fr);
            }
            
            #file-tool .tool-title {
                font-size: 24px;
            }
        }
        
        @media (max-width: 400px) {
            #file-tool .extensions-grid {
                grid-template-columns: repeat(2, 1fr);
            }
            
            #file-tool .custom-ext {
                flex-direction: column;
            }
            
            #file-tool .custom-ext-btn {
                padding: 14px;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- Self-contained tool container --&gt;
    &lt;div id="file-tool-container"&gt;
        &lt;div id="file-tool"&gt;
            &lt;!-- Header --&gt;
            &lt;div class="tool-header"&gt;
                &lt;div class="tool-title"&gt;
                    &lt;span&gt;&#128193;&lt;/span&gt;
                    File Extension Changer
                &lt;/div&gt;
                &lt;div class="tool-subtitle"&gt;
                    Upload any file and change its extension in one click
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;!-- Upload Area --&gt;
            &lt;div class="upload-card" id="uploadCard"&gt;
                &lt;div class="upload-icon"&gt;
                    &#128228;
                &lt;/div&gt;
                &lt;div class="upload-text"&gt;
                    Drag &amp; drop your file here
                &lt;/div&gt;
                &lt;div class="upload-hint"&gt;
                    or click to browse files
                &lt;/div&gt;
                &lt;input type="file" id="fileInput" style="display: none;"&gt;
            &lt;/div&gt;
            
            &lt;!-- File Preview --&gt;
            &lt;div class="file-preview" id="filePreview"&gt;
                &lt;div class="file-icon"&gt;
                    &#128196;
                &lt;/div&gt;
                &lt;div class="file-name" id="fileName"&gt;
                    File name will appear here
                &lt;/div&gt;
                &lt;div class="file-details"&gt;
                    &lt;div class="file-size" id="fileSize"&gt;0 KB&lt;/div&gt;
                    &lt;div&gt;Extension: &lt;span id="currentExt" style="font-weight: 600; color: #3b82f6;"&gt;.ext&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;!-- Extensions --&gt;
            &lt;div class="extensions-section"&gt;
                &lt;div class="section-title"&gt;
                    &lt;span&gt;&#128260;&lt;/span&gt;
                    Select New Extension
                &lt;/div&gt;
                &lt;div class="extensions-grid"&gt;
                    &lt;button class="ext-btn" data-ext=".pdf"&gt;PDF&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".jpg"&gt;JPG&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".png"&gt;PNG&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".zip"&gt;ZIP&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".docx"&gt;DOCX&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".mp4"&gt;MP4&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".txt"&gt;TXT&lt;/button&gt;
                    &lt;button class="ext-btn" data-ext=".html"&gt;HTML&lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;!-- Custom Extension --&gt;
            &lt;div class="custom-ext"&gt;
                &lt;input type="text" id="customExt" placeholder="Or type custom extension (.bak, .old)"&gt;
                &lt;button class="custom-ext-btn" id="applyCustom"&gt;Apply&lt;/button&gt;
            &lt;/div&gt;
            
            &lt;!-- Action Button --&gt;
            &lt;button class="action-btn" id="changeBtn"&gt;
                &lt;span&gt;&#128260;&lt;/span&gt;
                Change Extension
            &lt;/button&gt;
            
            &lt;!-- Loader --&gt;
            &lt;div class="loader-container" id="loader"&gt;
                &lt;div class="loader"&gt;
                    &lt;div class="loader-circle"&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="loader-text"&gt;
                    Processing your file...
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;!-- Result Card --&gt;
            &lt;div class="result-card" id="resultCard"&gt;
                &lt;div class="result-header"&gt;
                    &lt;div class="result-icon"&gt;
                        ✓
                    &lt;/div&gt;
                    &lt;div class="result-title"&gt;
                        Extension Changed Successfully!
                    &lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="new-filename" id="newFileName"&gt;
                    New file name will appear here
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;!-- Download Button --&gt;
            &lt;button class="download-btn" id="downloadBtn"&gt;
                &lt;span&gt;⬇️&lt;/span&gt;
                Download File
            &lt;/button&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // Self-contained JavaScript
        (function() {
            // Elements
            const uploadCard = document.getElementById('uploadCard');
            const fileInput = document.getElementById('fileInput');
            const filePreview = document.getElementById('filePreview');
            const fileName = document.getElementById('fileName');
            const fileSize = document.getElementById('fileSize');
            const currentExt = document.getElementById('currentExt');
            const extBtns = document.querySelectorAll('#file-tool .ext-btn[data-ext]');
            const customExtInput = document.getElementById('customExt');
            const applyCustomBtn = document.getElementById('applyCustom');
            const changeBtn = document.getElementById('changeBtn');
            const loader = document.getElementById('loader');
            const resultCard = document.getElementById('resultCard');
            const newFileName = document.getElementById('newFileName');
            const downloadBtn = document.getElementById('downloadBtn');
            
            // Variables
            let selectedFile = null;
            let selectedExtension = '.pdf';
            let modifiedFile = null;
            
            // Initialize
            function init() {
                // Set first extension as active
                extBtns[0].classList.add('active');
                customExtInput.value = '.pdf';
                
                // Add event listeners
                setupEventListeners();
            }
            
            function setupEventListeners() {
                // Upload card click
                uploadCard.addEventListener('click', () =&gt; fileInput.click());
                
                // File input change
                fileInput.addEventListener('change', handleFileSelect);
                
                // Drag and drop
                uploadCard.addEventListener('dragover', (e) =&gt; {
                    e.preventDefault();
                    uploadCard.classList.add('dragover');
                });
                
                uploadCard.addEventListener('dragleave', () =&gt; {
                    uploadCard.classList.remove('dragover');
                });
                
                uploadCard.addEventListener('drop', (e) =&gt; {
                    e.preventDefault();
                    uploadCard.classList.remove('dragover');
                    
                    if (e.dataTransfer.files.length) {
                        fileInput.files = e.dataTransfer.files;
                        handleFileSelect();
                    }
                });
                
                // Extension buttons
                extBtns.forEach(btn =&gt; {
                    btn.addEventListener('click', function() {
                        extBtns.forEach(b =&gt; b.classList.remove('active'));
                        this.classList.add('active');
                        selectedExtension = this.getAttribute('data-ext');
                        customExtInput.value = selectedExtension;
                    });
                });
                
                // Custom extension
                applyCustomBtn.addEventListener('click', applyCustomExtension);
                customExtInput.addEventListener('keypress', (e) =&gt; {
                    if (e.key === 'Enter') applyCustomExtension();
                });
                
                // Change extension button
                changeBtn.addEventListener('click', processExtensionChange);
                
                // Download button
                downloadBtn.addEventListener('click', handleDownload);
            }
            
            function handleFileSelect() {
                if (!fileInput.files.length) return;
                
                selectedFile = fileInput.files[0];
                const size = formatFileSize(selectedFile.size);
                const ext = getFileExtension(selectedFile.name);
                
                // Update UI
                fileName.textContent = selectedFile.name;
                fileSize.textContent = size;
                currentExt.textContent = ext;
                filePreview.classList.add('show');
                
                // Set extension
                const matchedBtn = Array.from(extBtns).find(btn =&gt; 
                    btn.getAttribute('data-ext') === ext
                );
                
                if (matchedBtn) {
                    extBtns.forEach(b =&gt; b.classList.remove('active'));
                    matchedBtn.classList.add('active');
                    selectedExtension = ext;
                } else {
                    extBtns[0].classList.add('active');
                    selectedExtension = '.pdf';
                }
                
                customExtInput.value = selectedExtension;
                
                // Reset results
                resetResults();
            }
            
            function applyCustomExtension() {
                let ext = customExtInput.value.trim();
                if (ext) {
                    if (!ext.startsWith('.')) {
                        ext = '.' + ext;
                    }
                    selectedExtension = ext;
                    
                    // Remove active from all buttons
                    extBtns.forEach(b =&gt; b.classList.remove('active'));
                    customExtInput.value = selectedExtension;
                }
            }
            
            function processExtensionChange() {
                if (!selectedFile) {
                    alert('Please upload a file first');
                    return;
                }
                
                // Show loader
                changeBtn.disabled = true;
                changeBtn.innerHTML = '&lt;span&gt;⏳&lt;/span&gt; Processing...';
                loader.classList.add('show');
                
                // Simulate processing
                setTimeout(() =&gt; {
                    // Create new filename
                    const originalName = selectedFile.name;
                    const nameWithoutExt = originalName.substring(0, originalName.lastIndexOf('.'));
                    const newName = nameWithoutExt + selectedExtension;
                    
                    // Create new File object
                    modifiedFile = new File([selectedFile], newName, {
                        type: selectedFile.type,
                        lastModified: Date.now()
                    });
                    
                    // Hide loader
                    loader.classList.remove('show');
                    
                    // Show results
                    newFileName.textContent = newName;
                    resultCard.classList.add('show');
                    downloadBtn.classList.add('show');
                    
                    // Reset button
                    changeBtn.disabled = false;
                    changeBtn.innerHTML = '&lt;span&gt;&#128260;&lt;/span&gt; Change Extension';
                    
                    // Scroll to results
                    resultCard.scrollIntoView({ behavior: 'smooth', block: 'center' });
                }, 1500);
            }
            
            function handleDownload() {
                if (!modifiedFile) return;
                
                // Create download link
                const url = URL.createObjectURL(modifiedFile);
                const a = document.createElement('a');
                a.href = url;
                a.download = modifiedFile.name;
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                
                // Clean up
                setTimeout(() =&gt; URL.revokeObjectURL(url), 100);
                
                // Show success feedback
                const originalText = downloadBtn.innerHTML;
                downloadBtn.innerHTML = '&lt;span&gt;✓&lt;/span&gt; Downloaded!';
                downloadBtn.style.background = 'linear-gradient(135deg, #16a34a 0%, #15803d 100%)';
                
                // Reset after 2 seconds
                setTimeout(() =&gt; {
                    downloadBtn.innerHTML = originalText;
                    downloadBtn.style.background = 'linear-gradient(135deg, #22c55e 0%, #16a34a 100%)';
                }, 2000);
            }
            
            function resetResults() {
                resultCard.classList.remove('show');
                downloadBtn.classList.remove('show');
            }
            
            function getFileExtension(filename) {
                return filename.slice((filename.lastIndexOf(".") - 1 &gt;&gt;&gt; 0) + 1);
            }
            
            function formatFileSize(bytes) {
                if (bytes === 0) return '0 Bytes';
                const k = 1024;
                const sizes = ['Bytes', 'KB', 'MB', 'GB'];
                const i = Math.floor(Math.log(bytes) / Math.log(k));
                return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
            }
            
            // Initialize the tool
            init();
        })();
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>YouTube Analytics</title><link>https://www.laxmannepal.com.np/2025/11/youtube-analytics.html</link><category>YouTube Tools</category><author>noreply@blogger.com (Laxman Nepal)</author><pubDate>Fri, 28 Nov 2025 03:44:20 +0545</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-7722672995201597196.post-8190990615353623832</guid><description>&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;YouTube Channel Analytics&lt;/title&gt;
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
    &lt;style&gt;
        :root {
            --primary: #4285F4;
            --primary-light: #E8F0FE;
            --secondary: #5F6368;
            --light: #F8F9FA;
            --dark: #202124;
            --danger: #EA4335;
            --warning: #FBBC05;
            --success: #34A853;
            --border: #DADCE0;
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
        }
        
        body {
            background-color: #fff;
            color: var(--dark);
            line-height: 1.6;
            padding: 15px;
            max-width: 100%;
            overflow-x: hidden;
        }
        
        .analytics-container {
            max-width: 100%;
            margin: 0 auto;
            background: white;
            border-radius: 8px;
            box-shadow: 0 1px 3px rgba(0,0,0,0.1);
            border: 1px solid var(--border);
            overflow: hidden;
        }
        
        .logo {
            font-size: 1.5rem;
            font-weight: 600;
            color: var(--primary);
            text-align: center;
            padding: 15px;
            background: var(--primary-light);
            border-bottom: 1px solid var(--border);
        }
        
        .search-section {
            padding: 20px;
            border-bottom: 1px solid var(--border);
        }
        
        .search-section h2 {
            font-size: 1.3rem;
            margin-bottom: 10px;
            color: var(--dark);
        }
        
        .search-box {
            display: flex;
            gap: 10px;
            margin-bottom: 15px;
        }
        
        .search-box input {
            flex: 1;
            padding: 12px 15px;
            border: 1px solid var(--border);
            border-radius: 4px;
            font-size: 1rem;
            background: var(--light);
        }
        
        .search-box button {
            background-color: var(--primary);
            color: white;
            border: none;
            padding: 12px 20px;
            border-radius: 4px;
            cursor: pointer;
            font-weight: 500;
            transition: background-color 0.3s;
            white-space: nowrap;
        }
        
        .search-box button:hover {
            background-color: #3367D6;
        }
        
        .channel-suggestions {
            display: flex;
            gap: 8px;
            flex-wrap: wrap;
            margin-bottom: 15px;
        }
        
        .channel-suggestion {
            background-color: var(--light);
            padding: 6px 12px;
            border-radius: 16px;
            font-size: 0.85rem;
            cursor: pointer;
            transition: background-color 0.3s;
            border: 1px solid var(--border);
        }
        
        .channel-suggestion:hover {
            background-color: var(--primary-light);
        }
        
        .api-info {
            margin-top: 10px;
            padding: 10px;
            background-color: var(--light);
            border-radius: 4px;
            font-size: 0.8rem;
            color: var(--secondary);
        }
        
        .channel-header {
            display: flex;
            align-items: center;
            gap: 15px;
            padding: 20px;
            border-bottom: 1px solid var(--border);
            background: var(--light);
            position: relative;
        }
        
        .save-channel-btn {
            position: absolute;
            top: 20px;
            right: 20px;
            background: var(--success);
            color: white;
            border: none;
            padding: 8px 15px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 0.85rem;
            display: flex;
            align-items: center;
            gap: 5px;
        }
        
        .save-channel-btn:hover {
            background: #2E944B;
        }
        
        .save-channel-btn.saved {
            background: var(--secondary);
        }
        
        .channel-avatar {
            width: 70px;
            height: 70px;
            border-radius: 50%;
            overflow: hidden;
            flex-shrink: 0;
        }
        
        .channel-avatar img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        
        .channel-info h1 {
            font-size: 1.4rem;
            margin-bottom: 5px;
            color: var(--dark);
        }
        
        .channel-info p {
            color: var(--secondary);
            margin-bottom: 5px;
            font-size: 0.9rem;
        }
        
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 12px;
            padding: 15px;
            border-bottom: 1px solid var(--border);
        }
        
        .stat-card {
            background-color: white;
            padding: 15px;
            border-radius: 6px;
            box-shadow: 0 1px 2px rgba(0,0,0,0.05);
            text-align: center;
            border: 1px solid var(--border);
        }
        
        .stat-card h3 {
            font-size: 0.8rem;
            color: var(--secondary);
            margin-bottom: 8px;
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        
        .stat-card .value {
            font-size: 1.4rem;
            font-weight: 600;
            color: var(--dark);
        }
        
        .stat-card .sub-value {
            font-size: 0.75rem;
            color: var(--secondary);
            margin-top: 4px;
        }
        
        .tabs {
            display: flex;
            border-bottom: 1px solid var(--border);
            overflow-x: auto;
        }
        
        .tab {
            padding: 12px 16px;
            cursor: pointer;
            border-bottom: 2px solid transparent;
            font-size: 0.9rem;
            font-weight: 500;
            color: var(--secondary);
            white-space: nowrap;
        }
        
        .tab.active {
            border-bottom: 2px solid var(--primary);
            color: var(--primary);
        }
        
        .tab-content {
            display: none;
            padding: 15px;
        }
        
        .tab-content.active {
            display: block;
        }
        
        .section-title {
            font-size: 1.1rem;
            margin-bottom: 15px;
            padding-bottom: 8px;
            border-bottom: 1px solid var(--border);
            color: var(--dark);
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.9rem;
        }
        
        th, td {
            padding: 10px 12px;
            text-align: left;
            border-bottom: 1px solid var(--border);
        }
        
        th {
            background-color: var(--light);
            font-weight: 600;
            color: var(--dark);
        }
        
        tr:hover {
            background-color: var(--light);
        }
        
        .progress-bar {
            height: 6px;
            background-color: #E8EAED;
            border-radius: 3px;
            overflow: hidden;
            margin: 8px 0;
        }
        
        .progress {
            height: 100%;
            background-color: var(--primary);
        }
        
        .badge {
            display: inline-block;
            padding: 3px 8px;
            border-radius: 4px;
            font-size: 0.75rem;
            font-weight: 500;
        }
        
        .badge-success {
            background-color: #E6F4EA;
            color: var(--success);
        }
        
        .badge-warning {
            background-color: #FEF7E0;
            color: var(--warning);
        }
        
        .badge-danger {
            background-color: #FBEAE9;
            color: var(--danger);
        }
        
        .chart-container {
            height: 250px;
            margin: 15px 0;
        }
        
        .loading {
            text-align: center;
            padding: 30px;
        }
        
        .spinner {
            border: 3px solid rgba(0, 0, 0, 0.1);
            border-left-color: var(--primary);
            border-radius: 50%;
            width: 30px;
            height: 30px;
            animation: spin 1s linear infinite;
            margin: 0 auto 15px;
        }
        
        @keyframes spin {
            to { transform: rotate(360deg); }
        }
        
        .hidden {
            display: none;
        }
        
        .error-message {
            text-align: center;
            padding: 20px;
            color: var(--danger);
            background: #FBEAE9;
            border-radius: 6px;
            margin: 15px;
        }
        
        .saved-channels-container {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
            gap: 15px;
            margin-top: 15px;
        }
        
        .saved-channel-card {
            background: white;
            border: 1px solid var(--border);
            border-radius: 8px;
            padding: 15px;
            text-align: center;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
        }
        
        .saved-channel-card:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
        
        .saved-channel-avatar {
            width: 60px;
            height: 60px;
            border-radius: 50%;
            overflow: hidden;
            margin: 0 auto 10px;
        }
        
        .saved-channel-avatar img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        
        .saved-channel-name {
            font-weight: 500;
            margin-bottom: 5px;
            font-size: 0.9rem;
        }
        
        .saved-channel-subscribers {
            color: var(--secondary);
            font-size: 0.8rem;
        }
        
        .remove-saved-channel {
            background: var(--danger);
            color: white;
            border: none;
            border-radius: 4px;
            padding: 5px 10px;
            font-size: 0.75rem;
            cursor: pointer;
            margin-top: 8px;
            width: 100%;
        }
        
        .remove-saved-channel:hover {
            background: #D33426;
        }
        
        .empty-saved {
            text-align: center;
            padding: 30px;
            color: var(--secondary);
        }
        
        @media (min-width: 768px) {
            .stats-grid {
                grid-template-columns: repeat(3, 1fr);
            }
            
            .channel-header {
                padding: 25px;
            }
            
            .channel-avatar {
                width: 90px;
                height: 90px;
            }
            
            .tab-content {
                padding: 20px;
            }
        }
        
        @media (min-width: 992px) {
            .stats-grid {
                grid-template-columns: repeat(6, 1fr);
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="analytics-container"&gt;
        &lt;div class="logo"&gt;YouTube Analytics&lt;/div&gt;
        
        &lt;section class="search-section"&gt;
            &lt;h2&gt;YouTube Channel Analytics&lt;/h2&gt;
            &lt;p&gt;Enter a YouTube channel URL to get detailed analytics&lt;/p&gt;
            &lt;div class="search-box"&gt;
                &lt;input type="text" id="channelInput" placeholder="Enter YouTube Channel URL (e.g., https://www.youtube.com/c/MrBeast)"&gt;
                &lt;button onclick="getChannelStatistics()"&gt;Analyze Channel&lt;/button&gt;
            &lt;/div&gt;
            &lt;div class="channel-suggestions"&gt;
                &lt;div class="channel-suggestion" onclick="setChannelUrl('https://www.youtube.com/c/MrBeast')"&gt;MrBeast&lt;/div&gt;
                &lt;div class="channel-suggestion" onclick="setChannelUrl('https://www.youtube.com/user/PewDiePie')"&gt;PewDiePie&lt;/div&gt;
                &lt;div class="channel-suggestion" onclick="setChannelUrl('https://www.youtube.com/c/tseries')"&gt;T-Series&lt;/div&gt;
                &lt;div class="channel-suggestion" onclick="setChannelUrl('https://www.youtube.com/c/Cocomelon')"&gt;Cocomelon&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class="api-info"&gt;
                &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Using YouTube Data API to fetch real channel data. You can save channels for quick access later.&lt;/p&gt;
            &lt;/div&gt;
        &lt;/section&gt;
        
        &lt;div id="loading" class="loading hidden"&gt;
            &lt;div class="spinner"&gt;&lt;/div&gt;
            &lt;p&gt;Fetching channel data...&lt;/p&gt;
        &lt;/div&gt;
        
        &lt;div id="channelData" class="hidden"&gt;
            &lt;div class="channel-header"&gt;
                &lt;button id="saveChannelBtn" class="save-channel-btn" onclick="saveCurrentChannel()"&gt;
                    &lt;span&gt;Save Channel&lt;/span&gt;
                &lt;/button&gt;
                &lt;div class="channel-avatar"&gt;
                    &lt;img id="channelThumbnail" src="" alt="Channel Avatar"&gt;
                &lt;/div&gt;
                &lt;div class="channel-info"&gt;
                    &lt;h1 id="channelTitle"&gt;Channel Title&lt;/h1&gt;
                    &lt;p id="channelDescription"&gt;Channel description will appear here&lt;/p&gt;
                    &lt;p&gt;Joined YouTube: &lt;span id="channelPublishedAt"&gt;Date&lt;/span&gt; | Country: &lt;span id="channelCountry"&gt;Country&lt;/span&gt;&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="stats-grid"&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Subscribers&lt;/h3&gt;
                    &lt;div class="value" id="subscriberCount"&gt;0&lt;/div&gt;
                    &lt;div class="sub-value" id="subscriberGrowth"&gt;+0 this month&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Total Views&lt;/h3&gt;
                    &lt;div class="value" id="viewCount"&gt;0&lt;/div&gt;
                    &lt;div class="sub-value" id="viewGrowth"&gt;+0 this month&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Total Videos&lt;/h3&gt;
                    &lt;div class="value" id="videoCount"&gt;0&lt;/div&gt;
                    &lt;div class="sub-value"&gt;Last video: &lt;span id="lastVideoDate"&gt;Date&lt;/span&gt;&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Engagement Rate&lt;/h3&gt;
                    &lt;div class="value" id="engagementRate"&gt;0%&lt;/div&gt;
                    &lt;div class="sub-value"&gt;Based on last 10 videos&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Category Rank&lt;/h3&gt;
                    &lt;div class="value" id="categoryRank"&gt;#0&lt;/div&gt;
                    &lt;div class="sub-value" id="categoryName"&gt;Category&lt;/div&gt;
                &lt;/div&gt;
                &lt;div class="stat-card"&gt;
                    &lt;h3&gt;Estimated Earnings&lt;/h3&gt;
                    &lt;div class="value" id="estimatedEarnings"&gt;$0&lt;/div&gt;
                    &lt;div class="sub-value"&gt;Last 30 days&lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tabs"&gt;
                &lt;div class="tab active" onclick="switchTab('overview')"&gt;Overview&lt;/div&gt;
                &lt;div class="tab" onclick="switchTab('videos')"&gt;Videos&lt;/div&gt;
                &lt;div class="tab" onclick="switchTab('earnings')"&gt;Earnings&lt;/div&gt;
                &lt;div class="tab" onclick="switchTab('growth')"&gt;Growth&lt;/div&gt;
                &lt;div class="tab" onclick="switchTab('saved')"&gt;Saved Channels&lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tab-content active" id="overview-tab"&gt;
                &lt;h3 class="section-title"&gt;Channel Statistics&lt;/h3&gt;
                &lt;table&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Channel ID&lt;/td&gt;
                        &lt;td id="channelId"&gt;ID will appear here&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Custom URL&lt;/td&gt;
                        &lt;td id="customUrl"&gt;URL will appear here&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Average Views Per Video&lt;/td&gt;
                        &lt;td id="avgViews"&gt;0&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Average Comments Per Video&lt;/td&gt;
                        &lt;td id="avgComments"&gt;0&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Average Likes Per Video&lt;/td&gt;
                        &lt;td id="avgLikes"&gt;0&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
                
                &lt;h3 class="section-title" style="margin-top: 20px;"&gt;Achievements&lt;/h3&gt;
                &lt;div id="achievements"&gt;
                    &lt;!-- Achievements will be populated here --&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            &lt;div class="tab-content" id="videos-tab"&gt;
                &lt;h3 class="section-title"&gt;Recent Videos&lt;/h3&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Video&lt;/th&gt;
                            &lt;th&gt;Views&lt;/th&gt;
                            &lt;th&gt;Likes&lt;/th&gt;
                            &lt;th&gt;Comments&lt;/th&gt;
                            &lt;th&gt;Engagement&lt;/th&gt;
                            &lt;th&gt;Estimated Earnings&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody id="videosTable"&gt;
                        &lt;!-- Videos will be populated here --&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/div&gt;
            
            &lt;div class="tab-content" id="earnings-tab"&gt;
                &lt;h3 class="section-title"&gt;Earnings Estimate&lt;/h3&gt;
                &lt;p style="margin-bottom: 15px; color: var(--secondary); font-size: 0.9rem;"&gt;Note: These are estimates based on public data and industry averages. Actual earnings may vary.&lt;/p&gt;
                &lt;div class="chart-container"&gt;
                    &lt;canvas id="earningsChart"&gt;&lt;/canvas&gt;
                &lt;/div&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Period&lt;/th&gt;
                            &lt;th&gt;Estimated Earnings&lt;/th&gt;
                            &lt;th&gt;Views&lt;/th&gt;
                            &lt;th&gt;CPM&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody id="earningsTable"&gt;
                        &lt;!-- Earnings data will be populated here --&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/div&gt;
            
            &lt;div class="tab-content" id="growth-tab"&gt;
                &lt;h3 class="section-title"&gt;Growth Analytics&lt;/h3&gt;
                &lt;div class="chart-container"&gt;
                    &lt;canvas id="growthChart"&gt;&lt;/canvas&gt;
                &lt;/div&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Metric&lt;/th&gt;
                            &lt;th&gt;Last 7 Days&lt;/th&gt;
                            &lt;th&gt;Last 30 Days&lt;/th&gt;
                            &lt;th&gt;Last 90 Days&lt;/th&gt;
                            &lt;th&gt;All Time&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;
                    &lt;tbody id="growthTable"&gt;
                        &lt;!-- Growth data will be populated here --&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            &lt;/div&gt;
            
            &lt;div class="tab-content" id="saved-tab"&gt;
                &lt;h3 class="section-title"&gt;Saved Channels&lt;/h3&gt;
                &lt;p style="margin-bottom: 15px; color: var(--secondary);"&gt;Your saved channels for quick access&lt;/p&gt;
                &lt;div id="savedChannelsContainer" class="saved-channels-container"&gt;
                    &lt;!-- Saved channels will be populated here --&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        
        &lt;div id="errorMessage" class="error-message hidden"&gt;
            &lt;h3&gt;Error&lt;/h3&gt;
            &lt;p id="errorText"&gt;An error occurred while fetching channel data.&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    
    &lt;script&gt;
        // Using the provided API key
        const apiKey = 'AIzaSyAjtFd3waoyhiIHZixRX2HAeFXWpiRPxCY';
        
        // Current channel data
        let currentChannelData = null;
        
        // Function to set channel URL from suggestions
        function setChannelUrl(url) {
            document.getElementById('channelInput').value = url;
        }
        
        // Load saved channels on page load
        document.addEventListener('DOMContentLoaded', function() {
            loadSavedChannels();
        });
        
        async function getChannelStatistics() {
            const channelInput = document.getElementById('channelInput').value.trim();
            if (!channelInput) {
                alert('Please enter a channel URL');
                return;
            }
            
            // Show loading indicator
            document.getElementById('loading').classList.remove('hidden');
            document.getElementById('channelData').classList.add('hidden');
            document.getElementById('errorMessage').classList.add('hidden');
            
            try {
                // Extract channel ID from URL
                const channelId = await extractChannelId(channelInput);
                
                if (!channelId) {
                    throw new Error('Could not extract channel ID from the provided URL');
                }
                
                // Fetch channel data
                const channelData = await fetchChannelData(channelId);
                
                // Process and display channel data
                processChannelData(channelData);
                
                // Fetch and process videos data
                await processVideosData(channelId);
                
                document.getElementById('loading').classList.add('hidden');
                document.getElementById('channelData').classList.remove('hidden');
                
            } catch (error) {
                showError(error);
            }
        }
        
        async function extractChannelId(url) {
            // Handle different YouTube URL formats
            let channelId = null;
            
            // Handle channel ID URLs: youtube.com/channel/UC...
            const channelIdMatch = url.match(/youtube\.com\/channel\/([^\/\?]+)/);
            if (channelIdMatch) {
                return channelIdMatch[1];
            }
            
            // Handle custom URLs: youtube.com/c/... or youtube.com/user/...
            const customUrlMatch = url.match(/youtube\.com\/(c|user)\/([^\/\?]+)/);
            if (customUrlMatch) {
                const username = customUrlMatch[2];
                // Search for channel by custom URL
                const response = await fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&amp;q=${encodeURIComponent(username)}&amp;type=channel&amp;maxResults=1&amp;key=${apiKey}`);
                
                if (!response.ok) {
                    throw new Error(`API error: ${response.status}`);
                }
                
                const data = await response.json();
                
                if (data.items &amp;&amp; data.items.length &gt; 0) {
                    return data.items[0].id.channelId;
                }
            }
            
            // Handle @username URLs: youtube.com/@...
            const handleMatch = url.match(/youtube\.com\/@([^\/\?]+)/);
            if (handleMatch) {
                const handle = handleMatch[1];
                // Search for channel by handle
                const response = await fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&amp;q=${encodeURIComponent('@' + handle)}&amp;type=channel&amp;maxResults=1&amp;key=${apiKey}`);
                
                if (!response.ok) {
                    throw new Error(`API error: ${response.status}`);
                }
                
                const data = await response.json();
                
                if (data.items &amp;&amp; data.items.length &gt; 0) {
                    return data.items[0].id.channelId;
                }
            }
            
            return null;
        }
        
        async function fetchChannelData(channelId) {
            const response = await fetch(`https://www.googleapis.com/youtube/v3/channels?part=snippet,contentDetails,statistics&amp;id=${channelId}&amp;key=${apiKey}`);
            
            if (!response.ok) {
                throw new Error(`API error: ${response.status}`);
            }
            
            const data = await response.json();
            
            if (!data.items || data.items.length === 0) {
                throw new Error('Channel not found');
            }
            
            return data;
        }
        
        async function fetchChannelVideos(channelId, maxResults = 10) {
            // First, get the uploads playlist ID
            const channelResponse = await fetch(`https://www.googleapis.com/youtube/v3/channels?part=contentDetails&amp;id=${channelId}&amp;key=${apiKey}`);
            
            if (!channelResponse.ok) {
                throw new Error(`API error: ${channelResponse.status}`);
            }
            
            const channelData = await channelResponse.json();
            const uploadsPlaylistId = channelData.items[0].contentDetails.relatedPlaylists.uploads;
            
            // Then, get the videos from the uploads playlist
            const videosResponse = await fetch(`https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&amp;playlistId=${uploadsPlaylistId}&amp;maxResults=${maxResults}&amp;key=${apiKey}`);
            
            if (!videosResponse.ok) {
                throw new Error(`API error: ${videosResponse.status}`);
            }
            
            const videosData = await videosResponse.json();
            
            // Get detailed statistics for each video
            if (videosData.items &amp;&amp; videosData.items.length &gt; 0) {
                const videoIds = videosData.items.map(item =&gt; item.contentDetails.videoId).join(',');
                const statsResponse = await fetch(`https://www.googleapis.com/youtube/v3/videos?part=statistics,snippet&amp;id=${videoIds}&amp;key=${apiKey}`);
                
                if (!statsResponse.ok) {
                    throw new Error(`API error: ${statsResponse.status}`);
                }
                
                const statsData = await statsResponse.json();
                
                // Combine the data
                return videosData.items.map((item, index) =&gt; {
                    const videoStats = statsData.items.find(video =&gt; video.id === item.contentDetails.videoId);
                    return {
                        ...item,
                        statistics: videoStats?.statistics || {},
                        snippet: {
                            ...item.snippet,
                            ...videoStats?.snippet
                        }
                    };
                });
            }
            
            return [];
        }
        
        function processChannelData(data) {
            const channel = data.items[0];
            currentChannelData = channel;
            
            // Update channel header
            document.getElementById('channelThumbnail').src = channel.snippet.thumbnails.medium.url;
            document.getElementById('channelTitle').textContent = channel.snippet.title;
            document.getElementById('channelDescription').textContent = channel.snippet.description || 'No description available';
            document.getElementById('channelPublishedAt').textContent = new Date(channel.snippet.publishedAt).toLocaleDateString();
            document.getElementById('channelCountry').textContent = channel.snippet.country || 'Not specified';
            
            // Update stats
            document.getElementById('subscriberCount').textContent = formatNumber(channel.statistics.subscriberCount);
            document.getElementById('viewCount').textContent = formatNumber(channel.statistics.viewCount);
            document.getElementById('videoCount').textContent = formatNumber(channel.statistics.videoCount);
            
            // Update other channel info
            document.getElementById('channelId').textContent = channel.id;
            document.getElementById('customUrl').textContent = channel.snippet.customUrl || 'Not available';
            
            // Calculate averages
            const avgViews = Math.round(channel.statistics.viewCount / channel.statistics.videoCount);
            document.getElementById('avgViews').textContent = formatNumber(avgViews);
            
            // These would require additional API calls for accurate data
            document.getElementById('avgComments').textContent = 'N/A';
            document.getElementById('avgLikes').textContent = 'N/A';
            
            // Update save button state
            updateSaveButtonState(channel.id);
            
            // Generate achievements
            generateAchievements(channel);
            
            // Update category rank (mock data as this isn't available via API)
            document.getElementById('categoryRank').textContent = '#' + Math.floor(Math.random() * 100 + 1);
            document.getElementById('categoryName').textContent = 'Entertainment';
            
            // Update estimated earnings (mock calculation)
            const monthlyEarnings = calculateEstimatedEarnings(channel);
            document.getElementById('estimatedEarnings').textContent = '$' + formatNumber(monthlyEarnings);
            
            // Update growth stats (mock data)
            document.getElementById('subscriberGrowth').textContent = '+' + formatNumber(Math.floor(Math.random() * 10000)) + ' this month';
            document.getElementById('viewGrowth').textContent = '+' + formatNumber(Math.floor(Math.random() * 100000)) + ' this month';
            document.getElementById('lastVideoDate').textContent = 'Recently';
            
            // Generate earnings and growth tables
            generateEarningsTable(channel);
            generateGrowthTable(channel);
            
            // Initialize charts
            initializeCharts(channel);
        }
        
        function updateSaveButtonState(channelId) {
            const savedChannels = getSavedChannels();
            const saveButton = document.getElementById('saveChannelBtn');
            
            if (savedChannels.some(channel =&gt; channel.id === channelId)) {
                saveButton.innerHTML = '&lt;span&gt;✓ Saved&lt;/span&gt;';
                saveButton.classList.add('saved');
            } else {
                saveButton.innerHTML = '&lt;span&gt;Save Channel&lt;/span&gt;';
                saveButton.classList.remove('saved');
            }
        }
        
        function saveCurrentChannel() {
            if (!currentChannelData) return;
            
            const savedChannels = getSavedChannels();
            const channelId = currentChannelData.id;
            
            // Check if channel is already saved
            if (savedChannels.some(channel =&gt; channel.id === channelId)) {
                // Remove from saved channels
                const updatedChannels = savedChannels.filter(channel =&gt; channel.id !== channelId);
                localStorage.setItem('savedYouTubeChannels', JSON.stringify(updatedChannels));
                updateSaveButtonState(channelId);
                loadSavedChannels();
                return;
            }
            
            // Add to saved channels
            const channelToSave = {
                id: currentChannelData.id,
                title: currentChannelData.snippet.title,
                thumbnail: currentChannelData.snippet.thumbnails.default.url,
                subscribers: currentChannelData.statistics.subscriberCount,
                customUrl: currentChannelData.snippet.customUrl || ''
            };
            
            savedChannels.push(channelToSave);
            localStorage.setItem('savedYouTubeChannels', JSON.stringify(savedChannels));
            
            updateSaveButtonState(channelId);
            loadSavedChannels();
        }
        
        function getSavedChannels() {
            const savedChannelsJSON = localStorage.getItem('savedYouTubeChannels');
            return savedChannelsJSON ? JSON.parse(savedChannelsJSON) : [];
        }
        
        function loadSavedChannels() {
            const savedChannels = getSavedChannels();
            const container = document.getElementById('savedChannelsContainer');
            
            if (savedChannels.length === 0) {
                container.innerHTML = '&lt;div class="empty-saved"&gt;No saved channels yet. Save a channel to see it here.&lt;/div&gt;';
                return;
            }
            
            container.innerHTML = savedChannels.map(channel =&gt; `
                &lt;div class="saved-channel-card" onclick="loadSavedChannel('${channel.id}')"&gt;
                    &lt;div class="saved-channel-avatar"&gt;
                        &lt;img src="${channel.thumbnail}" alt="${channel.title}"&gt;
                    &lt;/div&gt;
                    &lt;div class="saved-channel-name"&gt;${channel.title}&lt;/div&gt;
                    &lt;div class="saved-channel-subscribers"&gt;${formatNumber(channel.subscribers)} subscribers&lt;/div&gt;
                    &lt;button class="remove-saved-channel" onclick="event.stopPropagation(); removeSavedChannel('${channel.id}')"&gt;Remove&lt;/button&gt;
                &lt;/div&gt;
            `).join('');
        }
        
        function removeSavedChannel(channelId) {
            const savedChannels = getSavedChannels();
            const updatedChannels = savedChannels.filter(channel =&gt; channel.id !== channelId);
            localStorage.setItem('savedYouTubeChannels', JSON.stringify(updatedChannels));
            loadSavedChannels();
            
            // Update save button if this is the current channel
            if (currentChannelData &amp;&amp; currentChannelData.id === channelId) {
                updateSaveButtonState(channelId);
            }
        }
        
        async function loadSavedChannel(channelId) {
            try {
                document.getElementById('loading').classList.remove('hidden');
                document.getElementById('channelData').classList.add('hidden');
                
                const channelData = await fetchChannelData(channelId);
                processChannelData(channelData);
                
                document.getElementById('loading').classList.add('hidden');
                document.getElementById('channelData').classList.remove('hidden');
                
                // Switch to overview tab
                switchTab('overview');
            } catch (error) {
                showError(error);
            }
        }
        
        async function processVideosData(channelId) {
            const videos = await fetchChannelVideos(channelId, 10);
            
            // Update videos table
            const videosTable = document.getElementById('videosTable');
            videosTable.innerHTML = '';
            
            if (videos.length === 0) {
                const row = document.createElement('tr');
                row.innerHTML = `&lt;td colspan="6" style="text-align: center;"&gt;No videos found or unable to fetch video data&lt;/td&gt;`;
                videosTable.appendChild(row);
                return;
            }
            
            // Calculate total engagement for the engagement rate
            let totalEngagement = 0;
            let validVideosCount = 0;
            
            videos.forEach(video =&gt; {
                const views = parseInt(video.statistics.viewCount || 0);
                const likes = parseInt(video.statistics.likeCount || 0);
                const comments = parseInt(video.statistics.commentCount || 0);
                
                // Simple engagement calculation (likes + comments) / views
                const engagement = views &gt; 0 ? ((likes + comments) / views * 100).toFixed(2) : 0;
                
                if (views &gt; 0) {
                    totalEngagement += parseFloat(engagement);
                    validVideosCount++;
                }
                
                const earnings = Math.round((views / 1000) * 2.5); // Simple CPM calculation
                
                const row = document.createElement('tr');
                row.innerHTML = `
                    &lt;td&gt;${video.snippet.title}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(views)}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(likes)}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(comments)}&lt;/td&gt;
                    &lt;td&gt;
                        &lt;div class="progress-bar"&gt;
                            &lt;div class="progress" style="width: ${Math.min(engagement, 100)}%"&gt;&lt;/div&gt;
                        &lt;/div&gt;
                        ${engagement}%
                    &lt;/td&gt;
                    &lt;td&gt;$${formatNumber(earnings)}&lt;/td&gt;
                `;
                videosTable.appendChild(row);
            });
            
            // Update engagement rate
            const avgEngagement = validVideosCount &gt; 0 ? (totalEngagement / validVideosCount).toFixed(2) : 0;
            document.getElementById('engagementRate').textContent = avgEngagement + '%';
        }
        
        function calculateEstimatedEarnings(channel) {
            // Mock earnings calculation based on views and estimated CPM
            const views = parseInt(channel.statistics.viewCount);
            const estimatedCPM = 2.5; // $2.5 per 1000 views
            return Math.round((views / 1000) * estimatedCPM * 0.3); // Assuming 30% of views are monetized
        }
        
        function generateEarningsTable(channel) {
            const earningsTable = document.getElementById('earningsTable');
            earningsTable.innerHTML = '';
            
            const views = parseInt(channel.statistics.viewCount);
            const periods = [
                { name: 'Last 7 Days', views: Math.round(views * 0.01), cpm: 2.5 },
                { name: 'Last 30 Days', views: Math.round(views * 0.05), cpm: 2.7 },
                { name: 'Last 90 Days', views: Math.round(views * 0.15), cpm: 2.6 },
                { name: 'Last Year', views: Math.round(views * 0.3), cpm: 2.4 },
                { name: 'All Time', views: views, cpm: 2.3 }
            ];
            
            periods.forEach(period =&gt; {
                const earnings = Math.round((period.views / 1000) * period.cpm);
                const row = document.createElement('tr');
                row.innerHTML = `
                    &lt;td&gt;${period.name}&lt;/td&gt;
                    &lt;td&gt;$${formatNumber(earnings)}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(period.views)}&lt;/td&gt;
                    &lt;td&gt;$${period.cpm.toFixed(2)}&lt;/td&gt;
                `;
                earningsTable.appendChild(row);
            });
        }
        
        function generateGrowthTable(channel) {
            const growthTable = document.getElementById('growthTable');
            growthTable.innerHTML = '';
            
            const subscribers = parseInt(channel.statistics.subscriberCount);
            const views = parseInt(channel.statistics.viewCount);
            const videos = parseInt(channel.statistics.videoCount);
            
            const metrics = [
                { 
                    name: 'Subscribers', 
                    values: [
                        Math.round(subscribers * 0.01),
                        Math.round(subscribers * 0.05),
                        Math.round(subscribers * 0.15),
                        subscribers
                    ] 
                },
                { 
                    name: 'Views', 
                    values: [
                        Math.round(views * 0.01),
                        Math.round(views * 0.05),
                        Math.round(views * 0.15),
                        views
                    ] 
                },
                { 
                    name: 'Videos', 
                    values: [
                        Math.round(videos * 0.01),
                        Math.round(videos * 0.05),
                        Math.round(videos * 0.15),
                        videos
                    ] 
                }
            ];
            
            metrics.forEach(metric =&gt; {
                const row = document.createElement('tr');
                row.innerHTML = `
                    &lt;td&gt;${metric.name}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(metric.values[0])}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(metric.values[1])}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(metric.values[2])}&lt;/td&gt;
                    &lt;td&gt;${formatNumber(metric.values[3])}&lt;/td&gt;
                `;
                growthTable.appendChild(row);
            });
        }
        
        function generateAchievements(channel) {
            const achievementsContainer = document.getElementById('achievements');
            achievementsContainer.innerHTML = '';
            
            const subscribers = parseInt(channel.statistics.subscriberCount);
            const views = parseInt(channel.statistics.viewCount);
            const videos = parseInt(channel.statistics.videoCount);
            const joinDate = new Date(channel.snippet.publishedAt);
            const yearsOnYouTube = new Date().getFullYear() - joinDate.getFullYear();
            
            const achievements = [
                { name: '100 Subscribers', achieved: subscribers &gt;= 100 },
                { name: '1K Subscribers', achieved: subscribers &gt;= 1000 },
                { name: '10K Subscribers', achieved: subscribers &gt;= 10000 },
                { name: '100K Subscribers', achieved: subscribers &gt;= 100000 },
                { name: '1M Subscribers', achieved: subscribers &gt;= 1000000 },
                { name: '10M Subscribers', achieved: subscribers &gt;= 10000000 },
                { name: '1K Views', achieved: views &gt;= 1000 },
                { name: '10K Views', achieved: views &gt;= 10000 },
                { name: '100K Views', achieved: views &gt;= 100000 },
                { name: '1M Views', achieved: views &gt;= 1000000 },
                { name: '10M Views', achieved: views &gt;= 10000000 },
                { name: '100M Views', achieved: views &gt;= 100000000 },
                { name: '10 Videos', achieved: videos &gt;= 10 },
                { name: '50 Videos', achieved: videos &gt;= 50 },
                { name: '100 Videos', achieved: videos &gt;= 100 },
                { name: '500 Videos', achieved: videos &gt;= 500 },
                { name: '1 Year on YouTube', achieved: yearsOnYouTube &gt;= 1 },
                { name: '5 Years on YouTube', achieved: yearsOnYouTube &gt;= 5 },
                { name: '10 Years on YouTube', achieved: yearsOnYouTube &gt;= 10 }
            ];
            
            achievements.forEach(achievement =&gt; {
                if (achievement.achieved) {
                    const badge = document.createElement('span');
                    badge.classList.add('badge');
                    badge.classList.add('badge-success');
                    badge.textContent = achievement.name + ' ✓';
                    badge.style.marginRight = '8px';
                    badge.style.marginBottom = '8px';
                    achievementsContainer.appendChild(badge);
                }
            });
        }
        
        function initializeCharts(channel) {
            // Earnings Chart
            const earningsCtx = document.getElementById('earningsChart').getContext('2d');
            const earningsChart = new Chart(earningsCtx, {
                type: 'bar',
                data: {
                    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                    datasets: [{
                        label: 'Estimated Earnings ($)',
                        data: [1200, 1900, 1500, 2100, 1800, 2400, 2200, 2600, 2300, 2800, 2500, 3000],
                        backgroundColor: '#4285F4',
                        borderColor: '#3367D6',
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
            
            // Growth Chart
            const growthCtx = document.getElementById('growthChart').getContext('2d');
            const growthChart = new Chart(growthCtx, {
                type: 'line',
                data: {
                    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                    datasets: [
                        {
                            label: 'Subscribers',
                            data: [12000, 19000, 15000, 21000, 18000, 24000, 22000, 26000, 23000, 28000, 25000, 30000],
                            borderColor: '#4285F4',
                            backgroundColor: 'rgba(66, 133, 244, 0.1)',
                            fill: true,
                            tension: 0.4
                        },
                        {
                            label: 'Views',
                            data: [120000, 190000, 150000, 210000, 180000, 240000, 220000, 260000, 230000, 280000, 250000, 300000],
                            borderColor: '#34A853',
                            backgroundColor: 'rgba(52, 168, 83, 0.1)',
                            fill: true,
                            tension: 0.4
                        }
                    ]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
            });
        }
        
        function switchTab(tabName) {
            // Hide all tab contents
            document.querySelectorAll('.tab-content').forEach(tab =&gt; {
                tab.classList.remove('active');
            });
            
            // Remove active class from all tabs
            document.querySelectorAll('.tab').forEach(tab =&gt; {
                tab.classList.remove('active');
            });
            
            // Show selected tab content
            document.getElementById(tabName + '-tab').classList.add('active');
            
            // Add active class to clicked tab
            event.target.classList.add('active');
            
            // If switching to saved channels tab, refresh the list
            if (tabName === 'saved') {
                loadSavedChannels();
            }
        }
        
        function formatNumber(num) {
            if (typeof num !== 'number') {
                num = parseInt(num) || 0;
            }
            
            if (num &gt;= 1000000) {
                return (num / 1000000).toFixed(1) + 'M';
            } else if (num &gt;= 1000) {
                return (num / 1000).toFixed(1) + 'K';
            }
            return num.toString();
        }
        
        function showError(error) {
            document.getElementById('loading').classList.add('hidden');
            document.getElementById('errorMessage').classList.remove('hidden');
            document.getElementById('errorText').textContent = error.message || 'An error occurred while fetching channel data. Please check the channel URL and try again.';
            console.error(error);
        }
        
        // Allow pressing Enter to search
        document.getElementById('channelInput').addEventListener('keypress', function(event) {
            if (event.key === 'Enter') {
                getChannelStatistics();
            }
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;div class="blogger-post-footer"&gt;https://www.laxmannepal.com.np/sitemap.xml&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>