{"id":335,"date":"2026-03-16T00:00:16","date_gmt":"2026-03-16T00:00:16","guid":{"rendered":"https:\/\/viewanonymous.com\/?page_id=335"},"modified":"2026-03-31T06:08:23","modified_gmt":"2026-03-31T06:08:23","slug":"bio","status":"publish","type":"page","link":"https:\/\/viewanonymous.com\/tools\/tiktok\/bio\/","title":{"rendered":"TikTok Bio Viewer \u2013 View Profile Bios Instantly"},"content":{"rendered":"\n[et_pb_section fb_built=&#8221;1&#8243; fullwidth=&#8221;on&#8221; theme_builder_area=&#8221;post_content&#8221; _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221;][et_pb_fullwidth_code _builder_version=&#8221;4.27.4&#8243; _module_preset=&#8221;default&#8221; theme_builder_area=&#8221;post_content&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]    <link rel=\"canonical\" href=\"\">\r\n\r\n   \r\n    \r\n    <!-- Google Fonts - Premium Typography -->\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Space+Grotesk:wght@300;400;500;600;700&family=Manrope:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n    \r\n    <!-- Bootstrap CSS -->\r\n    <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\r\n    <!-- Boxicons -->\r\n    <link href=\"https:\/\/unpkg.com\/boxicons@2.1.4\/css\/boxicons.min.css\" rel=\"stylesheet\">\r\n    <!-- AOS Animation -->\r\n    <link href=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.css\" rel=\"stylesheet\">\r\n    <!-- Font Awesome CSS -->\r\n        <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.3\/css\/all.min.css\" rel=\"stylesheet\">\r\n\r\n\r\n    <style id=\"vvvebjs-styles\">\r\n        html {\r\n            overflow-x: hidden;\r\n        }\r\n\r\n        :root {\r\n            --tprv-primary-color: #8A67FF;\r\n            --tprv-secondary-color: #6B4FE0;\r\n            --tprv-dark-color: #000000;\r\n            --tprv-light-color: #FFFFFF;\r\n            --tprv-gray-color: #F1F1F2;\r\n            --tprv-primary-hover: #7E5EFF;\r\n            --tprv-secondary-hover: #5a3fd4;\r\n            --tprv-section-padding: 100px 0;\r\n        }\r\n\r\n        body {\r\n            font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n            scroll-behavior: smooth;\r\n            overflow-x: hidden;\r\n            background-color: var(--tprv-light-color);\r\n            color: var(--tprv-dark-color);\r\n        }\r\n\r\n        h1,\r\n        h2,\r\n        h3,\r\n        h4,\r\n        h5,\r\n        h6 {\r\n            font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif;\r\n            font-weight: bold;\r\n        }\r\n\r\n\r\n        \/* TikTok-style Hero Section *\/\r\n        .tprv-hero-section {\r\n            padding: var(--tprv-section-padding);\r\n            text-align: center;\r\n            background-color: var(--tprv-light-color);\r\n        }\r\n\r\n        .tprv-hero-content {\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        .tprv-hero-section h1 {\r\n            font-size: 3.5rem;\r\n            font-weight: 700;\r\n            margin-bottom: 1.5rem;\r\n            color: var(--tprv-primary-color);\r\n        }\r\n\r\n        .tprv-hero-section p {\r\n            font-size: 1.25rem;\r\n            max-width: 700px;\r\n            margin: 0 auto 2rem;\r\n            opacity: 0.9;\r\n            font-weight: 300;\r\n            color: #666;\r\n        }\r\n\r\n        \/* Work Process Section with TikTok Colors *\/\r\n        .tprv-work-process-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            position: relative;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .tprv-work-process-section::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.05);\r\n        }\r\n\r\n        .tprv-work-process-content {\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        .tprv-process-step {\r\n            text-align: center;\r\n            padding: 30px 20px;\r\n            position: relative;\r\n            z-index: 1;\r\n            background: rgba(255, 255, 255, 0.1);\r\n            backdrop-filter: blur(10px);\r\n            border-radius: 16px;\r\n            margin: 15px;\r\n            border: 1px solid rgba(255, 255, 255, 0.2);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-process-step:hover {\r\n            transform: translateY(-10px);\r\n            background: rgba(255, 255, 255, 0.15);\r\n            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .tprv-step-number {\r\n            width: 60px;\r\n            height: 60px;\r\n            background: white;\r\n            color: var(--tprv-primary-color);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            font-weight: 700;\r\n            margin: 0 auto 20px;\r\n            font-size: 1.5rem;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        \/* Features Section *\/\r\n        .tprv-features-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: white;\r\n        }\r\n\r\n        .tprv-feature-card {\r\n            padding: 40px 30px;\r\n            border-radius: 16px;\r\n            background: white;\r\n            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);\r\n            margin-bottom: 30px;\r\n            transition: all 0.3s ease;\r\n            border: 1px solid rgba(0, 0, 0, 0.05);\r\n            height: 100%;\r\n            position: relative;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .tprv-feature-card::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            width: 4px;\r\n            height: 100%;\r\n            background: var(--tprv-primary-color);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-feature-card:hover {\r\n            transform: translateY(-10px);\r\n            box-shadow: 0 15px 40px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        .tprv-feature-card:hover::before {\r\n            width: 100%;\r\n            opacity: 0.1;\r\n        }\r\n\r\n        .tprv-feature-icon {\r\n            width: 70px;\r\n            height: 70px;\r\n            border-radius: 20px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            margin-bottom: 25px;\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            font-size: 1.8rem;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-feature-card:hover .tprv-feature-icon {\r\n            transform: rotate(15deg) scale(1.1);\r\n            background: var(--tprv-primary-hover);\r\n        }\r\n\r\n        \/* Why Choose Section *\/\r\n        .tprv-why-choose-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: #f9f9f9;\r\n        }\r\n\r\n        .tprv-why-choose-image {\r\n            border-radius: 16px;\r\n            overflow: hidden;\r\n            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\r\n            transform: perspective(1000px) rotateY(-5deg);\r\n            transition: all 0.5s ease;\r\n        }\r\n\r\n        .tprv-why-choose-image:hover {\r\n            transform: perspective(1000px) rotateY(0deg);\r\n        }\r\n\r\n        .tprv-benefit-item {\r\n            display: flex;\r\n            align-items: flex-start;\r\n            margin-bottom: 20px;\r\n            padding: 15px;\r\n            border-radius: 12px;\r\n            background: white;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.03);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-benefit-item:hover {\r\n            transform: translateX(10px);\r\n            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        .tprv-benefit-icon {\r\n            width: 40px;\r\n            height: 40px;\r\n            border-radius: 12px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            margin-right: 15px;\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            font-size: 1.2rem;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        \/* FAQ Section *\/\r\n        .tprv-faq-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: white;\r\n        }\r\n\r\n        .tprv-accordion-item {\r\n            border: none;\r\n            border-radius: 12px !important;\r\n            overflow: hidden;\r\n            margin-bottom: 15px;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);\r\n        }\r\n\r\n        .tprv-accordion-button {\r\n            font-weight: 600;\r\n            color: var(--tprv-dark-color);\r\n            padding: 20px 25px;\r\n            background: white;\r\n            box-shadow: none;\r\n            border-radius: 12px 12px 0 0 !important;\r\n        }\r\n\r\n        .tprv-accordion-button:not(.collapsed) {\r\n            background: white;\r\n            color: var(--tprv-primary-color);\r\n            box-shadow: none;\r\n        }\r\n\r\n        .tprv-accordion-button:focus {\r\n            box-shadow: none;\r\n            border-color: rgba(138, 103, 255, 0.35);\r\n        }\r\n\r\n        .tprv-accordion-button::after {\r\n            background-image: url(\"data:image\/svg+xml,%3csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 16 16' fill='%238A67FF'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'\/%3e%3c\/svg%3e\");\r\n        }\r\n\r\n        .tprv-accordion-body {\r\n            padding: 25px;\r\n            color: #666;\r\n        }\r\n\r\n        \/* Section Titles *\/\r\n        .tprv-section-title {\r\n            font-weight: 700;\r\n            color: var(--tprv-dark-color);\r\n            margin-bottom: 1.5rem;\r\n            position: relative;\r\n            display: inline-block;\r\n        }\r\n\r\n        .tprv-section-title::after {\r\n            content: '';\r\n            position: absolute;\r\n            bottom: -10px;\r\n            left: 0;\r\n            width: 60px;\r\n            height: 4px;\r\n            background: var(--tprv-primary-color);\r\n            border-radius: 2px;\r\n        }\r\n\r\n        .tprv-light-title {\r\n            color: white;\r\n        }\r\n\r\n        .tprv-light-title::after {\r\n            background: white;\r\n        }\r\n\r\n        .tprv-section-subtitle {\r\n            color: #666;\r\n            max-width: 700px;\r\n            margin: 0 auto 3rem;\r\n            font-size: 1.1rem;\r\n        }\r\n\r\n        .tprv-light-subtitle {\r\n            color: rgba(255, 255, 255, 0.8);\r\n        }\r\n\r\n        \/* Responsive Design *\/\r\n        @media (max-width: 991px) {\r\n            :root {\r\n                --tprv-section-padding: 80px 0;\r\n            }\r\n\r\n            .tprv-hero-section h1 {\r\n                font-size: 2.8rem;\r\n            }\r\n\r\n            .tprv-process-step::before {\r\n                display: none;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 767px) {\r\n            :root {\r\n                --tprv-section-padding: 70px 0;\r\n            }\r\n\r\n            .tprv-hero-section {\r\n                padding: 100px 0 60px;\r\n            }\r\n\r\n            .tprv-hero-section h1 {\r\n                font-size: 2.2rem;\r\n            }\r\n\r\n            .tprv-hero-section p {\r\n                font-size: 1rem;\r\n            }\r\n\r\n            .tprv-section-title {\r\n                font-size: 1.8rem;\r\n            }\r\n        }\r\n\r\n        \/* Animation *\/\r\n        @keyframes tprv-float {\r\n            0% {\r\n                transform: translateY(0px);\r\n            }\r\n\r\n            50% {\r\n                transform: translateY(-15px);\r\n            }\r\n\r\n            100% {\r\n                transform: translateY(0px);\r\n            }\r\n        }\r\n\r\n        .tprv-floating-element {\r\n            animation: tprv-float 6s ease-in-out infinite;\r\n        }\r\n\r\n        \/* Custom Scrollbar *\/\r\n        ::-webkit-scrollbar {\r\n            width: 8px;\r\n        }\r\n\r\n        ::-webkit-scrollbar-track {\r\n            background: #f1f1f1;\r\n        }\r\n\r\n        ::-webkit-scrollbar-thumb {\r\n            background: var(--tprv-primary-color);\r\n            border-radius: 10px;\r\n        }\r\n\r\n        ::-webkit-scrollbar-thumb:hover {\r\n            background: var(--tprv-primary-hover);\r\n        }\r\n\r\n    <\/style>\r\n    <!-- tools -->\r\n    <style>\r\n        :root {\r\n            --va-purple: #8A67FF;\r\n            --va-black: #000000;\r\n            --primary-gradient: linear-gradient(135deg, #8A67FF 0%, #6B4FE0 100%);\r\n            --secondary-gradient: linear-gradient(135deg, #9B7AFF 0%, #8A67FF 100%);\r\n            --accent-gradient: linear-gradient(135deg, #8A67FF 0%, #5a3fd4 100%);\r\n            --card-gradient: linear-gradient(135deg, #8A67FF 0%, #6B4FE0 100%);\r\n            --stats-gradient-1: linear-gradient(135deg, #2D1B69 0%, #8A67FF 100%);\r\n            --stats-gradient-2: linear-gradient(135deg, #8E2DE2 0%, #8A67FF 100%);\r\n            --stats-gradient-3: linear-gradient(135deg, #667eea 0%, #8A67FF 100%);\r\n            --stats-gradient-4: linear-gradient(135deg, #b8a0ff 0%, #8A67FF 100%);\r\n            --glass-bg: rgba(255, 255, 255, 0.92);\r\n            --glass-border: rgba(138, 103, 255, 0.25);\r\n            --text-primary: #000000;\r\n            --text-secondary: #333333;\r\n            --text-muted: #555555;\r\n            --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n            --shadow-md: 0 4px 16px rgba(138, 103, 255, 0.12);\r\n            --shadow-lg: 0 8px 32px rgba(138, 103, 255, 0.18);\r\n            --shadow-xl: 0 25px 50px rgba(0, 0, 0, 0.12);\r\n            --shadow-neon: 0 0 20px rgba(138, 103, 255, 0.35);\r\n        }\r\n\r\n        html.aos-fallback [data-aos] {\r\n            opacity: 1 !important;\r\n            transform: none !important;\r\n            transition: none !important;\r\n        }\r\n\r\n        .custom-tools-section {\r\n            background: #ffffff;\r\n            background: linear-gradient(165deg, #faf9ff 0%, #ffffff 40%, #f3efff 100%);\r\n            color: var(--text-primary);\r\n            line-height: 1.6;\r\n            position: relative;\r\n            overflow-x: hidden;\r\n            padding: 80px 0;\r\n        }\r\n\r\n        .custom-tools-section::before {\r\n            content: '';\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background:\r\n                radial-gradient(circle at 20% 30%, rgba(138, 103, 255, 0.12) 0%, transparent 50%),\r\n                radial-gradient(circle at 80% 70%, rgba(138, 103, 255, 0.08) 0%, transparent 50%);\r\n            pointer-events: none;\r\n            z-index: -1;\r\n        }\r\n\r\n        .tpv-custom-container {\r\n            max-width: 1400px;\r\n            margin: 0 auto;\r\n            padding: 32px 16px;\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        \/* Header Styles *\/\r\n        .header {\r\n            text-align: center;\r\n            margin-bottom: 48px;\r\n            animation: fadeInDown 1s ease-out;\r\n        }\r\n\r\n        .logo-container {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 24px;\r\n            margin-bottom: 24px;\r\n        }\r\n\r\n      .logo-icon {\r\n\twidth: 80px;\r\n\theight: 80px;\r\n\tbackground: var(--va-purple);\r\n\tborder-radius: 20px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tfont-size: 36px;\r\n\tfont-weight: 900;\r\n\tcolor: #ffffff;\r\n\tbox-shadow: var(--shadow-xl), var(--shadow-neon);\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\tanimation: pulse 2s ease-in-out infinite;\r\n}\r\n\r\n      .logo-text {\r\n\tfont-size: clamp(32px, 6vw, 60px);\r\n\tfont-weight: 900;\r\n\tfont-family: 'Space Grotesk', 'Inter', sans-serif;\r\n\tcolor: var(--va-black);\r\n\t-webkit-text-fill-color: var(--va-black);\r\n\tbackground: none;\r\n\t-webkit-background-clip: unset;\r\n\tbackground-clip: unset;\r\n\tletter-spacing: -2px;\r\n}\r\n\r\n      .logo-text .logo-accent {\r\n\tcolor: var(--va-purple);\r\n\t-webkit-text-fill-color: var(--va-purple);\r\n}\r\n\r\n        \/* Search Section *\/\r\n        .search-section {\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border: 1px solid var(--glass-border);\r\n            padding: clamp(24px, 5vw, 48px);\r\n            border-radius: 24px;\r\n            box-shadow: var(--shadow-xl);\r\n            margin-bottom: 32px;\r\n            animation: fadeInUp 1s ease-out 0.2s both;\r\n        }\r\n\r\n        .input-container {\r\n            position: relative;\r\n            margin-bottom: 20px;\r\n        }\r\n\r\n        .search-input {\r\n            width: 100% !important;\r\n            padding: clamp(16px, 3vw, 20px) clamp(20px, 4vw, 24px) !important;\r\n            border: 2px solid rgba(138, 103, 255, 0.35) !important;\r\n            border-radius: 16px !important;\r\n            font-size: clamp(14px, 2.5vw, 16px) !important;\r\n            font-weight: 500 !important;\r\n            background: #ffffff !important;\r\n            color: var(--text-primary) !important;\r\n            transition: all 0.3s ease !important;\r\n        }\r\n\r\n        .search-input:focus {\r\n            outline: none !important;\r\n            border-color: var(--va-purple) !important;\r\n            box-shadow: 0 0 0 4px rgba(138, 103, 255, 0.2) !important;\r\n        }\r\n\r\n        .search-input::placeholder {\r\n            color: rgba(0, 0, 0, 0.45) !important;\r\n        }\r\n\r\n        .paste-hint {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: flex-end;\r\n            gap: 8px;\r\n            margin-top: 8px;\r\n            font-size: 13px;\r\n            color: var(--text-muted);\r\n        }\r\n\r\n        .paste-icon {\r\n            cursor: pointer;\r\n            padding: 6px;\r\n            border-radius: 6px;\r\n            transition: all 0.3s ease;\r\n            font-size: 16px;\r\n        }\r\n\r\n        .paste-icon:hover {\r\n            background: rgba(255, 255, 255, 0.1);\r\n            color: var(--text-primary);\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .search-box {\r\n            display: flex;\r\n            gap: 16px;\r\n            margin-bottom: 20px;\r\n            flex-wrap: wrap;\r\n        }\r\n\r\n     .search-button {\r\n\tflex: 1;\r\n\tmin-width: 200px;\r\n\tpadding: clamp(16px, 3vw, 20px) clamp(24px, 5vw, 32px);\r\n\tbackground: var(--va-purple);\r\n\tcolor: #ffffff;\r\n\tborder: none;\r\n\tborder-radius: 16px;\r\n\tfont-size: clamp(14px, 2.5vw, 16px);\r\n\tfont-weight: 700;\r\n\tcursor: pointer;\r\n\ttransition: all 0.3s ease;\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\tbox-shadow: var(--shadow-lg), var(--shadow-neon);\r\n}\r\n\r\n        .search-button::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: -100%;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\r\n            transition: left 0.5s;\r\n        }\r\n\r\n        .search-button:hover:not(:disabled)::before {\r\n            left: 100%;\r\n        }\r\n\r\n        .search-button:hover:not(:disabled) {\r\n            transform: translateY(-3px);\r\n            box-shadow: var(--shadow-xl), 0 0 30px rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        .search-button:disabled {\r\n            opacity: 0.6;\r\n            cursor: not-allowed;\r\n            transform: none;\r\n        }\r\n\r\n        .search-again-btn {\r\n            background: var(--secondary-gradient);\r\n            color: white;\r\n            margin-top: 16px;\r\n            width: 100%;\r\n            padding: 16px;\r\n            border: none;\r\n            border-radius: 16px;\r\n            font-weight: 700;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .search-again-btn:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        \/* Profile Section *\/\r\n        .profile-section {\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: 24px;\r\n            padding: 32px;\r\n            margin-bottom: 32px;\r\n            animation: fadeInUp 0.8s ease-out;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .profile-header {\r\n            display: flex;\r\n            gap: 24px;\r\n            margin-bottom: 32px;\r\n        }\r\n\r\n        .profile-avatar-container {\r\n            position: relative;\r\n        }\r\n\r\n        .profile-avatar {\r\n            width: 120px;\r\n            height: 120px;\r\n            border-radius: 50%;\r\n            object-fit: cover;\r\n            border: 4px solid transparent;\r\n            background: var(--primary-gradient);\r\n            padding: 2px;\r\n            box-shadow: var(--shadow-lg);\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .profile-avatar:hover {\r\n            transform: scale(1.05);\r\n            box-shadow: var(--shadow-xl), var(--shadow-neon);\r\n        }\r\n\r\n        .fullscreen-icon {\r\n            position: absolute;\r\n            bottom: 5px;\r\n            right: 5px;\r\n            width: 24px;\r\n            height: 24px;\r\n            background: var(--primary-gradient);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            color: white;\r\n            font-size: 10px;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n        }\r\n\r\n        .fullscreen-icon:hover {\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .profile-info {\r\n            flex: 1;\r\n        }\r\n\r\n        .profile-name {\r\n            font-size: 32px;\r\n            font-weight: 800;\r\n            margin-bottom: 8px;\r\n            color: var(--va-black);\r\n            -webkit-text-fill-color: var(--va-black);\r\n        }\r\n\r\n        .profile-bio {\r\n            color: var(--text-secondary);\r\n            line-height: 1.5;\r\n            white-space: pre-wrap;\r\n            word-break: break-word;\r\n        }\r\n\r\n        .profile-username {\r\n            font-size: 18px;\r\n            color: var(--text-secondary);\r\n            margin-bottom: 16px;\r\n        }\r\n\r\n        \/* Enhanced Stats Section - Darker Theme *\/\r\n        .profile-stats {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n            gap: 20px;\r\n            padding: 0;\r\n            background: transparent;\r\n            border-radius: 0;\r\n            backdrop-filter: none;\r\n        }\r\n\r\n        .stat-item {\r\n            text-align: center;\r\n            padding: 24px 20px;\r\n            border-radius: 16px;\r\n            transition: all 0.3s ease;\r\n            position: relative;\r\n            overflow: hidden;\r\n            border: 1px solid rgba(255, 255, 255, 0.1);\r\n            backdrop-filter: blur(20px);\r\n        }\r\n\r\n        .stat-item:nth-child(1) {\r\n            background: var(--stats-gradient-1);\r\n            box-shadow: 0 8px 32px rgba(45, 27, 105, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(2) {\r\n            background: var(--stats-gradient-2);\r\n            box-shadow: 0 8px 32px rgba(142, 45, 226, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(3) {\r\n            background: var(--stats-gradient-3);\r\n            box-shadow: 0 8px 32px rgba(102, 126, 234, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(4) {\r\n            background: var(--stats-gradient-4);\r\n            box-shadow: 0 8px 32px rgba(240, 147, 251, 0.4);\r\n        }\r\n\r\n        .stat-item::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%, rgba(255, 255, 255, 0.05) 100%);\r\n            opacity: 0;\r\n            transition: opacity 0.3s ease;\r\n        }\r\n\r\n        .stat-item:hover::before {\r\n            opacity: 1;\r\n        }\r\n\r\n        .stat-item:hover {\r\n            transform: translateY(-8px) scale(1.02);\r\n            box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4);\r\n        }\r\n\r\n        .stat-value {\r\n            font-size: 28px;\r\n            font-weight: 800;\r\n            margin-bottom: 8px;\r\n            color: #ffffff;\r\n            text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n        }\r\n\r\n        .stat-label {\r\n            font-size: 14px;\r\n            color: rgba(255, 255, 255, 0.9);\r\n            font-weight: 600;\r\n            text-transform: capitalize;\r\n            letter-spacing: 0.5px;\r\n        }\r\n\r\n        \/* Videos Section Header *\/\r\n        .videos-section-header {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n            margin-bottom: 24px;\r\n            padding: 20px 0;\r\n        }\r\n\r\n        .videos-button {\r\n            padding: 16px 32px;\r\n            background: var(--primary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 16px;\r\n            font-weight: 700;\r\n            font-size: 16px;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-md);\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .videos-button:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .videos-count {\r\n            font-size: 16px;\r\n            font-weight: 600;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        .download-all-btn {\r\n            padding: 12px 24px;\r\n            background: var(--secondary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-md);\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n            margin-left: 16px;\r\n        }\r\n\r\n        .download-all-btn:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .download-all-btn:disabled {\r\n            opacity: 0.6;\r\n            cursor: not-allowed;\r\n            transform: none;\r\n        }\r\n\r\n        \/* Video Grid - Enhanced with Gradients *\/\r\n        .video-grid {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n            gap: 24px;\r\n        }\r\n\r\n        .video-card {\r\n            background: linear-gradient(135deg,\r\n                    rgba(255, 0, 80, 0.1) 0%,\r\n                    rgba(0, 242, 234, 0.1) 50%,\r\n                    rgba(105, 201, 208, 0.1) 100%);\r\n            border-radius: 20px;\r\n            overflow: hidden;\r\n            transition: all 0.3s ease;\r\n            position: relative;\r\n            backdrop-filter: blur(20px);\r\n            border: 1px solid rgba(255, 255, 255, 0.2);\r\n            box-shadow:\r\n                var(--shadow-lg),\r\n                0 0 20px rgba(255, 0, 80, 0.1),\r\n                inset 0 1px 0 rgba(255, 255, 255, 0.1);\r\n            cursor: pointer;\r\n            height: 480px;\r\n        }\r\n\r\n        .video-card:hover {\r\n            transform: translateY(-15px) scale(1.02);\r\n            box-shadow:\r\n                var(--shadow-xl),\r\n                0 0 40px rgba(255, 0, 80, 0.3),\r\n                0 0 60px rgba(0, 242, 234, 0.2),\r\n                inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n            border-color: rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        .video-card::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            background: linear-gradient(135deg,\r\n                    rgba(255, 0, 80, 0.05) 0%,\r\n                    transparent 50%,\r\n                    rgba(0, 242, 234, 0.05) 100%);\r\n            opacity: 0;\r\n            transition: opacity 0.3s ease;\r\n            pointer-events: none;\r\n            z-index: 1;\r\n        }\r\n\r\n        .video-card:hover::before {\r\n            opacity: 1;\r\n        }\r\n\r\n        .video-thumbnail-container {\r\n            position: relative;\r\n            width: 100%;\r\n            height: 320px;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .video-thumbnail {\r\n            width: 100%;\r\n            height: 100%;\r\n            object-fit: cover;\r\n            transition: transform 0.3s ease;\r\n        }\r\n\r\n        .video-card:hover .video-thumbnail {\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        \/* Fixed Play Icon - Visible Triangle *\/\r\n        .play-overlay {\r\n            position: absolute;\r\n            top: 50%;\r\n            left: 50%;\r\n            transform: translate(-50%, -50%);\r\n            width: 64px;\r\n            height: 64px;\r\n            background: rgba(255, 0, 80, 0.9);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            transition: all 0.3s ease;\r\n            z-index: 2;\r\n            box-shadow: 0 8px 25px rgba(255, 0, 80, 0.4);\r\n            border: 2px solid rgba(255, 255, 255, 0.3);\r\n        }\r\n\r\n        .play-overlay::after {\r\n            content: '';\r\n            width: 0;\r\n            height: 0;\r\n            border-left: 16px solid white;\r\n            border-top: 12px solid transparent;\r\n            border-bottom: 12px solid transparent;\r\n            margin-left: 4px;\r\n        }\r\n\r\n        .video-card:hover .play-overlay {\r\n            transform: translate(-50%, -50%) scale(1.2);\r\n            background: rgba(255, 0, 80, 1);\r\n            box-shadow: 0 12px 35px rgba(255, 0, 80, 0.6);\r\n        }\r\n\r\n        \/* Always Visible Download Button *\/\r\n        .video-download-btn {\r\n            position: absolute;\r\n            top: 12px;\r\n            right: 12px;\r\n            width: 40px;\r\n            height: 40px;\r\n            background: rgba(0, 0, 0, 0.8);\r\n            backdrop-filter: blur(10px);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            color: white;\r\n            font-size: 16px;\r\n            transition: all 0.3s ease;\r\n            opacity: 1;\r\n            cursor: pointer;\r\n            z-index: 10;\r\n            border: 2px solid rgba(255, 255, 255, 0.2);\r\n        }\r\n\r\n        .video-download-btn:hover {\r\n            background: var(--primary-gradient);\r\n            transform: scale(1.1);\r\n            border-color: rgba(255, 255, 255, 0.5);\r\n        }\r\n\r\n        \/* Video Info - Below Thumbnail *\/\r\n        .video-info {\r\n            padding: 20px;\r\n            background: rgba(0, 0, 0, 0.3);\r\n            backdrop-filter: blur(10px);\r\n            height: 160px;\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: space-between;\r\n        }\r\n\r\n        .video-title {\r\n            font-size: 14px;\r\n            font-weight: 600;\r\n            margin-bottom: 12px;\r\n            display: -webkit-box;\r\n            -webkit-line-clamp: 3;\r\n            -webkit-box-orient: vertical;\r\n            overflow: hidden;\r\n            color: #ffffff;\r\n            line-height: 1.4;\r\n        }\r\n\r\n        .video-stats {\r\n            display: grid;\r\n            grid-template-columns: repeat(3, 1fr);\r\n            gap: 8px;\r\n            font-size: 12px;\r\n            color: rgba(255, 255, 255, 0.88);\r\n        }\r\n\r\n        .stat {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 4px;\r\n            padding: 8px;\r\n            background: rgba(255, 255, 255, 0.05);\r\n            border-radius: 8px;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .stat:hover {\r\n            background: rgba(138, 103, 255, 0.25);\r\n            color: #ffffff;\r\n        }\r\n\r\n        \/* Video Modal - Enhanced *\/\r\n        .modal {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.95);\r\n            backdrop-filter: blur(20px);\r\n            z-index: 1000;\r\n            display: none;\r\n            animation: fadeIn 0.3s ease-out;\r\n            padding: 20px;\r\n        }\r\n\r\n        .modal-content {\r\n            position: relative;\r\n            \/* Make this parent for absolute positioning *\/\r\n            width: 100%;\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            align-items: center;\r\n            max-width: 500px;\r\n            margin: 0 auto;\r\n        }\r\n\r\n        .modal-title {\r\n            color: white;\r\n            font-size: 18px;\r\n            font-weight: 600;\r\n            margin-bottom: 16px;\r\n            text-align: center;\r\n            padding: 0 20px;\r\n            display: -webkit-box;\r\n            -webkit-line-clamp: 2;\r\n            -webkit-box-orient: vertical;\r\n            overflow: hidden;\r\n            line-height: 1.4;\r\n        }\r\n\r\n        .video-player-container {\r\n            position: relative;\r\n            width: 100%;\r\n            aspect-ratio: 9\/16;\r\n            background: #000;\r\n            border-radius: 20px;\r\n            overflow: hidden;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .video-player {\r\n            width: 100%;\r\n            height: 100%;\r\n            object-fit: contain;\r\n        }\r\n\r\n        \/* Close Modal Button - Enhanced *\/\r\n\r\n\r\n        .close-modal {\r\n            position: absolute;\r\n            top: 10px;\r\n            right: -30px;\r\n            \/* <-- Pull more right OUTSIDE the video container *\/\r\n            width: 48px;\r\n            height: 48px;\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 2px solid rgba(255, 0, 80, 0.5);\r\n            border-radius: 50%;\r\n            color: white;\r\n            font-size: 24px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n            z-index: 20;\r\n            box-shadow: 0 4px 15px rgba(255, 0, 80, 0.3);\r\n        }\r\n\r\n\r\n\r\n\r\n        .close-modal:hover {\r\n            background: rgba(255, 0, 80, 0.4);\r\n            transform: rotate(90deg) scale(1.1);\r\n            border-color: rgba(255, 0, 80, 0.8);\r\n            box-shadow: 0 6px 20px rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        \/* Video Controls *\/\r\n        .video-controls {\r\n            position: absolute;\r\n            bottom: 0;\r\n            left: 0;\r\n            right: 0;\r\n            padding: 20px;\r\n            background: linear-gradient(transparent, rgba(0, 0, 0, 0.9));\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 16px;\r\n        }\r\n\r\n        .progress-container {\r\n            width: 100%;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            cursor: pointer;\r\n            position: relative;\r\n        }\r\n\r\n        .progress-bar {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            position: relative;\r\n            transition: width 0.1s linear;\r\n        }\r\n\r\n        .control-buttons {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n        }\r\n\r\n        .control-group {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 12px;\r\n        }\r\n\r\n        .control-button {\r\n            width: 44px;\r\n            height: 44px;\r\n            border: none;\r\n            border-radius: 50%;\r\n            background: var(--glass-bg);\r\n            color: white;\r\n            font-size: 18px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n            border: 1px solid var(--glass-border);\r\n        }\r\n\r\n        .control-button:hover {\r\n            background: rgba(255, 255, 255, 0.2);\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .play-pause {\r\n            width: 56px;\r\n            height: 56px;\r\n            background: var(--primary-gradient);\r\n            font-size: 24px;\r\n            border: none;\r\n        }\r\n\r\n        .play-pause:hover {\r\n            background: var(--secondary-gradient);\r\n        }\r\n\r\n        \/* Volume Controls *\/\r\n        .volume-controls {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .volume-slider {\r\n            width: 80px;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            position: relative;\r\n            cursor: pointer;\r\n        }\r\n\r\n        .volume-fill {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            transition: width 0.1s ease;\r\n        }\r\n\r\n        \/* Advanced Loading Animation *\/\r\n        .loading {\r\n            display: none;\r\n            justify-content: center;\r\n            align-items: center;\r\n            padding: 60px 40px;\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border-radius: 24px;\r\n            margin: 32px 0;\r\n            border: 1px solid var(--glass-border);\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .loading-content {\r\n            text-align: center;\r\n        }\r\n\r\n        .loading-animation {\r\n            position: relative;\r\n            width: 120px;\r\n            height: 120px;\r\n            margin: 0 auto 24px;\r\n        }\r\n\r\n        .loading-ring {\r\n            position: absolute;\r\n            border: 4px solid transparent;\r\n            border-radius: 50%;\r\n            animation: spin 2s linear infinite;\r\n        }\r\n\r\n        .loading-ring:nth-child(1) {\r\n            width: 120px;\r\n            height: 120px;\r\n            border-top-color: #FF0050;\r\n            animation-duration: 2s;\r\n        }\r\n\r\n        .loading-ring:nth-child(2) {\r\n            width: 90px;\r\n            height: 90px;\r\n            top: 15px;\r\n            left: 15px;\r\n            border-right-color: #00F2EA;\r\n            animation-duration: 1.5s;\r\n            animation-direction: reverse;\r\n        }\r\n\r\n        .loading-ring:nth-child(3) {\r\n            width: 60px;\r\n            height: 60px;\r\n            top: 30px;\r\n            left: 30px;\r\n            border-bottom-color: #FF4081;\r\n            animation-duration: 1s;\r\n        }\r\n\r\n        .loading-dots {\r\n            display: flex;\r\n            justify-content: center;\r\n            gap: 8px;\r\n            margin-bottom: 16px;\r\n        }\r\n\r\n        .loading-dot {\r\n            width: 12px;\r\n            height: 12px;\r\n            background: var(--primary-gradient);\r\n            border-radius: 50%;\r\n            animation: bounce 1.4s ease-in-out infinite both;\r\n        }\r\n\r\n        .loading-dot:nth-child(1) {\r\n            animation-delay: -0.32s;\r\n        }\r\n\r\n        .loading-dot:nth-child(2) {\r\n            animation-delay: -0.16s;\r\n        }\r\n\r\n        .loading-dot:nth-child(3) {\r\n            animation-delay: 0s;\r\n        }\r\n\r\n        @keyframes bounce {\r\n\r\n            0%,\r\n            80%,\r\n            100% {\r\n                transform: scale(0);\r\n            }\r\n\r\n            40% {\r\n                transform: scale(1);\r\n            }\r\n        }\r\n\r\n        @keyframes spin {\r\n            to {\r\n                transform: rotate(360deg);\r\n            }\r\n        }\r\n\r\n        .loading-text {\r\n            font-size: 18px;\r\n            font-weight: 600;\r\n            color: var(--text-primary);\r\n            margin-bottom: 8px;\r\n        }\r\n\r\n        .loading-subtext {\r\n            font-size: 14px;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        \/* Profile Picture Modal *\/\r\n        .profile-modal {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.95);\r\n            backdrop-filter: blur(20px);\r\n            z-index: 1000;\r\n            display: none;\r\n            animation: fadeIn 0.3s ease-out;\r\n            padding: 20px;\r\n        }\r\n\r\n        .profile-modal-content {\r\n            position: relative;\r\n            width: 100%;\r\n            height: 100%;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n        }\r\n\r\n        .profile-modal-image {\r\n            max-width: 80%;\r\n            max-height: 80%;\r\n            border-radius: 20px;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .profile-modal-close {\r\n            position: absolute;\r\n            top: 20px;\r\n            right: 20px;\r\n            width: 48px;\r\n            height: 48px;\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 2px solid rgba(255, 0, 80, 0.5);\r\n            border-radius: 50%;\r\n            color: white;\r\n            font-size: 24px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .profile-modal-download {\r\n            position: absolute;\r\n            bottom: 20px;\r\n            right: 20px;\r\n            padding: 12px 24px;\r\n            background: var(--primary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .profile-modal-download:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        \/* Download Progress Indicator *\/\r\n        .download-progress {\r\n            position: fixed;\r\n            bottom: 20px;\r\n            right: 20px;\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(20px);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: 12px;\r\n            padding: 16px 20px;\r\n            color: white;\r\n            font-weight: 600;\r\n            z-index: 1001;\r\n            display: none;\r\n            align-items: center;\r\n            gap: 12px;\r\n            box-shadow: var(--shadow-lg);\r\n            min-width: 300px;\r\n        }\r\n\r\n        .download-progress.show {\r\n            display: flex;\r\n        }\r\n\r\n        .download-spinner {\r\n            width: 20px;\r\n            height: 20px;\r\n            border: 2px solid rgba(255, 255, 255, 0.3);\r\n            border-top-color: #FF0050;\r\n            border-radius: 50%;\r\n            animation: spin 1s linear infinite;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        .download-info {\r\n            flex-grow: 1;\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 4px;\r\n        }\r\n\r\n        .download-text {\r\n            font-size: 14px;\r\n            white-space: nowrap;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n        }\r\n\r\n        .download-progress-bar {\r\n            width: 100%;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .download-progress-fill {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            width: 0%;\r\n            transition: width 0.3s ease;\r\n        }\r\n\r\n        .cancel-download-btn {\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 1px solid rgba(255, 0, 80, 0.4);\r\n            color: white;\r\n            border-radius: 8px;\r\n            padding: 6px 12px;\r\n            font-size: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            flex-shrink: 0;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 4px;\r\n        }\r\n\r\n        .cancel-download-btn:hover {\r\n            background: rgba(255, 0, 80, 0.4);\r\n        }\r\n\r\n        \/* Animations *\/\r\n        @keyframes fadeIn {\r\n            from {\r\n                opacity: 0;\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n            }\r\n        }\r\n\r\n        @keyframes fadeInDown {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(-30px);\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        @keyframes fadeInUp {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(30px);\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        @keyframes pulse {\r\n\r\n            0%,\r\n            100% {\r\n                transform: scale(1);\r\n            }\r\n\r\n            50% {\r\n                transform: scale(1.05);\r\n            }\r\n        }\r\n\r\n        \/* Error Message *\/\r\n        .error-message {\r\n            background: rgba(255, 0, 80, 0.1);\r\n            border: 1px solid rgba(255, 0, 80, 0.2);\r\n            color: #FF0050;\r\n            padding: 16px 24px;\r\n            border-radius: 12px;\r\n            margin-top: 16px;\r\n            display: none;\r\n            align-items: center;\r\n            gap: 12px;\r\n            font-weight: 500;\r\n        }\r\n\r\n        \/* Responsive Design *\/\r\n        @media (max-width: 768px) {\r\n            .profile-header {\r\n                flex-direction: column;\r\n                align-items: center;\r\n                text-align: center;\r\n            }\r\n\r\n            .profile-stats {\r\n                grid-template-columns: repeat(2, 1fr);\r\n            }\r\n\r\n            .video-grid {\r\n                grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n                gap: 16px;\r\n            }\r\n\r\n            .video-card {\r\n                height: 440px;\r\n            }\r\n\r\n            .video-thumbnail-container {\r\n                height: 280px;\r\n            }\r\n\r\n            .search-box {\r\n                flex-direction: column;\r\n            }\r\n\r\n            .search-button {\r\n                width: 100%;\r\n            }\r\n\r\n            .control-buttons {\r\n                flex-wrap: wrap;\r\n                gap: 12px;\r\n            }\r\n\r\n            .volume-controls {\r\n                order: 3;\r\n                width: 100%;\r\n                justify-content: center;\r\n            }\r\n\r\n            .close-modal {\r\n                top: -50px;\r\n                right: 10px;\r\n            }\r\n\r\n            .videos-section-header {\r\n                flex-direction: column;\r\n                gap: 12px;\r\n                align-items: flex-start;\r\n            }\r\n\r\n            .download-all-btn {\r\n                margin-left: 0;\r\n                margin-top: 8px;\r\n            }\r\n\r\n            .download-progress {\r\n                left: 20px;\r\n                right: 20px;\r\n                width: auto;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 480px) {\r\n            .profile-stats {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .video-grid {\r\n                grid-template-columns: 1fr;\r\n            }\r\n        }\r\n    <\/style>\r\n<body data-aos-easing=\"ease-in-out\" data-aos-duration=\"800\" data-aos-delay=\"0\" data-new-gr-c-s-check-loaded=\"14.1249.0\" data-gr-ext-installed=\"\" data-new-gr-c-s-loaded=\"14.1223.0\" class=\"\" style=\"\">\r\n\r\n    <!-- Hero section tools -->\r\n    <section class=\"custom-tools-section\">\r\n        <div class=\"container\">\r\n            <div class=\"tpv-custom-container\">\r\n                <div class=\"header\">\r\n                    <div class=\"logo-container\">\r\n                        <div class=\"logo-icon\">\r\n                            <i class=\"fab fa-tiktok\"><\/i>\r\n                        <\/div>\r\n                        <h1 class=\"logo-text\"><span class=\"logo-accent\">T<\/span>iktok <span class=\"logo-accent\">B<\/span>io Viewer<\/h1>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"search-section\">\r\n                    <div class=\"input-container\">\r\n                        <input type=\"text\" class=\"search-input\" placeholder=\"Enter TikTok (username, @username, or profile URL)\" id=\"usernameInput\">\r\n                        <div class=\"paste-hint\">\r\n                            <span>Paste from clipboard<\/span>\r\n                            <i class=\"fas fa-paste paste-icon\" onclick=\"pasteFromClipboard()\" title=\"Paste from clipboard\"><\/i>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"search-box\" id=\"searchBox\">\r\n                        <button class=\"search-button\" onclick=\"searchProfile()\" id=\"searchBtn\">\r\n                            <i class=\"fas fa-search\"><\/i> <span id=\"searchText\">Analyze Profile<\/span>\r\n                        <\/button>\r\n                    <\/div>\r\n                    <button class=\"search-again-btn\" onclick=\"searchAgain()\" id=\"searchAgainBtn\" style=\"display: none;\">\r\n                        <i class=\"fas fa-search\"><\/i> Search Another Profile\r\n                    <\/button>\r\n                    <div class=\"error-message\" id=\"errorMessage\">\r\n                        <i class=\"fas fa-exclamation-circle\"><\/i>\r\n                        <span id=\"errorText\"><\/span>\r\n                    <\/div>\r\n                    <div class=\"loading\" id=\"loading\">\r\n                        <div class=\"loading-content\">\r\n                            <div class=\"loading-animation\">\r\n                                <div class=\"loading-ring\"><\/div>\r\n                                <div class=\"loading-ring\"><\/div>\r\n                                <div class=\"loading-ring\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"loading-dots\">\r\n                                <div class=\"loading-dot\"><\/div>\r\n                                <div class=\"loading-dot\"><\/div>\r\n                                <div class=\"loading-dot\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"loading-text\">Analyzing TikTok Profile<\/div>\r\n                            <div class=\"loading-subtext\">Fetching videos and profile data...<\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"results-container\" id=\"resultsContainer\" style=\"display: none;\">\r\n                    <div class=\"profile-section\" id=\"profileSection\"><\/div>\r\n\r\n                    <div class=\"videos-section-header\" id=\"videosHeader\" style=\"display: none;\">\r\n                        <div style=\"display: flex; align-items: center; gap: 16px;\">\r\n                            <button class=\"videos-button\">\r\n                                <i class=\"fas fa-video\"><\/i> Videos\r\n                            <\/button>\r\n                            <button class=\"download-all-btn\" onclick=\"downloadAllVideos()\" id=\"downloadAllBtn\">\r\n                                <i class=\"fas fa-download\"><\/i> Download All\r\n                            <\/button>\r\n                        <\/div>\r\n                        <div class=\"videos-count\" id=\"videosCount\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"video-grid\" id=\"videoGrid\"><\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Video Modal -->\r\n            <div class=\"modal\" id=\"videoModal\">\r\n                <div class=\"modal-content\">\r\n                    <div class=\"modal-title\" id=\"modalTitle\"><\/div>\r\n                    <button class=\"close-modal\" onclick=\"closeVideoModal()\">\r\n                        <i class=\"fas fa-times\"><\/i>\r\n                    <\/button>\r\n                    <div class=\"video-player-container\">\r\n                        <video id=\"videoPlayer\" class=\"video-player\" loop=\"\">\r\n                            Your browser doesn't support video playback.\r\n                        <\/video>\r\n                        <div class=\"video-controls\">\r\n                            <div class=\"progress-container\" onclick=\"seekVideo(event)\">\r\n                                <div class=\"progress-bar\" id=\"progressBar\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"control-buttons\">\r\n                                <!-- Volume Control -->\r\n                                <div class=\"control-group volume-controls\">\r\n                                    <button class=\"control-button\" onclick=\"toggleMute()\" title=\"Toggle Sound\">\r\n                                        <i class=\"fas fa-volume-up\" id=\"volumeIcon\"><\/i>\r\n                                    <\/button>\r\n                                    <div class=\"volume-slider\" onclick=\"setVolume(event)\">\r\n                                        <div class=\"volume-fill\" id=\"volumeFill\"><\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <!-- Play\/Pause -->\r\n                                <button class=\"control-button play-pause\" onclick=\"togglePlay()\" title=\"Play\/Pause\">\r\n                                    <i class=\"fas fa-play\" id=\"playIcon\"><\/i>\r\n                                <\/button>\r\n\r\n                                <!-- Action Controls -->\r\n                                <div class=\"control-group\">\r\n                                    <button class=\"control-button\" onclick=\"downloadVideo()\" title=\"Download Video\">\r\n                                        <i class=\"fas fa-download\"><\/i>\r\n                                    <\/button>\r\n                                    <button class=\"control-button\" onclick=\"toggleFullscreen()\" title=\"Fullscreen\" id=\"fullscreenBtn\">\r\n                                        <i class=\"fas fa-expand\" id=\"fullscreenIcon\"><\/i>\r\n                                    <\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Profile Picture Modal -->\r\n            <div class=\"profile-modal\" id=\"profileModal\">\r\n                <div class=\"profile-modal-content\">\r\n                    <button class=\"profile-modal-close\" onclick=\"closeProfileModal()\">\r\n                        <i class=\"fas fa-times\"><\/i>\r\n                    <\/button>\r\n                    <img decoding=\"async\" id=\"profileModalImage\" class=\"profile-modal-image\" src=\"\/placeholder.svg\" alt=\"Profile Picture\">\r\n                    <button class=\"profile-modal-download\" onclick=\"downloadProfilePicture()\">\r\n                        <i class=\"fas fa-download\"><\/i> Download\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Download Progress Indicator -->\r\n            <div class=\"download-progress\" id=\"downloadProgress\">\r\n                <div class=\"download-spinner\"><\/div>\r\n                <div class=\"download-info\">\r\n                    <div class=\"download-text\" id=\"downloadText\">Downloading...<\/div>\r\n                    <div class=\"download-progress-bar\">\r\n                        <div class=\"download-progress-fill\" id=\"downloadProgressFill\"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <button class=\"cancel-download-btn\" onclick=\"cancelDownloads()\" id=\"cancelDownloadBtn\">\r\n                    <i class=\"fas fa-stop\"><\/i> Stop\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\r\n<!-- Work Process Section -->\r\n<section class=\"tprv-work-process-section\" id=\"how-it-works\">\r\n    <div class=\"container tprv-work-process-content\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title tprv-light-title\">How Our TikTok Bio Viewer Works<\/h2>\r\n            <p class=\"tprv-section-subtitle tprv-light-subtitle\">View TikTok bios anonymously in just 3 simple steps<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">1<\/div>\r\n                    <h4 class=\"text-white\">Enter Username<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">Paste the TikTok username to view its bio anonymously<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">2<\/div>\r\n                    <h4 class=\"text-white\">Process Request<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">Our system retrieves the bio data without revealing your identity<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">3<\/div>\r\n                    <h4 class=\"text-white\">View Bio Details<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">See complete bio information without leaving any trace<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- Features Section -->\r\n<section class=\"tprv-features-section\">\r\n    <div class=\"container\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title\">Key Features<\/h2>\r\n            <p class=\"tprv-section-subtitle\">Our TikTok Bio Viewer offers powerful features for anonymous browsing<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-user-check\"><\/i>\r\n                    <\/div>\r\n                    <h4>100% Anonymous<\/h4>\r\n                    <p>View bios without leaving any trace or alerting the account owner<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-user\"><\/i>\r\n                    <\/div>\r\n                    <h4>View Any Bio<\/h4>\r\n                    <p>See all public TikTok bios with their complete details and statistics<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-line-chart\"><\/i>\r\n                    <\/div>\r\n                    <h4>Bio Analytics<\/h4>\r\n                    <p>Get detailed statistics about followers, following, and engagement<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-devices\"><\/i>\r\n                    <\/div>\r\n                    <h4>Works on All Devices<\/h4>\r\n                    <p>Use our TikTok Bio Viewer on desktop, tablet, or mobile without issues<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-shield\"><\/i>\r\n                    <\/div>\r\n                    <h4>No Login Required<\/h4>\r\n                    <p>Access any public TikTok bio without an account<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-time-five\"><\/i>\r\n                    <\/div>\r\n                    <h4>Instant Processing<\/h4>\r\n                    <p>Get access to bio data immediately without waiting<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- Why Choose Section -->\r\n<section class=\"tprv-why-choose-section\">\r\n    <div class=\"container\">\r\n        <div class=\"row align-items-center\">\r\n            <div class=\"col-lg-6 mb-5 mb-lg-0\" data-aos=\"fade-right\">\r\n                <div class=\"tprv-why-choose-image tprv-floating-element\">\r\n                    <img decoding=\"async\" src=\"https:\/\/viewanonymous.com\/wp-content\/uploads\/2026\/03\/Tiktok_Bio_Viewer.webp\" alt=\"TikTok Bio Viewer\" class=\"img-fluid rounded-3\">\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"col-lg-6\" data-aos=\"fade-left\">\r\n                <h2 class=\"tprv-section-title mb-4\">Why Choose Our TikTok Bio Viewer?<\/h2>\r\n                <p class=\"mb-4\">Our tool provides a reliable and secure way to view TikTok bios anonymously, prioritizing your privacy with comprehensive access to bio data.<\/p>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Completely undetectable<\/h5>\r\n                        <p class=\"mb-0\">No traces left when viewing bios<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">No registration needed<\/h5>\r\n                        <p class=\"mb-0\">Start viewing bios immediately<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Detailed analytics<\/h5>\r\n                        <p class=\"mb-0\">Get insights into bio performance<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Fast processing<\/h5>\r\n                        <p class=\"mb-0\">Get instant access to any public bio<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- FAQ Section -->\r\n<section class=\"tprv-faq-section\">\r\n    <div class=\"container\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title\">Frequently Asked Questions<\/h2>\r\n            <p class=\"tprv-section-subtitle\">Find answers to common questions about our TikTok Bio Viewer<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row justify-content-center\">\r\n            <div class=\"col-lg-8\">\r\n                <div class=\"accordion\" id=\"tprv-faqAccordion\">\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading1\">\r\n                            <button class=\"tprv-accordion-button\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse1\" aria-expanded=\"true\" aria-controls=\"tprv-collapse1\">\r\n                                Is it legal to use this TikTok Bio Viewer?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse1\" class=\"accordion-collapse collapse show\" aria-labelledby=\"tprv-heading1\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                Yes, our tool is completely legal to use. It only allows you to view publicly available TikTok bios. We don't access private accounts or bypass any security measures - we simply display data that is already publicly accessible on TikTok.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading2\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse2\" aria-expanded=\"false\" aria-controls=\"tprv-collapse2\">\r\n                                Can I view private TikTok bios?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse2\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading2\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, our TikTok Bio Viewer respects TikTok's privacy settings. We can only display bios from accounts that are set to public. If an account is private, our viewer cannot access its information.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading3\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse3\" aria-expanded=\"false\" aria-controls=\"tprv-collapse3\">\r\n                                Will TikTok know I viewed the bio?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse3\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading3\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, all viewing is completely anonymous. When you use our TikTok Bio Viewer, TikTok doesn't register that you've viewed the bio. The account owner won't know you accessed their information.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"200\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading4\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse4\" aria-expanded=\"false\" aria-controls=\"tprv-collapse4\">\r\n                                Do I need to install software to use this?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse4\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading4\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, our TikTok Bio Viewer is completely web-based. You don't need to download or install any software. Simply visit our website, enter the username, and view the bio directly in your browser.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading5\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse5\" aria-expanded=\"false\" aria-controls=\"tprv-collapse5\">\r\n                                What information can I see about a bio?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse5\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading5\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                Our TikTok Bio Viewer shows all publicly available information, including bio details, follower count, following count, and other statistics. Private information is not accessible.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n  \r\n    <!-- Footer -->\r\n    \r\n\r\n    <!-- Copyright Section -->\r\n    \r\n\r\n\r\n\r\n    <!-- Tiktak profile viewer js -->\r\n  <script src=\"https:\/\/tools.xrespond.com\/api\/rate-limit-handler.js\"><\/script>\r\n  <script src=\"https:\/\/tools.xrespond.com\/api\/js\/client-ip-detector.js\"><\/script>\r\n    <script>\r\n        const API_BASE_URL = 'https:\/\/tools.xrespond.com\/api\/tiktok';\r\n        let currentVideo = null;\r\n        let currentProfileData = null;\r\n        let allVideos = [];\r\n        let isFullscreen = false;\r\n        let currentVolume = 1;\r\n        let isMuted = false;\r\n        let isProcessing = false;\r\n        let isDownloading = false;\r\n        let activeDownloads = [];\r\n        let downloadCancelled = false;\r\n\r\n        async function pasteFromClipboard() {\r\n            try {\r\n                const text = await navigator.clipboard.readText();\r\n                document.getElementById('usernameInput').value = text;\r\n            } catch (err) {\r\n                console.error('Failed to read clipboard contents: ', err);\r\n                document.getElementById('usernameInput').focus();\r\n            }\r\n        }\r\n\r\n        function searchAgain() {\r\n            document.getElementById('usernameInput').value = '';\r\n            document.getElementById('resultsContainer').style.display = 'none';\r\n            document.getElementById('searchAgainBtn').style.display = 'none';\r\n            document.getElementById('searchBox').style.display = 'flex';\r\n            document.getElementById('videosHeader').style.display = 'none';\r\n            document.getElementById('usernameInput').focus();\r\n            allVideos = [];\r\n        }\r\n\r\n        function extractUsername(input) {\r\n            \/\/ Handle @username format\r\n            if (input.startsWith('@')) {\r\n                return input.substring(1);\r\n            }\r\n\r\n            \/\/ Handle TikTok URLs\r\n            const urlPatterns = [\r\n                \/tiktok\\.com\\\/@([^\\\/\\?]+)\/,\r\n                \/tiktok\\.com\\\/([^\\\/\\?@]+)\/,\r\n                \/vm\\.tiktok\\.com\\\/([^\\\/\\?]+)\/\r\n            ];\r\n\r\n            for (const pattern of urlPatterns) {\r\n                const match = input.match(pattern);\r\n                if (match) {\r\n                    return match[1];\r\n                }\r\n            }\r\n\r\n            \/\/ Return as is if no pattern matches\r\n            return input;\r\n        }\r\n\r\n        async function searchProfile() {\r\n            if (isProcessing) return;\r\n\r\n            const input = document.getElementById('usernameInput').value.trim();\r\n            if (!input) {\r\n                showError('Please enter a TikTok username or profile URL');\r\n                return;\r\n            }\r\n\r\n            const username = extractUsername(input);\r\n\r\n            isProcessing = true;\r\n            const searchBtn = document.getElementById('searchBtn');\r\n            const searchText = document.getElementById('searchText');\r\n\r\n            searchBtn.disabled = true;\r\n            searchText.textContent = 'Analyzing...';\r\n            showLoading();\r\n            hideError();\r\n\r\n            try {\r\n                \/\/ Fetch profile data\r\n                const profileResponse = await fetch(`${API_BASE_URL}\/profile\/details`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json'\r\n                    },\r\n                    body: JSON.stringify({ profile: username })\r\n                });\r\n\r\n                const profileData = await profileResponse.json();\r\n\r\n                if (profileData.status !== 'success') {\r\n                    throw new Error(profileData.message || 'Failed to fetch profile data');\r\n                }\r\n\r\n                \/\/ Store profile data\r\n                currentProfileData = profileData.data.data;\r\n\r\n                \/\/ Display profile\r\n                displayProfile(currentProfileData);\r\n\r\n                \/\/ Fetch videos\r\n                const videosResponse = await fetch(`${API_BASE_URL}\/profile\/videos`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json'\r\n                    },\r\n                    body: JSON.stringify({ profile: username })\r\n                });\r\n\r\n                const videosData = await videosResponse.json();\r\n\r\n                if (videosData.status !== 'success') {\r\n                    throw new Error(videosData.message || 'Failed to fetch videos');\r\n                }\r\n\r\n                \/\/ Display videos (reverse order - latest first)\r\n                const videos = videosData.data.data.videos.reverse();\r\n                allVideos = videos;\r\n                displayVideos(videos);\r\n\r\n                document.getElementById('resultsContainer').style.display = 'block';\r\n                document.getElementById('searchAgainBtn').style.display = 'block';\r\n                document.getElementById('searchBox').style.display = 'none';\r\n                document.getElementById('videosHeader').style.display = 'flex';\r\n\r\n                \/\/ Clear input after successful search\r\n                document.getElementById('usernameInput').value = '';\r\n\r\n            } catch (error) {\r\n                showError(error.message || 'Error fetching profile. Please try again.');\r\n            } finally {\r\n                isProcessing = false;\r\n                searchBtn.disabled = false;\r\n                searchText.textContent = 'Analyze Profile';\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function displayProfile(data) {\r\n            const profileSection = document.getElementById('profileSection');\r\n\r\n            profileSection.innerHTML = `\r\n      <div class=\"profile-header\">\r\n          <div class=\"profile-avatar-container\">\r\n              <img decoding=\"async\" src=\"${data.user.avatarLarger}\" alt=\"Profile\" class=\"profile-avatar\" onclick=\"openProfileModal('${data.user.avatarLarger}')\">\r\n              <div class=\"fullscreen-icon\" onclick=\"openProfileModal('${data.user.avatarLarger}')\" title=\"View Fullscreen\">\r\n                  <i class=\"fas fa-expand\"><\/i>\r\n              <\/div>\r\n          <\/div>\r\n          <div class=\"profile-info\">\r\n              <h2 class=\"profile-name\">${data.user.nickname}<\/h2>\r\n              <p class=\"profile-username\">@${data.user.uniqueId}<\/p>\r\n              <div class=\"profile-bio\">${data.user.signature || ''}<\/div>\r\n          <\/div>\r\n      <\/div>\r\n      <div class=\"profile-stats\">\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.followingCount)}<\/div>\r\n              <div class=\"stat-label\">Following<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.followerCount)}<\/div>\r\n              <div class=\"stat-label\">Followers<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.heartCount)}<\/div>\r\n              <div class=\"stat-label\">Likes<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.videoCount)}<\/div>\r\n              <div class=\"stat-label\">Videos<\/div>\r\n          <\/div>\r\n      <\/div>\r\n  `;\r\n        }\r\n\r\n        function displayVideos(videos) {\r\n            const videoGrid = document.getElementById('videoGrid');\r\n            const videosCount = document.getElementById('videosCount');\r\n\r\n            videoGrid.innerHTML = '';\r\n            videosCount.textContent = `Found ${videos.length} videos`;\r\n\r\n            videos.forEach((video, index) => {\r\n                const videoCard = document.createElement('div');\r\n                videoCard.className = 'video-card';\r\n                videoCard.innerHTML = `\r\n          <div class=\"video-thumbnail-container\">\r\n              <img decoding=\"async\" src=\"${video.cover}\" alt=\"${video.title}\" class=\"video-thumbnail\">\r\n              <div class=\"play-overlay\" onclick=\"openVideoModal(event, ${index})\"><\/div>\r\n              <div class=\"video-download-btn\" onclick=\"downloadVideoFromCard(event, ${index})\" title=\"Download Video\">\r\n                  <i class=\"fas fa-download\"><\/i>\r\n              <\/div>\r\n          <\/div>\r\n          <div class=\"video-info\">\r\n              <div class=\"video-title\">${video.title}<\/div>\r\n              <div class=\"video-stats\">\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-heart\"><\/i>\r\n                      <span>${formatNumber(video.digg_count)}<\/span>\r\n                  <\/div>\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-comment\"><\/i>\r\n                      <span>${formatNumber(video.comment_count)}<\/span>\r\n                  <\/div>\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-share\"><\/i>\r\n                      <span>${formatNumber(video.share_count)}<\/span>\r\n                  <\/div>\r\n              <\/div>\r\n          <\/div>\r\n      `;\r\n\r\n                videoGrid.appendChild(videoCard);\r\n            });\r\n        }\r\n\r\n        function openVideoModal(event, videoIndex) {\r\n            event.stopPropagation();\r\n            const video = allVideos[videoIndex];\r\n            if (!video) return;\r\n\r\n            currentVideo = video;\r\n            const modal = document.getElementById('videoModal');\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const modalTitle = document.getElementById('modalTitle');\r\n\r\n            \/\/ Set title\r\n            modalTitle.textContent = video.title;\r\n\r\n            \/\/ Use highest quality video URL\r\n            videoPlayer.src = video.play;\r\n            videoPlayer.preload = 'metadata';\r\n            modal.style.display = 'block';\r\n            document.body.style.overflow = 'hidden';\r\n\r\n            \/\/ Reset controls\r\n            document.getElementById('playIcon').className = 'fas fa-play';\r\n            updateVolumeIcon();\r\n            document.getElementById('progressBar').style.width = '0%';\r\n            updateVolumeDisplay();\r\n\r\n            \/\/ Set video properties\r\n            videoPlayer.addEventListener('loadedmetadata', () => {\r\n                videoPlayer.volume = currentVolume;\r\n                videoPlayer.muted = isMuted;\r\n                updateVolumeDisplay();\r\n            });\r\n\r\n            videoPlayer.addEventListener('timeupdate', updateVideoProgress);\r\n            videoPlayer.addEventListener('ended', onVideoEnd);\r\n        }\r\n\r\n        function closeVideoModal() {\r\n            const modal = document.getElementById('videoModal');\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n\r\n            videoPlayer.pause();\r\n            videoPlayer.removeEventListener('timeupdate', updateVideoProgress);\r\n            videoPlayer.removeEventListener('ended', onVideoEnd);\r\n            modal.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n            currentVideo = null;\r\n\r\n            \/\/ Exit fullscreen if active\r\n            if (isFullscreen) {\r\n                exitFullscreen();\r\n            }\r\n        }\r\n\r\n        function openProfileModal(imageUrl) {\r\n            const modal = document.getElementById('profileModal');\r\n            const image = document.getElementById('profileModalImage');\r\n\r\n            image.src = imageUrl;\r\n            modal.style.display = 'block';\r\n            document.body.style.overflow = 'hidden';\r\n        }\r\n\r\n        function closeProfileModal() {\r\n            const modal = document.getElementById('profileModal');\r\n            modal.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n        }\r\n\r\n        \/\/ Cancel all active downloads\r\n        function cancelDownloads() {\r\n            downloadCancelled = true;\r\n\r\n            \/\/ Abort all active fetch requests\r\n            activeDownloads.forEach(controller => {\r\n                if (controller) {\r\n                    controller.abort();\r\n                }\r\n            });\r\n\r\n            \/\/ Clear the active downloads array\r\n            activeDownloads = [];\r\n\r\n            \/\/ Reset download UI\r\n            isDownloading = false;\r\n            const downloadBtn = document.getElementById('downloadAllBtn');\r\n            downloadBtn.innerHTML = '<i class=\"fas fa-download\"><\/i> Download All';\r\n            downloadBtn.disabled = false;\r\n\r\n            updateDownloadProgress('Downloads cancelled', 0);\r\n            setTimeout(hideDownloadProgress, 2000);\r\n        }\r\n\r\n        \/\/ Fixed download functions with cancel support\r\n        async function downloadProfilePicture() {\r\n            if (!currentProfileData) {\r\n                showError('No profile data available');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress('Downloading profile picture...', 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                const response = await fetch(currentProfileData.user.avatarLarger, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                updateDownloadProgress('Processing profile picture...', 50);\r\n\r\n                const blob = await response.blob();\r\n                const url = window.URL.createObjectURL(blob);\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `${currentProfileData.user.uniqueId}_profile.jpg`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n\r\n                updateDownloadProgress('Saving profile picture...', 90);\r\n\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                window.URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Profile picture downloaded successfully!', 100);\r\n                console.log('Profile picture download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError') {\r\n                    console.log('Profile picture download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download profile picture: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadVideo() {\r\n            if (!currentVideo) {\r\n                showError('No video selected for download');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress('Downloading video...', 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                \/\/ Use backend proxy endpoint for download\r\n                const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(currentVideo.play)}`;\r\n                const response = await fetch(proxyUrl, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                \/\/ Get total size for progress calculation\r\n                const totalSize = parseInt(response.headers.get('content-length') || '0');\r\n                const reader = response.body.getReader();\r\n                let receivedSize = 0;\r\n                const chunks = [];\r\n\r\n                while (true) {\r\n                    const { done, value } = await reader.read();\r\n\r\n                    if (done) break;\r\n\r\n                    chunks.push(value);\r\n                    receivedSize += value.length;\r\n\r\n                    \/\/ Update progress\r\n                    const progress = totalSize ? Math.round((receivedSize \/ totalSize) * 100) : 0;\r\n                    updateDownloadProgress(`Downloading video... ${progress}%`, progress);\r\n\r\n                    if (downloadCancelled) {\r\n                        throw new Error('AbortError');\r\n                    }\r\n                }\r\n\r\n                updateDownloadProgress('Processing video...', 95);\r\n\r\n                \/\/ Combine chunks into a single Uint8Array\r\n                const chunksAll = new Uint8Array(receivedSize);\r\n                let position = 0;\r\n                for (const chunk of chunks) {\r\n                    chunksAll.set(chunk, position);\r\n                    position += chunk.length;\r\n                }\r\n\r\n                const blob = new Blob([chunksAll], { type: 'video\/mp4' });\r\n                const url = URL.createObjectURL(blob);\r\n\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `tiktok-${currentVideo.id || 'video'}.mp4`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Video downloaded successfully!', 100);\r\n                console.log('Video download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                    console.log('Video download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download video: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadVideoFromCard(event, videoIndex) {\r\n            event.stopPropagation();\r\n\r\n            const video = allVideos[videoIndex];\r\n            if (!video) {\r\n                showError('Video not found');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress(`Downloading video ${videoIndex + 1}...`, 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                \/\/ Use backend proxy endpoint for download\r\n                const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(video.play)}`;\r\n                const response = await fetch(proxyUrl, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                \/\/ Get total size for progress calculation\r\n                const totalSize = parseInt(response.headers.get('content-length') || '0');\r\n                const reader = response.body.getReader();\r\n                let receivedSize = 0;\r\n                const chunks = [];\r\n\r\n                while (true) {\r\n                    const { done, value } = await reader.read();\r\n\r\n                    if (done) break;\r\n\r\n                    chunks.push(value);\r\n                    receivedSize += value.length;\r\n\r\n                    \/\/ Update progress\r\n                    const progress = totalSize ? Math.round((receivedSize \/ totalSize) * 100) : 0;\r\n                    updateDownloadProgress(`Downloading video ${videoIndex + 1}... ${progress}%`, progress);\r\n\r\n                    if (downloadCancelled) {\r\n                        throw new Error('AbortError');\r\n                    }\r\n                }\r\n\r\n                updateDownloadProgress('Processing video...', 95);\r\n\r\n                \/\/ Combine chunks into a single Uint8Array\r\n                const chunksAll = new Uint8Array(receivedSize);\r\n                let position = 0;\r\n                for (const chunk of chunks) {\r\n                    chunksAll.set(chunk, position);\r\n                    position += chunk.length;\r\n                }\r\n\r\n                const blob = new Blob([chunksAll], { type: 'video\/mp4' });\r\n                const url = URL.createObjectURL(blob);\r\n\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `tiktok-${video.id || `video-${videoIndex + 1}`}.mp4`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Video downloaded successfully!', 100);\r\n                console.log('Video download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                    console.log('Video download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download video: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadAllVideos() {\r\n            if (allVideos.length === 0 || isDownloading) return;\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            const downloadBtn = document.getElementById('downloadAllBtn');\r\n            const originalText = downloadBtn.innerHTML;\r\n\r\n            downloadBtn.innerHTML = '<i class=\"fas fa-spinner fa-spin\"><\/i> Downloading...';\r\n            downloadBtn.disabled = true;\r\n\r\n            showDownloadProgress(`Starting download of ${allVideos.length} videos...`, 0);\r\n\r\n            let successCount = 0;\r\n            let failCount = 0;\r\n\r\n            try {\r\n                for (let i = 0; i < allVideos.length; i++) {\r\n                    if (downloadCancelled) break;\r\n\r\n                    const video = allVideos[i];\r\n\r\n                    try {\r\n                        const controller = new AbortController();\r\n                        activeDownloads.push(controller);\r\n\r\n                        updateDownloadProgress(`Downloading video ${i + 1} of ${allVideos.length}...`, Math.round((i \/ allVideos.length) * 100));\r\n\r\n                        \/\/ Use backend proxy endpoint for download\r\n                        const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(video.play)}`;\r\n                        const response = await fetch(proxyUrl, {\r\n                            signal: controller.signal\r\n                        });\r\n\r\n                        if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                        const blob = await response.blob();\r\n                        const url = URL.createObjectURL(blob);\r\n                        const a = document.createElement('a');\r\n                        a.href = url;\r\n                        a.download = `tiktok-${video.id || `video-${i + 1}`}.mp4`;\r\n                        a.style.display = 'none';\r\n                        document.body.appendChild(a);\r\n                        a.click();\r\n                        document.body.removeChild(a);\r\n                        URL.revokeObjectURL(url);\r\n\r\n                        successCount++;\r\n                        console.log(`Video ${i + 1} downloaded successfully`);\r\n\r\n                        \/\/ Remove this controller from active downloads\r\n                        activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                        \/\/ Wait between downloads to avoid overwhelming the browser\r\n                        if (i < allVideos.length - 1 && !downloadCancelled) {\r\n                            await new Promise(resolve => setTimeout(resolve, 1000));\r\n                        }\r\n                    } catch (error) {\r\n                        if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                            console.log(`Video ${i + 1} download cancelled`);\r\n                            break;\r\n                        } else {\r\n                            failCount++;\r\n                            console.error(`Failed to download video ${i + 1}:`, error);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (downloadCancelled) {\r\n                    updateDownloadProgress('Downloads cancelled', 0);\r\n                } else {\r\n                    updateDownloadProgress(`Downloads completed! ${successCount} successful, ${failCount} failed`, 100);\r\n                }\r\n\r\n                setTimeout(hideDownloadProgress, 3000);\r\n\r\n            } catch (error) {\r\n                console.error('Bulk download failed:', error);\r\n                showError('Bulk download encountered errors');\r\n                hideDownloadProgress();\r\n            } finally {\r\n                isDownloading = false;\r\n                downloadCancelled = false;\r\n                downloadBtn.innerHTML = originalText;\r\n                downloadBtn.disabled = false;\r\n                activeDownloads = [];\r\n            }\r\n        }\r\n\r\n        function showDownloadProgress(text, progress = 0) {\r\n            const progressElement = document.getElementById('downloadProgress');\r\n            const downloadText = document.getElementById('downloadText');\r\n            const progressFill = document.getElementById('downloadProgressFill');\r\n\r\n            downloadText.textContent = text;\r\n            progressFill.style.width = `${progress}%`;\r\n            progressElement.classList.add('show');\r\n        }\r\n\r\n        function updateDownloadProgress(text, progress = 0) {\r\n            const downloadText = document.getElementById('downloadText');\r\n            const progressFill = document.getElementById('downloadProgressFill');\r\n\r\n            downloadText.textContent = text;\r\n            progressFill.style.width = `${progress}%`;\r\n        }\r\n\r\n        function hideDownloadProgress() {\r\n            const progress = document.getElementById('downloadProgress');\r\n            progress.classList.remove('show');\r\n        }\r\n\r\n        function togglePlay() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const playIcon = document.getElementById('playIcon');\r\n\r\n            if (videoPlayer.paused) {\r\n                videoPlayer.play();\r\n                playIcon.className = 'fas fa-pause';\r\n            } else {\r\n                videoPlayer.pause();\r\n                playIcon.className = 'fas fa-play';\r\n            }\r\n        }\r\n\r\n        function toggleMute() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n\r\n            if (isMuted) {\r\n                \/\/ Unmute and restore previous volume\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n                videoPlayer.volume = currentVolume;\r\n            } else {\r\n                \/\/ Mute but keep volume level\r\n                isMuted = true;\r\n                videoPlayer.muted = true;\r\n            }\r\n\r\n            updateVolumeIcon();\r\n            updateVolumeDisplay();\r\n        }\r\n\r\n        function updateVolumeIcon() {\r\n            const volumeIcon = document.getElementById('volumeIcon');\r\n            if (isMuted) {\r\n                volumeIcon.className = 'fas fa-volume-mute';\r\n            } else if (currentVolume > 0.5) {\r\n                volumeIcon.className = 'fas fa-volume-up';\r\n            } else if (currentVolume > 0) {\r\n                volumeIcon.className = 'fas fa-volume-down';\r\n            } else {\r\n                volumeIcon.className = 'fas fa-volume-mute';\r\n            }\r\n        }\r\n\r\n        function setVolume(event) {\r\n            const volumeSlider = event.currentTarget;\r\n            const rect = volumeSlider.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            currentVolume = Math.max(0, Math.min(1, pos));\r\n\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            videoPlayer.volume = currentVolume;\r\n\r\n            if (currentVolume === 0) {\r\n                isMuted = true;\r\n                videoPlayer.muted = true;\r\n            } else {\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n            }\r\n\r\n            updateVolumeIcon();\r\n            updateVolumeDisplay();\r\n        }\r\n\r\n        function updateVolumeDisplay() {\r\n            const volumeFill = document.getElementById('volumeFill');\r\n            const displayVolume = isMuted ? 0 : currentVolume;\r\n            volumeFill.style.width = `${displayVolume * 100}%`;\r\n        }\r\n\r\n        function updateVideoProgress() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressBar = document.getElementById('progressBar');\r\n            const progress = (videoPlayer.currentTime \/ videoPlayer.duration) * 100;\r\n            progressBar.style.width = `${progress}%`;\r\n        }\r\n\r\n        function seekVideo(event) {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressContainer = event.currentTarget;\r\n            const rect = progressContainer.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            videoPlayer.currentTime = pos * videoPlayer.duration;\r\n        }\r\n\r\n        function onVideoEnd() {\r\n            const playIcon = document.getElementById('playIcon');\r\n            playIcon.className = 'fas fa-play';\r\n        }\r\n\r\n        function toggleFullscreen() {\r\n            const modal = document.getElementById('videoModal');\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n\r\n            if (!isFullscreen) {\r\n                if (modal.requestFullscreen) {\r\n                    modal.requestFullscreen();\r\n                } else if (modal.webkitRequestFullscreen) {\r\n                    modal.webkitRequestFullscreen();\r\n                } else if (modal.msRequestFullscreen) {\r\n                    modal.msRequestFullscreen();\r\n                }\r\n                isFullscreen = true;\r\n                fullscreenIcon.className = 'fas fa-compress';\r\n            } else {\r\n                exitFullscreen();\r\n            }\r\n        }\r\n\r\n        function exitFullscreen() {\r\n            if (document.exitFullscreen) {\r\n                document.exitFullscreen();\r\n            } else if (document.webkitExitFullscreen) {\r\n                document.webkitExitFullscreen();\r\n            } else if (document.msExitFullscreen) {\r\n                document.msExitFullscreen();\r\n            }\r\n            isFullscreen = false;\r\n            document.getElementById('fullscreenIcon').className = 'fas fa-expand';\r\n        }\r\n\r\n        function showLoading() {\r\n            document.getElementById('loading').style.display = 'flex';\r\n        }\r\n\r\n        function hideLoading() {\r\n            document.getElementById('loading').style.display = 'none';\r\n        }\r\n\r\n        function showError(message) {\r\n            const errorDiv = document.getElementById('errorMessage');\r\n            const errorText = document.getElementById('errorText');\r\n            errorText.textContent = message;\r\n            errorDiv.style.display = 'flex';\r\n        }\r\n\r\n        function hideError() {\r\n            document.getElementById('errorMessage').style.display = 'none';\r\n        }\r\n\r\n        function formatNumber(num) {\r\n            if (num >= 1000000) {\r\n                return (num \/ 1000000).toFixed(1) + 'M';\r\n            }\r\n            if (num >= 1000) {\r\n                return (num \/ 1000).toFixed(1) + 'K';\r\n            }\r\n            return num.toString();\r\n        }\r\n\r\n        \/\/ Event Listeners\r\n        document.getElementById('usernameInput').addEventListener('keypress', (e) => {\r\n            if (e.key === 'Enter' && !isProcessing) {\r\n                searchProfile();\r\n            }\r\n        });\r\n\r\n        \/\/ Close modals when clicking outside\r\n        document.getElementById('videoModal').addEventListener('click', (e) => {\r\n            if (e.target === document.getElementById('videoModal')) {\r\n                closeVideoModal();\r\n            }\r\n        });\r\n\r\n        document.getElementById('profileModal').addEventListener('click', (e) => {\r\n            if (e.target === document.getElementById('profileModal')) {\r\n                closeProfileModal();\r\n            }\r\n        });\r\n\r\n        \/\/ Handle fullscreen change events\r\n        document.addEventListener('fullscreenchange', () => {\r\n            isFullscreen = !!document.fullscreenElement;\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n            fullscreenIcon.className = isFullscreen ? 'fas fa-compress' : 'fas fa-expand';\r\n        });\r\n\r\n        document.addEventListener('webkitfullscreenchange', () => {\r\n            isFullscreen = !!document.webkitFullscreenElement;\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n            fullscreenIcon.className = isFullscreen ? 'fas fa-compress' : 'fas fa-expand';\r\n        });\r\n\r\n        \/\/ Keyboard shortcuts\r\n        document.addEventListener('keydown', (e) => {\r\n            if (document.getElementById('videoModal').style.display === 'block') {\r\n                switch (e.key) {\r\n                    case ' ':\r\n                        e.preventDefault();\r\n                        togglePlay();\r\n                        break;\r\n                    case 'Escape':\r\n                        closeVideoModal();\r\n                        break;\r\n                    case 'f':\r\n                    case 'F':\r\n                        toggleFullscreen();\r\n                        break;\r\n                    case 'm':\r\n                    case 'M':\r\n                        toggleMute();\r\n                        break;\r\n                }\r\n            }\r\n\r\n            if (document.getElementById('profileModal').style.display === 'block') {\r\n                if (e.key === 'Escape') {\r\n                    closeProfileModal();\r\n                }\r\n            }\r\n        });\r\n    <\/script>\r\n    <!-- Vvveb Common Js -->\r\n    <script id=\"popper-js\" src=\"..\/js\/popper.min.js\"><\/script>\r\n    <!-- <script src=\"\/js\/bootstrap.min.js\"><\/script> -->\r\n    <!-- <script src=\"\/js\/bootstrap.bundle.min.js\"><\/script> -->\r\n    <script id=\"bootstrap-js\" src=\"..\/js\/bootstrap.min.js\"><\/script>\r\n    <!-- Vvveb Ajax Common Js -->\r\n    <script id=\"app-js\" src=\"..\/js\/app.js\"><\/script>\r\n\r\n    <!-- AOS CSS is in head; load AOS JS from CDN before init so sections are not stuck at opacity 0 -->\r\n    <noscript>\r\n        <style type=\"text\/css\">\r\n            [data-aos] {\r\n                opacity: 1 !important;\r\n                transform: translate(0) scale(1) !important;\r\n            }\r\n        <\/style>\r\n    <\/noscript>\r\n\r\n    <!-- Scripts -->\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/js\/bootstrap.bundle.min.js\"><\/script>\r\n    <script src=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.js\"><\/script>\r\n\r\n    <script>\r\n        if (typeof AOS !== 'undefined') {\r\n            AOS.init({\r\n                duration: 800,\r\n                easing: 'ease-in-out',\r\n                once: true\r\n            });\r\n        } else {\r\n            document.documentElement.classList.add('aos-fallback');\r\n        }\r\n\r\n        document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\r\n            anchor.addEventListener('click', function (e) {\r\n                const id = this.getAttribute('href');\r\n                if (!id || id === '#') return;\r\n                const target = document.querySelector(id);\r\n                if (!target) return;\r\n                e.preventDefault();\r\n                target.scrollIntoView({ behavior: 'smooth' });\r\n            });\r\n        });\r\n    <\/script>\r\n    <script src=\"..\/js\/theme.js\"><\/script>\r\n\r\n    <grammarly-desktop-integration data-grammarly-shadow-root=\"true\"><\/grammarly-desktop-integration><grammarly-desktop-integration data-grammarly-shadow-root=\"true\"><\/grammarly-desktop-integration>\r\n<script defer=\"\" src=\"https:\/\/static.cloudflareinsights.com\/beacon.min.js\/vcd15cbe7772f49c399c6a5babf22c1241717689176015\" integrity=\"sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==\" data-cf-beacon=\"{\"version\":\"2024.11.0\",\"token\":\"786b797d7952407aac48ed2776a3a826\",\"r\":1,\"server_timing\":{\"name\":{\"cfCacheStatus\":true,\"cfEdge\":true,\"cfExtPri\":true,\"cfL4\":true,\"cfOrigin\":true,\"cfSpeedBrain\":true},\"location_startswith\":null}}\" crossorigin=\"anonymous\"><\/script>\r\n<script defer=\"\" src=\"https:\/\/static.cloudflareinsights.com\/beacon.min.js\/v8c78df7c7c0f484497ecbca7046644da1771523124516\" integrity=\"sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==\" data-cf-beacon=\"{\"version\":\"2024.11.0\",\"token\":\"786b797d7952407aac48ed2776a3a826\",\"r\":1,\"server_timing\":{\"name\":{\"cfCacheStatus\":true,\"cfEdge\":true,\"cfExtPri\":true,\"cfL4\":true,\"cfOrigin\":true,\"cfSpeedBrain\":true},\"location_startswith\":null}}\" crossorigin=\"anonymous\"><\/script>\r\n[\/et_pb_fullwidth_code][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"    <link rel=\"canonical\" href=\"\">\r\n\r\n   \r\n    \r\n    <!-- Google Fonts - Premium Typography -->\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Space+Grotesk:wght@300;400;500;600;700&family=Manrope:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n    \r\n    <!-- Bootstrap CSS -->\r\n    <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\r\n    <!-- Boxicons -->\r\n    <link href=\"https:\/\/unpkg.com\/boxicons@2.1.4\/css\/boxicons.min.css\" rel=\"stylesheet\">\r\n    <!-- AOS Animation -->\r\n    <link href=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.css\" rel=\"stylesheet\">\r\n    <!-- Font Awesome CSS -->\r\n        <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.3\/css\/all.min.css\" rel=\"stylesheet\">\r\n\r\n\r\n    <style id=\"vvvebjs-styles\">\r\n        html {\r\n            overflow-x: hidden;\r\n        }\r\n\r\n        :root {\r\n            --tprv-primary-color: #8A67FF;\r\n            --tprv-secondary-color: #6B4FE0;\r\n            --tprv-dark-color: #000000;\r\n            --tprv-light-color: #FFFFFF;\r\n            --tprv-gray-color: #F1F1F2;\r\n            --tprv-primary-hover: #7E5EFF;\r\n            --tprv-secondary-hover: #5a3fd4;\r\n            --tprv-section-padding: 100px 0;\r\n        }\r\n\r\n        body {\r\n            font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n            scroll-behavior: smooth;\r\n            overflow-x: hidden;\r\n            background-color: var(--tprv-light-color);\r\n            color: var(--tprv-dark-color);\r\n        }\r\n\r\n        h1,\r\n        h2,\r\n        h3,\r\n        h4,\r\n        h5,\r\n        h6 {\r\n            font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif;\r\n            font-weight: bold;\r\n        }\r\n\r\n\r\n        \/* TikTok-style Hero Section *\/\r\n        .tprv-hero-section {\r\n            padding: var(--tprv-section-padding);\r\n            text-align: center;\r\n            background-color: var(--tprv-light-color);\r\n        }\r\n\r\n        .tprv-hero-content {\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        .tprv-hero-section h1 {\r\n            font-size: 3.5rem;\r\n            font-weight: 700;\r\n            margin-bottom: 1.5rem;\r\n            color: var(--tprv-primary-color);\r\n        }\r\n\r\n        .tprv-hero-section p {\r\n            font-size: 1.25rem;\r\n            max-width: 700px;\r\n            margin: 0 auto 2rem;\r\n            opacity: 0.9;\r\n            font-weight: 300;\r\n            color: #666;\r\n        }\r\n\r\n        \/* Work Process Section with TikTok Colors *\/\r\n        .tprv-work-process-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            position: relative;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .tprv-work-process-section::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.05);\r\n        }\r\n\r\n        .tprv-work-process-content {\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        .tprv-process-step {\r\n            text-align: center;\r\n            padding: 30px 20px;\r\n            position: relative;\r\n            z-index: 1;\r\n            background: rgba(255, 255, 255, 0.1);\r\n            backdrop-filter: blur(10px);\r\n            border-radius: 16px;\r\n            margin: 15px;\r\n            border: 1px solid rgba(255, 255, 255, 0.2);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-process-step:hover {\r\n            transform: translateY(-10px);\r\n            background: rgba(255, 255, 255, 0.15);\r\n            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);\r\n        }\r\n\r\n        .tprv-step-number {\r\n            width: 60px;\r\n            height: 60px;\r\n            background: white;\r\n            color: var(--tprv-primary-color);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            font-weight: 700;\r\n            margin: 0 auto 20px;\r\n            font-size: 1.5rem;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        \/* Features Section *\/\r\n        .tprv-features-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: white;\r\n        }\r\n\r\n        .tprv-feature-card {\r\n            padding: 40px 30px;\r\n            border-radius: 16px;\r\n            background: white;\r\n            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);\r\n            margin-bottom: 30px;\r\n            transition: all 0.3s ease;\r\n            border: 1px solid rgba(0, 0, 0, 0.05);\r\n            height: 100%;\r\n            position: relative;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .tprv-feature-card::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            width: 4px;\r\n            height: 100%;\r\n            background: var(--tprv-primary-color);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-feature-card:hover {\r\n            transform: translateY(-10px);\r\n            box-shadow: 0 15px 40px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        .tprv-feature-card:hover::before {\r\n            width: 100%;\r\n            opacity: 0.1;\r\n        }\r\n\r\n        .tprv-feature-icon {\r\n            width: 70px;\r\n            height: 70px;\r\n            border-radius: 20px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            margin-bottom: 25px;\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            font-size: 1.8rem;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-feature-card:hover .tprv-feature-icon {\r\n            transform: rotate(15deg) scale(1.1);\r\n            background: var(--tprv-primary-hover);\r\n        }\r\n\r\n        \/* Why Choose Section *\/\r\n        .tprv-why-choose-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: #f9f9f9;\r\n        }\r\n\r\n        .tprv-why-choose-image {\r\n            border-radius: 16px;\r\n            overflow: hidden;\r\n            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);\r\n            transform: perspective(1000px) rotateY(-5deg);\r\n            transition: all 0.5s ease;\r\n        }\r\n\r\n        .tprv-why-choose-image:hover {\r\n            transform: perspective(1000px) rotateY(0deg);\r\n        }\r\n\r\n        .tprv-benefit-item {\r\n            display: flex;\r\n            align-items: flex-start;\r\n            margin-bottom: 20px;\r\n            padding: 15px;\r\n            border-radius: 12px;\r\n            background: white;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.03);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .tprv-benefit-item:hover {\r\n            transform: translateX(10px);\r\n            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);\r\n        }\r\n\r\n        .tprv-benefit-icon {\r\n            width: 40px;\r\n            height: 40px;\r\n            border-radius: 12px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            margin-right: 15px;\r\n            background: var(--tprv-primary-color);\r\n            color: white;\r\n            font-size: 1.2rem;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        \/* FAQ Section *\/\r\n        .tprv-faq-section {\r\n            padding: var(--tprv-section-padding);\r\n            background: white;\r\n        }\r\n\r\n        .tprv-accordion-item {\r\n            border: none;\r\n            border-radius: 12px !important;\r\n            overflow: hidden;\r\n            margin-bottom: 15px;\r\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);\r\n        }\r\n\r\n        .tprv-accordion-button {\r\n            font-weight: 600;\r\n            color: var(--tprv-dark-color);\r\n            padding: 20px 25px;\r\n            background: white;\r\n            box-shadow: none;\r\n            border-radius: 12px 12px 0 0 !important;\r\n        }\r\n\r\n        .tprv-accordion-button:not(.collapsed) {\r\n            background: white;\r\n            color: var(--tprv-primary-color);\r\n            box-shadow: none;\r\n        }\r\n\r\n        .tprv-accordion-button:focus {\r\n            box-shadow: none;\r\n            border-color: rgba(138, 103, 255, 0.35);\r\n        }\r\n\r\n        .tprv-accordion-button::after {\r\n            background-image: url(\"data:image\/svg+xml,%3csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 16 16' fill='%238A67FF'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'\/%3e%3c\/svg%3e\");\r\n        }\r\n\r\n        .tprv-accordion-body {\r\n            padding: 25px;\r\n            color: #666;\r\n        }\r\n\r\n        \/* Section Titles *\/\r\n        .tprv-section-title {\r\n            font-weight: 700;\r\n            color: var(--tprv-dark-color);\r\n            margin-bottom: 1.5rem;\r\n            position: relative;\r\n            display: inline-block;\r\n        }\r\n\r\n        .tprv-section-title::after {\r\n            content: '';\r\n            position: absolute;\r\n            bottom: -10px;\r\n            left: 0;\r\n            width: 60px;\r\n            height: 4px;\r\n            background: var(--tprv-primary-color);\r\n            border-radius: 2px;\r\n        }\r\n\r\n        .tprv-light-title {\r\n            color: white;\r\n        }\r\n\r\n        .tprv-light-title::after {\r\n            background: white;\r\n        }\r\n\r\n        .tprv-section-subtitle {\r\n            color: #666;\r\n            max-width: 700px;\r\n            margin: 0 auto 3rem;\r\n            font-size: 1.1rem;\r\n        }\r\n\r\n        .tprv-light-subtitle {\r\n            color: rgba(255, 255, 255, 0.8);\r\n        }\r\n\r\n        \/* Responsive Design *\/\r\n        @media (max-width: 991px) {\r\n            :root {\r\n                --tprv-section-padding: 80px 0;\r\n            }\r\n\r\n            .tprv-hero-section h1 {\r\n                font-size: 2.8rem;\r\n            }\r\n\r\n            .tprv-process-step::before {\r\n                display: none;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 767px) {\r\n            :root {\r\n                --tprv-section-padding: 70px 0;\r\n            }\r\n\r\n            .tprv-hero-section {\r\n                padding: 100px 0 60px;\r\n            }\r\n\r\n            .tprv-hero-section h1 {\r\n                font-size: 2.2rem;\r\n            }\r\n\r\n            .tprv-hero-section p {\r\n                font-size: 1rem;\r\n            }\r\n\r\n            .tprv-section-title {\r\n                font-size: 1.8rem;\r\n            }\r\n        }\r\n\r\n        \/* Animation *\/\r\n        @keyframes tprv-float {\r\n            0% {\r\n                transform: translateY(0px);\r\n            }\r\n\r\n            50% {\r\n                transform: translateY(-15px);\r\n            }\r\n\r\n            100% {\r\n                transform: translateY(0px);\r\n            }\r\n        }\r\n\r\n        .tprv-floating-element {\r\n            animation: tprv-float 6s ease-in-out infinite;\r\n        }\r\n\r\n        \/* Custom Scrollbar *\/\r\n        ::-webkit-scrollbar {\r\n            width: 8px;\r\n        }\r\n\r\n        ::-webkit-scrollbar-track {\r\n            background: #f1f1f1;\r\n        }\r\n\r\n        ::-webkit-scrollbar-thumb {\r\n            background: var(--tprv-primary-color);\r\n            border-radius: 10px;\r\n        }\r\n\r\n        ::-webkit-scrollbar-thumb:hover {\r\n            background: var(--tprv-primary-hover);\r\n        }\r\n\r\n    <\/style>\r\n    <!-- tools -->\r\n    <style>\r\n        :root {\r\n            --va-purple: #8A67FF;\r\n            --va-black: #000000;\r\n            --primary-gradient: linear-gradient(135deg, #8A67FF 0%, #6B4FE0 100%);\r\n            --secondary-gradient: linear-gradient(135deg, #9B7AFF 0%, #8A67FF 100%);\r\n            --accent-gradient: linear-gradient(135deg, #8A67FF 0%, #5a3fd4 100%);\r\n            --card-gradient: linear-gradient(135deg, #8A67FF 0%, #6B4FE0 100%);\r\n            --stats-gradient-1: linear-gradient(135deg, #2D1B69 0%, #8A67FF 100%);\r\n            --stats-gradient-2: linear-gradient(135deg, #8E2DE2 0%, #8A67FF 100%);\r\n            --stats-gradient-3: linear-gradient(135deg, #667eea 0%, #8A67FF 100%);\r\n            --stats-gradient-4: linear-gradient(135deg, #b8a0ff 0%, #8A67FF 100%);\r\n            --glass-bg: rgba(255, 255, 255, 0.92);\r\n            --glass-border: rgba(138, 103, 255, 0.25);\r\n            --text-primary: #000000;\r\n            --text-secondary: #333333;\r\n            --text-muted: #555555;\r\n            --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);\r\n            --shadow-md: 0 4px 16px rgba(138, 103, 255, 0.12);\r\n            --shadow-lg: 0 8px 32px rgba(138, 103, 255, 0.18);\r\n            --shadow-xl: 0 25px 50px rgba(0, 0, 0, 0.12);\r\n            --shadow-neon: 0 0 20px rgba(138, 103, 255, 0.35);\r\n        }\r\n\r\n        html.aos-fallback [data-aos] {\r\n            opacity: 1 !important;\r\n            transform: none !important;\r\n            transition: none !important;\r\n        }\r\n\r\n        .custom-tools-section {\r\n            background: #ffffff;\r\n            background: linear-gradient(165deg, #faf9ff 0%, #ffffff 40%, #f3efff 100%);\r\n            color: var(--text-primary);\r\n            line-height: 1.6;\r\n            position: relative;\r\n            overflow-x: hidden;\r\n            padding: 80px 0;\r\n        }\r\n\r\n        .custom-tools-section::before {\r\n            content: '';\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background:\r\n                radial-gradient(circle at 20% 30%, rgba(138, 103, 255, 0.12) 0%, transparent 50%),\r\n                radial-gradient(circle at 80% 70%, rgba(138, 103, 255, 0.08) 0%, transparent 50%);\r\n            pointer-events: none;\r\n            z-index: -1;\r\n        }\r\n\r\n        .tpv-custom-container {\r\n            max-width: 1400px;\r\n            margin: 0 auto;\r\n            padding: 32px 16px;\r\n            position: relative;\r\n            z-index: 1;\r\n        }\r\n\r\n        \/* Header Styles *\/\r\n        .header {\r\n            text-align: center;\r\n            margin-bottom: 48px;\r\n            animation: fadeInDown 1s ease-out;\r\n        }\r\n\r\n        .logo-container {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 24px;\r\n            margin-bottom: 24px;\r\n        }\r\n\r\n      .logo-icon {\r\n\twidth: 80px;\r\n\theight: 80px;\r\n\tbackground: var(--va-purple);\r\n\tborder-radius: 20px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tfont-size: 36px;\r\n\tfont-weight: 900;\r\n\tcolor: #ffffff;\r\n\tbox-shadow: var(--shadow-xl), var(--shadow-neon);\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\tanimation: pulse 2s ease-in-out infinite;\r\n}\r\n\r\n      .logo-text {\r\n\tfont-size: clamp(32px, 6vw, 60px);\r\n\tfont-weight: 900;\r\n\tfont-family: 'Space Grotesk', 'Inter', sans-serif;\r\n\tcolor: var(--va-black);\r\n\t-webkit-text-fill-color: var(--va-black);\r\n\tbackground: none;\r\n\t-webkit-background-clip: unset;\r\n\tbackground-clip: unset;\r\n\tletter-spacing: -2px;\r\n}\r\n\r\n      .logo-text .logo-accent {\r\n\tcolor: var(--va-purple);\r\n\t-webkit-text-fill-color: var(--va-purple);\r\n}\r\n\r\n        \/* Search Section *\/\r\n        .search-section {\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border: 1px solid var(--glass-border);\r\n            padding: clamp(24px, 5vw, 48px);\r\n            border-radius: 24px;\r\n            box-shadow: var(--shadow-xl);\r\n            margin-bottom: 32px;\r\n            animation: fadeInUp 1s ease-out 0.2s both;\r\n        }\r\n\r\n        .input-container {\r\n            position: relative;\r\n            margin-bottom: 20px;\r\n        }\r\n\r\n        .search-input {\r\n            width: 100% !important;\r\n            padding: clamp(16px, 3vw, 20px) clamp(20px, 4vw, 24px) !important;\r\n            border: 2px solid rgba(138, 103, 255, 0.35) !important;\r\n            border-radius: 16px !important;\r\n            font-size: clamp(14px, 2.5vw, 16px) !important;\r\n            font-weight: 500 !important;\r\n            background: #ffffff !important;\r\n            color: var(--text-primary) !important;\r\n            transition: all 0.3s ease !important;\r\n        }\r\n\r\n        .search-input:focus {\r\n            outline: none !important;\r\n            border-color: var(--va-purple) !important;\r\n            box-shadow: 0 0 0 4px rgba(138, 103, 255, 0.2) !important;\r\n        }\r\n\r\n        .search-input::placeholder {\r\n            color: rgba(0, 0, 0, 0.45) !important;\r\n        }\r\n\r\n        .paste-hint {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: flex-end;\r\n            gap: 8px;\r\n            margin-top: 8px;\r\n            font-size: 13px;\r\n            color: var(--text-muted);\r\n        }\r\n\r\n        .paste-icon {\r\n            cursor: pointer;\r\n            padding: 6px;\r\n            border-radius: 6px;\r\n            transition: all 0.3s ease;\r\n            font-size: 16px;\r\n        }\r\n\r\n        .paste-icon:hover {\r\n            background: rgba(255, 255, 255, 0.1);\r\n            color: var(--text-primary);\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .search-box {\r\n            display: flex;\r\n            gap: 16px;\r\n            margin-bottom: 20px;\r\n            flex-wrap: wrap;\r\n        }\r\n\r\n     .search-button {\r\n\tflex: 1;\r\n\tmin-width: 200px;\r\n\tpadding: clamp(16px, 3vw, 20px) clamp(24px, 5vw, 32px);\r\n\tbackground: var(--va-purple);\r\n\tcolor: #ffffff;\r\n\tborder: none;\r\n\tborder-radius: 16px;\r\n\tfont-size: clamp(14px, 2.5vw, 16px);\r\n\tfont-weight: 700;\r\n\tcursor: pointer;\r\n\ttransition: all 0.3s ease;\r\n\tposition: relative;\r\n\toverflow: hidden;\r\n\tbox-shadow: var(--shadow-lg), var(--shadow-neon);\r\n}\r\n\r\n        .search-button::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: -100%;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\r\n            transition: left 0.5s;\r\n        }\r\n\r\n        .search-button:hover:not(:disabled)::before {\r\n            left: 100%;\r\n        }\r\n\r\n        .search-button:hover:not(:disabled) {\r\n            transform: translateY(-3px);\r\n            box-shadow: var(--shadow-xl), 0 0 30px rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        .search-button:disabled {\r\n            opacity: 0.6;\r\n            cursor: not-allowed;\r\n            transform: none;\r\n        }\r\n\r\n        .search-again-btn {\r\n            background: var(--secondary-gradient);\r\n            color: white;\r\n            margin-top: 16px;\r\n            width: 100%;\r\n            padding: 16px;\r\n            border: none;\r\n            border-radius: 16px;\r\n            font-weight: 700;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .search-again-btn:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        \/* Profile Section *\/\r\n        .profile-section {\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: 24px;\r\n            padding: 32px;\r\n            margin-bottom: 32px;\r\n            animation: fadeInUp 0.8s ease-out;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .profile-header {\r\n            display: flex;\r\n            gap: 24px;\r\n            margin-bottom: 32px;\r\n        }\r\n\r\n        .profile-avatar-container {\r\n            position: relative;\r\n        }\r\n\r\n        .profile-avatar {\r\n            width: 120px;\r\n            height: 120px;\r\n            border-radius: 50%;\r\n            object-fit: cover;\r\n            border: 4px solid transparent;\r\n            background: var(--primary-gradient);\r\n            padding: 2px;\r\n            box-shadow: var(--shadow-lg);\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .profile-avatar:hover {\r\n            transform: scale(1.05);\r\n            box-shadow: var(--shadow-xl), var(--shadow-neon);\r\n        }\r\n\r\n        .fullscreen-icon {\r\n            position: absolute;\r\n            bottom: 5px;\r\n            right: 5px;\r\n            width: 24px;\r\n            height: 24px;\r\n            background: var(--primary-gradient);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            color: white;\r\n            font-size: 10px;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n        }\r\n\r\n        .fullscreen-icon:hover {\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .profile-info {\r\n            flex: 1;\r\n        }\r\n\r\n        .profile-name {\r\n            font-size: 32px;\r\n            font-weight: 800;\r\n            margin-bottom: 8px;\r\n            color: var(--va-black);\r\n            -webkit-text-fill-color: var(--va-black);\r\n        }\r\n\r\n        .profile-bio {\r\n            color: var(--text-secondary);\r\n            line-height: 1.5;\r\n            white-space: pre-wrap;\r\n            word-break: break-word;\r\n        }\r\n\r\n        .profile-username {\r\n            font-size: 18px;\r\n            color: var(--text-secondary);\r\n            margin-bottom: 16px;\r\n        }\r\n\r\n        \/* Enhanced Stats Section - Darker Theme *\/\r\n        .profile-stats {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n            gap: 20px;\r\n            padding: 0;\r\n            background: transparent;\r\n            border-radius: 0;\r\n            backdrop-filter: none;\r\n        }\r\n\r\n        .stat-item {\r\n            text-align: center;\r\n            padding: 24px 20px;\r\n            border-radius: 16px;\r\n            transition: all 0.3s ease;\r\n            position: relative;\r\n            overflow: hidden;\r\n            border: 1px solid rgba(255, 255, 255, 0.1);\r\n            backdrop-filter: blur(20px);\r\n        }\r\n\r\n        .stat-item:nth-child(1) {\r\n            background: var(--stats-gradient-1);\r\n            box-shadow: 0 8px 32px rgba(45, 27, 105, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(2) {\r\n            background: var(--stats-gradient-2);\r\n            box-shadow: 0 8px 32px rgba(142, 45, 226, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(3) {\r\n            background: var(--stats-gradient-3);\r\n            box-shadow: 0 8px 32px rgba(102, 126, 234, 0.4);\r\n        }\r\n\r\n        .stat-item:nth-child(4) {\r\n            background: var(--stats-gradient-4);\r\n            box-shadow: 0 8px 32px rgba(240, 147, 251, 0.4);\r\n        }\r\n\r\n        .stat-item::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 50%, rgba(255, 255, 255, 0.05) 100%);\r\n            opacity: 0;\r\n            transition: opacity 0.3s ease;\r\n        }\r\n\r\n        .stat-item:hover::before {\r\n            opacity: 1;\r\n        }\r\n\r\n        .stat-item:hover {\r\n            transform: translateY(-8px) scale(1.02);\r\n            box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4);\r\n        }\r\n\r\n        .stat-value {\r\n            font-size: 28px;\r\n            font-weight: 800;\r\n            margin-bottom: 8px;\r\n            color: #ffffff;\r\n            text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\r\n        }\r\n\r\n        .stat-label {\r\n            font-size: 14px;\r\n            color: rgba(255, 255, 255, 0.9);\r\n            font-weight: 600;\r\n            text-transform: capitalize;\r\n            letter-spacing: 0.5px;\r\n        }\r\n\r\n        \/* Videos Section Header *\/\r\n        .videos-section-header {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n            margin-bottom: 24px;\r\n            padding: 20px 0;\r\n        }\r\n\r\n        .videos-button {\r\n            padding: 16px 32px;\r\n            background: var(--primary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 16px;\r\n            font-weight: 700;\r\n            font-size: 16px;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-md);\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .videos-button:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .videos-count {\r\n            font-size: 16px;\r\n            font-weight: 600;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        .download-all-btn {\r\n            padding: 12px 24px;\r\n            background: var(--secondary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            box-shadow: var(--shadow-md);\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n            margin-left: 16px;\r\n        }\r\n\r\n        .download-all-btn:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .download-all-btn:disabled {\r\n            opacity: 0.6;\r\n            cursor: not-allowed;\r\n            transform: none;\r\n        }\r\n\r\n        \/* Video Grid - Enhanced with Gradients *\/\r\n        .video-grid {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n            gap: 24px;\r\n        }\r\n\r\n        .video-card {\r\n            background: linear-gradient(135deg,\r\n                    rgba(255, 0, 80, 0.1) 0%,\r\n                    rgba(0, 242, 234, 0.1) 50%,\r\n                    rgba(105, 201, 208, 0.1) 100%);\r\n            border-radius: 20px;\r\n            overflow: hidden;\r\n            transition: all 0.3s ease;\r\n            position: relative;\r\n            backdrop-filter: blur(20px);\r\n            border: 1px solid rgba(255, 255, 255, 0.2);\r\n            box-shadow:\r\n                var(--shadow-lg),\r\n                0 0 20px rgba(255, 0, 80, 0.1),\r\n                inset 0 1px 0 rgba(255, 255, 255, 0.1);\r\n            cursor: pointer;\r\n            height: 480px;\r\n        }\r\n\r\n        .video-card:hover {\r\n            transform: translateY(-15px) scale(1.02);\r\n            box-shadow:\r\n                var(--shadow-xl),\r\n                0 0 40px rgba(255, 0, 80, 0.3),\r\n                0 0 60px rgba(0, 242, 234, 0.2),\r\n                inset 0 1px 0 rgba(255, 255, 255, 0.2);\r\n            border-color: rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        .video-card::before {\r\n            content: '';\r\n            position: absolute;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            background: linear-gradient(135deg,\r\n                    rgba(255, 0, 80, 0.05) 0%,\r\n                    transparent 50%,\r\n                    rgba(0, 242, 234, 0.05) 100%);\r\n            opacity: 0;\r\n            transition: opacity 0.3s ease;\r\n            pointer-events: none;\r\n            z-index: 1;\r\n        }\r\n\r\n        .video-card:hover::before {\r\n            opacity: 1;\r\n        }\r\n\r\n        .video-thumbnail-container {\r\n            position: relative;\r\n            width: 100%;\r\n            height: 320px;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .video-thumbnail {\r\n            width: 100%;\r\n            height: 100%;\r\n            object-fit: cover;\r\n            transition: transform 0.3s ease;\r\n        }\r\n\r\n        .video-card:hover .video-thumbnail {\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        \/* Fixed Play Icon - Visible Triangle *\/\r\n        .play-overlay {\r\n            position: absolute;\r\n            top: 50%;\r\n            left: 50%;\r\n            transform: translate(-50%, -50%);\r\n            width: 64px;\r\n            height: 64px;\r\n            background: rgba(255, 0, 80, 0.9);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            transition: all 0.3s ease;\r\n            z-index: 2;\r\n            box-shadow: 0 8px 25px rgba(255, 0, 80, 0.4);\r\n            border: 2px solid rgba(255, 255, 255, 0.3);\r\n        }\r\n\r\n        .play-overlay::after {\r\n            content: '';\r\n            width: 0;\r\n            height: 0;\r\n            border-left: 16px solid white;\r\n            border-top: 12px solid transparent;\r\n            border-bottom: 12px solid transparent;\r\n            margin-left: 4px;\r\n        }\r\n\r\n        .video-card:hover .play-overlay {\r\n            transform: translate(-50%, -50%) scale(1.2);\r\n            background: rgba(255, 0, 80, 1);\r\n            box-shadow: 0 12px 35px rgba(255, 0, 80, 0.6);\r\n        }\r\n\r\n        \/* Always Visible Download Button *\/\r\n        .video-download-btn {\r\n            position: absolute;\r\n            top: 12px;\r\n            right: 12px;\r\n            width: 40px;\r\n            height: 40px;\r\n            background: rgba(0, 0, 0, 0.8);\r\n            backdrop-filter: blur(10px);\r\n            border-radius: 50%;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            color: white;\r\n            font-size: 16px;\r\n            transition: all 0.3s ease;\r\n            opacity: 1;\r\n            cursor: pointer;\r\n            z-index: 10;\r\n            border: 2px solid rgba(255, 255, 255, 0.2);\r\n        }\r\n\r\n        .video-download-btn:hover {\r\n            background: var(--primary-gradient);\r\n            transform: scale(1.1);\r\n            border-color: rgba(255, 255, 255, 0.5);\r\n        }\r\n\r\n        \/* Video Info - Below Thumbnail *\/\r\n        .video-info {\r\n            padding: 20px;\r\n            background: rgba(0, 0, 0, 0.3);\r\n            backdrop-filter: blur(10px);\r\n            height: 160px;\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: space-between;\r\n        }\r\n\r\n        .video-title {\r\n            font-size: 14px;\r\n            font-weight: 600;\r\n            margin-bottom: 12px;\r\n            display: -webkit-box;\r\n            -webkit-line-clamp: 3;\r\n            -webkit-box-orient: vertical;\r\n            overflow: hidden;\r\n            color: #ffffff;\r\n            line-height: 1.4;\r\n        }\r\n\r\n        .video-stats {\r\n            display: grid;\r\n            grid-template-columns: repeat(3, 1fr);\r\n            gap: 8px;\r\n            font-size: 12px;\r\n            color: rgba(255, 255, 255, 0.88);\r\n        }\r\n\r\n        .stat {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            gap: 4px;\r\n            padding: 8px;\r\n            background: rgba(255, 255, 255, 0.05);\r\n            border-radius: 8px;\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .stat:hover {\r\n            background: rgba(138, 103, 255, 0.25);\r\n            color: #ffffff;\r\n        }\r\n\r\n        \/* Video Modal - Enhanced *\/\r\n        .modal {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.95);\r\n            backdrop-filter: blur(20px);\r\n            z-index: 1000;\r\n            display: none;\r\n            animation: fadeIn 0.3s ease-out;\r\n            padding: 20px;\r\n        }\r\n\r\n        .modal-content {\r\n            position: relative;\r\n            \/* Make this parent for absolute positioning *\/\r\n            width: 100%;\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            align-items: center;\r\n            max-width: 500px;\r\n            margin: 0 auto;\r\n        }\r\n\r\n        .modal-title {\r\n            color: white;\r\n            font-size: 18px;\r\n            font-weight: 600;\r\n            margin-bottom: 16px;\r\n            text-align: center;\r\n            padding: 0 20px;\r\n            display: -webkit-box;\r\n            -webkit-line-clamp: 2;\r\n            -webkit-box-orient: vertical;\r\n            overflow: hidden;\r\n            line-height: 1.4;\r\n        }\r\n\r\n        .video-player-container {\r\n            position: relative;\r\n            width: 100%;\r\n            aspect-ratio: 9\/16;\r\n            background: #000;\r\n            border-radius: 20px;\r\n            overflow: hidden;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .video-player {\r\n            width: 100%;\r\n            height: 100%;\r\n            object-fit: contain;\r\n        }\r\n\r\n        \/* Close Modal Button - Enhanced *\/\r\n\r\n\r\n        .close-modal {\r\n            position: absolute;\r\n            top: 10px;\r\n            right: -30px;\r\n            \/* <-- Pull more right OUTSIDE the video container *\/\r\n            width: 48px;\r\n            height: 48px;\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 2px solid rgba(255, 0, 80, 0.5);\r\n            border-radius: 50%;\r\n            color: white;\r\n            font-size: 24px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n            z-index: 20;\r\n            box-shadow: 0 4px 15px rgba(255, 0, 80, 0.3);\r\n        }\r\n\r\n\r\n\r\n\r\n        .close-modal:hover {\r\n            background: rgba(255, 0, 80, 0.4);\r\n            transform: rotate(90deg) scale(1.1);\r\n            border-color: rgba(255, 0, 80, 0.8);\r\n            box-shadow: 0 6px 20px rgba(255, 0, 80, 0.5);\r\n        }\r\n\r\n        \/* Video Controls *\/\r\n        .video-controls {\r\n            position: absolute;\r\n            bottom: 0;\r\n            left: 0;\r\n            right: 0;\r\n            padding: 20px;\r\n            background: linear-gradient(transparent, rgba(0, 0, 0, 0.9));\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 16px;\r\n        }\r\n\r\n        .progress-container {\r\n            width: 100%;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            cursor: pointer;\r\n            position: relative;\r\n        }\r\n\r\n        .progress-bar {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            position: relative;\r\n            transition: width 0.1s linear;\r\n        }\r\n\r\n        .control-buttons {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n        }\r\n\r\n        .control-group {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 12px;\r\n        }\r\n\r\n        .control-button {\r\n            width: 44px;\r\n            height: 44px;\r\n            border: none;\r\n            border-radius: 50%;\r\n            background: var(--glass-bg);\r\n            color: white;\r\n            font-size: 18px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n            border: 1px solid var(--glass-border);\r\n        }\r\n\r\n        .control-button:hover {\r\n            background: rgba(255, 255, 255, 0.2);\r\n            transform: scale(1.1);\r\n        }\r\n\r\n        .play-pause {\r\n            width: 56px;\r\n            height: 56px;\r\n            background: var(--primary-gradient);\r\n            font-size: 24px;\r\n            border: none;\r\n        }\r\n\r\n        .play-pause:hover {\r\n            background: var(--secondary-gradient);\r\n        }\r\n\r\n        \/* Volume Controls *\/\r\n        .volume-controls {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .volume-slider {\r\n            width: 80px;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            position: relative;\r\n            cursor: pointer;\r\n        }\r\n\r\n        .volume-fill {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            transition: width 0.1s ease;\r\n        }\r\n\r\n        \/* Advanced Loading Animation *\/\r\n        .loading {\r\n            display: none;\r\n            justify-content: center;\r\n            align-items: center;\r\n            padding: 60px 40px;\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(30px);\r\n            border-radius: 24px;\r\n            margin: 32px 0;\r\n            border: 1px solid var(--glass-border);\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .loading-content {\r\n            text-align: center;\r\n        }\r\n\r\n        .loading-animation {\r\n            position: relative;\r\n            width: 120px;\r\n            height: 120px;\r\n            margin: 0 auto 24px;\r\n        }\r\n\r\n        .loading-ring {\r\n            position: absolute;\r\n            border: 4px solid transparent;\r\n            border-radius: 50%;\r\n            animation: spin 2s linear infinite;\r\n        }\r\n\r\n        .loading-ring:nth-child(1) {\r\n            width: 120px;\r\n            height: 120px;\r\n            border-top-color: #FF0050;\r\n            animation-duration: 2s;\r\n        }\r\n\r\n        .loading-ring:nth-child(2) {\r\n            width: 90px;\r\n            height: 90px;\r\n            top: 15px;\r\n            left: 15px;\r\n            border-right-color: #00F2EA;\r\n            animation-duration: 1.5s;\r\n            animation-direction: reverse;\r\n        }\r\n\r\n        .loading-ring:nth-child(3) {\r\n            width: 60px;\r\n            height: 60px;\r\n            top: 30px;\r\n            left: 30px;\r\n            border-bottom-color: #FF4081;\r\n            animation-duration: 1s;\r\n        }\r\n\r\n        .loading-dots {\r\n            display: flex;\r\n            justify-content: center;\r\n            gap: 8px;\r\n            margin-bottom: 16px;\r\n        }\r\n\r\n        .loading-dot {\r\n            width: 12px;\r\n            height: 12px;\r\n            background: var(--primary-gradient);\r\n            border-radius: 50%;\r\n            animation: bounce 1.4s ease-in-out infinite both;\r\n        }\r\n\r\n        .loading-dot:nth-child(1) {\r\n            animation-delay: -0.32s;\r\n        }\r\n\r\n        .loading-dot:nth-child(2) {\r\n            animation-delay: -0.16s;\r\n        }\r\n\r\n        .loading-dot:nth-child(3) {\r\n            animation-delay: 0s;\r\n        }\r\n\r\n        @keyframes bounce {\r\n\r\n            0%,\r\n            80%,\r\n            100% {\r\n                transform: scale(0);\r\n            }\r\n\r\n            40% {\r\n                transform: scale(1);\r\n            }\r\n        }\r\n\r\n        @keyframes spin {\r\n            to {\r\n                transform: rotate(360deg);\r\n            }\r\n        }\r\n\r\n        .loading-text {\r\n            font-size: 18px;\r\n            font-weight: 600;\r\n            color: var(--text-primary);\r\n            margin-bottom: 8px;\r\n        }\r\n\r\n        .loading-subtext {\r\n            font-size: 14px;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        \/* Profile Picture Modal *\/\r\n        .profile-modal {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.95);\r\n            backdrop-filter: blur(20px);\r\n            z-index: 1000;\r\n            display: none;\r\n            animation: fadeIn 0.3s ease-out;\r\n            padding: 20px;\r\n        }\r\n\r\n        .profile-modal-content {\r\n            position: relative;\r\n            width: 100%;\r\n            height: 100%;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n        }\r\n\r\n        .profile-modal-image {\r\n            max-width: 80%;\r\n            max-height: 80%;\r\n            border-radius: 20px;\r\n            box-shadow: var(--shadow-xl);\r\n        }\r\n\r\n        .profile-modal-close {\r\n            position: absolute;\r\n            top: 20px;\r\n            right: 20px;\r\n            width: 48px;\r\n            height: 48px;\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 2px solid rgba(255, 0, 80, 0.5);\r\n            border-radius: 50%;\r\n            color: white;\r\n            font-size: 24px;\r\n            cursor: pointer;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            backdrop-filter: blur(10px);\r\n            transition: all 0.3s ease;\r\n        }\r\n\r\n        .profile-modal-download {\r\n            position: absolute;\r\n            bottom: 20px;\r\n            right: 20px;\r\n            padding: 12px 24px;\r\n            background: var(--primary-gradient);\r\n            color: white;\r\n            border: none;\r\n            border-radius: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n\r\n        .profile-modal-download:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        \/* Download Progress Indicator *\/\r\n        .download-progress {\r\n            position: fixed;\r\n            bottom: 20px;\r\n            right: 20px;\r\n            background: var(--glass-bg);\r\n            backdrop-filter: blur(20px);\r\n            border: 1px solid var(--glass-border);\r\n            border-radius: 12px;\r\n            padding: 16px 20px;\r\n            color: white;\r\n            font-weight: 600;\r\n            z-index: 1001;\r\n            display: none;\r\n            align-items: center;\r\n            gap: 12px;\r\n            box-shadow: var(--shadow-lg);\r\n            min-width: 300px;\r\n        }\r\n\r\n        .download-progress.show {\r\n            display: flex;\r\n        }\r\n\r\n        .download-spinner {\r\n            width: 20px;\r\n            height: 20px;\r\n            border: 2px solid rgba(255, 255, 255, 0.3);\r\n            border-top-color: #FF0050;\r\n            border-radius: 50%;\r\n            animation: spin 1s linear infinite;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        .download-info {\r\n            flex-grow: 1;\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 4px;\r\n        }\r\n\r\n        .download-text {\r\n            font-size: 14px;\r\n            white-space: nowrap;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n        }\r\n\r\n        .download-progress-bar {\r\n            width: 100%;\r\n            height: 4px;\r\n            background: rgba(255, 255, 255, 0.2);\r\n            border-radius: 2px;\r\n            overflow: hidden;\r\n        }\r\n\r\n        .download-progress-fill {\r\n            height: 100%;\r\n            background: var(--primary-gradient);\r\n            border-radius: 2px;\r\n            width: 0%;\r\n            transition: width 0.3s ease;\r\n        }\r\n\r\n        .cancel-download-btn {\r\n            background: rgba(255, 0, 80, 0.2);\r\n            border: 1px solid rgba(255, 0, 80, 0.4);\r\n            color: white;\r\n            border-radius: 8px;\r\n            padding: 6px 12px;\r\n            font-size: 12px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.3s ease;\r\n            flex-shrink: 0;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 4px;\r\n        }\r\n\r\n        .cancel-download-btn:hover {\r\n            background: rgba(255, 0, 80, 0.4);\r\n        }\r\n\r\n        \/* Animations *\/\r\n        @keyframes fadeIn {\r\n            from {\r\n                opacity: 0;\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n            }\r\n        }\r\n\r\n        @keyframes fadeInDown {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(-30px);\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        @keyframes fadeInUp {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(30px);\r\n            }\r\n\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        @keyframes pulse {\r\n\r\n            0%,\r\n            100% {\r\n                transform: scale(1);\r\n            }\r\n\r\n            50% {\r\n                transform: scale(1.05);\r\n            }\r\n        }\r\n\r\n        \/* Error Message *\/\r\n        .error-message {\r\n            background: rgba(255, 0, 80, 0.1);\r\n            border: 1px solid rgba(255, 0, 80, 0.2);\r\n            color: #FF0050;\r\n            padding: 16px 24px;\r\n            border-radius: 12px;\r\n            margin-top: 16px;\r\n            display: none;\r\n            align-items: center;\r\n            gap: 12px;\r\n            font-weight: 500;\r\n        }\r\n\r\n        \/* Responsive Design *\/\r\n        @media (max-width: 768px) {\r\n            .profile-header {\r\n                flex-direction: column;\r\n                align-items: center;\r\n                text-align: center;\r\n            }\r\n\r\n            .profile-stats {\r\n                grid-template-columns: repeat(2, 1fr);\r\n            }\r\n\r\n            .video-grid {\r\n                grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n                gap: 16px;\r\n            }\r\n\r\n            .video-card {\r\n                height: 440px;\r\n            }\r\n\r\n            .video-thumbnail-container {\r\n                height: 280px;\r\n            }\r\n\r\n            .search-box {\r\n                flex-direction: column;\r\n            }\r\n\r\n            .search-button {\r\n                width: 100%;\r\n            }\r\n\r\n            .control-buttons {\r\n                flex-wrap: wrap;\r\n                gap: 12px;\r\n            }\r\n\r\n            .volume-controls {\r\n                order: 3;\r\n                width: 100%;\r\n                justify-content: center;\r\n            }\r\n\r\n            .close-modal {\r\n                top: -50px;\r\n                right: 10px;\r\n            }\r\n\r\n            .videos-section-header {\r\n                flex-direction: column;\r\n                gap: 12px;\r\n                align-items: flex-start;\r\n            }\r\n\r\n            .download-all-btn {\r\n                margin-left: 0;\r\n                margin-top: 8px;\r\n            }\r\n\r\n            .download-progress {\r\n                left: 20px;\r\n                right: 20px;\r\n                width: auto;\r\n            }\r\n        }\r\n\r\n        @media (max-width: 480px) {\r\n            .profile-stats {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .video-grid {\r\n                grid-template-columns: 1fr;\r\n            }\r\n        }\r\n    <\/style>\r\n<body data-aos-easing=\"ease-in-out\" data-aos-duration=\"800\" data-aos-delay=\"0\" data-new-gr-c-s-check-loaded=\"14.1249.0\" data-gr-ext-installed=\"\" data-new-gr-c-s-loaded=\"14.1223.0\" class=\"\" style=\"\">\r\n\r\n    <!-- Hero section tools -->\r\n    <section class=\"custom-tools-section\">\r\n        <div class=\"container\">\r\n            <div class=\"tpv-custom-container\">\r\n                <div class=\"header\">\r\n                    <div class=\"logo-container\">\r\n                        <div class=\"logo-icon\">\r\n                            <i class=\"fab fa-tiktok\"><\/i>\r\n                        <\/div>\r\n                        <h1 class=\"logo-text\"><span class=\"logo-accent\">T<\/span>iktok <span class=\"logo-accent\">B<\/span>io Viewer<\/h1>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"search-section\">\r\n                    <div class=\"input-container\">\r\n                        <input type=\"text\" class=\"search-input\" placeholder=\"Enter TikTok (username, @username, or profile URL)\" id=\"usernameInput\">\r\n                        <div class=\"paste-hint\">\r\n                            <span>Paste from clipboard<\/span>\r\n                            <i class=\"fas fa-paste paste-icon\" onclick=\"pasteFromClipboard()\" title=\"Paste from clipboard\"><\/i>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class=\"search-box\" id=\"searchBox\">\r\n                        <button class=\"search-button\" onclick=\"searchProfile()\" id=\"searchBtn\">\r\n                            <i class=\"fas fa-search\"><\/i> <span id=\"searchText\">Analyze Profile<\/span>\r\n                        <\/button>\r\n                    <\/div>\r\n                    <button class=\"search-again-btn\" onclick=\"searchAgain()\" id=\"searchAgainBtn\" style=\"display: none;\">\r\n                        <i class=\"fas fa-search\"><\/i> Search Another Profile\r\n                    <\/button>\r\n                    <div class=\"error-message\" id=\"errorMessage\">\r\n                        <i class=\"fas fa-exclamation-circle\"><\/i>\r\n                        <span id=\"errorText\"><\/span>\r\n                    <\/div>\r\n                    <div class=\"loading\" id=\"loading\">\r\n                        <div class=\"loading-content\">\r\n                            <div class=\"loading-animation\">\r\n                                <div class=\"loading-ring\"><\/div>\r\n                                <div class=\"loading-ring\"><\/div>\r\n                                <div class=\"loading-ring\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"loading-dots\">\r\n                                <div class=\"loading-dot\"><\/div>\r\n                                <div class=\"loading-dot\"><\/div>\r\n                                <div class=\"loading-dot\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"loading-text\">Analyzing TikTok Profile<\/div>\r\n                            <div class=\"loading-subtext\">Fetching videos and profile data...<\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"results-container\" id=\"resultsContainer\" style=\"display: none;\">\r\n                    <div class=\"profile-section\" id=\"profileSection\"><\/div>\r\n\r\n                    <div class=\"videos-section-header\" id=\"videosHeader\" style=\"display: none;\">\r\n                        <div style=\"display: flex; align-items: center; gap: 16px;\">\r\n                            <button class=\"videos-button\">\r\n                                <i class=\"fas fa-video\"><\/i> Videos\r\n                            <\/button>\r\n                            <button class=\"download-all-btn\" onclick=\"downloadAllVideos()\" id=\"downloadAllBtn\">\r\n                                <i class=\"fas fa-download\"><\/i> Download All\r\n                            <\/button>\r\n                        <\/div>\r\n                        <div class=\"videos-count\" id=\"videosCount\"><\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"video-grid\" id=\"videoGrid\"><\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Video Modal -->\r\n            <div class=\"modal\" id=\"videoModal\">\r\n                <div class=\"modal-content\">\r\n                    <div class=\"modal-title\" id=\"modalTitle\"><\/div>\r\n                    <button class=\"close-modal\" onclick=\"closeVideoModal()\">\r\n                        <i class=\"fas fa-times\"><\/i>\r\n                    <\/button>\r\n                    <div class=\"video-player-container\">\r\n                        <video id=\"videoPlayer\" class=\"video-player\" loop=\"\">\r\n                            Your browser doesn't support video playback.\r\n                        <\/video>\r\n                        <div class=\"video-controls\">\r\n                            <div class=\"progress-container\" onclick=\"seekVideo(event)\">\r\n                                <div class=\"progress-bar\" id=\"progressBar\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"control-buttons\">\r\n                                <!-- Volume Control -->\r\n                                <div class=\"control-group volume-controls\">\r\n                                    <button class=\"control-button\" onclick=\"toggleMute()\" title=\"Toggle Sound\">\r\n                                        <i class=\"fas fa-volume-up\" id=\"volumeIcon\"><\/i>\r\n                                    <\/button>\r\n                                    <div class=\"volume-slider\" onclick=\"setVolume(event)\">\r\n                                        <div class=\"volume-fill\" id=\"volumeFill\"><\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <!-- Play\/Pause -->\r\n                                <button class=\"control-button play-pause\" onclick=\"togglePlay()\" title=\"Play\/Pause\">\r\n                                    <i class=\"fas fa-play\" id=\"playIcon\"><\/i>\r\n                                <\/button>\r\n\r\n                                <!-- Action Controls -->\r\n                                <div class=\"control-group\">\r\n                                    <button class=\"control-button\" onclick=\"downloadVideo()\" title=\"Download Video\">\r\n                                        <i class=\"fas fa-download\"><\/i>\r\n                                    <\/button>\r\n                                    <button class=\"control-button\" onclick=\"toggleFullscreen()\" title=\"Fullscreen\" id=\"fullscreenBtn\">\r\n                                        <i class=\"fas fa-expand\" id=\"fullscreenIcon\"><\/i>\r\n                                    <\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Profile Picture Modal -->\r\n            <div class=\"profile-modal\" id=\"profileModal\">\r\n                <div class=\"profile-modal-content\">\r\n                    <button class=\"profile-modal-close\" onclick=\"closeProfileModal()\">\r\n                        <i class=\"fas fa-times\"><\/i>\r\n                    <\/button>\r\n                    <img decoding=\"async\" id=\"profileModalImage\" class=\"profile-modal-image\" src=\"\/placeholder.svg\" alt=\"Profile Picture\">\r\n                    <button class=\"profile-modal-download\" onclick=\"downloadProfilePicture()\">\r\n                        <i class=\"fas fa-download\"><\/i> Download\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Download Progress Indicator -->\r\n            <div class=\"download-progress\" id=\"downloadProgress\">\r\n                <div class=\"download-spinner\"><\/div>\r\n                <div class=\"download-info\">\r\n                    <div class=\"download-text\" id=\"downloadText\">Downloading...<\/div>\r\n                    <div class=\"download-progress-bar\">\r\n                        <div class=\"download-progress-fill\" id=\"downloadProgressFill\"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <button class=\"cancel-download-btn\" onclick=\"cancelDownloads()\" id=\"cancelDownloadBtn\">\r\n                    <i class=\"fas fa-stop\"><\/i> Stop\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\r\n<!-- Work Process Section -->\r\n<section class=\"tprv-work-process-section\" id=\"how-it-works\">\r\n    <div class=\"container tprv-work-process-content\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title tprv-light-title\">How Our TikTok Bio Viewer Works<\/h2>\r\n            <p class=\"tprv-section-subtitle tprv-light-subtitle\">View TikTok bios anonymously in just 3 simple steps<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">1<\/div>\r\n                    <h4 class=\"text-white\">Enter Username<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">Paste the TikTok username to view its bio anonymously<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">2<\/div>\r\n                    <h4 class=\"text-white\">Process Request<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">Our system retrieves the bio data without revealing your identity<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-md-4\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-process-step\">\r\n                    <div class=\"tprv-step-number\">3<\/div>\r\n                    <h4 class=\"text-white\">View Bio Details<\/h4>\r\n                    <p class=\"tprv-light-subtitle\">See complete bio information without leaving any trace<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- Features Section -->\r\n<section class=\"tprv-features-section\">\r\n    <div class=\"container\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title\">Key Features<\/h2>\r\n            <p class=\"tprv-section-subtitle\">Our TikTok Bio Viewer offers powerful features for anonymous browsing<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-user-check\"><\/i>\r\n                    <\/div>\r\n                    <h4>100% Anonymous<\/h4>\r\n                    <p>View bios without leaving any trace or alerting the account owner<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-user\"><\/i>\r\n                    <\/div>\r\n                    <h4>View Any Bio<\/h4>\r\n                    <p>See all public TikTok bios with their complete details and statistics<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-4\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-line-chart\"><\/i>\r\n                    <\/div>\r\n                    <h4>Bio Analytics<\/h4>\r\n                    <p>Get detailed statistics about followers, following, and engagement<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-devices\"><\/i>\r\n                    <\/div>\r\n                    <h4>Works on All Devices<\/h4>\r\n                    <p>Use our TikTok Bio Viewer on desktop, tablet, or mobile without issues<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-shield\"><\/i>\r\n                    <\/div>\r\n                    <h4>No Login Required<\/h4>\r\n                    <p>Access any public TikTok bio without an account<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"col-lg-4 mb-5\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                <div class=\"tprv-feature-card\">\r\n                    <div class=\"tprv-feature-icon\">\r\n                        <i class=\"bx bx-time-five\"><\/i>\r\n                    <\/div>\r\n                    <h4>Instant Processing<\/h4>\r\n                    <p>Get access to bio data immediately without waiting<\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- Why Choose Section -->\r\n<section class=\"tprv-why-choose-section\">\r\n    <div class=\"container\">\r\n        <div class=\"row align-items-center\">\r\n            <div class=\"col-lg-6 mb-5 mb-lg-0\" data-aos=\"fade-right\">\r\n                <div class=\"tprv-why-choose-image tprv-floating-element\">\r\n                    <img decoding=\"async\" src=\"https:\/\/viewanonymous.com\/wp-content\/uploads\/2026\/03\/Tiktok_Bio_Viewer.webp\" alt=\"TikTok Bio Viewer\" class=\"img-fluid rounded-3\">\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"col-lg-6\" data-aos=\"fade-left\">\r\n                <h2 class=\"tprv-section-title mb-4\">Why Choose Our TikTok Bio Viewer?<\/h2>\r\n                <p class=\"mb-4\">Our tool provides a reliable and secure way to view TikTok bios anonymously, prioritizing your privacy with comprehensive access to bio data.<\/p>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Completely undetectable<\/h5>\r\n                        <p class=\"mb-0\">No traces left when viewing bios<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">No registration needed<\/h5>\r\n                        <p class=\"mb-0\">Start viewing bios immediately<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Detailed analytics<\/h5>\r\n                        <p class=\"mb-0\">Get insights into bio performance<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"tprv-benefit-item\">\r\n                    <div class=\"tprv-benefit-icon\">\r\n                        <i class=\"bx bx-check\"><\/i>\r\n                    <\/div>\r\n                    <div>\r\n                        <h5 class=\"mb-1\">Fast processing<\/h5>\r\n                        <p class=\"mb-0\">Get instant access to any public bio<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<!-- FAQ Section -->\r\n<section class=\"tprv-faq-section\">\r\n    <div class=\"container\">\r\n        <div class=\"text-center mb-5\" data-aos=\"fade-up\">\r\n            <h2 class=\"tprv-section-title\">Frequently Asked Questions<\/h2>\r\n            <p class=\"tprv-section-subtitle\">Find answers to common questions about our TikTok Bio Viewer<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"row justify-content-center\">\r\n            <div class=\"col-lg-8\">\r\n                <div class=\"accordion\" id=\"tprv-faqAccordion\">\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"50\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading1\">\r\n                            <button class=\"tprv-accordion-button\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse1\" aria-expanded=\"true\" aria-controls=\"tprv-collapse1\">\r\n                                Is it legal to use this TikTok Bio Viewer?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse1\" class=\"accordion-collapse collapse show\" aria-labelledby=\"tprv-heading1\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                Yes, our tool is completely legal to use. It only allows you to view publicly available TikTok bios. We don't access private accounts or bypass any security measures - we simply display data that is already publicly accessible on TikTok.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading2\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse2\" aria-expanded=\"false\" aria-controls=\"tprv-collapse2\">\r\n                                Can I view private TikTok bios?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse2\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading2\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, our TikTok Bio Viewer respects TikTok's privacy settings. We can only display bios from accounts that are set to public. If an account is private, our viewer cannot access its information.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"150\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading3\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse3\" aria-expanded=\"false\" aria-controls=\"tprv-collapse3\">\r\n                                Will TikTok know I viewed the bio?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse3\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading3\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, all viewing is completely anonymous. When you use our TikTok Bio Viewer, TikTok doesn't register that you've viewed the bio. The account owner won't know you accessed their information.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"200\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading4\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse4\" aria-expanded=\"false\" aria-controls=\"tprv-collapse4\">\r\n                                Do I need to install software to use this?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse4\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading4\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                No, our TikTok Bio Viewer is completely web-based. You don't need to download or install any software. Simply visit our website, enter the username, and view the bio directly in your browser.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"tprv-accordion-item mb-3\" data-aos=\"fade-up\" data-aos-delay=\"250\">\r\n                        <h3 class=\"accordion-header\" id=\"tprv-heading5\">\r\n                            <button class=\"tprv-accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#tprv-collapse5\" aria-expanded=\"false\" aria-controls=\"tprv-collapse5\">\r\n                                What information can I see about a bio?\r\n                            <\/button>\r\n                        <\/h3>\r\n                        <div id=\"tprv-collapse5\" class=\"accordion-collapse collapse\" aria-labelledby=\"tprv-heading5\" data-bs-parent=\"#tprv-faqAccordion\">\r\n                            <div class=\"tprv-accordion-body\">\r\n                                Our TikTok Bio Viewer shows all publicly available information, including bio details, follower count, following count, and other statistics. Private information is not accessible.\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n  \r\n    <!-- Footer -->\r\n    \r\n\r\n    <!-- Copyright Section -->\r\n    \r\n\r\n\r\n\r\n    <!-- Tiktak profile viewer js -->\r\n  <script src=\"https:\/\/tools.xrespond.com\/api\/rate-limit-handler.js\"><\/script>\r\n  <script src=\"https:\/\/tools.xrespond.com\/api\/js\/client-ip-detector.js\"><\/script>\r\n    <script>\r\n        const API_BASE_URL = 'https:\/\/tools.xrespond.com\/api\/tiktok';\r\n        let currentVideo = null;\r\n        let currentProfileData = null;\r\n        let allVideos = [];\r\n        let isFullscreen = false;\r\n        let currentVolume = 1;\r\n        let isMuted = false;\r\n        let isProcessing = false;\r\n        let isDownloading = false;\r\n        let activeDownloads = [];\r\n        let downloadCancelled = false;\r\n\r\n        async function pasteFromClipboard() {\r\n            try {\r\n                const text = await navigator.clipboard.readText();\r\n                document.getElementById('usernameInput').value = text;\r\n            } catch (err) {\r\n                console.error('Failed to read clipboard contents: ', err);\r\n                document.getElementById('usernameInput').focus();\r\n            }\r\n        }\r\n\r\n        function searchAgain() {\r\n            document.getElementById('usernameInput').value = '';\r\n            document.getElementById('resultsContainer').style.display = 'none';\r\n            document.getElementById('searchAgainBtn').style.display = 'none';\r\n            document.getElementById('searchBox').style.display = 'flex';\r\n            document.getElementById('videosHeader').style.display = 'none';\r\n            document.getElementById('usernameInput').focus();\r\n            allVideos = [];\r\n        }\r\n\r\n        function extractUsername(input) {\r\n            \/\/ Handle @username format\r\n            if (input.startsWith('@')) {\r\n                return input.substring(1);\r\n            }\r\n\r\n            \/\/ Handle TikTok URLs\r\n            const urlPatterns = [\r\n                \/tiktok\\.com\\\/@([^\\\/\\?]+)\/,\r\n                \/tiktok\\.com\\\/([^\\\/\\?@]+)\/,\r\n                \/vm\\.tiktok\\.com\\\/([^\\\/\\?]+)\/\r\n            ];\r\n\r\n            for (const pattern of urlPatterns) {\r\n                const match = input.match(pattern);\r\n                if (match) {\r\n                    return match[1];\r\n                }\r\n            }\r\n\r\n            \/\/ Return as is if no pattern matches\r\n            return input;\r\n        }\r\n\r\n        async function searchProfile() {\r\n            if (isProcessing) return;\r\n\r\n            const input = document.getElementById('usernameInput').value.trim();\r\n            if (!input) {\r\n                showError('Please enter a TikTok username or profile URL');\r\n                return;\r\n            }\r\n\r\n            const username = extractUsername(input);\r\n\r\n            isProcessing = true;\r\n            const searchBtn = document.getElementById('searchBtn');\r\n            const searchText = document.getElementById('searchText');\r\n\r\n            searchBtn.disabled = true;\r\n            searchText.textContent = 'Analyzing...';\r\n            showLoading();\r\n            hideError();\r\n\r\n            try {\r\n                \/\/ Fetch profile data\r\n                const profileResponse = await fetch(`${API_BASE_URL}\/profile\/details`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json'\r\n                    },\r\n                    body: JSON.stringify({ profile: username })\r\n                });\r\n\r\n                const profileData = await profileResponse.json();\r\n\r\n                if (profileData.status !== 'success') {\r\n                    throw new Error(profileData.message || 'Failed to fetch profile data');\r\n                }\r\n\r\n                \/\/ Store profile data\r\n                currentProfileData = profileData.data.data;\r\n\r\n                \/\/ Display profile\r\n                displayProfile(currentProfileData);\r\n\r\n                \/\/ Fetch videos\r\n                const videosResponse = await fetch(`${API_BASE_URL}\/profile\/videos`, {\r\n                    method: 'POST',\r\n                    headers: {\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json'\r\n                    },\r\n                    body: JSON.stringify({ profile: username })\r\n                });\r\n\r\n                const videosData = await videosResponse.json();\r\n\r\n                if (videosData.status !== 'success') {\r\n                    throw new Error(videosData.message || 'Failed to fetch videos');\r\n                }\r\n\r\n                \/\/ Display videos (reverse order - latest first)\r\n                const videos = videosData.data.data.videos.reverse();\r\n                allVideos = videos;\r\n                displayVideos(videos);\r\n\r\n                document.getElementById('resultsContainer').style.display = 'block';\r\n                document.getElementById('searchAgainBtn').style.display = 'block';\r\n                document.getElementById('searchBox').style.display = 'none';\r\n                document.getElementById('videosHeader').style.display = 'flex';\r\n\r\n                \/\/ Clear input after successful search\r\n                document.getElementById('usernameInput').value = '';\r\n\r\n            } catch (error) {\r\n                showError(error.message || 'Error fetching profile. Please try again.');\r\n            } finally {\r\n                isProcessing = false;\r\n                searchBtn.disabled = false;\r\n                searchText.textContent = 'Analyze Profile';\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function displayProfile(data) {\r\n            const profileSection = document.getElementById('profileSection');\r\n\r\n            profileSection.innerHTML = `\r\n      <div class=\"profile-header\">\r\n          <div class=\"profile-avatar-container\">\r\n              <img decoding=\"async\" src=\"${data.user.avatarLarger}\" alt=\"Profile\" class=\"profile-avatar\" onclick=\"openProfileModal('${data.user.avatarLarger}')\">\r\n              <div class=\"fullscreen-icon\" onclick=\"openProfileModal('${data.user.avatarLarger}')\" title=\"View Fullscreen\">\r\n                  <i class=\"fas fa-expand\"><\/i>\r\n              <\/div>\r\n          <\/div>\r\n          <div class=\"profile-info\">\r\n              <h2 class=\"profile-name\">${data.user.nickname}<\/h2>\r\n              <p class=\"profile-username\">@${data.user.uniqueId}<\/p>\r\n              <div class=\"profile-bio\">${data.user.signature || ''}<\/div>\r\n          <\/div>\r\n      <\/div>\r\n      <div class=\"profile-stats\">\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.followingCount)}<\/div>\r\n              <div class=\"stat-label\">Following<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.followerCount)}<\/div>\r\n              <div class=\"stat-label\">Followers<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.heartCount)}<\/div>\r\n              <div class=\"stat-label\">Likes<\/div>\r\n          <\/div>\r\n          <div class=\"stat-item\">\r\n              <div class=\"stat-value\">${formatNumber(data.stats.videoCount)}<\/div>\r\n              <div class=\"stat-label\">Videos<\/div>\r\n          <\/div>\r\n      <\/div>\r\n  `;\r\n        }\r\n\r\n        function displayVideos(videos) {\r\n            const videoGrid = document.getElementById('videoGrid');\r\n            const videosCount = document.getElementById('videosCount');\r\n\r\n            videoGrid.innerHTML = '';\r\n            videosCount.textContent = `Found ${videos.length} videos`;\r\n\r\n            videos.forEach((video, index) => {\r\n                const videoCard = document.createElement('div');\r\n                videoCard.className = 'video-card';\r\n                videoCard.innerHTML = `\r\n          <div class=\"video-thumbnail-container\">\r\n              <img decoding=\"async\" src=\"${video.cover}\" alt=\"${video.title}\" class=\"video-thumbnail\">\r\n              <div class=\"play-overlay\" onclick=\"openVideoModal(event, ${index})\"><\/div>\r\n              <div class=\"video-download-btn\" onclick=\"downloadVideoFromCard(event, ${index})\" title=\"Download Video\">\r\n                  <i class=\"fas fa-download\"><\/i>\r\n              <\/div>\r\n          <\/div>\r\n          <div class=\"video-info\">\r\n              <div class=\"video-title\">${video.title}<\/div>\r\n              <div class=\"video-stats\">\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-heart\"><\/i>\r\n                      <span>${formatNumber(video.digg_count)}<\/span>\r\n                  <\/div>\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-comment\"><\/i>\r\n                      <span>${formatNumber(video.comment_count)}<\/span>\r\n                  <\/div>\r\n                  <div class=\"stat\">\r\n                      <i class=\"fas fa-share\"><\/i>\r\n                      <span>${formatNumber(video.share_count)}<\/span>\r\n                  <\/div>\r\n              <\/div>\r\n          <\/div>\r\n      `;\r\n\r\n                videoGrid.appendChild(videoCard);\r\n            });\r\n        }\r\n\r\n        function openVideoModal(event, videoIndex) {\r\n            event.stopPropagation();\r\n            const video = allVideos[videoIndex];\r\n            if (!video) return;\r\n\r\n            currentVideo = video;\r\n            const modal = document.getElementById('videoModal');\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const modalTitle = document.getElementById('modalTitle');\r\n\r\n            \/\/ Set title\r\n            modalTitle.textContent = video.title;\r\n\r\n            \/\/ Use highest quality video URL\r\n            videoPlayer.src = video.play;\r\n            videoPlayer.preload = 'metadata';\r\n            modal.style.display = 'block';\r\n            document.body.style.overflow = 'hidden';\r\n\r\n            \/\/ Reset controls\r\n            document.getElementById('playIcon').className = 'fas fa-play';\r\n            updateVolumeIcon();\r\n            document.getElementById('progressBar').style.width = '0%';\r\n            updateVolumeDisplay();\r\n\r\n            \/\/ Set video properties\r\n            videoPlayer.addEventListener('loadedmetadata', () => {\r\n                videoPlayer.volume = currentVolume;\r\n                videoPlayer.muted = isMuted;\r\n                updateVolumeDisplay();\r\n            });\r\n\r\n            videoPlayer.addEventListener('timeupdate', updateVideoProgress);\r\n            videoPlayer.addEventListener('ended', onVideoEnd);\r\n        }\r\n\r\n        function closeVideoModal() {\r\n            const modal = document.getElementById('videoModal');\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n\r\n            videoPlayer.pause();\r\n            videoPlayer.removeEventListener('timeupdate', updateVideoProgress);\r\n            videoPlayer.removeEventListener('ended', onVideoEnd);\r\n            modal.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n            currentVideo = null;\r\n\r\n            \/\/ Exit fullscreen if active\r\n            if (isFullscreen) {\r\n                exitFullscreen();\r\n            }\r\n        }\r\n\r\n        function openProfileModal(imageUrl) {\r\n            const modal = document.getElementById('profileModal');\r\n            const image = document.getElementById('profileModalImage');\r\n\r\n            image.src = imageUrl;\r\n            modal.style.display = 'block';\r\n            document.body.style.overflow = 'hidden';\r\n        }\r\n\r\n        function closeProfileModal() {\r\n            const modal = document.getElementById('profileModal');\r\n            modal.style.display = 'none';\r\n            document.body.style.overflow = 'auto';\r\n        }\r\n\r\n        \/\/ Cancel all active downloads\r\n        function cancelDownloads() {\r\n            downloadCancelled = true;\r\n\r\n            \/\/ Abort all active fetch requests\r\n            activeDownloads.forEach(controller => {\r\n                if (controller) {\r\n                    controller.abort();\r\n                }\r\n            });\r\n\r\n            \/\/ Clear the active downloads array\r\n            activeDownloads = [];\r\n\r\n            \/\/ Reset download UI\r\n            isDownloading = false;\r\n            const downloadBtn = document.getElementById('downloadAllBtn');\r\n            downloadBtn.innerHTML = '<i class=\"fas fa-download\"><\/i> Download All';\r\n            downloadBtn.disabled = false;\r\n\r\n            updateDownloadProgress('Downloads cancelled', 0);\r\n            setTimeout(hideDownloadProgress, 2000);\r\n        }\r\n\r\n        \/\/ Fixed download functions with cancel support\r\n        async function downloadProfilePicture() {\r\n            if (!currentProfileData) {\r\n                showError('No profile data available');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress('Downloading profile picture...', 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                const response = await fetch(currentProfileData.user.avatarLarger, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                updateDownloadProgress('Processing profile picture...', 50);\r\n\r\n                const blob = await response.blob();\r\n                const url = window.URL.createObjectURL(blob);\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `${currentProfileData.user.uniqueId}_profile.jpg`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n\r\n                updateDownloadProgress('Saving profile picture...', 90);\r\n\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                window.URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Profile picture downloaded successfully!', 100);\r\n                console.log('Profile picture download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError') {\r\n                    console.log('Profile picture download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download profile picture: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadVideo() {\r\n            if (!currentVideo) {\r\n                showError('No video selected for download');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress('Downloading video...', 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                \/\/ Use backend proxy endpoint for download\r\n                const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(currentVideo.play)}`;\r\n                const response = await fetch(proxyUrl, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                \/\/ Get total size for progress calculation\r\n                const totalSize = parseInt(response.headers.get('content-length') || '0');\r\n                const reader = response.body.getReader();\r\n                let receivedSize = 0;\r\n                const chunks = [];\r\n\r\n                while (true) {\r\n                    const { done, value } = await reader.read();\r\n\r\n                    if (done) break;\r\n\r\n                    chunks.push(value);\r\n                    receivedSize += value.length;\r\n\r\n                    \/\/ Update progress\r\n                    const progress = totalSize ? Math.round((receivedSize \/ totalSize) * 100) : 0;\r\n                    updateDownloadProgress(`Downloading video... ${progress}%`, progress);\r\n\r\n                    if (downloadCancelled) {\r\n                        throw new Error('AbortError');\r\n                    }\r\n                }\r\n\r\n                updateDownloadProgress('Processing video...', 95);\r\n\r\n                \/\/ Combine chunks into a single Uint8Array\r\n                const chunksAll = new Uint8Array(receivedSize);\r\n                let position = 0;\r\n                for (const chunk of chunks) {\r\n                    chunksAll.set(chunk, position);\r\n                    position += chunk.length;\r\n                }\r\n\r\n                const blob = new Blob([chunksAll], { type: 'video\/mp4' });\r\n                const url = URL.createObjectURL(blob);\r\n\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `tiktok-${currentVideo.id || 'video'}.mp4`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Video downloaded successfully!', 100);\r\n                console.log('Video download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                    console.log('Video download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download video: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadVideoFromCard(event, videoIndex) {\r\n            event.stopPropagation();\r\n\r\n            const video = allVideos[videoIndex];\r\n            if (!video) {\r\n                showError('Video not found');\r\n                return;\r\n            }\r\n\r\n            if (isDownloading) {\r\n                showError('Another download is in progress');\r\n                return;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            showDownloadProgress(`Downloading video ${videoIndex + 1}...`, 0);\r\n\r\n            try {\r\n                const controller = new AbortController();\r\n                activeDownloads.push(controller);\r\n\r\n                \/\/ Use backend proxy endpoint for download\r\n                const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(video.play)}`;\r\n                const response = await fetch(proxyUrl, {\r\n                    signal: controller.signal\r\n                });\r\n\r\n                if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                \/\/ Get total size for progress calculation\r\n                const totalSize = parseInt(response.headers.get('content-length') || '0');\r\n                const reader = response.body.getReader();\r\n                let receivedSize = 0;\r\n                const chunks = [];\r\n\r\n                while (true) {\r\n                    const { done, value } = await reader.read();\r\n\r\n                    if (done) break;\r\n\r\n                    chunks.push(value);\r\n                    receivedSize += value.length;\r\n\r\n                    \/\/ Update progress\r\n                    const progress = totalSize ? Math.round((receivedSize \/ totalSize) * 100) : 0;\r\n                    updateDownloadProgress(`Downloading video ${videoIndex + 1}... ${progress}%`, progress);\r\n\r\n                    if (downloadCancelled) {\r\n                        throw new Error('AbortError');\r\n                    }\r\n                }\r\n\r\n                updateDownloadProgress('Processing video...', 95);\r\n\r\n                \/\/ Combine chunks into a single Uint8Array\r\n                const chunksAll = new Uint8Array(receivedSize);\r\n                let position = 0;\r\n                for (const chunk of chunks) {\r\n                    chunksAll.set(chunk, position);\r\n                    position += chunk.length;\r\n                }\r\n\r\n                const blob = new Blob([chunksAll], { type: 'video\/mp4' });\r\n                const url = URL.createObjectURL(blob);\r\n\r\n                const a = document.createElement('a');\r\n                a.href = url;\r\n                a.download = `tiktok-${video.id || `video-${videoIndex + 1}`}.mp4`;\r\n                a.style.display = 'none';\r\n                document.body.appendChild(a);\r\n                a.click();\r\n                document.body.removeChild(a);\r\n                URL.revokeObjectURL(url);\r\n\r\n                updateDownloadProgress('Video downloaded successfully!', 100);\r\n                console.log('Video download completed successfully');\r\n\r\n                \/\/ Remove this controller from active downloads\r\n                activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                setTimeout(hideDownloadProgress, 2000);\r\n            } catch (error) {\r\n                if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                    console.log('Video download cancelled');\r\n                } else {\r\n                    console.error('Download failed:', error);\r\n                    showError(`Failed to download video: ${error.message}`);\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n            }\r\n        }\r\n\r\n        async function downloadAllVideos() {\r\n            if (allVideos.length === 0 || isDownloading) return;\r\n\r\n            isDownloading = true;\r\n            downloadCancelled = false;\r\n            const downloadBtn = document.getElementById('downloadAllBtn');\r\n            const originalText = downloadBtn.innerHTML;\r\n\r\n            downloadBtn.innerHTML = '<i class=\"fas fa-spinner fa-spin\"><\/i> Downloading...';\r\n            downloadBtn.disabled = true;\r\n\r\n            showDownloadProgress(`Starting download of ${allVideos.length} videos...`, 0);\r\n\r\n            let successCount = 0;\r\n            let failCount = 0;\r\n\r\n            try {\r\n                for (let i = 0; i < allVideos.length; i++) {\r\n                    if (downloadCancelled) break;\r\n\r\n                    const video = allVideos[i];\r\n\r\n                    try {\r\n                        const controller = new AbortController();\r\n                        activeDownloads.push(controller);\r\n\r\n                        updateDownloadProgress(`Downloading video ${i + 1} of ${allVideos.length}...`, Math.round((i \/ allVideos.length) * 100));\r\n\r\n                        \/\/ Use backend proxy endpoint for download\r\n                        const proxyUrl = `https:\/\/tools.xrespond.com\/api\/tiktok\/proxy-video?url=${encodeURIComponent(video.play)}`;\r\n                        const response = await fetch(proxyUrl, {\r\n                            signal: controller.signal\r\n                        });\r\n\r\n                        if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n                        const blob = await response.blob();\r\n                        const url = URL.createObjectURL(blob);\r\n                        const a = document.createElement('a');\r\n                        a.href = url;\r\n                        a.download = `tiktok-${video.id || `video-${i + 1}`}.mp4`;\r\n                        a.style.display = 'none';\r\n                        document.body.appendChild(a);\r\n                        a.click();\r\n                        document.body.removeChild(a);\r\n                        URL.revokeObjectURL(url);\r\n\r\n                        successCount++;\r\n                        console.log(`Video ${i + 1} downloaded successfully`);\r\n\r\n                        \/\/ Remove this controller from active downloads\r\n                        activeDownloads = activeDownloads.filter(c => c !== controller);\r\n\r\n                        \/\/ Wait between downloads to avoid overwhelming the browser\r\n                        if (i < allVideos.length - 1 && !downloadCancelled) {\r\n                            await new Promise(resolve => setTimeout(resolve, 1000));\r\n                        }\r\n                    } catch (error) {\r\n                        if (error.name === 'AbortError' || error.message === 'AbortError') {\r\n                            console.log(`Video ${i + 1} download cancelled`);\r\n                            break;\r\n                        } else {\r\n                            failCount++;\r\n                            console.error(`Failed to download video ${i + 1}:`, error);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (downloadCancelled) {\r\n                    updateDownloadProgress('Downloads cancelled', 0);\r\n                } else {\r\n                    updateDownloadProgress(`Downloads completed! ${successCount} successful, ${failCount} failed`, 100);\r\n                }\r\n\r\n                setTimeout(hideDownloadProgress, 3000);\r\n\r\n            } catch (error) {\r\n                console.error('Bulk download failed:', error);\r\n                showError('Bulk download encountered errors');\r\n                hideDownloadProgress();\r\n            } finally {\r\n                isDownloading = false;\r\n                downloadCancelled = false;\r\n                downloadBtn.innerHTML = originalText;\r\n                downloadBtn.disabled = false;\r\n                activeDownloads = [];\r\n            }\r\n        }\r\n\r\n        function showDownloadProgress(text, progress = 0) {\r\n            const progressElement = document.getElementById('downloadProgress');\r\n            const downloadText = document.getElementById('downloadText');\r\n            const progressFill = document.getElementById('downloadProgressFill');\r\n\r\n            downloadText.textContent = text;\r\n            progressFill.style.width = `${progress}%`;\r\n            progressElement.classList.add('show');\r\n        }\r\n\r\n        function updateDownloadProgress(text, progress = 0) {\r\n            const downloadText = document.getElementById('downloadText');\r\n            const progressFill = document.getElementById('downloadProgressFill');\r\n\r\n            downloadText.textContent = text;\r\n            progressFill.style.width = `${progress}%`;\r\n        }\r\n\r\n        function hideDownloadProgress() {\r\n            const progress = document.getElementById('downloadProgress');\r\n            progress.classList.remove('show');\r\n        }\r\n\r\n        function togglePlay() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const playIcon = document.getElementById('playIcon');\r\n\r\n            if (videoPlayer.paused) {\r\n                videoPlayer.play();\r\n                playIcon.className = 'fas fa-pause';\r\n            } else {\r\n                videoPlayer.pause();\r\n                playIcon.className = 'fas fa-play';\r\n            }\r\n        }\r\n\r\n        function toggleMute() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n\r\n            if (isMuted) {\r\n                \/\/ Unmute and restore previous volume\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n                videoPlayer.volume = currentVolume;\r\n            } else {\r\n                \/\/ Mute but keep volume level\r\n                isMuted = true;\r\n                videoPlayer.muted = true;\r\n            }\r\n\r\n            updateVolumeIcon();\r\n            updateVolumeDisplay();\r\n        }\r\n\r\n        function updateVolumeIcon() {\r\n            const volumeIcon = document.getElementById('volumeIcon');\r\n            if (isMuted) {\r\n                volumeIcon.className = 'fas fa-volume-mute';\r\n            } else if (currentVolume > 0.5) {\r\n                volumeIcon.className = 'fas fa-volume-up';\r\n            } else if (currentVolume > 0) {\r\n                volumeIcon.className = 'fas fa-volume-down';\r\n            } else {\r\n                volumeIcon.className = 'fas fa-volume-mute';\r\n            }\r\n        }\r\n\r\n        function setVolume(event) {\r\n            const volumeSlider = event.currentTarget;\r\n            const rect = volumeSlider.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            currentVolume = Math.max(0, Math.min(1, pos));\r\n\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            videoPlayer.volume = currentVolume;\r\n\r\n            if (currentVolume === 0) {\r\n                isMuted = true;\r\n                videoPlayer.muted = true;\r\n            } else {\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n            }\r\n\r\n            updateVolumeIcon();\r\n            updateVolumeDisplay();\r\n        }\r\n\r\n        function updateVolumeDisplay() {\r\n            const volumeFill = document.getElementById('volumeFill');\r\n            const displayVolume = isMuted ? 0 : currentVolume;\r\n            volumeFill.style.width = `${displayVolume * 100}%`;\r\n        }\r\n\r\n        function updateVideoProgress() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressBar = document.getElementById('progressBar');\r\n            const progress = (videoPlayer.currentTime \/ videoPlayer.duration) * 100;\r\n            progressBar.style.width = `${progress}%`;\r\n        }\r\n\r\n        function seekVideo(event) {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressContainer = event.currentTarget;\r\n            const rect = progressContainer.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            videoPlayer.currentTime = pos * videoPlayer.duration;\r\n        }\r\n\r\n        function onVideoEnd() {\r\n            const playIcon = document.getElementById('playIcon');\r\n            playIcon.className = 'fas fa-play';\r\n        }\r\n\r\n        function toggleFullscreen() {\r\n            const modal = document.getElementById('videoModal');\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n\r\n            if (!isFullscreen) {\r\n                if (modal.requestFullscreen) {\r\n                    modal.requestFullscreen();\r\n                } else if (modal.webkitRequestFullscreen) {\r\n                    modal.webkitRequestFullscreen();\r\n                } else if (modal.msRequestFullscreen) {\r\n                    modal.msRequestFullscreen();\r\n                }\r\n                isFullscreen = true;\r\n                fullscreenIcon.className = 'fas fa-compress';\r\n            } else {\r\n                exitFullscreen();\r\n            }\r\n        }\r\n\r\n        function exitFullscreen() {\r\n            if (document.exitFullscreen) {\r\n                document.exitFullscreen();\r\n            } else if (document.webkitExitFullscreen) {\r\n                document.webkitExitFullscreen();\r\n            } else if (document.msExitFullscreen) {\r\n                document.msExitFullscreen();\r\n            }\r\n            isFullscreen = false;\r\n            document.getElementById('fullscreenIcon').className = 'fas fa-expand';\r\n        }\r\n\r\n        function showLoading() {\r\n            document.getElementById('loading').style.display = 'flex';\r\n        }\r\n\r\n        function hideLoading() {\r\n            document.getElementById('loading').style.display = 'none';\r\n        }\r\n\r\n        function showError(message) {\r\n            const errorDiv = document.getElementById('errorMessage');\r\n            const errorText = document.getElementById('errorText');\r\n            errorText.textContent = message;\r\n            errorDiv.style.display = 'flex';\r\n        }\r\n\r\n        function hideError() {\r\n            document.getElementById('errorMessage').style.display = 'none';\r\n        }\r\n\r\n        function formatNumber(num) {\r\n            if (num >= 1000000) {\r\n                return (num \/ 1000000).toFixed(1) + 'M';\r\n            }\r\n            if (num >= 1000) {\r\n                return (num \/ 1000).toFixed(1) + 'K';\r\n            }\r\n            return num.toString();\r\n        }\r\n\r\n        \/\/ Event Listeners\r\n        document.getElementById('usernameInput').addEventListener('keypress', (e) => {\r\n            if (e.key === 'Enter' && !isProcessing) {\r\n                searchProfile();\r\n            }\r\n        });\r\n\r\n        \/\/ Close modals when clicking outside\r\n        document.getElementById('videoModal').addEventListener('click', (e) => {\r\n            if (e.target === document.getElementById('videoModal')) {\r\n                closeVideoModal();\r\n            }\r\n        });\r\n\r\n        document.getElementById('profileModal').addEventListener('click', (e) => {\r\n            if (e.target === document.getElementById('profileModal')) {\r\n                closeProfileModal();\r\n            }\r\n        });\r\n\r\n        \/\/ Handle fullscreen change events\r\n        document.addEventListener('fullscreenchange', () => {\r\n            isFullscreen = !!document.fullscreenElement;\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n            fullscreenIcon.className = isFullscreen ? 'fas fa-compress' : 'fas fa-expand';\r\n        });\r\n\r\n        document.addEventListener('webkitfullscreenchange', () => {\r\n            isFullscreen = !!document.webkitFullscreenElement;\r\n            const fullscreenIcon = document.getElementById('fullscreenIcon');\r\n            fullscreenIcon.className = isFullscreen ? 'fas fa-compress' : 'fas fa-expand';\r\n        });\r\n\r\n        \/\/ Keyboard shortcuts\r\n        document.addEventListener('keydown', (e) => {\r\n            if (document.getElementById('videoModal').style.display === 'block') {\r\n                switch (e.key) {\r\n                    case ' ':\r\n                        e.preventDefault();\r\n                        togglePlay();\r\n                        break;\r\n                    case 'Escape':\r\n                        closeVideoModal();\r\n                        break;\r\n                    case 'f':\r\n                    case 'F':\r\n                        toggleFullscreen();\r\n                        break;\r\n                    case 'm':\r\n                    case 'M':\r\n                        toggleMute();\r\n                        break;\r\n                }\r\n            }\r\n\r\n            if (document.getElementById('profileModal').style.display === 'block') {\r\n                if (e.key === 'Escape') {\r\n                    closeProfileModal();\r\n                }\r\n            }\r\n        });\r\n    <\/script>\r\n    <!-- Vvveb Common Js -->\r\n    <script id=\"popper-js\" src=\"..\/js\/popper.min.js\"><\/script>\r\n    <!-- <script src=\"\/js\/bootstrap.min.js\"><\/script> -->\r\n    <!-- <script src=\"\/js\/bootstrap.bundle.min.js\"><\/script> -->\r\n    <script id=\"bootstrap-js\" src=\"..\/js\/bootstrap.min.js\"><\/script>\r\n    <!-- Vvveb Ajax Common Js -->\r\n    <script id=\"app-js\" src=\"..\/js\/app.js\"><\/script>\r\n\r\n    <!-- AOS CSS is in head; load AOS JS from CDN before init so sections are not stuck at opacity 0 -->\r\n    <noscript>\r\n        <style type=\"text\/css\">\r\n            [data-aos] {\r\n                opacity: 1 !important;\r\n                transform: translate(0) scale(1) !important;\r\n            }\r\n        <\/style>\r\n    <\/noscript>\r\n\r\n    <!-- Scripts -->\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/js\/bootstrap.bundle.min.js\"><\/script>\r\n    <script src=\"https:\/\/unpkg.com\/aos@2.3.1\/dist\/aos.js\"><\/script>\r\n\r\n    <script>\r\n        if (typeof AOS !== 'undefined') {\r\n            AOS.init({\r\n                duration: 800,\r\n                easing: 'ease-in-out',\r\n                once: true\r\n            });\r\n        } else {\r\n            document.documentElement.classList.add('aos-fallback');\r\n        }\r\n\r\n        document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\r\n            anchor.addEventListener('click', function (e) {\r\n                const id = this.getAttribute('href');\r\n                if (!id || id === '#') return;\r\n                const target = document.querySelector(id);\r\n                if (!target) return;\r\n                e.preventDefault();\r\n                target.scrollIntoView({ behavior: 'smooth' });\r\n            });\r\n        });\r\n    <\/script>\r\n    <script src=\"..\/js\/theme.js\"><\/script>\r\n\r\n    <grammarly-desktop-integration data-grammarly-shadow-root=\"true\"><\/grammarly-desktop-integration><grammarly-desktop-integration data-grammarly-shadow-root=\"true\"><\/grammarly-desktop-integration>\r\n<script defer=\"\" src=\"https:\/\/static.cloudflareinsights.com\/beacon.min.js\/vcd15cbe7772f49c399c6a5babf22c1241717689176015\" integrity=\"sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==\" data-cf-beacon=\"{\"version\":\"2024.11.0\",\"token\":\"786b797d7952407aac48ed2776a3a826\",\"r\":1,\"server_timing\":{\"name\":{\"cfCacheStatus\":true,\"cfEdge\":true,\"cfExtPri\":true,\"cfL4\":true,\"cfOrigin\":true,\"cfSpeedBrain\":true},\"location_startswith\":null}}\" crossorigin=\"anonymous\"><\/script>\r\n<script defer=\"\" src=\"https:\/\/static.cloudflareinsights.com\/beacon.min.js\/v8c78df7c7c0f484497ecbca7046644da1771523124516\" integrity=\"sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==\" data-cf-beacon=\"{\"version\":\"2024.11.0\",\"token\":\"786b797d7952407aac48ed2776a3a826\",\"r\":1,\"server_timing\":{\"name\":{\"cfCacheStatus\":true,\"cfEdge\":true,\"cfExtPri\":true,\"cfL4\":true,\"cfOrigin\":true,\"cfSpeedBrain\":true},\"location_startswith\":null}}\" crossorigin=\"anonymous\"><\/script>\r\n\n","protected":false},"author":1,"featured_media":0,"parent":258,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-335","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/pages\/335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/comments?post=335"}],"version-history":[{"count":4,"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/pages\/335\/revisions"}],"predecessor-version":[{"id":646,"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/pages\/335\/revisions\/646"}],"up":[{"embeddable":true,"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/pages\/258"}],"wp:attachment":[{"href":"https:\/\/viewanonymous.com\/wp-json\/wp\/v2\/media?parent=335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}